diff --git a/README.md b/README.md index 2b54e78..d10449b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # Pre Open-SS13 Host Files and Source -SS13 host files and source from before Open SS13. These are the oldest available versions of SS13 that I could find, and it took me a hell of a lot of digging, so I'm posting them here in the hope that anyone with an interest in the history of SS13 can check this stuff out without having to dig through forum archives or the wayback machine. +SS13 host files and source from before Open SS13. These are the oldest available versions of SS13 that I could find, and it took me a hell of a lot of digging, so I'm posting them here in the hope that anyone with an interest in the history of SS13 can check this stuff out without having to dig through forum archives or the wayback machine. Credit goes to the original SS13 devs, and Hobnob for doing the work on this, decompiling the source and making it available, even after all these years. Think of this repo as an educational resource for anyone interested in the early history of SS13. -There's 5 things here, each is explained in their respective readmes. Enjoy! +There's 5 things here, each is explained in their respective readmes. Check this reddit thread out for more details: http://www.reddit.com/r/SS13/comments/2vrcap/a_look_into_the_early_history_of_ss13/ +Have anything else from this period? Set up a pull request and I'd be glad to merge it. + +Enjoy! diff --git a/SS13_map_files_src/README.md b/SS13_map_files_src/README.md new file mode 100644 index 0000000..5e11e92 --- /dev/null +++ b/SS13_map_files_src/README.md @@ -0,0 +1 @@ +Map files dating from around 2006/2007. You can't host the game with these, but you can view and edit the map as it was back then. \ No newline at end of file diff --git a/SS13_map_files_src/SS13_map_files/Icons/Cryogenic2.dmi b/SS13_map_files_src/SS13_map_files/Icons/Cryogenic2.dmi new file mode 100644 index 0000000..10d989a Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/Cryogenic2.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/Door1.dmi b/SS13_map_files_src/SS13_map_files/Icons/Door1.dmi new file mode 100644 index 0000000..319a1e3 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/Door1.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/Doorf.dmi b/SS13_map_files_src/SS13_map_files/Icons/Doorf.dmi new file mode 100644 index 0000000..9bac2b4 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/Doorf.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/Icons.dmi b/SS13_map_files_src/SS13_map_files/Icons/Icons.dmi new file mode 100644 index 0000000..f093bd6 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/Icons.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/aircontrol.dmi b/SS13_map_files_src/SS13_map_files/Icons/aircontrol.dmi new file mode 100644 index 0000000..11bea3f Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/aircontrol.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/airtunnel.dmi b/SS13_map_files_src/SS13_map_files/Icons/airtunnel.dmi new file mode 100644 index 0000000..c6f96d4 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/airtunnel.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/airtunnelcomputer.dmi b/SS13_map_files_src/SS13_map_files/Icons/airtunnelcomputer.dmi new file mode 100644 index 0000000..383e6ce Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/airtunnelcomputer.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/ammo.dmi b/SS13_map_files_src/SS13_map_files/Icons/ammo.dmi new file mode 100644 index 0000000..f8e70c8 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/ammo.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/canister.dmi b/SS13_map_files_src/SS13_map_files/Icons/canister.dmi new file mode 100644 index 0000000..2346c2b Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/canister.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/doors.dmi b/SS13_map_files_src/SS13_map_files/Icons/doors.dmi new file mode 100644 index 0000000..6266003 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/doors.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/engine.dmi b/SS13_map_files_src/SS13_map_files/Icons/engine.dmi new file mode 100644 index 0000000..aa3ca0f Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/engine.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/enginecomputer.dmi b/SS13_map_files_src/SS13_map_files/Icons/enginecomputer.dmi new file mode 100644 index 0000000..bef0693 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/enginecomputer.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/escapepod.dmi b/SS13_map_files_src/SS13_map_files/Icons/escapepod.dmi new file mode 100644 index 0000000..9e76c44 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/escapepod.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/hi_pipe.dmi b/SS13_map_files_src/SS13_map_files/Icons/hi_pipe.dmi new file mode 100644 index 0000000..77fb29e Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/hi_pipe.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/human.dmi b/SS13_map_files_src/SS13_map_files/Icons/human.dmi new file mode 100644 index 0000000..1c03266 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/human.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/items.dmi b/SS13_map_files_src/SS13_map_files/Icons/items.dmi new file mode 100644 index 0000000..61af7bb Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/items.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/monkey.dmi b/SS13_map_files_src/SS13_map_files/Icons/monkey.dmi new file mode 100644 index 0000000..74c1f6c Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/monkey.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/pipes.dmi b/SS13_map_files_src/SS13_map_files/Icons/pipes.dmi new file mode 100644 index 0000000..b61dd6b Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/pipes.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/screen1.dmi b/SS13_map_files_src/SS13_map_files/Icons/screen1.dmi new file mode 100644 index 0000000..68343bb Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/screen1.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/security.dmi b/SS13_map_files_src/SS13_map_files/Icons/security.dmi new file mode 100644 index 0000000..acea1c9 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/security.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/shards.dmi b/SS13_map_files_src/SS13_map_files/Icons/shards.dmi new file mode 100644 index 0000000..fa5140b Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/shards.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/shuttle.dmi b/SS13_map_files_src/SS13_map_files/Icons/shuttle.dmi new file mode 100644 index 0000000..eb09b97 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/shuttle.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/stationobjs.dmi b/SS13_map_files_src/SS13_map_files/Icons/stationobjs.dmi new file mode 100644 index 0000000..765455f Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/stationobjs.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/table.dmi b/SS13_map_files_src/SS13_map_files/Icons/table.dmi new file mode 100644 index 0000000..b3d2952 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/table.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/turfs.dmi b/SS13_map_files_src/SS13_map_files/Icons/turfs.dmi new file mode 100644 index 0000000..6cbe1d0 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/turfs.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/turfs2.dmi b/SS13_map_files_src/SS13_map_files/Icons/turfs2.dmi new file mode 100644 index 0000000..5b89f02 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/turfs2.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/wall.dmi b/SS13_map_files_src/SS13_map_files/Icons/wall.dmi new file mode 100644 index 0000000..7f7c4f5 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/wall.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/weap_sat.dmi b/SS13_map_files_src/SS13_map_files/Icons/weap_sat.dmi new file mode 100644 index 0000000..411149c Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/weap_sat.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/windoor.dmi b/SS13_map_files_src/SS13_map_files/Icons/windoor.dmi new file mode 100644 index 0000000..c2dbad8 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/windoor.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/Icons/wire.dmi b/SS13_map_files_src/SS13_map_files/Icons/wire.dmi new file mode 100644 index 0000000..5a50db6 Binary files /dev/null and b/SS13_map_files_src/SS13_map_files/Icons/wire.dmi differ diff --git a/SS13_map_files_src/SS13_map_files/SS13_map_files.dm b/SS13_map_files_src/SS13_map_files/SS13_map_files.dm new file mode 100644 index 0000000..985c7fc --- /dev/null +++ b/SS13_map_files_src/SS13_map_files/SS13_map_files.dm @@ -0,0 +1,1056 @@ +/* +SS13 Map Making Files v. 1 +Applicable up to SS13 version + +Disclaimer: +By using the files you automatically agree: +A. Not to use the icons in any way except for the SS13 map making tools +B. Not distribute the files to anyone. +C. To agree automatically to any changes in this contract. + +Instructions: +Basically what you have here is the stripped down SS13 files. +Your main file is main.dmp + NEVER DELETE THIS! + THIS IS the SS13 map in its entirety. + You may wish to uncheck it though + however, you probably will never need to compile. +Also look at areas.dm as it has a few mroe instructions on dealing with areas. + +To use these files jsut create a enw map file. You can adjust the dimensions to anything! +However for now try to keep the z levels the same. +As in so that the prison station is on its current level and so is SS13 as well as CC. + All the other sats can be moved, deleted, etc. You can even add some. + +Once you are done adding everything, send me ONLY the *.dmp and the areas.dm file. + +Post on general under new map + if you need access to any more variables to customize the map. +*/ + +//Don't touch +#define AVER_OXY 756000 //cubic meters +#define AVER_PLAS 0 +#define AVER_NO2 0 +#define AVER_N2 2844000 //cubic meters +#define AVER_CO2 0 +/turf + var + oxygen = AVER_OXY + poison = AVER_PLAS//plasma + co2 = AVER_CO2 + sl_gas = AVER_NO2 + n2 = AVER_N2 +/turf/space + icon = 'turfs.dmi' + icon_state = "space" +/turf/station/r_wall + icon = 'wall.dmi' + icon_state = "r_wall" +/turf/station/wall + icon = 'wall.dmi' + icon_state = "" +/turf/station/floor/plasma_test +//This was used for beta-testing fire effects +//Igniter+THIS=Instant incinerator until the floor burns away that is +//Don't place this on SS13... use a custom designed floor instead + icon = 'Icons.dmi' + icon_state = "Floor" +/turf/station/floor + icon = 'Icons.dmi' + icon_state = "Floor" +/turf/station/floor/grid + icon = 'weap_sat.dmi' + icon_state = "grid" +/turf/station/engine/floor + icon = 'engine.dmi' + icon_state = "floor" +/turf/station/engine + icon = 'engine.dmi' + icon_state = "" +/turf/station/command/floor/other + icon = 'Icons.dmi' + icon_state = "Floor" +/turf/station/command/floor + icon = 'Icons.dmi' + icon_state = "Floor3" +/turf/station/command/wall/other + icon = 'wall.dmi' + icon_state = "r_wall" +/turf/station/command/wall + icon = 'wall.dmi' + icon_state = "CCWall" +/turf/station/shuttle/wall + icon = 'shuttle.dmi' + icon_state = "wall" +/turf/station/shuttle/floor + icon = 'shuttle.dmi' + icon_state = "floor" + +/mob/monkey + icon = 'monkey.dmi' + icon_state = "monkey1" + +/obj/move/airtunnel/connector/wall + icon = 'airtunnel.dmi' + icon_state = "wall-c" +/obj/move/airtunnel/connector + icon = 'airtunnel.dmi' + icon_state = "floor-c" +/obj/move/airtunnel/wall + icon = 'airtunnel.dmi' + icon_state = "wall" + +/obj/move/floor + icon = 'shuttle.dmi' + icon_state = "floor" +/obj/move/wall + icon = 'shuttle.dmi' + icon_state = "wall" + +/obj/machinery/at_indicator + icon = 'airtunnel.dmi' + icon_state = "reader00" +/obj/machinery/computer/airtunnel + icon = 'airtunnelcomputer.dmi' + icon_state = "console00" +/obj/machinery/computer/security + icon = 'stationobjs.dmi' + icon_state = "sec_computer" + var/network +/obj/machinery/computer/communications + icon = 'stationobjs.dmi' + icon_state = "comm_computer" +/obj/machinery/computer/card + icon = 'stationobjs.dmi' + icon_state = "id_computer" +/obj/machinery/computer/pod + icon = 'escapepod.dmi' + icon_state = "computer" + var/id = 1//For synchronization with the other pod launch stuff +/obj/machinery/computer/med_data + icon = 'weap_sat.dmi' + icon_state = "computer" +/obj/machinery/computer/secure_data + icon = 'weap_sat.dmi' + icon_state = "computer" +/obj/machinery/computer/sleep_console + icon = 'Cryogenic2.dmi' + icon_state = "sleeperconsole" +/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch + icon = 'turfs.dmi' + icon_state = "switch" +/obj/machinery/computer/atmosphere/siphonswitch + icon = 'turfs.dmi' + icon_state = "switch" +/obj/machinery/computer/dna + icon = 'Cryogenic2.dmi' + icon_state = "dna_computer" +/obj/machinery/computer/engine + icon = 'enginecomputer.dmi' + icon_state = "" +/obj/machinery/computer/hologram_comp + icon = 'stationobjs.dmi' + icon_state = "holo_console0" +/obj/machinery/computer/prison_shuttle + icon = 'shuttle.dmi' + icon_state = "shuttlecom" +/obj/machinery/computer/shuttle + icon = 'shuttle.dmi' + icon_state = "shuttlecom" +/obj/machinery/computer/teleporter + icon = 'stationobjs.dmi' + icon_state = "tele_computer" +/obj/machinery/computer/data/weapon/log + icon = 'weap_sat.dmi' + icon_state = "computer" +/obj/machinery/computer/data/weapon/info + icon = 'weap_sat.dmi' + icon_state = "computer" +/obj/machinery/computer/data + icon = 'weap_sat.dmi' + icon_state = "computer" + +/obj/machinery/camera + icon = 'stationobjs.dmi' + icon_state = "camera" + var/network //Set this as same with a computer to allow multiple camera names + //Default ones sued are SS13 and PS13 but you can use other strings + //YOU CANNOT merge networks! + var/c_tag //Name shown on security computer. +/obj/machinery/sec_lock + icon = 'stationobjs.dmi' + icon_state = "sec_lock" + var/a_type = 0//See map for better info: + //0 means the doors are lcoated S/SE,1=SW/Knight's move SW (prison),2=NW/Knight's move NW (prison) +/obj/machinery/injector + icon = 'stationobjs.dmi' + icon_state = "injector" +/obj/machinery/alarm/indicator + icon = 'airtunnel.dmi' + icon_state = "indicator" +/obj/machinery/alarm + icon = 'stationobjs.dmi' + icon_state = "alarm:0" +/obj/machinery/meter + icon = 'pipes.dmi' + icon_state = "meter" +/obj/machinery/connector + icon = 'pipes.dmi' + icon_state = "connector" +/obj/machinery/mass_driver + icon = 'stationobjs.dmi' + icon_state = "mass_driver" + var/id = 1 + +/obj/machinery/pipes/flexipipe + icon = 'wire.dmi' + icon_state = "12" +/obj/machinery/pipes/high_capacity + icon = 'hi_pipe.dmi' + icon_state = "12" +/obj/machinery/pipes + var/p_dir = 12 + //used internally, make it the same as the icon_state + //FYI its a bit flag variable + +/obj/machinery/atmoalter/siphs/fullairsiphon/port + icon = 'stationobjs.dmi' + icon_state = "siphon:0" +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent + icon = 'aircontrol.dmi' + icon_state = "vent2" +/obj/machinery/atmoalter/siphs/fullairsiphon + icon = 'turfs.dmi' + icon_state = "siphon:0" +/obj/machinery/atmoalter/siphs/scrubbers/air_filter + icon = 'aircontrol.dmi' + icon_state = "vent2" +/obj/machinery/atmoalter/siphs/scrubbers/port + icon = 'stationobjs.dmi' + icon_state = "scrubber:0" +/obj/machinery/atmoalter/siphs/scrubbers + icon = 'turfs2.dmi' + icon_state = "siphon:0" + +/obj/machinery/atmoalter/heater + icon = 'stationobjs.dmi' + icon_state = "heater1" +/obj/machinery/atmoalter/canister/poisoncanister + icon = 'canister.dmi' + icon_state = "0orange" +/obj/machinery/atmoalter/canister/oxygencanister + icon = 'canister.dmi' + icon_state = "blue" +/obj/machinery/atmoalter/canister/anesthcanister + icon = 'canister.dmi' + icon_state = "red" +/obj/machinery/atmoalter/canister/n2canister + icon = 'canister.dmi' + icon_state = "red" + +/obj/machinery/door/poddoor + icon = 'Door1.dmi' + icon_state = "door1" + var/id = 1 +/obj/machinery/door/window + icon = 'windoor.dmi' + icon_state = "door1" +/obj/machinery/door/false_wall + icon = 'Doorf.dmi' + icon_state = "door1" +/obj/machinery/door/airlock + icon = 'Door1.dmi' + icon_state = "door1" +/obj/machinery/door/firedoor + icon = 'Door1.dmi' + icon_state = "door0" +/obj/machinery/door + icon = 'doors.dmi' + icon_state = "door1" + var + r_access;r_lab;r_engine;r_air + + +/obj/machinery/pod + icon = 'escapepod.dmi' + icon_state = "pod" + var/id = 1//For synchronization with computer commands +/obj/machinery/recon + icon = 'escapepod.dmi' + icon_state = "recon" + var/id = 1//For synchronization with computer commands +/obj/machinery/freezer + icon = 'Cryogenic2.dmi' + icon_state = "freezer_0" +/obj/machinery/sleeper + icon = 'Cryogenic2.dmi' + icon_state = "sleeper_0" +/obj/machinery/cryo_cell + icon = 'Cryogenic2.dmi' + icon_state = "celltop" +/obj/machinery/igniter + icon = 'stationobjs.dmi' + icon_state = "igniter1" +/obj/machinery/firealarm + icon = 'items.dmi' + icon_state = "firealarm" +/obj/machinery/dispenser + icon = 'turfs2.dmi' + icon_state = "dispenser" + var //if you have to ask, I have to ask, have you played the game? + pltanks = 10 + o2tanks = 10 +/obj/machinery/dna_scanner + icon = 'Cryogenic2.dmi' + icon_state = "scanner_0" +/obj/machinery/scan_console + icon = 'Cryogenic2.dmi' + icon_state = "scannerconsole" +/obj/machinery/restruct + icon = 'Cryogenic2.dmi' + icon_state = "restruct_0" +/obj/machinery/hologram_proj + icon = 'stationobjs.dmi' + icon_state = "hologram0" +/obj/machinery/recharger + icon = 'stationobjs.dmi' + icon_state = "recharger0" +/obj/machinery/shuttle/engine/propulsion/burst/left + icon = 'shuttle.dmi' + icon_state = "burst_l" +/obj/machinery/shuttle/engine/propulsion/burst/right + icon = 'shuttle.dmi' + icon_state = "burst_r" +/obj/machinery/shuttle/engine/propulsion/burst + icon = 'shuttle.dmi' + icon_state = "propulsion" +/obj/machinery/shuttle/engine/propulsion + icon = 'shuttle.dmi' + icon_state = "propulsion" +/obj/machinery/shuttle/engine/router + icon = 'shuttle.dmi' + icon_state = "router" +/obj/machinery/shuttle/engine/platform + icon = 'shuttle.dmi' + icon_state = "platform" +/obj/machinery/shuttle/engine/heater + icon = 'shuttle.dmi' + icon_state = "heater" + +/obj/machinery/shuttle + icon = 'shuttle.dmi' + icon_state = "" +/obj/machinery/teleport/hub + icon = 'stationobjs.dmi' + icon_state = "tele0" +/obj/machinery/teleport/station + icon = 'stationobjs.dmi' + icon_state = "controller" +/obj/machinery/teleport + icon = 'stationobjs.dmi' + icon_state = "" +/obj/machinery/nuclearbomb + icon = 'stationobjs.dmi' + icon_state = "nuclearbomb0" + var/extended = 0 //make this 1 to have it frozen in place + +/obj/landmark//This is a pretty complicated object used mainly for CTF and nuclear mode + //Just consult the map and sue it as a guide for placing the stuff. + //It's a good thing you've played the game! + icon = 'screen1.dmi' + icon_state = "x2" +/obj/landmark/alterations + icon = 'screen1.dmi' + icon_state = "x2" +/obj/start + icon = 'screen1.dmi' + icon_state = "x" +/obj/sp_start + icon = 'human.dmi' + icon_state = "male" + var/special + //2 means remvoe all tiems frmo character,3 means make character a monkey + //FYI if you ahven't noticed the name is the ckey of the user + +//Not sure what you want to do with these but I just decided... +//Why not jsut toss em in. +/obj/item/weapon/organ/external/head + icon = 'human.dmi' + icon_state = "head" +/obj/item/weapon/organ/external/chest + icon = 'human.dmi' + icon_state = "chest" +/obj/item/weapon/organ/external/diaper + icon = 'human.dmi' + icon_state = "diaper" +/obj/item/weapon/organ/external/l_leg + icon = 'human.dmi' + icon_state = "l_leg" +/obj/item/weapon/organ/external/r_leg + icon = 'human.dmi' + icon_state = "r_leg" +/obj/item/weapon/organ/external/l_foot + icon = 'human.dmi' + icon_state = "l_foot" +/obj/item/weapon/organ/external/r_foot + icon = 'human.dmi' + icon_state = "r_foot" +/obj/item/weapon/organ/external/l_arm + icon = 'human.dmi' + icon_state = "l_arm" +/obj/item/weapon/organ/external/r_arm + icon = 'human.dmi' + icon_state = "r_arm" +/obj/item/weapon/organ/external/l_hand + icon = 'human.dmi' + icon_state = "l_hand" +/obj/item/weapon/organ/external/r_hand + icon = 'human.dmi' + icon_state = "r_hand" + +/obj/item/weapon/flasks/oxygen + icon = 'Cryogenic2.dmi' + icon_state = "oxygen-c" +/obj/item/weapon/flasks/plasma + icon = 'Cryogenic2.dmi' + icon_state = "plasma-c" +/obj/item/weapon/flasks/coolant + icon = 'Cryogenic2.dmi' + icon_state = "coolant-c" +/obj/item/weapon/clothing/head/helmet + icon = 'items.dmi' + icon_state = "helmet" +/obj/item/weapon/clothing/head/bio_hood + icon = 'items.dmi' + icon_state = "bio_hood" +/obj/item/weapon/clothing/head/swat_hel + icon = 'items.dmi' + icon_state = "swat_hel" +/obj/item/weapon/clothing/head/s_helmet + icon = 'items.dmi' + icon_state = "s_helmet" +/obj/item/weapon/clothing/head + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/gloves/latex + icon = 'items.dmi' + icon_state = "lgloves" +/obj/item/weapon/clothing/gloves/robot + icon = 'items.dmi' + icon_state = "r_hands" +/obj/item/weapon/clothing/gloves/swat + icon = 'items.dmi' + icon_state = "swat_gl" +/obj/item/weapon/clothing/gloves/black + icon = 'items.dmi' + icon_state = "bgloves" +/obj/item/weapon/clothing/gloves + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/ears/earmuffs + icon = 'items.dmi' + icon_state = "earmuffs" +/obj/item/weapon/clothing/ears + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/glasses/meson + icon = 'items.dmi' + icon_state = "m_glasses" +/obj/item/weapon/clothing/glasses/thermal + icon = 'items.dmi' + icon_state = "t_glasses" +/obj/item/weapon/clothing/glasses/sunglasses + icon = 'items.dmi' + icon_state = "s_glasses" +/obj/item/weapon/clothing/glasses/regular + icon = 'items.dmi' + icon_state = "p_glasses" +/obj/item/weapon/clothing/glasses/blindfold + icon = 'items.dmi' + icon_state = "blindfold" +/obj/item/weapon/clothing/glasses + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/shoes/orange + icon = 'items.dmi' + icon_state = "o_shoes" +/obj/item/weapon/clothing/shoes/black + icon = 'items.dmi' + icon_state = "bl_shoes" +/obj/item/weapon/clothing/shoes/brown + icon = 'items.dmi' + icon_state = "b_shoes" +/obj/item/weapon/clothing/shoes/white + icon = 'items.dmi' + icon_state = "w_shoes" +/obj/item/weapon/clothing/shoes/robot + icon = 'items.dmi' + icon_state = "r_feet" +/obj/item/weapon/clothing/shoes/swat + icon = 'items.dmi' + icon_state = "swat_sh" +/obj/item/weapon/clothing/shoes + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/under/orange + icon = 'items.dmi' + icon_state = "o_suit" +/obj/item/weapon/clothing/under/yellow + icon = 'items.dmi' + icon_state = "y_suit" +/obj/item/weapon/clothing/under/blue + icon = 'items.dmi' + icon_state = "b_suit" +/obj/item/weapon/clothing/under/red + icon = 'items.dmi' + icon_state = "r_suit" +/obj/item/weapon/clothing/under/pink + icon = 'items.dmi' + icon_state = "p_suit" +/obj/item/weapon/clothing/under/black + icon = 'items.dmi' + icon_state = "bl_suit" +/obj/item/weapon/clothing/under/white + icon = 'items.dmi' + icon_state = "w_suit" +/obj/item/weapon/clothing/under/green + icon = 'items.dmi' + icon_state = "g_suit" +/obj/item/weapon/clothing/under + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/suit/firesuit + icon = 'items.dmi' + icon_state = "firesuit" +/obj/item/weapon/clothing/suit/straight_jacket + icon = 'items.dmi' + icon_state = "straight_jacket" +/obj/item/weapon/clothing/suit/armor + icon = 'items.dmi' + icon_state = "armor" +/obj/item/weapon/clothing/suit/robot_suit + icon = 'items.dmi' + icon_state = "ro_suit" +/obj/item/weapon/clothing/suit/bio_suit + icon = 'items.dmi' + icon_state = "bio_suit" +/obj/item/weapon/clothing/suit/swat_suit + icon = 'items.dmi' + icon_state = "swat_suit" +/obj/item/weapon/clothing/suit/sp_suit + icon = 'items.dmi' + icon_state = "s_suit" +/obj/item/weapon/clothing/suit + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing/mask/robot/swat + icon = 'items.dmi' + icon_state = "r_head" +/obj/item/weapon/clothing/mask/robot + icon = 'items.dmi' + icon_state = "r_head" +/obj/item/weapon/clothing/mask/gasmask + icon = 'items.dmi' + icon_state = "mask" +/obj/item/weapon/clothing/mask/m_mask + icon = 'items.dmi' + icon_state = "m_mask" +/obj/item/weapon/clothing/mask/muzzle + icon = 'items.dmi' + icon_state = "muzzle" +/obj/item/weapon/clothing/mask/surgical + icon = 'items.dmi' + icon_state = "s_mask" +/obj/item/weapon/clothing/mask + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/clothing + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/tank/oxygentank + icon = 'items.dmi' + icon_state = "oxygen" +/obj/item/weapon/tank/jetpack + icon = 'items.dmi' + icon_state = "jetpack0" +/obj/item/weapon/tank/anesthetic + icon = 'items.dmi' + icon_state = "an_tank" +/obj/item/weapon/tank/plasmatank + icon = 'items.dmi' + icon_state = "plasma" +/obj/item/weapon/tank + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/table_parts + icon = 'items.dmi' + icon_state = "table_parts" +/obj/item/weapon/rack_parts + icon = 'items.dmi' + icon_state = "rack_parts" +/obj/item/weapon/paper_bin + icon = 'stationobjs.dmi' + icon_state = "paper_bin1" + var/amount = 30//Amount of paper in the bin... dont bother adjusting +/obj/item/weapon/game_kit + icon = 'items.dmi' + icon_state = "game_kit" +/obj/item/weapon/bedsheet + icon = 'Icons.dmi' + icon_state = "sheet" +/obj/item/weapon/wrapping_paper + icon = 'items.dmi' + icon_state = "wrap_paper" +/obj/item/weapon/c_tube + icon = 'items.dmi' + icon_state = "c_tube" +/obj/item/weapon/a_gift + icon = 'items.dmi' + icon_state = "gift" +/obj/item/weapon/flashbang + icon = 'items.dmi' + icon_state = "flashbang" +/obj/item/weapon/flash + icon = 'items.dmi' + icon_state = "flash" +/obj/item/weapon/locator + icon = 'items.dmi' + icon_state = "locator" +/obj/item/weapon/syndicate_uplink + icon = 'items.dmi' + icon_state = "radio" +/obj/item/weapon/sword + icon = 'items.dmi' + icon_state = "sword0" +/obj/item/weapon/shield + icon = 'items.dmi' + icon_state = "shield0" +/obj/item/weapon/cloaking_device + icon = 'items.dmi' + icon_state = "shield0" +/obj/item/weapon/ammo/a357 + icon = 'ammo.dmi' + icon_state = "357-7" +/obj/item/weapon/gun/revolver + icon = 'items.dmi' + icon_state = "revolver" +/obj/item/weapon/gun/energy/laser_gun + icon = 'items.dmi' + icon_state = "gun" +/obj/item/weapon/gun/energy/taser_gun + icon = 'items.dmi' + icon_state = "t_gun" +/obj/item/weapon/pill_canister/placebo + icon = 'items.dmi' + icon_state = "pill_canister" +/obj/item/weapon/pill_canister/antitoxin + icon = 'items.dmi' + icon_state = "pill_canister" +/obj/item/weapon/pill_canister/Tourette + icon = 'items.dmi' + icon_state = "pill_canister" +/obj/item/weapon/pill_canister/sleep + icon = 'items.dmi' + icon_state = "pill_canister" +/obj/item/weapon/pill_canister/epilepsy + icon = 'items.dmi' + icon_state = "pill_canister" +/obj/item/weapon/pill_canister/cough + icon = 'items.dmi' + icon_state = "pill_canister" +/obj/item/weapon/m_pill/superpill + icon = 'items.dmi' + icon_state = "pill" +/obj/item/weapon/m_pill/sleep + icon = 'items.dmi' + icon_state = "pill" +/obj/item/weapon/m_pill/cyanide + icon = 'items.dmi' + icon_state = "pill5" +/obj/item/weapon/m_pill/antitoxin + icon = 'items.dmi' + icon_state = "pill" +/obj/item/weapon/m_pill/cough + icon = 'items.dmi' + icon_state = "pill4" +/obj/item/weapon/m_pill/epilepsy + icon = 'items.dmi' + icon_state = "pill3" +/obj/item/weapon/m_pill/Tourette + icon = 'items.dmi' + icon_state = "pill2" +/obj/item/weapon/handcuffs + icon = 'items.dmi' + icon_state = "handcuff" +/obj/item/weapon/card/data + icon = 'items.dmi' + icon_state = "card-data" + var/function = "storage" + var/data = "null" + var/special = null +/obj/item/weapon/card/emag + icon = 'items.dmi' + icon_state = "emag-card" +/obj/item/weapon/card/id + icon = 'items.dmi' + icon_state = "card-id" + var/access_level //general level of access + var/lab_access //level of lab access + var/engine_access //level of engine access + var/air_access //level of systems access + var/registered //name registered to + var/assignment //like pilot,captain,researcher +/obj/item/weapon/rods + icon = 'items.dmi' + icon_state = "rods" +/obj/item/weapon/sheet/r_metal + icon = 'items.dmi' + icon_state = "sheet-r_metal" +/obj/item/weapon/sheet/metal + icon = 'items.dmi' + icon_state = "sheet-metal" +/obj/item/weapon/sheet/glass + icon = 'items.dmi' + icon_state = "sheet-glass" +/obj/item/weapon/sheet + var/amount = 1 +/obj/item/weapon/wirecutters + icon = 'items.dmi' + icon_state = "cutters" +/obj/item/weapon/clipboard + icon = 'items.dmi' + icon_state = "clipboard00" +/obj/item/weapon/fcardholder + icon = 'items.dmi' + icon_state = "fcardholder0" +/obj/item/weapon/extinguisher + icon = 'items.dmi' + icon_state = "fire_extinguisher0" +/obj/item/weapon/pen/sleepypen + icon = 'items.dmi' + icon_state = "pen" +/obj/item/weapon/pen + icon = 'items.dmi' + icon_state = "pen" +/obj/item/weapon/paint + icon = 'items.dmi' + icon_state = "paint_neutral" +/obj/item/weapon/camera + icon = 'items.dmi' + icon_state = "camera" +/obj/item/weapon/paper/flag + icon = 'items.dmi' + icon_state = "flag_neutral"//Whatever... +/obj/item/weapon/paper/jobs + icon = 'items.dmi' + icon_state = "paper" +/obj/item/weapon/paper/sop + icon = 'items.dmi' + icon_state = "paper" +/obj/item/weapon/paper/courtroom + icon = 'items.dmi' + icon_state = "paper" +/obj/item/weapon/paper/Toxin + icon = 'items.dmi' + icon_state = "paper" +/obj/item/weapon/paper/Internal + icon = 'items.dmi' + icon_state = "paper" +/obj/item/weapon/paper/Map + icon = 'items.dmi' + icon_state = "paper" +/obj/item/weapon/paper + icon = 'items.dmi' + icon_state = "paper" + var/info//If you want to create some customized HTML message go ahead. +/obj/item/weapon/f_card + icon = 'items.dmi' + icon_state = "f_print_card0" +/obj/item/weapon/f_print_scanner + icon = 'items.dmi' + icon_state = "f_print_scanner0" +/obj/item/weapon/healthanalyzer + icon = 'items.dmi' + icon_state = "healthanalyzer" +/obj/item/weapon/analyzer + icon = 'items.dmi' + icon_state = "analyzer" +/obj/item/weapon/storage/lglo_kit + icon = 'items.dmi' + icon_state = "lglo_kit" +/obj/item/weapon/storage/flashbang_kit + icon = 'items.dmi' + icon_state = "flashbang_kit" +/obj/item/weapon/storage/stma_kit + icon = 'items.dmi' + icon_state = "lglo_kit" +/obj/item/weapon/storage/gl_kit + icon = 'items.dmi' + icon_state = "id_kit" +/obj/item/weapon/storage/trackimp_kit + icon = 'items.dmi' + icon_state = "imp_kit" +/obj/item/weapon/storage/fcard_kit + icon = 'items.dmi' + icon_state = "id_kit" +/obj/item/weapon/storage/id_kit + icon = 'items.dmi' + icon_state = "id_kit" +/obj/item/weapon/storage/box + icon = 'items.dmi' + icon_state = "box" +/obj/item/weapon/storage/handcuff_kit + icon = 'items.dmi' + icon_state = "handcuff_kit" +/obj/item/weapon/storage/disk_kit/disks + icon = 'items.dmi' + icon_state = "id_kit" +/obj/item/weapon/storage/disk_kit/disks2 + icon = 'items.dmi' + icon_state = "id_kit" +/obj/item/weapon/storage/disk_kit + icon = 'items.dmi' + icon_state = "id_kit" +/obj/item/weapon/storage/backpack + icon = 'items.dmi' + icon_state = "backpack" +/obj/item/weapon/storage/toolbox + icon = 'items.dmi' + icon_state = "toolbox" +/obj/item/weapon/storage/firstaid/fire + icon = 'items.dmi' + icon_state = "firstaid-ointment" +/obj/item/weapon/storage/firstaid/syringes + icon = 'items.dmi' + icon_state = "syringe_kit" +/obj/item/weapon/storage/firstaid/regular + icon = 'items.dmi' + icon_state = "firstaid" +/obj/item/weapon/storage/firstaid/toxin + icon = 'items.dmi' + icon_state = "firstaid-toxin" +/obj/item/weapon/tile + icon = 'items.dmi' + icon_state = "tile" +/obj/item/weapon/igniter + icon = 'items.dmi' + icon_state = "igniter" +/obj/item/weapon/radio/electropack + icon = 'items.dmi' + icon_state = "electropack0" +/obj/item/weapon/radio/headset + icon = 'items.dmi' + icon_state = "headset" +/obj/item/weapon/radio/beacon + icon = 'items.dmi' + icon_state = "beacon" +/obj/item/weapon/radio/signaler + icon = 'items.dmi' + icon_state = "signaler" +/obj/item/weapon/radio/intercom + icon = 'items.dmi' + icon_state = "intercom" +/obj/item/weapon/radio + icon = 'items.dmi' + icon_state = "radio" + var/freq = 145.1//Please don't make me explain this. +//In theory you can go beyond the default ranges for really private things but +//The player could easily ruin that, +/obj/item/weapon/shard + icon = 'shards.dmi' + icon_state = "small" +/obj/item/weapon/crowbar + icon = 'items.dmi' + icon_state = "crowbar" +/obj/item/weapon/wrench + icon = 'items.dmi' + icon_state = "wrench" +/obj/item/weapon/screwdriver + icon = 'items.dmi' + icon_state = "screwdriver" +/obj/item/weapon/dropper + icon = 'items.dmi' + icon_state = "dropper_0" +/obj/item/weapon/implantcase/tracking + icon = 'items.dmi' + icon_state = "implantcase-b" +/obj/item/weapon/implantcase + icon = 'items.dmi' + icon_state = "implantcase-0" +/obj/item/weapon/implantpad + icon = 'items.dmi' + icon_state = "implantpad-0" +/obj/item/weapon/implanter + icon = 'items.dmi' + icon_state = "implanter0" +/obj/item/weapon/syringe + icon = 'items.dmi' + icon_state = "syringe_0" +/obj/item/weapon/brutepack + icon = 'items.dmi' + icon_state = "brutepack" +/obj/item/weapon/hand_tele + icon = 'items.dmi' + icon_state = "hand_tele" +/obj/item/weapon/ointment + icon = 'items.dmi' + icon_state = "ointment" +/obj/item/weapon/bottle/toxins + icon = 'items.dmi' + icon_state = "toxinbottle" +/obj/item/weapon/bottle/antitoxins + icon = 'items.dmi' + icon_state = "atoxinbottle" +/obj/item/weapon/bottle/r_epil + icon = 'items.dmi' + icon_state = "medibottle" +/obj/item/weapon/bottle/r_ch_cough + icon = 'items.dmi' + icon_state = "medibottle" +/obj/item/weapon/bottle/rejuvenators + icon = 'items.dmi' + icon_state = "rejuvbottle" +/obj/item/weapon/bottle/s_tox + icon = 'items.dmi' + icon_state = "toxinbottle" +/obj/item/weapon/bottle + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/weldingtool + icon = 'items.dmi' + icon_state = "welder" +/obj/item/weapon/disk/nuclear + icon = 'items.dmi' + icon_state = "nucleardisk" +/obj/item/weapon/disk + icon = 'items.dmi' + icon_state = "" +/obj/item/weapon/infra_sensor + icon = 'items.dmi' + icon_state = "infra_sensor" +/obj/item/weapon/prox_sensor + icon = 'items.dmi' + icon_state = "motion0" +/obj/item/weapon/infra + icon = 'items.dmi' + icon_state = "infrared0" +/obj/item/weapon/timer + icon = 'items.dmi' + icon_state = "timer" + +/obj/secloset/personal + icon = 'stationobjs.dmi' + icon_state = "0secloset0" +/obj/secloset/security2 + icon = 'stationobjs.dmi' + icon_state = "1secloset0" +/obj/secloset/security1 + icon = 'stationobjs.dmi' + icon_state = "1secloset0" +/obj/secloset/highsec + icon = 'stationobjs.dmi' + icon_state = "1secloset0" +/obj/secloset/animal + icon = 'stationobjs.dmi' + icon_state = "1secloset0" +/obj/secloset/medical1 + icon = 'stationobjs.dmi' + icon_state = "1secloset0" +/obj/secloset/medical2 + icon = 'stationobjs.dmi' + icon_state = "1secloset0" +/obj/secloset + icon = 'stationobjs.dmi' + icon_state = "1secloset0" + var/allowed //it may be best you examine the map if you override these. +/obj/morgue + icon = 'stationobjs.dmi' + icon_state = "morgue1" +/obj/closet/syndicate/nuclear + icon = 'stationobjs.dmi' + icon_state = "syndicate0" +/obj/closet/emcloset + icon = 'stationobjs.dmi' + icon_state = "emcloset0" +/obj/closet/l3closet + icon = 'stationobjs.dmi' + icon_state = "l3closet0" +/obj/closet/wardrobe/red + icon = 'stationobjs.dmi' + icon_state = "wardrobe-r" +/obj/closet/wardrobe/pink + icon = 'stationobjs.dmi' + icon_state = "wardrobe-p" +/obj/closet/wardrobe/black + icon = 'stationobjs.dmi' + icon_state = "wardrobe-bl" +/obj/closet/wardrobe/green + icon = 'stationobjs.dmi' + icon_state = "wardrobe-g" +/obj/closet/wardrobe/orange + icon = 'stationobjs.dmi' + icon_state = "wardrobe-o" +/obj/closet/wardrobe/yellow + icon = 'stationobjs.dmi' + icon_state = "wardrobe-y" +/obj/closet/wardrobe/mixed + icon = 'stationobjs.dmi' + icon_state = "wardrobe-bp" +/obj/closet/wardrobe/white + icon = 'stationobjs.dmi' + icon_state = "wardrobe-w" +/obj/closet/wardrobe + icon = 'stationobjs.dmi' + icon_state = "wardrobe-b" +/obj/closet + icon = 'stationobjs.dmi' + icon_state = "closet" +/obj/stool/bed + icon = 'Icons.dmi' + icon_state = "bed" +/obj/stool/chair + icon = 'Icons.dmi' + icon_state = "chair" +/obj/stool + icon = 'Icons.dmi' + icon_state = "stool" +/obj/grille + icon = 'turfs2.dmi' + icon_state = "grille" +/obj/window + icon = 'turfs2.dmi' + icon_state = "window" +/obj/begin + icon = 'stationobjs.dmi' + icon_state = "begin" +/obj/manifest + icon = 'screen1.dmi' + icon_state = "x" +/obj/bedsheetbin + icon = 'Icons.dmi' + icon_state = "bedbin" +/obj/table + icon = 'table.dmi' + icon_state = "alone" +/obj/rack + icon = 'Icons.dmi' + icon_state = "rack" +/obj/weldfueltank + icon = 'items.dmi' + icon_state = "weldtank" +/obj/watertank + icon = 'stationobjs.dmi' + icon_state = "watertank" +/obj/d_girders + icon = 'stationobjs.dmi' + icon_state = "d_girders" +/obj/barrier + icon = 'stationobjs.dmi' + icon_state = "barrier" +/obj/shuttle/door + icon = 'shuttle.dmi' + icon_state = "door1" + +/atom/movable/var/anchored //use with caution +//Basically if it is 1, it is immobile. \ No newline at end of file diff --git a/SS13_map_files_src/SS13_map_files/SS13_map_files.dme b/SS13_map_files_src/SS13_map_files/SS13_map_files.dme new file mode 100644 index 0000000..88c3601 --- /dev/null +++ b/SS13_map_files_src/SS13_map_files/SS13_map_files.dme @@ -0,0 +1,23 @@ +// DM Environment file for SS13_map_files.dme. +// All manual changes should be made outside the BEGIN_ and END_ blocks. +// New source code should be placed in .dm files: choose File/New --> Code File. + +// BEGIN_INTERNALS +/* +FILE: +*/ +// END_INTERNALS +// BEGIN_FILE_DIR +#define FILE_DIR . +#define FILE_DIR "Icons" +// END_FILE_DIR + +// BEGIN_PREFERENCES +// END_PREFERENCES + +// BEGIN_INCLUDE +#include "areas.dm" +#include "SS13_map_files.dm" +#include "main.dmp" +// END_INCLUDE + diff --git a/SS13_map_files_src/SS13_map_files/areas.dm b/SS13_map_files_src/SS13_map_files/areas.dm new file mode 100644 index 0000000..6214b95 --- /dev/null +++ b/SS13_map_files_src/SS13_map_files/areas.dm @@ -0,0 +1,48 @@ +/*Why is this a seperate file you may ask? + +Well areas are very map depedant. +They basically are the zones for the firealarams with the exception of some of the start +areas such as /area/start, /area/sleep_area, and /area/shuttle +Those must stay in because the code references them. +Now you can add, remove, change any others. just make sure you include this file if you do. +*/ +//REQUIRED AREAS- Reference example map for placement instructions. +/area/start +/area/shuttle_prison +/area/shuttle +/area/sleep_area + +//ALTERABLE AREAS- Please place a small comment next to an area you alter for my reference. +/area/escapezone +/area/dummy +/area/vehicles/shuttle1 +/area/vehicles/shuttle2 +/area/vehicles/shuttle3 +/area/vehicles +/area/security +/area/aircontrol +/area/shuttle_airlock +/area/toxinlab +/area/engine +/area/decontamination +/area/medical +/area/airintake +/area/engine_access +/area/oxygen_storage +/area/testlab1 +/area/testlab2 +/area/testlab3 +/area/testlab4 +/area/toolstorage +/area/medicalstorage +/area/control_room +/area/controlaccess +/area/crew_quarters +/area/lounge +/area/airtunnel1 +/area/hallways/loungehall +/area/hallways/eastairlock +/area/hallways/labaccess +/area/hallways/centralhall +/area/hallways +/area/supply_station diff --git a/SS13_map_files_src/SS13_map_files/main.dmp b/SS13_map_files_src/SS13_map_files/main.dmp new file mode 100644 index 0000000..e5450ca --- /dev/null +++ b/SS13_map_files_src/SS13_map_files/main.dmp @@ -0,0 +1,2432 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/item/weapon/tank/oxygentank,/turf/space,/area) +"ac" = (/turf/station/wall,/area/engine_access) +"ad" = (/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/engine_access) +"ae" = (/turf/station/r_wall,/area/engine) +"af" = (/obj/move/airtunnel/connector/wall,/turf/space,/area/airtunnel1) +"ag" = (/obj/machinery/camera{dir = 4; c_tag = "Northern Airlock"},/obj/machinery/at_indicator{pixel_x = -32; pixel_y = 0},/turf/station/floor,/area/engine_access) +"ah" = (/turf/station/floor,/area/engine_access) +"ai" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/floor,/area/engine_access) +"aj" = (/obj/move/airtunnel/connector,/obj/machinery/alarm/indicator,/turf/space,/area/airtunnel1) +"ak" = (/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"al" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine_access) +"am" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine_access) +"an" = (/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"ao" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/floor,/area/engine_access) +"ap" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine) +"aq" = (/obj/machinery/door/airlock{r_access = 2},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"ar" = (/obj/move/airtunnel/connector,/turf/space,/area/airtunnel1) +"as" = (/obj/machinery/door/airlock,/turf/station/floor,/area/engine_access) +"at" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine_access) +"au" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine_access) +"av" = (/obj/grille,/turf/station/floor,/area) +"aw" = (/turf/station/floor,/area/engine) +"ax" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/engine_access) +"ay" = (/turf/station/r_wall,/area/airtunnel1) +"az" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airtunnel1) +"aA" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airtunnel1) +"aB" = (/turf/station/wall,/area) +"aC" = (/obj/machinery/door/false_wall,/turf/station/floor,/area) +"aD" = (/turf/station/wall,/area/airtunnel1) +"aE" = (/turf/station/r_wall,/area) +"aF" = (/turf/station/floor,/area) +"aG" = (/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area) +"aH" = (/turf/station/wall,/area/control_room) +"aI" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine_access) +"aJ" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine) +"aK" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/firealarm,/turf/station/floor,/area/engine) +"aL" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area/engine) +"aM" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area) +"aN" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area) +"aO" = (/obj/item/weapon/gun/revolver,/turf/station/floor,/area) +"aP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aR" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/tank/jetpack,/turf/station/floor,/area/control_room) +"aS" = (/obj/machinery/door/airlock{r_access = 2},/turf/station/floor,/area/engine) +"aT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"aU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"aV" = (/obj/machinery/camera{dir = 8; c_tag = "Plasma Storage"},/turf/station/floor,/area/engine) +"aW" = (/turf/station/r_wall,/area/testlab4) +"aX" = (/turf/station/r_wall,/area/control_room) +"aY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"aZ" = (/turf/station/floor,/area/control_room) +"ba" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine_access) +"bc" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/engine) +"bd" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"be" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/engine/floor,/area/testlab4) +"bf" = (/turf/station/engine/floor,/area/testlab4) +"bg" = (/obj/machinery/door/window,/turf/station/engine/floor,/area/testlab4) +"bh" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 5000},/area/testlab4) +"bi" = (/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bj" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine) +"bk" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 3; r_access = 2; r_lab = 0},/turf/station/floor,/area/engine) +"bl" = (/obj/window{dir = 10},/turf/station/engine/floor,/area/testlab4) +"bm" = (/obj/window,/turf/station/engine/floor,/area/testlab4) +"bn" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bo" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bp" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 2; r_lab = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bq" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area/control_room) +"br" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine_access) +"bs" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine_access) +"bt" = (/turf/station/wall,/area/engine) +"bu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/engine) +"bv" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine) +"bw" = (/obj/machinery/computer/engine,/turf/station/floor,/area/engine) +"bx" = (/obj/closet/emcloset,/turf/station/floor,/area/engine) +"by" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/engine) +"bz" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/engine) +"bA" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bB" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bC" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/engine) +"bD" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/engine/floor,/area/testlab4) +"bE" = (/turf/station/floor,/area/testlab4) +"bF" = (/obj/machinery/camera{dir = 4; c_tag = "CR- Prep Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"bG" = (/obj/machinery/door,/turf/station/floor,/area/engine) +"bH" = (/obj/window{dir = 8},/turf/station/floor,/area/testlab4) +"bI" = (/obj/machinery/firealarm{pixel_x = -32},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bJ" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bK" = (/obj/machinery/door,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine_access) +"bL" = (/obj/landmark{name = "CTF-base-Engine"},/turf/station/floor,/area/engine) +"bM" = (/obj/machinery/door/window,/turf/station/floor,/area/engine) +"bN" = (/obj/item/weapon/radio,/turf/station/floor,/area/engine) +"bO" = (/obj/window{dir = 4},/turf/station/engine/floor,/area/testlab4) +"bP" = (/obj/machinery/door/firedoor,/turf/station/engine/floor,/area/testlab4) +"bQ" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/testlab4) +"bR" = (/obj/window,/turf/station/floor,/area/control_room) +"bS" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/control_room) +"bT" = (/obj/window{dir = 4},/turf/station/wall,/area) +"bU" = (/obj/window{dir = 8},/obj/window{dir = 4},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"bV" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"bW" = (/obj/machinery/door/airlock{r_engine = 3; r_access = 2; r_lab = 0},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/testlab4) +"bX" = (/obj/window{dir = 1},/turf/station/floor,/area/testlab4) +"bY" = (/obj/window{dir = 10},/turf/station/floor,/area/testlab4) +"bZ" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/testlab4) +"ca" = (/obj/grille,/turf/station/floor,/area/testlab4) +"cb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"cc" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"cd" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/control_room) +"ce" = (/obj/machinery/computer/card,/turf/station/floor,/area/control_room) +"cf" = (/obj/table,/obj/item/weapon/paper/Map,/obj/item/weapon/radio/intercom,/turf/station/floor,/area/control_room) +"cg" = (/obj/machinery/computer/communications,/turf/station/floor,/area/control_room) +"ch" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/obj/machinery/camera{c_tag = "Control Room"},/turf/station/floor,/area/control_room) +"ci" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/control_room) +"cj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/control_room) +"ck" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/floor,/area/control_room) +"cl" = (/obj/table{icon_state = "corners"; dir = 5},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"cm" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"cn" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/engine) +"co" = (/obj/watertank,/turf/station/floor,/area/engine) +"cp" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cr" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"cs" = (/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"ct" = (/obj/weldfueltank,/turf/station/floor,/area/engine) +"cu" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"cx" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/testlab4) +"cy" = (/obj/machinery/door/window,/turf/station/floor,/area/testlab4) +"cz" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/testlab4) +"cA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"cB" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"cC" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/control_room) +"cD" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/control_room) +"cE" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/obj/item/weapon/pen,/turf/station/floor,/area/control_room) +"cF" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"cG" = (/obj/landmark{name = "CTF-supply-Engine"},/turf/station/floor,/area/engine) +"cH" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/engine) +"cI" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/testlab4) +"cJ" = (/obj/window{dir = 4},/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab4) +"cK" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/testlab4) +"cL" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/control_room) +"cM" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/control_room) +"cN" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Research"},/turf/station/floor,/area/control_room) +"cO" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"cP" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 2; r_access = 2},/turf/station/floor,/area/engine) +"cQ" = (/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine) +"cR" = (/obj/machinery/injector{dir = 8},/turf/station/wall,/area/engine) +"cS" = (/turf/station/engine/floor{poison = 5000},/area/engine) +"cT" = (/obj/machinery/firealarm{pixel_y = -32},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/testlab4) +"cU" = (/obj/weldfueltank,/turf/station/floor,/area/testlab4) +"cV" = (/obj/machinery/door/window,/turf/station/floor,/area/control_room) +"cW" = (/obj/landmark{name = "CTF-base-CR"},/turf/station/floor,/area/control_room) +"cX" = (/obj/table,/obj/item/weapon/paper/jobs,/obj/item/weapon/storage/id_kit,/turf/station/floor,/area/control_room) +"cY" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/control_room) +"cZ" = (/obj/table,/turf/station/floor,/area/control_room) +"da" = (/obj/stool/chair{dir = 4},/obj/start{name = "Captain"},/turf/station/floor,/area/control_room) +"db" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"dc" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/engine) +"dd" = (/obj/start{name = "Engineer"},/turf/station/floor,/area/engine) +"de" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"df" = (/turf/station/r_wall,/area/medicalstorage) +"dg" = (/obj/watertank,/turf/station/floor,/area/control_room) +"dh" = (/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"di" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Personnel"},/turf/station/floor,/area/control_room) +"dj" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/engine) +"dk" = (/obj/machinery/camera{dir = 4; c_tag = "Engine Hallway"},/turf/station/floor,/area/engine) +"dl" = (/obj/window{dir = 4},/turf/station/floor,/area/engine) +"dm" = (/turf/station/wall,/area/medicalstorage) +"dn" = (/obj/closet/emcloset,/turf/station/floor,/area/medicalstorage) +"do" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/medicalstorage) +"dp" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/medicalstorage) +"dq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/medicalstorage) +"dr" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/medicalstorage) +"ds" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/medicalstorage) +"dt" = (/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"du" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/sop,/obj/item/weapon/paper/Internal,/obj/item/weapon/infra,/turf/station/floor,/area/control_room) +"dv" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Internal,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/control_room) +"dw" = (/obj/stool/chair,/turf/station/floor,/area/control_room) +"dx" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/syringe,/turf/station/floor,/area/control_room) +"dy" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/s_tox,/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"dz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/weldfueltank,/turf/station/floor,/area/engine) +"dA" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/engine) +"dB" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine) +"dC" = (/obj/machinery/dispenser,/turf/station/floor,/area/engine) +"dD" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"dE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{dir = 4; c_tag = "Technician Office"},/turf/station/floor,/area/medicalstorage) +"dF" = (/obj/start{name = "Station Technician"},/turf/station/floor,/area/medicalstorage) +"dG" = (/turf/station/floor,/area/medicalstorage) +"dH" = (/obj/stool,/turf/station/floor,/area/medicalstorage) +"dI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/medicalstorage) +"dJ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/control_room) +"dK" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/Map,/obj/item/weapon/timer,/turf/station/floor,/area/control_room) +"dL" = (/obj/landmark{name = "CTF-supply-CR"},/turf/station/floor,/area/control_room) +"dM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/jobs,/obj/manifest,/turf/station/floor,/area/control_room) +"dN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/card/id,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"dO" = (/obj/machinery/computer/airtunnel,/turf/station/floor,/area/control_room) +"dP" = (/obj/machinery/computer/engine,/turf/station/floor,/area/control_room) +"dQ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/recharger,/turf/station/floor,/area/control_room) +"dR" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"dS" = (/turf/station/wall,/area/escapezone) +"dT" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/engine) +"dU" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/engine) +"dV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"dW" = (/obj/machinery/alarm{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_y = -32},/turf/station/floor,/area/engine) +"dX" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"dY" = (/obj/item/weapon/radio,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine) +"dZ" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/engine) +"ea" = (/obj/machinery/door{r_engine = 3; r_access = 2},/obj/window,/obj/machinery/firealarm,/obj/window{dir = 8},/turf/station/floor,/area/engine) +"eb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medicalstorage) +"ec" = (/obj/start{name = "Technical Assistant"},/turf/station/floor,/area/medicalstorage) +"ed" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medicalstorage) +"ee" = (/obj/weldfueltank,/turf/station/floor,/area/medicalstorage) +"ef" = (/turf/station/wall,/area/controlaccess) +"eg" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/controlaccess) +"eh" = (/turf/station/r_wall,/area/controlaccess) +"ei" = (/turf/station/r_wall,/area/testlab2) +"ej" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/testlab2) +"ek" = (/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"el" = (/obj/machinery/door/poddoor,/turf/station/engine/floor,/area/escapezone) +"em" = (/obj/machinery/mass_driver,/obj/item/weapon/tank/oxygentank,/turf/station/engine/floor,/area/escapezone) +"en" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/engine/floor,/area/escapezone) +"eo" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/escapezone) +"ep" = (/obj/machinery/computer/pod{name = "Mass Driver"},/turf/station/floor,/area/escapezone) +"eq" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/engine/floor,/area/engine) +"er" = (/obj/window{dir = 10},/turf/station/floor,/area/engine) +"es" = (/obj/machinery/injector,/turf/station/wall,/area/engine) +"et" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"eu" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 5000},/area/engine) +"ev" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/medicalstorage) +"ew" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/medicalstorage) +"ex" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/controlaccess) +"ey" = (/turf/station/floor,/area/controlaccess) +"ez" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"eA" = (/turf/station/floor,/area/escapezone) +"eB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/escapezone) +"eC" = (/obj/grille,/turf/station/engine/floor,/area/engine) +"eD" = (/obj/machinery/alarm,/turf/station/floor,/area/controlaccess) +"eE" = (/obj/machinery/door/window,/turf/station/floor,/area/controlaccess) +"eF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/security,/turf/station/floor,/area/testlab2) +"eG" = (/turf/station/floor,/area/testlab2) +"eH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/testlab2) +"eI" = (/obj/item/weapon/ammo/a357,/turf/station/floor,/area) +"eJ" = (/obj/machinery/door/poddoor{id = 2},/turf/station/engine/floor,/area/escapezone) +"eK" = (/obj/machinery/mass_driver{dir = 8; id = 2},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"eL" = (/obj/machinery/computer/pod{id = 2},/turf/station/floor,/area/escapezone) +"eM" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"eN" = (/obj/machinery/computer/engine,/turf/station/floor,/area) +"eO" = (/obj/machinery/computer/communications,/turf/station/floor,/area) +"eP" = (/obj/item/weapon/hand_tele,/turf/station/engine/floor,/area/engine) +"eQ" = (/turf/station/engine/floor,/area/engine) +"eR" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/engine/floor,/area/engine) +"eS" = (/obj/machinery/door{r_engine = 3; r_access = 2},/turf/station/floor,/area/engine) +"eT" = (/turf/station/wall,/area/hallways/labaccess) +"eU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/controlaccess) +"eV" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab2) +"eW" = (/obj/secloset/highsec,/turf/station/floor,/area/testlab2) +"eX" = (/obj/machinery/camera{dir = 4; c_tag = "Escape Pod Bay"},/turf/station/floor,/area/escapezone) +"eY" = (/obj/machinery/door/window,/turf/station/floor,/area/escapezone) +"eZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"fa" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"fb" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"fc" = (/obj/watertank,/turf/station/floor,/area/hallways/labaccess) +"fd" = (/turf/station/floor,/area/hallways/labaccess) +"fe" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/labaccess) +"ff" = (/obj/machinery/camera{dir = 4; c_tag = "Emergency Room"},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab2) +"fg" = (/obj/landmark{name = "Nuclear-Disk"},/turf/station/floor,/area/testlab2) +"fh" = (/obj/machinery/door/poddoor{id = 3},/turf/station/engine/floor,/area/escapezone) +"fi" = (/obj/machinery/mass_driver{dir = 8; id = 3},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"fj" = (/obj/machinery/computer/pod{id = 3},/turf/station/floor,/area/escapezone) +"fk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area) +"fl" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/engine/floor,/area/engine) +"fm" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/labaccess) +"fn" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/hallways/labaccess) +"fo" = (/obj/weldfueltank,/turf/station/floor,/area/toolstorage) +"fp" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/backpack,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/toolstorage) +"fq" = (/obj/item/weapon/infra,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fr" = (/turf/station/wall,/area/toolstorage) +"fs" = (/obj/table{icon_state = "sides"; dir = 2},/obj/bedsheetbin,/turf/station/floor,/area/toolstorage) +"ft" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper_bin{amount = 50},/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/toolstorage) +"fu" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/turf/station/floor,/area/toolstorage) +"fv" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/toolstorage) +"fw" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/toolstorage) +"fx" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/testlab2) +"fy" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/testlab2) +"fz" = (/obj/machinery/door/poddoor{id = 4},/turf/station/engine/floor,/area/escapezone) +"fA" = (/obj/machinery/mass_driver{dir = 8; id = 4},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"fB" = (/obj/machinery/computer/pod{id = 4},/turf/station/floor,/area/escapezone) +"fC" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"fD" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/engine) +"fE" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/toolstorage) +"fF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fG" = (/obj/item/weapon/timer,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fH" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{c_tag = "Supply Room"},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toolstorage) +"fI" = (/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fJ" = (/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fK" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fM" = (/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fO" = (/obj/item/weapon/igniter,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/infra,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"fR" = (/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"fS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"fT" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/labaccess) +"fU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toolstorage) +"fV" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fW" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/igniter,/obj/item/weapon/storage/backpack,/turf/station/floor,/area/toolstorage) +"fX" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fY" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fZ" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"ga" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/timer,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gb" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toolstorage) +"gc" = (/turf/station/wall,/area/oxygen_storage) +"gd" = (/turf/station/wall,/area/hallways/eastairlock) +"ge" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"gf" = (/obj/stool/chair,/turf/station/floor,/area/hallways/eastairlock) +"gg" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/eastairlock) +"gh" = (/turf/station/floor,/area/hallways/eastairlock) +"gi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/eastairlock) +"gj" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"gk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"gl" = (/obj/grille,/turf/station/floor{oxygen = 0},/area) +"gm" = (/turf/station/wall,/area/medical) +"gn" = (/obj/window{dir = 1},/obj/window,/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"go" = (/turf/station/wall,/area/toxinlab) +"gp" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"gq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall) +"gr" = (/turf/station/floor,/area/hallways/centralhall) +"gs" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/centralhall) +"gt" = (/turf/station/wall,/area/hallways/centralhall) +"gu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall) +"gv" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/hallways/eastairlock) +"gw" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/hallways/eastairlock) +"gx" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/hallways/eastairlock) +"gy" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/medical) +"gz" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/medical) +"gA" = (/obj/window{dir = 4},/obj/closet/wardrobe/white,/turf/station/floor,/area/medical) +"gB" = (/obj/secloset/medical1,/turf/station/floor,/area/medical) +"gC" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/medical) +"gD" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/pen,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/medical) +"gE" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/clipboard,/turf/station/floor,/area/medical) +"gF" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/machinery/camera{c_tag = "Medical Bay"},/turf/station/floor,/area/medical) +"gG" = (/obj/table{icon_state = "alone"},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/medical) +"gH" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/medical) +"gI" = (/obj/table{icon_state = "sides"},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/medical) +"gJ" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/medical) +"gK" = (/obj/machinery/alarm{pixel_y = 32},/obj/closet/wardrobe/white,/turf/station/floor,/area/toxinlab) +"gL" = (/obj/closet/l3closet,/turf/station/floor,/area/toxinlab) +"gM" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/toxinlab) +"gN" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/toxinlab) +"gO" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/toxinlab) +"gP" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/toxinlab) +"gQ" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/machinery/camera{c_tag = "Medical Lab"},/turf/station/floor,/area/toxinlab) +"gR" = (/obj/secloset/medical1,/turf/station/floor,/area/toxinlab) +"gS" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/pen,/obj/item/weapon/clipboard,/turf/station/floor,/area/toxinlab) +"gT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/dropper,/turf/station/floor,/area/toxinlab) +"gU" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/toxinlab) +"gV" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/toxinlab) +"gW" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toxinlab) +"gX" = (/obj/machinery/alarm,/turf/station/floor,/area/hallways/labaccess) +"gY" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/labaccess) +"gZ" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/centralhall) +"ha" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/eastairlock) +"hb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"hc" = (/obj/morgue,/turf/station/floor,/area) +"hd" = (/obj/machinery/freezer,/turf/station/floor,/area/medical) +"he" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/medical) +"hf" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/medical) +"hg" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hh" = (/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/medical) +"hi" = (/turf/station/floor,/area/medical) +"hj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medical) +"hk" = (/obj/stool/chair,/turf/station/floor,/area/medical) +"hl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"hm" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/toxinlab) +"hn" = (/turf/station/floor,/area/toxinlab) +"ho" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toxinlab) +"hp" = (/obj/stool/chair,/turf/station/floor,/area/toxinlab) +"hq" = (/obj/machinery/camera{dir = 4; c_tag = "Central Hallway"},/turf/station/floor,/area/hallways/labaccess) +"hr" = (/turf/station/r_wall,/area/hallways/centralhall) +"hs" = (/turf/station/r_wall,/area/hallways/eastairlock) +"ht" = (/obj/machinery/camera{dir = 8; c_tag = "Assembly Room"},/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/hallways/eastairlock) +"hu" = (/obj/window{dir = 4},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hv" = (/obj/item/weapon/radio,/turf/station/floor,/area/medical) +"hw" = (/obj/item/weapon/ointment,/turf/station/floor,/area/medical) +"hx" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hy" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/centralhall) +"hz" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"hA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/oxygen_storage) +"hB" = (/obj/machinery/dispenser,/turf/station/floor,/area/oxygen_storage) +"hC" = (/obj/machinery/dispenser,/obj/machinery/camera{c_tag = "Toxin Gas Storage"},/turf/station/floor,/area/oxygen_storage) +"hD" = (/turf/station/floor,/area/oxygen_storage) +"hE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/oxygen_storage) +"hF" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/oxygen_storage) +"hG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"hH" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"hI" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"hJ" = (/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"hK" = (/obj/machinery/sleeper,/turf/station/floor,/area/medical) +"hL" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/medical) +"hM" = (/obj/start{name = "Medical Doctor"},/turf/station/floor,/area/medical) +"hN" = (/obj/item/weapon/brutepack,/turf/station/floor,/area/medical) +"hO" = (/obj/machinery/firealarm{pixel_x = 32},/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hP" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"hQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"hR" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"hS" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toxinlab) +"hT" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/toxinlab) +"hU" = (/obj/window,/obj/secloset/medical2,/turf/station/floor,/area/toxinlab) +"hV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window,/turf/station/floor,/area/toxinlab) +"hW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/toxinlab) +"hX" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/toxinlab) +"hY" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"hZ" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"ia" = (/obj/stool/chair{dir = 1},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"ib" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"ic" = (/obj/landmark{name = "CTF-supply-Medical"},/turf/station/floor,/area/medical) +"id" = (/obj/machinery/door/window,/turf/station/floor,/area/medical) +"ie" = (/obj/landmark{name = "CTF-base-Medical"},/turf/station/floor,/area/medical) +"if" = (/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"ig" = (/obj/window{dir = 4},/obj/secloset/animal,/turf/station/floor,/area/toxinlab) +"ih" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/machinery/dna_scanner,/turf/station/floor,/area/toxinlab) +"ii" = (/obj/window{dir = 1},/obj/machinery/scan_console,/turf/station/floor,/area/toxinlab) +"ij" = (/obj/window{dir = 1},/obj/machinery/computer/dna,/turf/station/floor,/area/toxinlab) +"ik" = (/obj/window{dir = 1},/obj/machinery/restruct,/turf/station/floor,/area/toxinlab) +"il" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"im" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"in" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"io" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"ip" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"iq" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/window{dir = 4},/turf/station/floor,/area/medical) +"ir" = (/obj/start{name = "Medical Assistant"},/turf/station/floor,/area/medical) +"is" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/medical) +"it" = (/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/medical) +"iu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/toxinlab) +"iv" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/toxinlab) +"iw" = (/obj/window,/turf/station/floor,/area/toxinlab) +"ix" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area/toxinlab) +"iy" = (/obj/start{name = "Medical Researcher"},/obj/window,/turf/station/floor,/area/toxinlab) +"iz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window,/turf/station/floor,/area/toxinlab) +"iA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"iB" = (/obj/machinery/door/window,/turf/station/floor,/area/toxinlab) +"iC" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/toxinlab) +"iD" = (/obj/machinery/firealarm{pixel_x = 32},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"iE" = (/obj/watertank,/turf/station/floor,/area/oxygen_storage) +"iF" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/eastairlock) +"iG" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"iH" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"iI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/medical) +"iJ" = (/obj/machinery/alarm{pixel_y = -32},/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/medical) +"iK" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/medical) +"iL" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/toxinlab) +"iM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area/toxinlab) +"iN" = (/obj/window{dir = 8},/obj/window{dir = 1},/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/toxinlab) +"iO" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"iP" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/toxinlab) +"iQ" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/centralhall) +"iR" = (/obj/start{name = "Research Technician"},/turf/station/floor,/area/hallways/centralhall) +"iS" = (/obj/machinery/door/airlock,/turf/station/floor,/area) +"iT" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/eastairlock) +"iU" = (/obj/closet,/turf/station/floor,/area/hallways/eastairlock) +"iV" = (/obj/landmark{name = "CTF-wardrobe-Medical"},/turf/station/floor,/area/medical) +"iW" = (/obj/window{dir = 4},/turf/station/floor,/area/medical) +"iX" = (/obj/stool/bed,/turf/station/floor,/area/medical) +"iY" = (/obj/stool/bed,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/medical) +"iZ" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/medical) +"ja" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/medical) +"jb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "gooddoggytreat"; desc = "Monkey in Med. Lab."; special = 3},/turf/station/floor,/area/toxinlab) +"jc" = (/obj/window{dir = 8},/obj/machinery/firealarm{pixel_y = -32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/toxinlab) +"jd" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/toxinlab) +"je" = (/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/toxinlab) +"jf" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/toxinlab) +"jg" = (/obj/start{name = "Research Assistant"},/turf/station/floor,/area/hallways/centralhall) +"jh" = (/turf/station/wall,/area/testlab1) +"ji" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/l3closet,/turf/station/floor,/area/testlab1) +"jj" = (/turf/station/floor,/area/testlab1) +"jk" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/testlab1) +"jl" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/pen,/turf/station/floor,/area/testlab1) +"jm" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/testlab1) +"jn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/heater,/turf/station/floor,/area/testlab1) +"jo" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area) +"jp" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"jq" = (/obj/machinery/door/window{dir = 8},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"jr" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/toxinlab) +"js" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/toxinlab) +"jt" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/toxinlab) +"ju" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/toxinlab) +"jv" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/toxinlab) +"jw" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/toxinlab) +"jx" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/centralhall) +"jy" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/centralhall) +"jz" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/testlab1) +"jA" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/testlab1) +"jB" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"jC" = (/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jD" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jE" = (/obj/machinery/alarm{pixel_y = 32},/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jF" = (/obj/machinery/computer/card,/turf/station/floor,/area/hallways/loungehall) +"jG" = (/turf/station/floor,/area/hallways/loungehall) +"jH" = (/obj/closet/emcloset,/turf/station/floor,/area/hallways/loungehall) +"jI" = (/turf/station/wall,/area/hallways/loungehall) +"jJ" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/hallways/loungehall) +"jK" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"jL" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/testlab1) +"jM" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/testlab1) +"jN" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/eastairlock) +"jO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/crew_quarters) +"jP" = (/turf/station/floor,/area/crew_quarters) +"jQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/crew_quarters) +"jR" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/crew_quarters) +"jS" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/loungehall) +"jT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/loungehall) +"jU" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/hallways/loungehall) +"jV" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"jW" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/hallways/loungehall) +"jX" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/hallways/loungehall) +"jY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/loungehall) +"jZ" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"ka" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/loungehall) +"kb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/testlab1) +"kc" = (/obj/start{name = "Toxin Researcher"},/turf/station/floor,/area/testlab1) +"kd" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/eastairlock) +"ke" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/crew_quarters) +"kf" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/hallways/loungehall) +"kg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/loungehall) +"kh" = (/obj/machinery/camera{dir = 8; c_tag = "Toxin Research Lab"},/turf/station/floor,/area/testlab1) +"ki" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/eastairlock) +"kj" = (/turf/station/wall,/area/crew_quarters) +"kk" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/crew_quarters) +"kl" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/loungehall) +"km" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/labaccess) +"kn" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/watertank,/turf/station/floor,/area/testlab1) +"ko" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/crew_quarters) +"kp" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/hallways/loungehall) +"kq" = (/turf/station/r_wall,/area/hallways/labaccess) +"kr" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/security) +"ks" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab1) +"kt" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/testlab1) +"ku" = (/turf/station/r_wall,/area/testlab1) +"kv" = (/obj/table{icon_state = "alone"},/turf/station/floor,/area/crew_quarters) +"kw" = (/obj/rack,/obj/item/weapon/clothing/under/blue,/obj/item/weapon/radio/headset,/turf/station/floor,/area/crew_quarters) +"kx" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"ky" = (/turf/station/floor,/area/lounge) +"kz" = (/obj/watertank,/turf/station/floor,/area/lounge) +"kA" = (/obj/secloset/security1,/turf/station/floor,/area/security) +"kB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clipboard,/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/security) +"kC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/machinery/recharger,/obj/item/weapon/clothing/glasses/thermal,/turf/station/floor,/area/security) +"kD" = (/obj/secloset/security2,/turf/station/floor,/area/security) +"kE" = (/obj/window{dir = 4},/turf/station/floor,/area/security) +"kF" = (/turf/station/floor,/area/security) +"kG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"kH" = (/obj/machinery/firealarm{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"kI" = (/turf/station/r_wall,/area/security) +"kJ" = (/obj/machinery/injector{dir = 1},/turf/station/wall,/area/testlab1) +"kK" = (/obj/grille,/obj/window{dir = 8},/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/testlab1) +"kL" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/testlab1) +"kM" = (/obj/closet/emcloset,/turf/station/floor,/area/shuttle_airlock) +"kN" = (/turf/station/floor,/area/shuttle_airlock) +"kO" = (/obj/landmark{name = "Nuclear-Closet"},/turf/station/floor,/area/shuttle_airlock) +"kP" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/floor,/area/shuttle_airlock) +"kQ" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/crew_quarters) +"kR" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/crew_quarters) +"kS" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/lounge) +"kT" = (/obj/stool,/turf/station/floor,/area/lounge) +"kU" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/lounge) +"kV" = (/obj/landmark{name = "CTF-wardrobe-Lounge"},/turf/station/floor,/area/lounge) +"kW" = (/turf/station/wall,/area/aircontrol) +"kX" = (/obj/machinery/door/airlock{r_air = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/aircontrol) +"kY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/security1,/turf/station/floor,/area/security) +"kZ" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/security) +"la" = (/obj/start{name = "Forensic Technician"},/turf/station/floor,/area/security) +"lb" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"lc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"ld" = (/obj/table,/obj/item/weapon/game_kit,/turf/station/floor,/area/security) +"le" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"lf" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 2},/turf/station/floor,/area/testlab1) +"lg" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"lh" = (/obj/machinery/alarm{pixel_x = 32},/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"li" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"lj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/shuttle_airlock) +"lk" = (/obj/closet/wardrobe,/turf/station/floor,/area/crew_quarters) +"ll" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/mixed,/turf/station/floor,/area/crew_quarters) +"lm" = (/obj/closet/wardrobe/mixed,/turf/station/floor,/area/crew_quarters) +"ln" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "alone"},/obj/bedsheetbin,/turf/station/floor,/area/crew_quarters) +"lo" = (/obj/closet,/turf/station/floor,/area/crew_quarters) +"lp" = (/obj/machinery/firealarm{pixel_x = 32},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/crew_quarters) +"lq" = (/obj/machinery/camera{dir = 4; c_tag = "Lounge/Meeting Area"},/turf/station/floor,/area/lounge) +"lr" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/wirecutters,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/lounge) +"ls" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/pen,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/lounge) +"lt" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airintake) +"lu" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"lv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lx" = (/turf/station/floor,/area/aircontrol) +"ly" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/aircontrol) +"lz" = (/turf/station/r_wall,/area/aircontrol) +"lA" = (/obj/start{name = "Security Officer"},/turf/station/floor,/area/security) +"lB" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lD" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/security) +"lE" = (/obj/item/weapon/bedsheet,/turf/station/floor,/area/security) +"lF" = (/obj/stool/bed,/turf/station/floor,/area/security) +"lG" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/testlab1) +"lH" = (/obj/machinery/door/airlock,/turf/station/floor,/area/testlab1) +"lI" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"lJ" = (/obj/landmark{name = "CTF-rogue"},/turf/station/floor,/area/shuttle_airlock) +"lK" = (/obj/landmark{name = "Nuclear-Bomb"},/turf/station/floor,/area/shuttle_airlock) +"lL" = (/obj/machinery/camera{dir = 4; c_tag = "Crew Sleeping Area"},/turf/station/floor,/area/sleep_area) +"lM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/sleep_area) +"lN" = (/turf/station/floor,/area/sleep_area) +"lO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/sleep_area) +"lP" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/sleep_area) +"lQ" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/lounge) +"lR" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/Map,/obj/item/weapon/paper/jobs,/obj/item/weapon/paper/sop,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/lounge) +"lS" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/paper/Map,/obj/item/weapon/paper/sop,/obj/item/weapon/radio/signaler,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/lounge) +"lT" = (/turf/station/floor{oxygen = 0},/area/airintake) +"lU" = (/obj/window{dir = 4},/turf/station/floor{oxygen = 0},/area/airintake) +"lV" = (/obj/machinery/door/airlock{r_air = 1},/turf/station/floor,/area/aircontrol) +"lW" = (/obj/start{name = "Staff Assistant"},/turf/station/floor,/area/security) +"lX" = (/obj/window{dir = 1},/turf/station/floor,/area/security) +"lY" = (/obj/machinery/camera{dir = 4; c_tag = "Prison"},/turf/station/floor,/area/security) +"lZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/bed,/turf/station/floor,/area/security) +"ma" = (/obj/machinery/camera{dir = 4; c_tag = "Shuttle Bay"},/turf/station/floor,/area/shuttle_airlock) +"mb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"mc" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area) +"md" = (/obj/landmark{name = "CTF-supply-Lounge"},/turf/station/floor,/area/lounge) +"me" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/manifest,/turf/station/floor,/area/lounge) +"mf" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/game_kit,/turf/station/floor,/area/lounge) +"mg" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/lounge) +"mh" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airintake) +"mi" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mj" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/aircontrol) +"mk" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/security) +"ml" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/security) +"mm" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/security) +"mn" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/security) +"mo" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/security) +"mp" = (/obj/machinery/sec_lock{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"mq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/testlab1) +"mr" = (/obj/grille,/turf/station/floor,/area/testlab1) +"ms" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab1) +"mt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mu" = (/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mv" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/lounge) +"mw" = (/turf/station/floor,/area/airintake) +"mx" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"my" = (/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"mz" = (/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mA" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/clipboard,/turf/station/floor,/area/security) +"mB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/turf/station/floor,/area/security) +"mC" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/security) +"mD" = (/obj/machinery/computer/security,/turf/station/floor,/area/security) +"mE" = (/obj/machinery/computer/card,/turf/station/floor,/area/security) +"mF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/red,/turf/station/floor,/area/security) +"mG" = (/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"mH" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"mI" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"mJ" = (/obj/grille,/obj/item/weapon/wirecutters,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/turf/station/floor,/area) +"mK" = (/obj/window{dir = 10},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"mL" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"mM" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"mN" = (/obj/machinery/door/window,/turf/station/floor,/area) +"mO" = (/obj/landmark{name = "CTF-base-Lounge"},/turf/station/floor,/area/lounge) +"mP" = (/obj/grille,/turf/station/floor{oxygen = 0},/area/airintake) +"mQ" = (/obj/window{dir = 4},/obj/grille,/turf/station/floor{oxygen = 0},/area/airintake) +"mR" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/aircontrol) +"mS" = (/obj/window{dir = 4},/turf/station/floor,/area) +"mT" = (/obj/machinery/door/firedoor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"mU" = (/obj/window{dir = 8},/turf/station/floor,/area) +"mV" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"mW" = (/obj/window,/turf/station/floor{oxygen = 0},/area/airintake) +"mX" = (/obj/window{dir = 4},/obj/window,/turf/station/floor{oxygen = 0},/area/airintake) +"mY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"mZ" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"na" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"nb" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aircontrol) +"nc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"nd" = (/obj/window{dir = 10},/turf/station/floor,/area/shuttle_airlock) +"ne" = (/obj/machinery/door/airlock,/turf/station/floor,/area/shuttle_airlock) +"nf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"ng" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"nh" = (/obj/machinery/camera{dir = 8; c_tag = "Atmo. Gas Storage"},/turf/station/floor,/area/aircontrol) +"ni" = (/turf/space,/area/shuttle) +"nj" = (/obj/machinery/camera{dir = 4; c_tag = "Disaster Response Center"},/turf/station/floor,/area) +"nk" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/aircontrol) +"nl" = (/obj/landmark{name = "CTF-base-Atmo"},/turf/station/floor,/area/aircontrol) +"nm" = (/obj/landmark{name = "CTF-supply-Atmo"},/turf/station/floor,/area/aircontrol) +"nn" = (/obj/machinery/door/airlock,/turf/station/floor,/area/aircontrol) +"no" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/aircontrol) +"np" = (/obj/machinery/camera{dir = 4; c_tag = "Atmospheric Control Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/aircontrol) +"nq" = (/obj/start{name = "Atmospheric Technician"},/turf/station/floor,/area/aircontrol) +"nr" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/watertank,/turf/station/floor,/area/aircontrol) +"ns" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nt" = (/obj/window{dir = 1},/obj/item/weapon/clothing/mask/gasmask,/turf/station/floor,/area/aircontrol) +"nu" = (/obj/window{dir = 1},/obj/machinery/dispenser,/turf/station/floor,/area/aircontrol) +"nv" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aircontrol) +"nw" = (/obj/machinery/camera{dir = 8; c_tag = "Food Preparation Area"},/turf/station/floor,/area) +"nx" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"ny" = (/obj/window{dir = 1},/turf/station/floor,/area/aircontrol) +"nz" = (/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"nA" = (/obj/window{dir = 4},/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"nB" = (/obj/window{dir = 8},/turf/station/floor,/area/aircontrol) +"nC" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/shoes/orange,/turf/station/floor,/area/aircontrol) +"nD" = (/obj/machinery/door/airlock{r_air = 1; r_engine = 1; r_access = 1},/turf/station/floor,/area) +"nE" = (/obj/machinery/door/window,/turf/station/floor,/area/aircontrol) +"nF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/paper_bin,/turf/station/floor,/area/aircontrol) +"nG" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/aircontrol) +"nH" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/aircontrol) +"nI" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/aircontrol) +"nJ" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area) +"nK" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nL" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"nM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"nN" = (/obj/window{dir = 8},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/aircontrol) +"nO" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/aircontrol) +"nP" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/aircontrol) +"nQ" = (/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"nR" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/turf/station/floor,/area/aircontrol) +"nS" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/turf/station/floor,/area/aircontrol) +"nT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"nU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/aircontrol) +"nV" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area) +"nW" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area) +"nX" = (/obj/machinery/dispenser{o2tanks = 20; pltanks = 0},/turf/station/floor,/area) +"nY" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area) +"nZ" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area) +"oa" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area) +"ob" = (/obj/grille,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"oc" = (/obj/grille,/obj/item/weapon/tank/oxygentank,/turf/station/floor,/area) +"od" = (/obj/machinery/dispenser,/turf/station/floor,/area) +"oe" = (/obj/closet/emcloset,/turf/station/floor,/area) +"of" = (/turf/station/floor{oxygen = 0},/area) +"og" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area) +"oh" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"oi" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area) +"oj" = (/obj/machinery/dna_scanner,/turf/station/floor,/area) +"ok" = (/obj/machinery/scan_console,/turf/station/floor,/area) +"ol" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/animal,/turf/station/floor,/area) +"om" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"on" = (/obj/item/weapon/game_kit,/turf/station/floor,/area) +"oo" = (/obj/machinery/computer/pod{name = "Mass Driver"; dir = 4; id = 5},/turf/station/floor{oxygen = 0},/area) +"op" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area) +"oq" = (/obj/machinery/computer/dna,/turf/station/floor,/area) +"or" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area) +"os" = (/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/turf/station/floor,/area) +"ot" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"ou" = (/obj/machinery/mass_driver{dir = 4; id = 5},/obj/closet,/turf/station/floor{oxygen = 0},/area) +"ov" = (/mob/monkey,/turf/station/floor,/area) +"ow" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) +"ox" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area) +"oy" = (/obj/machinery/restruct,/turf/station/floor,/area) +"oz" = (/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"oA" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area) +"oB" = (/obj/machinery/sleeper,/turf/station/floor,/area) +"oC" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area) +"oD" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/card/id{name = "Zach Licton's ID Card (1>1-0-0)"; access_level = 1; lab_access = 1; engine_access = 0; air_access = 0; registered = "Zach Licton"; assignment = "DNA Researcher"},/obj/item/weapon/pen,/turf/station/floor,/area) +"oE" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"oF" = (/obj/machinery/freezer,/turf/station/floor,/area) +"oG" = (/obj/machinery/pipes/flexipipe,/obj/item/weapon/tank/anesthetic,/turf/station/floor,/area) +"oH" = (/obj/machinery/cryo_cell,/turf/station/floor,/area) +"oI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/under/white,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/shoes/white,/turf/station/floor,/area) +"oJ" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"oK" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area) +"oL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area) +"oM" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"oN" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/r_epil,/turf/station/floor,/area) +"oO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/mob/monkey,/turf/station/floor,/area) +"oP" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/clothing/glasses/regular,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"oQ" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"oR" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"oS" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"oT" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"oU" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"oV" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"oW" = (/obj/sp_start{name = "zjm7891"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"oX" = (/obj/item/weapon/radio/beacon,/obj/sp_start{name = "phoenixman"; desc = "Researcher on Med. Sat."},/turf/station/floor,/area) +"oY" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"oZ" = (/obj/sp_start{name = "exadv1"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pa" = (/obj/sp_start{name = "ryanfs"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pb" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"pc" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area) +"pd" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area) +"pe" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/turf/station/floor,/area) +"pf" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"pg" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area) +"ph" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"pi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/stool/bed,/turf/station/floor,/area) +"pj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/bedsheetbin,/turf/station/floor,/area) +"pk" = (/obj/secloset/personal,/obj/window{dir = 8},/turf/station/floor,/area) +"pl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/secloset/security1{allowed = "Prison Security,Prison Warden,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"pm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/highsec{allowed = "Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"pn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/l3closet,/turf/station/floor,/area) +"po" = (/obj/closet/l3closet,/turf/station/floor,/area) +"pp" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"pq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"pr" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"ps" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"pt" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"pu" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"pv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/locator,/turf/station/floor,/area) +"pw" = (/obj/stool/bed,/turf/station/floor,/area) +"px" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"py" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window{dir = 8},/turf/station/floor,/area) +"pz" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"pA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"pB" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area) +"pC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/dna,/turf/station/floor,/area) +"pD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/obj/window,/turf/station/floor,/area) +"pE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"pF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/obj/window,/turf/station/floor,/area) +"pG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"pH" = (/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"pI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"pJ" = (/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"pK" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"pL" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"pM" = (/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"pN" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"pO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"pP" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"pQ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"pR" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/epilepsy,/obj/item/weapon/pill_canister/cough,/turf/station/floor,/area) +"pS" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/m_pill/superpill,/turf/station/floor,/area) +"pT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/Tourette,/turf/station/floor,/area) +"pU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/syndicate_uplink,/turf/station/floor,/area) +"pV" = (/obj/machinery/recharger,/turf/station/floor,/area) +"pW" = (/obj/closet/wardrobe/white,/turf/station/floor,/area) +"pX" = (/obj/secloset/animal,/turf/station/floor,/area) +"pY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/sleeper,/turf/station/floor,/area) +"pZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"qa" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/floor,/area) +"qb" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area) +"qc" = (/obj/item/weapon/sheet/r_metal,/obj/item/weapon/sheet/r_metal,/turf/station/floor,/area) +"qd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/suit/firesuit,/turf/station/floor,/area) +"qe" = (/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/floor,/area) +"qf" = (/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"qg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"qh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area) +"qi" = (/obj/item/weapon/extinguisher,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"qj" = (/obj/item/weapon/brutepack,/turf/station/floor,/area) +"qk" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/under/orange,/turf/station/floor,/area) +"ql" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area) +"qm" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area) +"qn" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/sleeper,/turf/station/floor,/area) +"qo" = (/obj/item/weapon/card/id{name = "Secret Base Locker Access"; access_level = 0; lab_access = 0; engine_access = 0; air_access = 0; registered = "Secret Base Use Only"; assignment = "Secret Base"},/turf/station/floor,/area) +"qp" = (/obj/secloset/security2{allowed = "Prison Security,Prison Warden,Forensic Technician,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"qq" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"qr" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"qs" = (/obj/item/weapon/ointment,/turf/station/floor,/area) +"qt" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/med_data,/turf/station/floor,/area) +"qu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "exadv1"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qv" = (/obj/sp_start{name = "soraku"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"qx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/brutepack,/turf/station/floor,/area) +"qy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"qz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/cryo_cell,/turf/station/floor,/area) +"qA" = (/obj/item/weapon/disk/nuclear,/turf/station/floor,/area) +"qB" = (/obj/machinery/nuclearbomb{icon_state = "nuclearbomb1"; anchored = 1; extended = 1},/turf/station/floor,/area) +"qC" = (/obj/sp_start{name = "epox"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qD" = (/obj/item/weapon/radio/beacon,/turf/station/floor,/area) +"qE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"qF" = (/obj/item/weapon/storage/firstaid/syringes,/turf/station/floor,/area) +"qG" = (/obj/machinery/computer/security,/turf/station/floor,/area) +"qH" = (/obj/sp_start{name = "thiefjack"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qI" = (/obj/sp_start{name = "expertadvisor"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qJ" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area) +"qK" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area) +"qL" = (/obj/machinery/teleport/station,/turf/station/floor,/area) +"qM" = (/obj/machinery/teleport/hub,/turf/station/floor,/area) +"qN" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area) +"qO" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area) +"qP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"qQ" = (/obj/item/weapon/radio,/turf/station/floor,/area) +"qR" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/ointment,/turf/station/floor,/area) +"qS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"qT" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/bottle/rejuvenators,/turf/station/floor,/area) +"qU" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"qV" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area) +"qW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area) +"qX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/turf/station/floor,/area) +"qY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area) +"qZ" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area) +"ra" = (/obj/watertank,/turf/station/floor,/area) +"rb" = (/obj/weldfueltank,/turf/station/floor,/area) +"rc" = (/obj/secloset/medical1{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"rd" = (/obj/secloset/medical2{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"re" = (/obj/table,/obj/item/weapon/healthanalyzer,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"rf" = (/obj/window,/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"rg" = (/obj/window,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"rh" = (/obj/machinery/computer/pod{id = "sb1"},/turf/station/floor,/area) +"ri" = (/obj/machinery/mass_driver{dir = 4; id = "sb1"},/obj/machinery/pod{dir = 4},/turf/station/engine/floor,/area) +"rj" = (/obj/machinery/door/poddoor{id = "sb1"},/turf/station/engine/floor,/area) +"rk" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/turf/station/floor,/area) +"rl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/turf/station/floor,/area) +"rm" = (/obj/machinery/computer/pod{id = "sb2"},/turf/station/floor,/area) +"rn" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"ro" = (/obj/machinery/mass_driver{dir = 4; id = "sb2"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rp" = (/obj/machinery/door/poddoor{id = "sb2"},/turf/station/engine/floor,/area) +"rq" = (/obj/machinery/computer/pod{id = "sb3"},/turf/station/floor,/area) +"rr" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"rs" = (/obj/machinery/mass_driver{dir = 4; id = "sb3"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rt" = (/obj/machinery/door/poddoor{id = "sb3"},/turf/station/engine/floor,/area) +"ru" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"rv" = (/obj/machinery/computer/pod{id = "sb4"},/turf/station/floor,/area) +"rw" = (/obj/machinery/mass_driver{dir = 4; id = "sb4"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rx" = (/obj/machinery/door/poddoor{id = "sb4"},/turf/station/engine/floor,/area) +"ry" = (/obj/item/weapon/radio/beacon,/turf/space,/area) +"rz" = (/obj/machinery/computer/pod{id = "sb5"},/turf/station/floor,/area) +"rA" = (/obj/machinery/mass_driver{dir = 4; id = "sb5"},/turf/station/engine/floor,/area) +"rB" = (/obj/machinery/door/poddoor{id = "sb5"},/turf/station/engine/floor,/area) +"rC" = (/turf/station/command/wall,/area/supply_station) +"rD" = (/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rE" = (/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rF" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rG" = (/turf/station/command/floor,/area/supply_station) +"rH" = (/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rI" = (/obj/item/weapon/storage/backpack,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rJ" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/command/floor,/area/supply_station) +"rK" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/command/floor,/area/supply_station) +"rL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"rM" = (/obj/grille,/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"rN" = (/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area) +"rO" = (/obj/grille,/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) +"rP" = (/obj/bedsheetbin,/turf/station/command/floor,/area/supply_station) +"rQ" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor,/area/supply_station) +"rR" = (/obj/item/weapon/paper_bin,/obj/item/weapon/game_kit,/turf/station/command/floor,/area/supply_station) +"rS" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/command/floor,/area/supply_station) +"rT" = (/obj/watertank,/turf/station/command/floor,/area/supply_station) +"rU" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rV" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rW" = (/obj/closet/l3closet,/turf/station/command/floor,/area/supply_station) +"rX" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/command/floor,/area/supply_station) +"rY" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/backpack,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor,/area/supply_station) +"rZ" = (/obj/item/weapon/tile,/obj/item/weapon/rods,/turf/station/command/floor,/area/supply_station) +"sa" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"sb" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/command/floor,/area/supply_station) +"sc" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor,/area/supply_station) +"sd" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/command/floor,/area/supply_station) +"se" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sf" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sg" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sh" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"si" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/command/floor,/area/supply_station) +"sj" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/turf/station/command/floor,/area/supply_station) +"sk" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/station/command/floor,/area/supply_station) +"sl" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/disk_kit,/obj/item/weapon/storage/id_kit,/turf/station/command/floor,/area/supply_station) +"sm" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/obj/item/weapon/storage/lglo_kit,/obj/item/weapon/storage/stma_kit,/turf/station/command/floor,/area/supply_station) +"sn" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"so" = (/obj/machinery/dispenser,/turf/station/command/floor,/area/supply_station) +"sp" = (/obj/weldfueltank,/turf/station/command/floor,/area/supply_station) +"sq" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area/supply_station) +"sr" = (/obj/table,/obj/item/weapon/storage/firstaid/syringes,/obj/item/weapon/bottle/toxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/dropper,/turf/station/command/floor,/area/supply_station) +"ss" = (/obj/item/weapon/camera,/turf/station/command/floor,/area/supply_station) +"st" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"su" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor,/area/supply_station) +"sv" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor,/area/supply_station) +"sw" = (/obj/move/wall,/turf/space,/area/vehicles/shuttle1) +"sx" = (/obj/move/floor,/obj/window,/obj/window{dir = 1},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"sy" = (/obj/closet/emcloset,/turf/station/command/floor,/area/supply_station) +"sz" = (/obj/move/floor,/obj/window{dir = 1},/turf/space,/area/vehicles/shuttle1) +"sA" = (/obj/machinery/door/window,/turf/station/command/floor,/area/supply_station) +"sB" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"sC" = (/obj/move/floor,/obj/window{dir = 8},/turf/space,/area/vehicles/shuttle1) +"sD" = (/obj/move/floor,/turf/space,/area/vehicles/shuttle1) +"sE" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/vehicles/shuttle1) +"sF" = (/obj/move/floor,/obj/window{dir = 4},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"sG" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/turf/station/command/floor,/area/supply_station) +"sH" = (/turf/station/command/wall{icon_state = "CCWall2"},/area/supply_station) +"sI" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/vehicles/shuttle1) +"sJ" = (/obj/machinery/door/airlock,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sK" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sL" = (/obj/machinery/computer/teleporter,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sM" = (/obj/machinery/teleport/station,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sN" = (/obj/machinery/teleport/hub,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sO" = (/obj/item/weapon/hand_tele,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sP" = (/obj/move/floor,/obj/machinery/connector{dir = 4},/obj/window{dir = 4},/obj/window,/obj/machinery/atmoalter/canister/oxygencanister,/turf/space,/area/vehicles/shuttle1) +"sQ" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/shuttle/engine/heater,/turf/space,/area/vehicles/shuttle1) +"sR" = (/obj/move/floor,/obj/machinery/connector{dir = 8},/obj/window{dir = 8},/obj/window,/obj/machinery/atmoalter/canister/poisoncanister,/turf/space,/area/vehicles/shuttle1) +"sS" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "6"; dir = 6; p_dir = 6},/turf/space,/area/vehicles/shuttle1) +"sT" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/shuttle/engine/router,/turf/space,/area/vehicles/shuttle1) +"sU" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "10"; dir = 10; p_dir = 10},/turf/space,/area/vehicles/shuttle1) +"sV" = (/obj/machinery/computer/pod{name = "Mass Driver"; id = 50},/turf/station/command/floor,/area/supply_station) +"sW" = (/obj/machinery/mass_driver{dir = 4; id = 50},/obj/machinery/recon{dir = 4},/turf/station/command/floor,/area/supply_station) +"sX" = (/obj/machinery/door/poddoor{id = 50},/turf/station/command/floor,/area/supply_station) +"sY" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 5},/obj/machinery/shuttle/engine/propulsion/burst/left,/turf/space,/area/vehicles/shuttle1) +"sZ" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 1},/obj/machinery/shuttle/engine/propulsion,/turf/space,/area/vehicles/shuttle1) +"ta" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 9},/obj/machinery/shuttle/engine/propulsion/burst/right,/turf/space,/area/vehicles/shuttle1) +"tb" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tc" = (/turf/station/command/wall{icon_state = "CCWall2"},/area) +"td" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor{density = 1},/area) +"te" = (/obj/begin,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tf" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tg" = (/obj/machinery/hologram_proj,/turf/station/command/floor{icon_state = "Floor2"},/area) +"th" = (/turf/station/command/floor{icon_state = "Floor2"},/area) +"ti" = (/turf/station/command/floor{icon_state = "Floor2"},/area/start) +"tj" = (/obj/machinery/computer/hologram_comp,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tk" = (/obj/machinery/door/airlock,/turf/station/command/floor,/area/supply_station) +"tl" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor,/area/supply_station) +"tm" = (/obj/move/wall,/turf/space,/area/shuttle) +"tn" = (/obj/move/floor,/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle) +"to" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle) +"tp" = (/obj/move/floor,/obj/machinery/sleeper,/turf/space,/area/shuttle) +"tq" = (/obj/move/floor,/obj/machinery/computer/sleep_console,/turf/space,/area/shuttle) +"tr" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"ts" = (/obj/move/floor,/obj/move/wall,/turf/space,/area/shuttle) +"tt" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tu" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/space,/area/shuttle) +"tv" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tw" = (/obj/move/floor,/turf/space,/area/shuttle) +"tx" = (/obj/move/floor,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"ty" = (/obj/move/floor,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle) +"tz" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle) +"tA" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tB" = (/obj/move/floor,/obj/machinery/door/window,/turf/space,/area/shuttle) +"tC" = (/obj/move/floor,/obj/stool/chair{dir = 4},/turf/space,/area/shuttle) +"tD" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/turf/space,/area/shuttle) +"tE" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle) +"tF" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tG" = (/obj/move/floor,/obj/machinery/computer/shuttle,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tH" = (/obj/move/floor,/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle) +"tI" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/turf/space,/area/shuttle) +"tJ" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"tK" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tL" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tM" = (/turf/station/shuttle/wall,/area) +"tN" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/shuttle/floor,/area) +"tO" = (/obj/move/floor,/obj/shuttle/door,/turf/station/shuttle/floor,/area) +"tP" = (/obj/machinery/sleeper,/turf/station/shuttle/floor,/area) +"tQ" = (/obj/machinery/computer/sleep_console,/turf/station/shuttle/floor,/area) +"tR" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"tS" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"tT" = (/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/station/shuttle/floor,/area) +"tU" = (/turf/station/shuttle/floor,/area) +"tV" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"tW" = (/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/shuttle/floor,/area) +"tX" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/station/shuttle/floor,/area) +"tY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"tZ" = (/obj/machinery/door/window,/turf/station/shuttle/floor,/area) +"ua" = (/obj/stool/chair{dir = 4},/turf/station/shuttle/floor,/area) +"ub" = (/obj/table,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/rejuvenators,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uc" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/shuttle/floor,/area) +"ud" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/shuttle/floor,/area) +"ue" = (/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uf" = (/obj/window{dir = 4},/obj/item/weapon/a_gift,/turf/station/shuttle/floor,/area) +"ug" = (/obj/machinery/door/window{dir = 1},/turf/station/shuttle/floor,/area) +"uh" = (/obj/table,/obj/item/weapon/radio,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"ui" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"uj" = (/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"uk" = (/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"ul" = (/turf/station/command/wall/other,/area) +"um" = (/obj/secloset/medical1,/turf/station/command/floor/other,/area) +"un" = (/obj/secloset/medical2,/turf/station/command/floor/other,/area) +"uo" = (/obj/secloset/animal,/turf/station/command/floor,/area) +"up" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area) +"uq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area) +"ur" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area) +"us" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor/other,/area) +"ut" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/healthanalyzer,/obj/item/weapon/dropper,/turf/station/command/floor/other,/area) +"uu" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/command/floor/other,/area) +"uv" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/syringes,/turf/station/command/floor/other,/area) +"uw" = (/turf/station/command/floor/other,/area) +"ux" = (/turf/station/command/floor,/area) +"uy" = (/obj/stool/chair,/turf/station/command/floor/other,/area) +"uz" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/command/floor/other,/area) +"uA" = (/obj/morgue,/turf/station/command/floor/other,/area) +"uB" = (/obj/machinery/sleeper,/turf/station/command/floor,/area) +"uC" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor{icon_state = "Floor2"},/area) +"uD" = (/obj/stool/chair{dir = 4},/turf/station/command/floor/other,/area) +"uE" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"uF" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Infirmary"},/turf/station/command/floor,/area) +"uG" = (/obj/start{name = "Prison Doctor"},/turf/station/command/floor{icon_state = "Floor2"},/area) +"uH" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"uI" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor,/area) +"uJ" = (/obj/table{icon_state = "sides"; dir = 8},/turf/station/command/floor/other,/area) +"uK" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/command/floor/other,/area) +"uL" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/command/floor/other,/area) +"uM" = (/obj/stool/chair{dir = 8},/turf/station/command/floor/other,/area) +"uN" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/stma_kit,/turf/station/command/floor/other,/area) +"uO" = (/obj/table{icon_state = "corners"; dir = 10},/turf/station/command/floor/other,/area) +"uP" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area) +"uQ" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area) +"uR" = (/obj/closet/wardrobe/white,/turf/station/command/floor,/area) +"uS" = (/obj/closet/wardrobe/white,/turf/station/command/floor/other,/area) +"uT" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor/other,/area) +"uU" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/lglo_kit,/turf/station/command/floor/other,/area) +"uV" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Recreation Area (West)"},/turf/station/command/floor/other,/area) +"uW" = (/obj/stool/chair{dir = 1},/turf/station/command/floor/other,/area) +"uX" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Recreation Area (East)"},/turf/station/command/floor/other,/area) +"uY" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"uZ" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor/other,/area) +"va" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/command/floor/other,/area) +"vb" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor/other,/area) +"vc" = (/obj/machinery/door/window{dir = 8},/turf/station/command/floor/other,/area) +"vd" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"ve" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"vf" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/command/floor/other,/area) +"vg" = (/obj/secloset/security1,/turf/station/command/floor/other,/area) +"vh" = (/obj/machinery/computer/security{name = "security- PS13"; network = "PS13"},/turf/station/command/floor/other,/area) +"vi" = (/obj/secloset/security2,/obj/machinery/camera{network = "PS13"; c_tag = "Security Office"},/turf/station/command/floor/other,/area) +"vj" = (/obj/secloset/security2,/turf/station/command/floor/other,/area) +"vk" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area) +"vl" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor/other,/area) +"vm" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area) +"vn" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vo" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"vp" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/command/floor/other,/area) +"vq" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/turf/station/command/floor/other,/area) +"vr" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"vs" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 1; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"vt" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"vu" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor/other,/area) +"vv" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area) +"vw" = (/obj/start{name = "Prison Security"},/turf/station/command/floor/other,/area) +"vx" = (/obj/table{icon_state = "alone"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area) +"vy" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area) +"vz" = (/obj/table{icon_state = "sides"; dir = 1},/turf/station/command/floor/other,/area) +"vA" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vB" = (/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"vC" = (/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/command/floor/other,/area) +"vD" = (/obj/secloset/animal,/turf/station/command/floor/other,/area) +"vE" = (/obj/bedsheetbin,/turf/station/command/floor/other,/area) +"vF" = (/obj/secloset/personal,/turf/station/command/floor/other,/area) +"vG" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vH" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor/other,/area) +"vI" = (/obj/closet,/turf/station/command/floor/other,/area) +"vJ" = (/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area) +"vK" = (/obj/stool/bed,/turf/station/command/floor/other,/area) +"vL" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"vM" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vN" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 2},/turf/station/command/floor/other,/area) +"vO" = (/obj/machinery/sec_lock{pixel_x = 32},/turf/station/command/floor/other,/area) +"vP" = (/obj/closet/wardrobe/orange,/turf/station/command/floor/other,/area) +"vQ" = (/obj/table{icon_state = "sides"; dir = 4},/turf/station/command/floor/other,/area) +"vR" = (/obj/table{icon_state = "alone"},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area) +"vS" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 1},/turf/station/command/floor/other,/area) +"vT" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/command/floor/other,/area) +"vU" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Solitary Cells"},/turf/station/command/floor/other,/area) +"vV" = (/obj/grille,/turf/space,/area) +"vW" = (/obj/machinery/computer/data/weapon/log,/turf/station/floor,/area) +"vX" = (/turf/station/floor/grid,/area) +"vY" = (/obj/machinery/computer/data/weapon/info,/turf/station/floor,/area) +"vZ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"wa" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"wb" = (/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wc" = (/obj/closet/wardrobe,/turf/station/command/floor/other,/area) +"wd" = (/obj/closet/wardrobe/mixed,/turf/station/command/floor/other,/area) +"we" = (/obj/table{icon_state = "sides"; dir = 2},/turf/station/command/floor/other,/area) +"wf" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio{suffix = "\[2]"; freq = 144.9},/turf/station/command/floor/other,/area) +"wg" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Courtroom"},/turf/station/command/floor/other,/area) +"wh" = (/obj/window{dir = 10},/turf/station/command/floor/other,/area) +"wi" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"wj" = (/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"wk" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"wl" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"wm" = (/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area) +"wn" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"wo" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wp" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper,/turf/station/command/floor/other,/area) +"wq" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Witness Prep Area"},/turf/station/command/floor/other,/area) +"wr" = (/obj/start{name = "Prison Warden"},/turf/station/command/floor/other,/area) +"ws" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"wt" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/sop,/turf/station/command/floor/other,/area) +"wu" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Warden's Office"},/turf/station/command/floor/other,/area) +"wv" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/command/floor/other,/area) +"ww" = (/obj/table,/obj/machinery/recharger,/turf/station/command/floor/other,/area) +"wx" = (/obj/rack,/obj/item/weapon/clothing/under/green,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/head/helmet,/turf/station/command/floor/other,/area) +"wy" = (/obj/machinery/door/airlock,/turf/station/command/floor/other,/area) +"wz" = (/obj/move/wall{icon_state = "wall2"},/turf/space,/area/shuttle_prison) +"wA" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle_prison) +"wB" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"wC" = (/turf/space,/area/shuttle_prison) +"wD" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"wE" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair,/turf/space,/area/shuttle_prison) +"wF" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/grille,/turf/space,/area/shuttle_prison) +"wG" = (/obj/move/floor{icon_state = "floor2"},/turf/space,/area/shuttle_prison) +"wH" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wI" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wJ" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wK" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle_prison) +"wL" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle_prison) +"wM" = (/obj/move/floor{icon_state = "floor2"},/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"wN" = (/obj/move/floor{icon_state = "floor2"},/obj/grille,/turf/space,/area/shuttle_prison) +"wO" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair{dir = 4},/turf/space,/area/shuttle_prison) +"wP" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window,/turf/space,/area/shuttle_prison) +"wQ" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/bottle/s_tox,/turf/space,/area/shuttle_prison) +"wR" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle_prison) +"wS" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/turf/space,/area/shuttle_prison) +"wT" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/computer/prison_shuttle,/turf/space,/area/shuttle_prison) +"wU" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle_prison) +"wV" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/obj/item/weapon/gun/energy/taser_gun,/turf/space,/area/shuttle_prison) +"wW" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wX" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wY" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/orange,/turf/space,/area/shuttle_prison) +"wZ" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafacagahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalamahanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeapaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasatacauasacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafacacacaxahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayazaAazaAazaAayaBaCaBaBaBaBaDazaAazaAazaAacacacacasacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaEaFaFaFaFaGaFaHaHaHaHaHaHaHacacacaIahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaJaJaJaJaJaJaJaJaJaKaJaJaJaJaJaJaJaJaJaJaJaJaLaeaEaMaNaFaOaNaMaHaPaQaRaRaRaRacacacacahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaSaeawaTawaUawawaTawawawawaTawawaUawawaTawawawaTaVaeaWaWaWaWaWaWaWaXaYaZaZaZbaaZacalbbacahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebcaeawaJaJaJaJaJaJaJbdaJaJaJaJaJaJaJbdaJaJaJaJaJawaeaWbebfbfbfbgbhaXbiaZaZaZaYaZacahahacahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjaebkaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebjaeaWbebfbfbfblbmaXbnbnbnbobpbqacahbracbsacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaebjbtbtbtbuawbvbtbwbxbxbxaTbybybzbtbAbAbBbBaebCaeaWbDbfbfbgbEbEaXbFaZaZaZbaaHacahahahahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaSaeawawaUbjawawawbtawawawawawawawawbtawawawawaebGaeaWbDbfbfbfbHbEaXbIaZaZaZaYbJbKahahalatacavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeawawawbjawbLawbMawawawawawawawawbtbNawawaTawawaeaWbDbfbObPbHbQaXbRbSbRbRbRaHacacacacacacaBaBbTbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawbVawawawbjawawaTbtawawawawawawawawbMawawawawawawbVbWbXbXbYbZbYcaaXcbaZaZaZaZcccdcecfcgchcicjckclcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebtcnbtbtbjbjbjbtaUcocpcqcpawcrcsbtctcucucvawcwaeaWcxbEcybEbHczaXcAaZaZaZaZcBaZcCcCcCcCcCcCcDcEcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecFawawbMawawcGbtbtbtbtbtbtcHcHcHbtbtcHcHcHcHaeaeaWbEcIcJczbHcKaXbRcLbRbRbRcMaZaZbaaZaZaZaYcNcOcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecFawbBbtawawawcPawawcQawcRcScScScScScScScScSaeaaaWcTcUbYbXbYbXaXaZaZaZaZaZcVaZaZcWcXcYcZaZdadbcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecFawbBbtdcawawbtbCawddaJdecScScScScScScScScSaedfdfdfdfdfdfdfdfaXdgbaaZaYaZdhaZaZaYaZaZaZbadidbcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebtdjbtbtdkaUawbtbCawawaJdlcScScScScScScScScSaedmdndndodpdqdrdsaHdtaZaZaZaZdhdudvaZdwdwdwdwdxdycmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedzdAdBbtawawawbtbCawawdCdDcScScScScScScScScSaedmdEdFdGdHdHdHdIaHaHaHbJaHbacBdJdKdLdMdNdOdPdQdRcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSdSdSdSaedTdUdVbtawawaTbtdWdXdYdZeacScScScScScScScScSaedmebdGecdGdGedeeefefefegefefefeheiejeieieiaBaBaBekaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelemeneoepdSaeaeaeaeaebjbtbtbtbtbtbtbteqeqeresetesbteueueuaedmdmevdmewewewewefexeyeyeyezefeheiejeieieiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSeAeBdSaBaBaBaBaedjbtbtbtbtbtbtbteCbtbtawawawaeaeaeaeaeefeDeyeyeyeyeyeyeEeyeyeyeyeyefeheFeGeGeHeiaBeIaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeJeKeneoeLdSeMeNeOaBaeawbtePeQeQeQeReQeQeCeSawawawaeeTeTeTeTeTeUeyeyeyeyeyeyefeyeyeyeyeyefeheVeGeGeWeiaBeIaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSeXeAeYeZaFfafbbVawbteQeQeQeQeQeQeQbtbtawawaUaeeTfcfdfdfeeyeyeyeyeyeyezefeUeyeyeyeyefehffeGfgeWeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhfieneBfjdSfkaFfaaBaeawbtflflflflflflflbtbwawawawaeeTfdfdfdeTefefegefefefefefefefefefefefeheVeGeGeWeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSeAeodSfaaFeZaBaeawbtbtbtbtbtbtbtbtbtawawawbNaeeTfmfdfneTfofpfqfrfsftfufvfwfwfwfwfreGeifxeGeGfyeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafzfAeneBfBdSfaeZfCaBaeawawaUaTawawawawbjcPawawaTfDaeeTfdfdfdeTfEfFfGfHfIfJfKfLfMfNfOfPfreGeifQfRfRfSeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSdSdSdSaBaBaBaBaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeeTfTfTfTeTfEfUfVfWfXfpfYfZgafwfwfwfreGeieieieieieiaBaBaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaaaaaaaaaBaaaFaaaaaFaaaaaFaaaaaFaaaaaFaaaaeTfdfdfdeTfrfrgbeTgcgcgcgcgcgcgcgcgcgcgdgegfggghgigjgkaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagmgngngngngmgmgmgmgmgmgmgmgmgmgogogogogogogogogogogogogogoeTeTgpfdfdeTgqgrgrgsgtgqgrgrgrgrgrgrgugrgdgvgwgxgfghgjgjaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBgmgygzgzgzgAgBgCgDgEgFgGgHgIgJgogKgLgMgNgOgPgQgRgSgTgUgVgWeTgXfdfdfdgYgrgrgrgrgZgugrgrgrgrgrgrgqgrhaggghgighgggjhbaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcfagmgyhdhehfhghhhihjhihihkhihlhihmhnhnhohnhnhnhohnhnhohnhphpeThqfdfdfdeTgugrgrgrhrhrhrhrhrhrhrhrhrhrhsghghghghghghhtaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhceZhihihihjhihuhihihihihihvhihwhxhmhnhnhnhnhnhnhnhnhnhnhnhnhoeTfdfdfdfdeTgtgtgthyhrhzhAhBhBhChDhDhEhFhshGhHgghIgehJggaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcaFgmhKhLhihihuhihihihihMhwhNhihOhmhPhQhnhnhRhShThUhVhnhnhWhXeTfmfdfdgpeTgsgrgrgrhrhYhDhDhDhDhDhFhZhFhsiaibghibibhJghaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcfahihihiichiidhihiiehihihihihihxgogogoifififhnhnigihiiijikileTeTfTfTeTeTgugrgrgrhrhYimhZhZhDhDhFinhFhsggghgighggioipaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcaFgmhKhLhihiiqhihihlirhihihjhwisitiuiviwixiyiziAiBhnhnhohniCeTfmfdfdiDeTgqgrgrgrhriEhFhFhFhDhDhFhZhFhsgdiFiGgdgdgdgdaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcfahihihihjhiiHiIhlhjhlhihihiiJiKgmiLgoiAhoiAiMiNiOiAhnhniAiPeTfdfdfdfdgtiQiRgrgrhrhrhraEaEiSaEaEaEaEhshsiTiTgdiUiUiUaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhceZgmhKhLiViViWiXiXiYiZaBjajaaBaBaBaBgoiMiAiMjbjcjdhnhnhnjejfeTfdfdfdfdgtgrgrjggrgrgqhrjhjijjjjjkjljmjnhsghghghghghghaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBjojojpjqjojoaBaBgogogogogogojrjsjtjujvjweTfdfdfdfdjxgrgrgrgrgrgrjyjzjjjjjjjAjjjjjjhsjBghghgighghaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjCjCjCjCjCjDjCjCjEjCaBjFjGjGjGjHjHjIjJjKjIjIjIjIjIeTeTeTeTeTeTeTfdfdfdfdgtgrgrgrgugrgrhrjhjLjjjjjjjjjMjhhsgdggghghjNjNaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjOjPjPjQjPjPjPjPjOjRaBjGjSjGjTjGjUjIjTjGjGjVjWjXjIjYjTjZjGjSkafdgpfdfdfmgtgugrgrgrgrgqhrjhkbjjjjkcjjjjjzkdiTghghggjNjNaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjQjPjPjOjPjPjPjPjQjPkejGjGjGjGjGkfjIjGjGjGjGjSjIjIkgjGjGjGjGkafdfdfdfdfdaBaBaBaBaBaBaBaBjhjjjjjjjjjjkhjhhsgdgighghkikiaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPkjkjkjkkkjkjkjkkaBjGjGjTjGjSjGkljSjGjGjTjGkajGjSjGjGjGjTkafdfdfmkmfdaBavavavavavavaEjhjzjhjjjjjjjjknhsgdiTgdghkikiaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPkjkojOjQkjkojOjQaBkpkpkpkpkpkpaBjGjGjGjGjGkajGjGjGjGkqkqkqkqkqkqkrkqaEaEaBaBaBaBaBaEjhjjjhjjksjjktkuhsgdiFgdgdgdgdaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPkjkvjCkwkjkvjCkwaBkxkxkxkykykzaBjSjGjGjGjTkajGjTjGjSkqkAkBkCkDkEkFkGkHkIkIkIkIaEaBaEjhjjjhkJkKkLkLaEkMkMkNkNkOkNkPaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkQkRkjkjkjkjkjkjkjkjaBkykSkTkTkUkVkWjIjIjIjIjIjIjIkWkXkWkqkYkZkGlalblckFkEkIldkFleaEavaEjhlfjhjjlglglhaElikNkNkNkNkNljaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPlklllmlmlnlololpaBlqkTlrlskTkVkWltltltltlulvlwkWlxlylzkAkFlAkFlBkFkGlClDkGlElFaEavaElGkblHjjjjjjjjaElIkNkNlJkNlKkNaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBlLlMlNlNlOlNlNlNlMlPaBlQkTlRlSkTkykWlTlTlTlTlUlxlxkWlVkWlzkAkFkFlWkGlXlXlXkIlYlElZaEavaEjhjhjhjLjjjjjjaEmambkNkNkNkNmbaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBmclNmcmclNmcmclNlNlNaBmdkTmemfkTmgkWmhmhmhmhmilxlxkWlxmjlzmkmlmmmnkFmokFmplDkFlElFaEavaEjhmqmrjjmsmsmsaEkNkNkNmtmumumuaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBmclNmcmclNmcmclNlNlNaBkykUkTkTmvmgkWmwmxmwmymzlxlxkWlVkWlzmAmBmCmDmEmFmGmHmIlckFlcaEmJaEkukukukukukukuaEmKmLmKmMmMmMmMaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBmclOmcmclMmcmclNlOlNmNkykymOkykSmgkWmPmPmPmPmQlxlxkWmRkWlzkIkIkIkIkIkIkIkIkIkIkIkIaEavaEaaaBaFaFaBaFaFaBmSmTmUaFaFaFaFaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBmVaBaBaBaBaBaBaBaBaBaBaBaBmVaBaBkWmWmWmWmWmXlxlxlxlxlxmYmZnamZlzmYnbnbnbnbnbnbncaEavaEaaaBaaaaaBaaaaaBndnendaaaaaaaaaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnfaFaFeZaFaFfaaBaFeZaFaFfaaFaFeZaFkWngnbmjnbmjlxmYlxlxlxlxlxlxlxlzlxlxlxlxlxlxlxnhaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnjaFaFaFaFaFaFaBaFaFaFaFaFaFaFaFaFkWnklxlxlxmYlxnllxnmnclxlxlxlxnnlxnonononononolxaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFaFaFaFaFaFaBaFaFaFaFaFaFaFaFaFkWnplxnclxnqlxlxlxnrnsntntnunulzncnvnvnvnvnvnvmYaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeZaFaFfaaFaFeZaBaFfaaFaFeZaFaFfanwkWnxnynznAlxlxlxlxnBlxlxnClxnclzlzlzlzlzlzlzlzlzaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBnDaBaBaBaBaBaBaBaBaBaBiSaBaBaBkWlxlxlxnElxlxlxnElxlxnFnGmYnHnElxlxnInInInInInIaBavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfCaFaFaFaFaFaFaFnJaBaFaFaFaFaFaFkWnvnvnvnKnLnMnLmYnNnOnPnQnRnSkWlxlxnInInInInInIaBavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfCaFeZaFaFfaaFaFnTaBaFfaaFaFeZaFkWkWkWkWkWkWkWkWkWkWkWkWkWkWkWkWlxlxnUnUnUnUnUnUaBavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnVnVnWnVnWnXnYnZoaaBaFaFaFaFaFaFaBaaaaaakWaaaaaakWaaaaaaaaaaaakWlxlxnUnUnUnUnUnUaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBobavavavavavocavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,2) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,3) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,4) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,5) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,6) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,7) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,8) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,9) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBododoeaFaFiSfaiSofofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBogeZaBohoiojokolojokaBaFaFaFfaaFaBaBaBofofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFaBomeZaFaFfaaFaFaBfaaFaFaFeZaFonaBooofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeZogopoqaFaFaFaFeZaForaFeZaFaFaFosotaBouofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBovaFowoqaFaFfaaFoxoyaBaFaFaFfaaFaFozaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfaeZoraFaFaFaFaFaFoAaBoBoCaFoDoEaFoFoGoHoIaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFoJoKfaaFeZaFaFoLaBfaaFaFoMoNaFaFfaaFeZaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoOfaaBoPoQoRoSoToUoVaBoBoCaFoWaFoXeZoFoYoHaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBeZaFoZaFpaaFaFaFaFfaaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoBoCnYpbpbpcpcpdpdpeaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,10) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapfpgpgphaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaopfCaFopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaopfaeZopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaopaFaFopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfaeZaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEfaeZaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEpipjpkplpmpnpoaEaFaFaEpppqprpsptpuaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpvpwpxpyaFaFpzpAaEmVpBaEfaoiaFeZoxoApCaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpDpEpFmUpGpHpIpJaBaFfaaBeZaFaFfaaFaFeZpKaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaEaEaEaEpLeZpMaFpNpOpPpPaBaFaFaBojokoKoyaFaFaFpQaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaEpRpSpTaEpUaFfapVaBaBaBaBaBaFaFaBaBaBaBaBpWaFaFpXaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEpYoCpZfamNeZaFaFeZaBqaqbqcfaaFaFqdqeqfqgaBqhaFfaqiaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaFaFqjaFaBfaaFfaaFmNaFaFaFaFaFaFaFaFqkqkaBqlaFeZqmaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqnoCfaeZaBodqhqoqpaBaFaFaFaFaFaFaFaFaFaFaBaFaFaFqqaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqraFqsaFaBaBaBaCaBaBqtaFaFquaFqvfaaFaFeZmNeZqqqweMaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqxoFqyqzaBqAaFaFqBaBeOaFaFqCqDaFaBaBaBaBaBfaqqqEeMaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqFaFaFfCaBaBaBaCaBaBqGaFaFqHaFqIqJqKqLqMaBqNqNqOqOaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqPqQfaqRaBodqhqoqpaBeZaFaFfaaFaFqJqSaFfaaBqNqNqOqOaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqTaFaFaFaBfaaFfaaFmNaFaFaFaFaFaFqUqVqVaFaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqWaFqXfamNeZaFaFeZaBqYqZrarbfaeZmNfaaFeZaEaaaEaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaErcrdreaEpUaFfapVaBaBaBaBaBaFaFaEaEaEmVaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaEaEaEaErfpErgaFpNpOpPpPaBaFaFaEaaaEfaeZqJrhaFmNrirjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaErkeZrlmUpGpHpIpJaBeZfaaEaaaEaFaFqJeZfaaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpvpwpxpyaFaFpzpAaBmVpBaEaEaEaFaFqJrmaFrnrorpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEpipjpkplpmpnpoaEaFaFaEaaaEeZfaqJfaaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEfaeZaEaaaEaFaFqUrqeZrrrsrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaEaEaFaFmNfaaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaEfaeZrurvaFrnrwrxaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFryaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaEaEaEaEeZfaaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaErzaFmNrArBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfaeZaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrDrErFrFrFrFrFrCrGrGrGrGrGrGrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrHrHrIrIrIrIrIrCrCrCrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaFaFqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrHrHrHrHrHrHrHrCrGrGrJrJrJrJrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaFaFqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrHrHrHrHrHrHrHrCrKrGrJrJrJrJrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJfarLqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrCrCrCrCrCrCrCrHrHrCrGrGrJrJrJrJrCrCrCrCrCrCrCrCrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarMrNrNrOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrPrQrRrSrGrTrCrUrVrCrWrGrGrGrXrXrCrYrGrGrZrZrZrZrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrGrGrGrGrGsarCrHrHrCrWrGsbsbrXrXrCrYrGrGrGrGrGscrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCsdsesfsgrGshrCrGrGrCsirGsbsbrXrXrCrYrGrGrGsjsjsjrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCsdskslsmrGsnrCrGrGrCsirGsbsbrXrXrCrYrGrGrGsjsjsjrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCsdrGrGrGrGsnrCrGrGrCsirGsbsbrXrXrCsorGrGrGsjsjsjrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCspsqrGsrssstrCrGrGrCsirGsbsbrXrXrCsorGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrCrCsvrCrCrCrCrGrGrCrCsvrCrCrCrCrCsorGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsxswaaaaaarCrGrGrGrGrGrGrGrGrGrGsysysysyrCrGrGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswswszswswrCrCrCrKrGrGrGrGrGrGrGrGrGrGrGrGrGsArGrGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasBsCsDsEsFaaaarCrGrGrGrGrGrGrGrGrGrGrGrGrGrGrCrGrGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsDsDsDswsHsHsHrGrGrGrGsHsHsHsHsHsHsHsHsHsHrCsorGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasBsCsDsDsIsJrHsJrGrGrGrGsKsLsMsNrHrHsLsMsNsOrCsorGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsDsDsDswsHsHsHrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCsorGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsPsQsRswaaaarCrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCrCrCrCrCrCrCrCrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsSsTsUswrCrCrCrGrGrGrGsKsLsMsNrHrHsLsMsNrHrCrGrSsVrGrGrGsWsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasYsZsZsZtaaaaarCrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrGrGrGrGsKrHrHrHrHrHrHrHrHtbrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctctctctctctdtdtdtdtdtdtdtdtcrCrCrCrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctctctctctctctetetetetetetetetetetetetetcrCrGrGrGrGrGrGsHsHsHtfsHsHsHsHsHsHrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctgthtgthtgtctitititititititititititititcrCrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrCrCrCrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctjthtjthtjtctitititititititititititititcrCrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGtkrGtkrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatcthththththtctitititititititititititititcrCrKrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrCrCrCrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatcththththththtitititititititititititititcrCrGrGrGrGrGrGrGrGrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatcthththththtctitititititititititititititcrCrGrGrGrGrGrGrGrGrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctctctctctctctctctctctctdtdtdtdtdtdtdtdtcsHsJsHtltltltltltlrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasHrHsHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasHsJsHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtmtmtmtmtntmtmtotmtmtmtntmniaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtptqtrtstttutvtwtxtmtytztmtmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtAtwtAtotwtrtwtAtBtAtrtCtDtEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtptqtwtEtCtwtwtwtFtCtwtCtGtEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtAtwtAtEtCtAtwtrtHtrtAtCtItEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtptqtrtEtJtwtwtwtKtmtrtLtmtmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtmtmtmtmtntmtmtmtntmtmtntmniaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtMtMtMtMtNtMtMtOtMtMtMtNtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtPtQtRtMtStTtTtUtVtMtWtXtMtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtYtUtUtOtUtUtUtUtZtUtUuaubucaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtPtQtUuduatUtUtUueuatUuaufucaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtYtUtUuduatUtUtUugtUtUuauhucaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtPtQtRuduitUtUtUujtMtRuktMtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtMtMtMtMtNtMtMtMtNtMtMtNtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,11) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,12) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulumunuoupuqurusutuuuvululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuxththuxuyuyuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluxuxuxththuxuxuxuwuwuzuAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululululululululuBuCthththththuxuDuEuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwuwuwuwuwuwuwuluFthththuGththuxuwuHuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuyuyuwuwuwuyuyuwuwuluBuIuxththuxuxuxuwuJuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDuKuLuMuwuDuKuLuMuwuluwuwuxththuxuwuwuwuNuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDuOuPuMuwuDuOuPuMuwuluQuQuxuxuxuRuSuTuTuUuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluVuwuWuWuwuwuwuWuWuwuXuYuZvavbvcvdulululululululululululululaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulveuwuwuwuwuwuwuwuwuwuwvfuwuwuwuwuwuYvgvgvgvgvhvivjvkvlvlvmulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvnuwuwuwuwuwuwuyuyuwuwvouwuwuwuwuwuYuwuwuwuwuwuwuwuwvpvpvqulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvruwuwuwuwuwuDuKuLuMuwvsuwuwuwuwuwvfuwuwuwuwuwuwuwuwuwvtvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvvuwuwuwuwuwuDuOuPuMuwuzuwuwuwuwuwvouwuwuwvwuwuwuwuwuwvtvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvxvyvzvAveuwuwuWuWuwuwuYuwuwuwuwuwuzuwuwuwuwuwuwuwvBuwvCvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululululululvfuwuwuwuwuwuYvDvDvEvFvFvFvFvGuwvCvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwululuwuwuwuwuwululululululululuwuwuwululaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuyuyuwvHvHuwuwuwuwuwuwuYvIvJvKuluwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDvLvMuMuwuYvNuwuwuwuwvOuYuwvJvKulvPvPvPvPvPvPvPulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDuJvQuMuwuYuwuwuwuwuwvHvHuwuwvRulululululululululaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvJvKulvJvKulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuluwuwulvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvTululvTululululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwuwuwuwuwuwuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvUuwuwuwuwuwuwuwuwuwuwuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwuwuwuwuwuwuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvTululvTululululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuluwuwulvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvJvKulvJvKulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvVvVvVvVvVvVvVvVvVvVvVvVvVvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaBaBaBaBaBaBaBaBaBaBaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvWaFaFvXaFvXvXvXvXqKqLqMaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaFvXaFvXvXvXvXaFaFaFaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFiSfaiSaFaFaFaFqDaFaFaFaFaFaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaFvXvXvXvXvXvXvXvXvXaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvYaFaFvXvXvXvXvXvXvXvXvXaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululululuZvavZwavduZululululululululululululaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaBaBaBaBaBaBaBaBaBaBaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluLuyuwuwuwuMuMululuwuwuwuwuwuwulwbvPwcwdulvFvFvFvFvFulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvVvVvVvVvVvVvVvVvVvVvVvVvVvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwewewfuyuwuMuMululuwuwuwuwuwuwuJuwuwuwuwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluyuwuwuwuwuMuMululuwuwuwuwuwuwuJuwuwuwuwuwuwvFvFvFvFulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwguwuwuwuwuwuwvTuwuwuwuwuwuwuwwhuwuwuwwiuluwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluKuLuwuKuLwjuwululuwuwuwuwuwuwvouwuwuwwkulvFvFvFvFvFulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluWuWuwuWuWwjuwululuZvavZwavduZululvculululululululululaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwwlvzuluwuwuwuwuwuwuwuYuwuwuwuwuwuwuwwmulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululvTulululululuwuwuwuwuwuwuwuYuwuwuwuDuwwnwouwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuyuyuyuyuluwuwuwuwuwuwuwvfuwuwuwuDuwwpuMuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwquwuwuwuwuluwuwuwuwuwuwuwvouwwruwuDuwwswtwuulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwvTuwuwuwuwuwuwuwuzuwuwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululuwuwuwuwuwuwuwuYuwuwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwvuwuwuwuwuwuwuYvhuwvgvgvgvgwwwxulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululwyulululululululululululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwyulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwzwzwzwzwAwzwzwBwzwzwzwAwzwCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwDwEwFwGwHwGwIwGwJwzwKwLwzwzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwMwNwNwDwOwDwOwDwPwDwIwOwQwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwGwDwGwGwOwGwOwGwSwOwGwOwTwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwMwNwNwDwOwDwOwDwUwDwIwOwVwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwDwEwFwGwWwGwIwGwXwzwYwZwzwzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwzwzwzwzwAwzwzwzwAwzwzwAwzwCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/ss13-40.93.2-base/README.md b/ss13-40.93.2-base/README.md new file mode 100644 index 0000000..145813e --- /dev/null +++ b/ss13-40.93.2-base/README.md @@ -0,0 +1 @@ +Hobnob's corrected version of the SS13 source after he decompiled it. This has most of the critical bugs from decompiling ironed out, and is close to the 40.93.2 version that was played from 2006 to 2008. \ No newline at end of file diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Cryogenic2.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Cryogenic2.dmi new file mode 100644 index 0000000..2ead3b6 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Cryogenic2.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Door1.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Door1.dmi new file mode 100644 index 0000000..13206c3 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Door1.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Doorf.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Doorf.dmi new file mode 100644 index 0000000..7a5442d Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Doorf.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Icons.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Icons.dmi new file mode 100644 index 0000000..9ff68ed Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/Icons.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/aircontrol.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/aircontrol.dmi new file mode 100644 index 0000000..11bea3f Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/aircontrol.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/airtunnel.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/airtunnel.dmi new file mode 100644 index 0000000..bb7e378 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/airtunnel.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/airtunnelcomputer.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/airtunnelcomputer.dmi new file mode 100644 index 0000000..5c6d89b Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/airtunnelcomputer.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/alert.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/alert.dmi new file mode 100644 index 0000000..83cbfde Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/alert.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/ammo.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/ammo.dmi new file mode 100644 index 0000000..f8e70c8 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/ammo.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/assemblies.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/assemblies.dmi new file mode 100644 index 0000000..eb3ce0f Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/assemblies.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/b_items.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/b_items.dmi new file mode 100644 index 0000000..e8756e2 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/b_items.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/belt.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/belt.dmi new file mode 100644 index 0000000..f9b425a Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/belt.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/canister.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/canister.dmi new file mode 100644 index 0000000..2346c2b Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/canister.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/dam_zones.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/dam_zones.dmi new file mode 100644 index 0000000..be4ca69 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/dam_zones.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/doors.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/doors.dmi new file mode 100644 index 0000000..564fa29 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/doors.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/engine.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/engine.dmi new file mode 100644 index 0000000..06ea1b3 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/engine.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/enginecomputer.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/enginecomputer.dmi new file mode 100644 index 0000000..1a31384 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/enginecomputer.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/escapepod.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/escapepod.dmi new file mode 100644 index 0000000..59eeb93 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/escapepod.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/ghost.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/ghost.dmi new file mode 100644 index 0000000..e9e5ae8 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/ghost.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/help.htm b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/help.htm new file mode 100644 index 0000000..781f978 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/help.htm @@ -0,0 +1,121 @@ +
Space Station 13
+By: Exadv1

+
+Overview
+ Space Station 13 was written on BYOND. Like a majority of BYOND games it is two dimensional with a top-down view. It uses tile-based movement. Space Station 13 (or SS13 for short) starts you on a space station orbitting a very peculiar gaseous planet in a binary star system. Threoughout a round many disasters will probably occur from meteor attacks to internal disasters such as a traitor. The game is constantly being developed so eventually more disasters will occur such as pathogens, re-entry, and raiders.
+
+Objectives
+ The primary objective in most modes of Space Station 13 is survival. You must stay alive long enough to escape. Now when you first start the game you shouldn't immediately try to escape! You should try and prevent disaster for as long as you can. Eventually you will be able to perform various experiments on-board SS13 between disasters (medical experiments, atmospheric experiments, and plasma experiments). Also depending on the mode there may be more objectives.
+
+Modes
+Traitor - In traitor mode there is a traitor aboard the space station. The objective of the traitor is to be the last person aboard the shuttle when it departs destroying anything or anyone in your way. The objective of everyone else to survive and attempt to pinpoint who the traitor is and stop them.
+
+Meteor - In meteor mode the objective is to escape and see how long you can ride out the meteor storm. This is very challenging and you are given no precious time to prepare for disaster.
+Monkey - In monkey a mode a extremely mutagenous retrovirus has infected the ship. The goal as a human is to escape on the shuttle to warn the rest of the world. The monkies must infect the rest of the crew and stop them. Future modes will allow the humans to examine exactly what the virus is and apply that knowledge.
+
+Secret - This mode chooses randomly between all the modes (or just nothing). This is the default mode and generally produces the best gameplay.
+
+Proposed Modes
+Space Raiders- A group of combatants are trying to raid the station and gather a list of items to escape to their station with.
+Alien- A parasitic organism has infected a crew member. The crew must stay uninfected while the infected people must try and infect the others.
+Orbital Failure- The engine/reactor system is failng and you must regain a safe orbit or plummet into the gaseous planet.
+...
+
+Getting around
+The interface for Space Station 13 is largely click driven. When I refer to attacking I am referring to double clicking.
+Getting Started (A Quick jump-start guide to get into the game)
+You must select your preferences then go over the begin object and get ready. (use ready verb)
+If you want to you can go to SS13 by using enter.
+If you don't and the game hasn't started yet you'll still be automatically teleported.
+Movement
+Movement on SS13 is only in the 4 cardinal directions. The diagonal directions throw/drop items, switch hand/modes. If you move into a dense object you first try to push it. Not all items can be pushed. You can also right click on an object and select 'pull' and then every movement you make will ttempt to drag that object behind you. If you wish to stop pulling you must go onto your on-screen display and find the object with a person in a box. Click on it and you will stop pulling. If you ever desire to make sure of which direction you are facing use .center and then try to move what direction you want to face.
+'Equipping'
+You 'equip' items in SS13 by picking them up. In order to pick an item up all you must do is attack it with a free hand. Now you hae two hands. Which hand is being used is indicated by the blue button in the lower-left area of your HUD. You can change hands by clicking the hand button or pressing the .northeast macro. You can then also then transfer that item to another part of your body. In order to do this you just attack the green box (or blue storage box) on your hud that you would like to move it to. In order to 'unequip' a equipped item that is not in your hand. Get a free hand and attack the item. Then in order to drop an item in your hand (and make it a free hand again) click the drop button (or throw to throw the item wherever you are facing).
+Talking
+ Talking on SS13 is still via the say verb so the normal say speech bubble on the command line will still work. Please note however that you can whisper. More on this in the items selection under radio, intercoms, and headsets. There are a lot of emotes that are accessed by preceding your text with a '*'. To view a list of available emotes for your character use the type '*help' into the say menu.
+Taking Items/Giving Items
+ You can take items from people by dragging their mob onto your mob. A screen will pop up. From this screen you can select an object to remove from them. If you select a 'Nothing' slot then you will attempt to equip that slot with the object you are holding. +Death
+ If you are dead then you can use the watch verb to look through the eyes of another mob. Depending on circumstances you can use abandon mob to restart (leaving that box blank gives you a random name). A dead person hears everything that is said but might not hear all attack message dialog.
+
+The Items
+If it has a [stackable-x]. This means that if you attack another item of its type with it then you will gather more items on its stack until you hit x items. you can usually see how much is on the stack by right clicking and selecting examine.
+
+Analyzer - Attacking this item with itself (having it equipped then using .southeast, mode, or double clicking it) shows the oxygen, carbon dioxide, and plasma content of the tile you are standing on.
+
+Bottle - This item stores chemicals (60 cubic centimeters). You must use a syringe to draw chemicals from it. You can however pour bottles into bottles by attacking a bottle with another bottle.
+
+Brute Pack [stackable-5] - This item can be used to treat damage done by brute force weapons or piercing weapons. A mix of biodegradable experimental nanites cures most damage almost instantly amone contact.
+
+Card (identification) - Every crew member besides are issued this card. At game start they are given this card and a position (random) aboard Space Station 13. Late joiners get the hyper boring job of Researcher's Assisstant and must have their card filled by the captain at an identification computer. You can wear this card so that every door you walk through will open and close. (on security doors (has the black tab) you automatically try to use your card). You can also equip it and attack a door and it will stay open or stay closed. Also if you are wearing a card that is not yours then your name will be whoever the card is registered to. This however can be considered a crime and grounds for being arrested and punished.
+
+Clothing - This has its own section at the bottom. This includes masks and suits.
+
+Fire Extinguisher - This when you have equipped you can then attack anything besides a person (which can knock them unconscious) will release an anti-fire chemical which eventually helps greatly in stopping a fire. Yuo can refill this by attacking a water-tank and it will refill its 20 units. Right click on it and select examine to see how many units are left.

+Flasks - These contain a large mixture of chemicals (liquid) that are used for cryogenic healing. More on this later.
+
+Handcuffs - These are used for general detainment. It takes 3 uninterrupted (no movement AT ALL) seconds in order to place them on a person. These prevent the person from dong anything with their hands and allow you to remove things from them without resistance (they normally would need to be unconscious). you can rmeove handcuffs by either removing them via the right click option or by double clicking them with a free hand.
+
+Health analyzer - This when you attack a target will give you the overall health and type of damage the target has occurred. note that this only gives physical health and not (role-played) mental health.
+
+Ointment [stackable-5] - This like bruise packs allow you to heal your and other people's damage due to fire (or a welder that is on).
+
+Paper - Double clicking on this will give you its text which can sometimes be very helpful. Various things not in this document are detailed on the papers such as job positions, chemical information, and an old map.
+
+Parts - Table and rack parts. I'm not going to explaion these seperate so just attack themselves and you will construct a rack or get the box for a table. Using a wrench on these I believe converts them to its original metal.
+
+Radios/Headset/Intercom - These are the general method for communication aboard SS13. In order to best use a radio you must either attack itself (this means for headsets you must take them OFF your head first) or if its an intercom attack it with a free hand. This will bring up its control box where you can select a frequency to transmit/receive on (It's very simple - You receive and transmit messages only if you are on that frequency). You can also select whether to hear messages (speaker). Having this off still let's you broadcast but you won't hear yourself broadcast or any responses from others. You can also select having it automatically boradcast. This is most important for intercoms. This means that whenever it hears something via say or a whisper it will send it broadcast it. If you have it off you can still use it prefixing your say with [h] (for head), [l] (for left hand), or [r] (for right hand). This also will whisper what you are saying to those in the tiles adjacent to you.
+
+Rods [stackable-6] - These are like the parts and when you attack them with themselves they will either construct a grille (need 2) or repair a grille (only 1). Unlike the parts these can be used as an OK weapon.
+
+Screwdriver - This item is able to help fasten and unfasten items. It can fasten canisters to connecters, tables to floors, and grilles to floors. It can also unfasten them as well. You can attack with this weapon but there is no chance of knocknig them unconscious. (besides making them bleed to death)
+
+Shards - This glass item can be converted into glass by using a welding tool. Until then it is an unstackable weapon. They can cause a little piercing damage.
+
+Sheets [stackable-5] - These are like rods except that the glass sheets build windows and the metal sheets build MANY things. All you must do is attack self.
+
+Storage Containers (first aid kits and toolboxes) - These allow you to store items into them to allow easier transportation of a lot of items. You cannot store storage containers in storage containers no matter what the sizes are. Also certsin things can't go in ccertain containers because of their size. Most containers hold 7 items. You can open a container in 2 ways. Drag it onto yourself or equip it in one hand then attack it with a free hand. You can then remove items by attackng them with a free hand. Then when you've removed the item close the container by double clicking on the big red close X. You place items in the container by attacking it. They automatically go in unless they don't fit.
+
+Syringe - This object is capable of injecting chemicals into a targets bloodstream. It can also be used for precise mixing of bottles wherejust pouring is too inaccurate. It injects and draws in increments of 5 cubic centimeters. Attack it with itself to change the mode from inject to draw and vice versa. See the chemical information paper for information on the chemicals.
+
+Tanks - These plain and simple hold gases. The 2 types of tanks come prestocked with either oxygen or plasma. you can attach these to a siphon or canister for refillng by attacking it. This is one of the few items that CAN be worn on your back. Also if you have a gas mask on you can attack the tank with itself in order to switch your internals on. This puts you on an external atmosphere and lets you traverse highly toxic or low oxygen environments without fear of being injured. They also make a great item for attacking. It is a good idea to turn on internals then put them on your back so they are out of your way though. See the canisters sections for more information on refilling.
+
+Tile [stackable-10]- These are like the rods except that they build or repair floor tiles. (only one tile regardless)
+
+Welding Tool (or Welder) - This has two modes swapped by attacking itself. When its off its like a wrench except it won't deconstruct. When its on it will cause piercing fire damage. It also can slice canisters open releasing their contents. It also can be used to weld open the plating on a wall, cut grilles, form chards into sheets, and many other things. Be warned that using this in a high plasma environment may ignite the highly flammable plasma! Most actions with this use up fuel which can be refilled by attacking a welding fuel tank and cghecked by using the examine verb.
+
+Wirecutters - These can be used to cut wires on electronic devices. They can also easily cut grilles open
+
+Wrench - This item performs a variety of functions that largely deal with deconstruction. Attacking a chair, stool, table, rack, or wall girders will deconstruct them into eith metal sheets, table parts, or rack parts. It's also not too bad as an item to club an assailant over the head. (You can knock them unconscious) Since they disassemble tables and racks in order to place them on the table drag them over to the table.
+
+Clothing
+ Masks- There are currently two types of masks. Masks can be put on by either attackng yourself with it, attacking your mask hud button, or if the other person is submissive (unconscious/handcuffed) attacking the other person to place it on them.
+Gas mask- This filters out most plasma from the environment and allows for running on internals
+Muzzle - This is a negative item and prevents all speech including gasping generally leaving only nod. you can take this off yourself provided your hands aren't handcuffed.
+
+ Suits These work like masks except you must use the external clothing HUD.
+Fire suit - This prevents damage from the flames of fire. (Not welding tool attacks though as well as the oxygen deprivation from fire) also note there is a limit which once surpassed the suit can't disperse the heat causing you o take damage.
+
+Canisters/Siphons/Scrubbers
+ If you attack these with a free hand you'll bring up the control box. The only part that really deserves observance is the first set of buttons. The lower valve is not in yet. The release button releases x amount of units into the connected tank or if no tank to the environment. The amount of units is determined by the valve. You can alter this amount from 0 to 1000 by using the + + + and - - - buttons which go alter by adding or subtracting 1, 5, or 50 units. The next button - siphon - either siphons gas from the environment or an attached tank. Canisters are unable to siphon from the environment! The next button stop stops all siphoning or releasing. Siphons/scrubbers also contain an option canisters do not - automatic. This makes the sensors on board the unit to try and equalize the atmospheric environment of the tile it is on every second. The vents start with this as its option. Please note that the presence of a tank makes no difference as this part is on a seperate air track and it will still release into the environment. Once your done click the close button to stop the box from popping up.
+Scrubbers/air filters - These are like the normak siphons except that before its air cycle it releases all the oxygen it has stored. The automatic mode also instead of equalizingthe oxygen level removes carbon dioxide and plasma.
+
+Chairs
+ Chairs have a special feature - buckling. You can buckle someone (including yourself)into a chair by dragging them onto the chair object. The person must already be on the same tile as the chair however. You can unbuckle them/yourself from a chair by attacking the chair with a free hand. (Note: Handcuffed people can't unbuckle from chairs.)
+
+Miscellaneous Object Descriptions
+
+Alarm - This object is able to detect whether the area arod it has an appropriate co2 and o2 content to stay alive. Basically green is good and red is bad.
+
+Cryogenic Healing Units - There is a tutorial for this on the main SS13 website so I won't detail it here. Please note you can't revive already dead people.
+
+Firealarm - This is able to lock down an area instantly. When a fire gets near it it will trigger the lockdown to prevent contamination. You must use the reset button on this in order to clear the alarm and unlock the firedoors. You can also initiate a timer lock if you want time to escape.
+
+Grilles - These do a great job of blocking a lot of thngs. They stop most meteors in their tracks and are hard to destroy with normal weapons. (although it IS possible.)
+
+
+Miscellaneous Notes (a.k.a. archived world messages)
+
+Job selection is in thanks to Spuzzum! A captain is still randomly assigned if no one picks captain as their choice. Also please note that if you pick something as your primary and someone else picks it as their secondary (or tertiary) then they will always lose. This is essence is fairer. Also you can pick your beginning gender and name. I hope you enjoy it! Also I've extended time till start from one minute to one and a half minutes.
+
+ \ No newline at end of file diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/hi_pipe.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/hi_pipe.dmi new file mode 100644 index 0000000..77fb29e Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/hi_pipe.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/human.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/human.dmi new file mode 100644 index 0000000..1c03266 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/human.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/items.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/items.dmi new file mode 100644 index 0000000..b84168c Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/items.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/l_items.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/l_items.dmi new file mode 100644 index 0000000..8651cb0 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/l_items.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/meteor.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/meteor.dmi new file mode 100644 index 0000000..07a97a0 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/meteor.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/mob.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/mob.dmi new file mode 100644 index 0000000..c3c2b25 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/mob.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/monkey.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/monkey.dmi new file mode 100644 index 0000000..7a1507c Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/monkey.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/pipes.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/pipes.dmi new file mode 100644 index 0000000..b61dd6b Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/pipes.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/plasma.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/plasma.dmi new file mode 100644 index 0000000..7a58107 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/plasma.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/r_items.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/r_items.dmi new file mode 100644 index 0000000..7a34610 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/r_items.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/reg_pipe.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/reg_pipe.dmi new file mode 100644 index 0000000..0857633 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/reg_pipe.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/screen.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/screen.dmi new file mode 100644 index 0000000..cadfe1f Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/screen.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/screen1.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/screen1.dmi new file mode 100644 index 0000000..3f38319 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/screen1.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/security.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/security.dmi new file mode 100644 index 0000000..93c4aba Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/security.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/shards.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/shards.dmi new file mode 100644 index 0000000..fa5140b Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/shards.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/shuttle.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/shuttle.dmi new file mode 100644 index 0000000..c2f18bc Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/shuttle.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/stationobjs.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/stationobjs.dmi new file mode 100644 index 0000000..acee194 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/stationobjs.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/table.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/table.dmi new file mode 100644 index 0000000..b3d2952 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/table.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/turfs.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/turfs.dmi new file mode 100644 index 0000000..aa9620e Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/turfs.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/turfs2.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/turfs2.dmi new file mode 100644 index 0000000..16ffd12 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/turfs2.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/uniforms.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/uniforms.dmi new file mode 100644 index 0000000..dc57b9b Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/uniforms.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/wall.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/wall.dmi new file mode 100644 index 0000000..9efe147 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/wall.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/water.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/water.dmi new file mode 100644 index 0000000..17b6796 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/water.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/weap_sat.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/weap_sat.dmi new file mode 100644 index 0000000..ac8a28b Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/weap_sat.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/windoor.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/windoor.dmi new file mode 100644 index 0000000..375d797 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/windoor.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/wire.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/wire.dmi new file mode 100644 index 0000000..5a50db6 Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/wire.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Icons/zone_sel.dmi b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/zone_sel.dmi new file mode 100644 index 0000000..5dab56e Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/Icons/zone_sel.dmi differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/SS13-40.93.2-base.dme b/ss13-40.93.2-base/ss13-40.93.2-base/SS13-40.93.2-base.dme new file mode 100644 index 0000000..a922489 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/SS13-40.93.2-base.dme @@ -0,0 +1,52 @@ +// DM Environment file for SS13A.dme. +// All manual changes should be made outside the BEGIN_ and END_ blocks. +// New source code should be placed in .dm files: choose File/New --> Code File. + +// BEGIN_INTERNALS +/* +FILE: ss13_algorithm2.dm +DIR: +MAP_ICON_TYPE: 0 +AUTO_FILE_DIR: ON +*/ +// END_INTERNALS +// BEGIN_FILE_DIR +#define FILE_DIR . +#define FILE_DIR "Icons" +// END_FILE_DIR + +// BEGIN_PREFERENCES +#define DEBUG +// END_PREFERENCES + +// BEGIN_INCLUDE +#include "aaaDefines.dm" +#include "airtunnel.dm" +#include "areas.dm" +#include "atmo_control.dm" +#include "atoms.dm" +#include "cell_process.dm" +#include "cellautomata.dm" +#include "chemical.dm" +#include "colour2html.dm" +#include "computer.dm" +#include "cryo.dm" +#include "demo.dm" +#include "demo2.dm" +#include "dna.dm" +#include "engine.dm" +#include "globals.dm" +#include "hexadecimal.dm" +#include "instructions.dm" +#include "inverthtml.dm" +#include "items.dm" +#include "mob.dm" +#include "shuttle.dm" +#include "ss13_algorithm2.dm" +#include "Test.dm" +#include "TextHandling.dm" +#include "weap_sat.dm" +#include "weapons.dm" +#include "main.dmp" +// END_INCLUDE + diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/Test.dm b/ss13-40.93.2-base/ss13-40.93.2-base/Test.dm new file mode 100644 index 0000000..ad6b3b6 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/Test.dm @@ -0,0 +1,23 @@ + +/proc/dd_run_tests() + + var/test_classes = typesof(/obj/test) + for(var/class in test_classes) + var/obj/test/tester = new class( ) + for(var/test in tester.verbs) + call(tester, test)() + if (!( tester.success )) + else + //Foreach continue //goto(59) + if (!( tester.success )) + world << "Test failed." + return + //Foreach goto(26) + world << "All tests passed." + return + +/obj/test/proc/die(message) + + src.success = 0 + CRASH(message) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/TextHandling.dm b/ss13-40.93.2-base/ss13-40.93.2-base/TextHandling.dm new file mode 100644 index 0000000..ae006f1 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/TextHandling.dm @@ -0,0 +1,140 @@ + +/proc/dd_file2list(file_path, separator) + + var/file + if (separator == null) + separator = "\n" + if (isfile(file_path)) + file = file_path + else + file = file( file_path ) + return dd_text2list(file2text(file), separator) + return + +/proc/dd_replacetext(text, search_string, replacement_string) + + var/textList = dd_text2list(text, search_string) + return dd_list2text(textList, replacement_string) + return + +/proc/dd_replaceText(text, search_string, replacement_string) + + var/textList = dd_text2List(text, search_string) + return dd_list2text(textList, replacement_string) + return + +/proc/dd_hasprefix(text, prefix) + + var/start = 1 + var/end = length(prefix) + 1 + return findtext(text, prefix, start, end) + return + +/proc/dd_hasPrefix(text, prefix) + + var/start = 1 + var/end = length(prefix) + 1 + return findText(text, prefix, start, end) + return + +/proc/dd_hassuffix(text, suffix) + + var/start = length(text) - length(suffix) + if (start) + return findtext(text, suffix, start, null) + return + +/proc/dd_hasSuffix(text, suffix) + + var/start = length(text) - length(suffix) + if (start) + return findText(text, suffix, start, null) + return + +/proc/dd_text2list(text, separator) + + var/textlength = length(text) + var/separatorlength = length(separator) + var/textList = new /list( ) + var/searchPosition = 1 + var/findPosition = 1 + while(1) + findPosition = findtext(text, separator, searchPosition, 0) + var/buggyText = copytext(text, searchPosition, findPosition) + textList += text("[]", buggyText) + searchPosition = findPosition + separatorlength + if (findPosition == 0) + return textList + else + if (searchPosition > textlength) + textList += "" + return textList + return + +/proc/dd_text2List(text, separator) + + var/textlength = length(text) + var/separatorlength = length(separator) + var/textList = new /list( ) + var/searchPosition = 1 + var/findPosition = 1 + while(1) + findPosition = findText(text, separator, searchPosition, 0) + var/buggyText = copytext(text, searchPosition, findPosition) + textList += text("[]", buggyText) + searchPosition = findPosition + separatorlength + if (findPosition == 0) + return textList + else + if (searchPosition > textlength) + textList += "" + return textList + return + +/proc/dd_list2text(var/list/the_list, separator) + + var/total = the_list.len + if (total == 0) + return + var/newText = text("[]", the_list[1]) + var/count = 2 + while(count <= total) + if (separator) + newText += separator + newText += text("[]", the_list[count]) + count++ + return newText + return + +/proc/dd_centertext(message, length) + + var/new_message = message + var/size = length(message) + if (size == length) + return new_message + if (size > length) + return copytext(new_message, 1, length + 1) + var/delta = length - size + if (delta == 1) + return new_message + " " + if (delta % 2) + new_message = " " + new_message + delta-- + delta = delta / 2 + var/spaces = "" + var/count = null + count = 1 + while(count <= delta) + spaces += " " + count++ + return spaces + new_message + spaces + return + +/proc/dd_limittext(message, length) + + var/size = length(message) + if (size <= length) + return message + else + return copytext(message, 1, length + 1) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/aaaDefines.dm b/ss13-40.93.2-base/ss13-40.93.2-base/aaaDefines.dm new file mode 100644 index 0000000..a1e3f6c --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/aaaDefines.dm @@ -0,0 +1,82 @@ +#define SHUTTLE_Z 10 +#define PRISON_SHUTTLE_Z 12 +#define ENGINE_EJECT_Z 8 + + +/proc/add_zero(t, u) + + while(length(t) < u) + t = text("0[]", t) + return t + +/obj/bomb/New() + + ..() + var/obj/item/weapon/assembly/r_i_ptank/R = new /obj/item/weapon/assembly/r_i_ptank( src.loc ) + var/obj/item/weapon/tank/plasmatank/p3 = new /obj/item/weapon/tank/plasmatank( R ) + var/obj/item/weapon/radio/signaler/p1 = new /obj/item/weapon/radio/signaler( R ) + var/obj/item/weapon/igniter/p2 = new /obj/item/weapon/igniter( R ) + R.part1 = p1 + R.part2 = p2 + R.part3 = p3 + p1.master = R + p2.master = R + p3.master = R + R.status = 1 + p1.b_stat = 0 + p2.status = 1 + p3.gas.temperature = 500 + //SN src = null + + del(src) + return + +/obj/proc/throwing(t_dir, rs) + + if (src.throwspeed <= 1) + src.throwing = 0 + src.throwspeed-- + if (rs == 0) + rs = 1 + if (src.throwing) + if (rs == 1) + step(src, t_dir) + sleep(1) + spawn( 0 ) + throwing(t_dir, rs) + return + else + if (rs > 1) + var/t = null + while(t < rs) + step(src, t_dir) + t++ + sleep(10) + spawn( 0 ) + src.throwing(t_dir, rs) + return + else + step(src, t_dir) + sleep(10 / rs) + spawn( 0 ) + throwing(t_dir, rs) + return + else + src.density = 0 + return + + +/atom/proc/burn(fi_amount) + + return + +/atom/movable/Move() + + var/atom/A = src.loc + . = ..() + src.move_speed = world.time - src.l_move_time + src.l_move_time = world.time + src.m_flag = 1 + if ((A != src.loc && A && A.z == src.z)) + src.last_move = get_dir(A, src.loc) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/airtunnel.dm b/ss13-40.93.2-base/ss13-40.93.2-base/airtunnel.dm new file mode 100644 index 0000000..489bc9a --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/airtunnel.dm @@ -0,0 +1,663 @@ + +/obj/move/airtunnel/process() + + if (!( src.deployed )) + return null + else + ..() + return + +/obj/move/airtunnel/connector/create() + + src.current = src + src.next = new /obj/move/airtunnel( null ) + src.next.master = src.master + src.next.previous = src + spawn( 0 ) + src.next.create(36, src.y) + return + return + +/obj/move/airtunnel/connector/wall/create() + + src.current = src + src.next = new /obj/move/airtunnel/wall( null ) + src.next.master = src.master + src.next.previous = src + spawn( 0 ) + src.next.create(36, src.y) + return + return + +/obj/move/airtunnel/connector/wall/process() + + return + +/obj/move/airtunnel/wall/create(num, y_coord) + + if (((num < 7 || (num > 14 && num < 21)) && y_coord == 72)) + src.next = new /obj/move/airtunnel( null ) + else + src.next = new /obj/move/airtunnel/wall( null ) + src.next.master = src.master + src.next.previous = src + if (num > 1) + spawn( 0 ) + src.next.create(num - 1, y_coord) + return + return + +/obj/move/airtunnel/wall/move_right() + + flick("wall-m", src) + return ..() + return + +/obj/move/airtunnel/wall/move_left() + + flick("wall-m", src) + return ..() + return + +/obj/move/airtunnel/wall/process() + + return + +/obj/move/airtunnel/proc/move_left() + + src.relocate(get_step(src, WEST)) + if ((src.next && src.next.deployed)) + return src.next.move_left() + else + return src.next + return + +/obj/move/airtunnel/proc/move_right() + + src.relocate(get_step(src, EAST)) + if ((src.previous && src.previous.deployed)) + src.previous.move_right() + return src.previous + return + +/obj/move/airtunnel/proc/create(num, y_coord) + + if (y_coord == 72) + if ((num < 7 || (num > 14 && num < 21))) + src.next = new /obj/move/airtunnel( null ) + else + src.next = new /obj/move/airtunnel/wall( null ) + else + src.next = new /obj/move/airtunnel( null ) + src.next.master = src.master + src.next.previous = src + if (num > 1) + spawn( 0 ) + src.next.create(num - 1, y_coord) + return + return + +/obj/machinery/at_indicator/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "reader_broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "reader_broken" + else + return + +/obj/machinery/at_indicator/proc/update_icon() + + var/status = 0 + if (SS13_airtunnel.operating == 1) + status = "r" + else + if (SS13_airtunnel.operating == 2) + status = "e" + else + var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + status = 0 + else + if (!( C.current.next )) + status = 2 + else + status = 1 + src.icon_state = text("reader[][]", (SS13_airtunnel.siphon_status == 2 ? "1" : "0"), status) + return + +/obj/machinery/at_indicator/process() + + src.update_icon() + return + +/obj/machinery/computer/airtunnel/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/airtunnel/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/airtunnel/attack_hand(var/mob/user as mob) + + var/dat = "Air Tunnel Controls
" + user.machine = src + if (SS13_airtunnel.operating == 1) + dat += "Status: RETRACTING
" + else + if (SS13_airtunnel.operating == 2) + dat += "Status: EXPANDING
" + else + var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + dat += "Status: Fully Retracted
" + else + if (!( C.current.next )) + dat += "Status: Fully Extended
" + else + dat += "Status: Stopped Midway
" + dat += text("Retract Stop Extend
", src, src, src) + dat += text("
Air Level: []
", (SS13_airtunnel.air_stat ? "Acceptable" : "DANGEROUS")) + dat += "Air System Status: " + switch(SS13_airtunnel.siphon_status) + if(0.0) + dat += "Stopped " + if(1.0) + dat += "Siphoning (Siphons only) " + if(2.0) + dat += "Regulating (BOTH) " + if(3.0) + dat += "RELEASING MAX (Siphons only) " + else + dat += text("(Refresh)
", src) + dat += text("RELEASE (Siphons only) Siphon (Siphons only) Stop Regulate
", src, src, src, src) + dat += text("

Close
", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/airtunnel/proc/update_icon() + + var/status = 0 + if (SS13_airtunnel.operating == 1) + status = "r" + else + if (SS13_airtunnel.operating == 2) + status = "e" + else + var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + status = 0 + else + if (!( C.current.next )) + status = 2 + else + status = 1 + src.icon_state = text("console[][]", (SS13_airtunnel.siphon_status >= 2 ? "1" : "0"), status) + return + +/obj/machinery/computer/airtunnel/process() + + src.update_icon() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(27) + return + +/obj/machinery/computer/airtunnel/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["retract"]) + SS13_airtunnel.retract() + else + if (href_list["stop"]) + SS13_airtunnel.operating = 0 + else + if (href_list["extend"]) + SS13_airtunnel.extend() + else + if (href_list["release"]) + SS13_airtunnel.siphon_status = 3 + SS13_airtunnel.siphons() + else + if (href_list["siphon"]) + SS13_airtunnel.siphon_status = 1 + SS13_airtunnel.siphons() + else + if (href_list["stop_siph"]) + SS13_airtunnel.siphon_status = 0 + SS13_airtunnel.siphons() + else + if (href_list["auto"]) + SS13_airtunnel.siphon_status = 2 + SS13_airtunnel.siphons() + else + if (href_list["refresh"]) + SS13_airtunnel.siphons() + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(346) + return + +/obj/machinery/camera/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.status = !( src.status ) + if (!( src.status )) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] has deactivated []!", user, src), 1) + //Foreach goto(49) + src.icon_state = "camera1" + else + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] has reactivated []!", user, src), 1) + //Foreach goto(106) + src.icon_state = "camera" + return + + +/obj/machinery/sec_lock/attack_paw(user as mob) + + return src.attack_hand(user) + + +/obj/machinery/sec_lock/attack_hand(var/mob/user as mob) + + if (src.loc == user.loc) + var/dat = text("Security Pad:
\nKeycard: []
\nToggle Outer Door
\nToggle Inner Door
\n
\nEmergency Close
\nEmergency Open
", (src.scan ? text("[]", src, src.scan.name) : text("-----", src)), src, src, src, src) + user << browse(dat, "window=sec_lock") + return + +/obj/machinery/sec_lock/attackby(nothing, user as mob) + + return src.attack_hand(user) + + +/obj/machinery/sec_lock/New() + + ..() + spawn( 2 ) + if (src.a_type == 1) + src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y - 1, src.z)) + src.d1 = locate(/obj/machinery/door, get_step(src, SOUTHWEST)) + else + if (src.a_type == 2) + src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y + 1, src.z)) + src.d1 = locate(/obj/machinery/door, get_step(src, NORTHWEST)) + else + src.d1 = locate(/obj/machinery/door, get_step(src, SOUTH)) + src.d2 = locate(/obj/machinery/door, get_step(src, SOUTHEAST)) + return + return + +/obj/machinery/sec_lock/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((!( src.d1 ) || !( src.d2 ))) + usr << "\red Error: Cannot interface with door security!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["card"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/weapon/card/id/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + if (href_list["door1"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.scan.access_level > 4))) + if (src.d1.density) + spawn( 0 ) + src.d1.open() + return + else + spawn( 0 ) + src.d1.close() + return + if (href_list["door2"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.scan.access_level > 4))) + if (src.d2.density) + spawn( 0 ) + src.d2.open() + return + else + spawn( 0 ) + src.d2.close() + return + if (href_list["em_cl"]) + if (src.scan) + var/list.L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.scan.access_level > 4))) + spawn( 0 ) + if (!( src.d1.density )) + src.d1.close() + return + sleep(1) + spawn( 0 ) + if (!( src.d2.density )) + src.d2.close() + return + if (href_list["em_op"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.scan.access_level > 4))) + spawn( 0 ) + if (src.d1.density) + src.d1.open() + return + sleep(1) + spawn( 0 ) + if (src.d2.density) + src.d2.open() + return + src.add_fingerprint(usr) + for(var/mob/M in src.loc) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.attack_hand(M) + return + //Foreach goto(737) + return + +/obj/machinery/autolathe/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) + + if (istype(O, /obj/item/weapon/sheet/metal)) + if (src.m_amount < 150000.0) + src.m_amount += O:height * O:width * O:length * 1000000.0 + O:amount-- + if (O:amount < 1) + //O = null + del(O) + else + if (istype(O, /obj/item/weapon/sheet/glass)) + if (src.g_amount < 75000.0) + src.g_amount += O:height * O:width * O:length * 1000000.0 + O:amount-- + if (O:amount < 1) + //O = null + del(O) + else + if (istype(O, /obj/item/weapon/screwdriver)) + if (!( src.operating )) + src.opened = !( src.opened ) + src.icon_state = text("autolathe[]", (src.opened ? "f" : null)) + else + user << "\red The machine is in use. You can not maintain it now." + else + spawn( 0 ) + src.attack_hand(user) + return + return + +/obj/machinery/autolathe/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/autolathe/attack_hand(user as mob) + + var/dat + if (src.temp) + dat = text("[]

Clear Screen", src.temp, src) + else + dat = text("Metal Amount: [] cubic centimeters (MAX: 150,000)
\nGlass Amount: [] cubic centimeters (MAX: 75,000)
", src.m_amount, src.g_amount) + var/list/L = list( ) + L["screwdriver"] = "Make Screwdriver {40 cc}" + L["wirecutters"] = "Make Wirecutters {80 cc}" + L["wrench"] = "Make Wrench {150 cc}" + L["crowbar"] = "Make Crowbar {150 cc}" + L["screw"] = "Make Screw (1) {3 cc}" + L["5screws"] = "Make Screws (5) {14 cc}" + L["rod_t"] = "Make Rod (1x20) {20 cc}" + L["rod_l"] = "Make Rod (5x250) {1250 cc}" + L["grille_1"] = "Make Grille (250x250x1) {27345 cc}" + L["sheet_1"] = "Make Sheet (20x10x.01) {2 cc}" + L["sheet_2"] = "Make Sheet (30x10x.01) {3 cc}" + L["sheet_3"] = "Make Sheet (30x20x.01) {6 cc}" + L["sheet_4"] = "Make Sheet (30x30x.01) {9 cc}" + L["sheet_5"] = "Make Sheet (62.5x62.5x4) {15625 cc}" + for(var/t in L) + dat += text("[]
", src, t, L[text("[]", t)]) + //Foreach goto(230) + user << browse(text("Autolathe Control Panel[]", dat), "window=autolathe") + return + +/obj/machinery/autolathe/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(108) + return + +/obj/machinery/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/injector/attackby(var/obj/item/weapon/tank/W as obj, var/mob/user as mob) + + var/obj/item/weapon/tank/ptank = W + if (!( istype(ptank, /obj/item/weapon/tank) )) + return + var/turf/T = get_step(src.loc, get_dir(user, src)) + ptank.gas.turf_add(T, -1.0) + src.add_fingerprint(user) + return + +/obj/machinery/alarm/process() + + var/safe = 1 + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + var/t1 = turf_total / 3600000.0 * 100 + if (!( (90 < t1 && t1 < 110) )) + safe = 0 + t1 = T.oxygen / turf_total * 100 + if (!( (20 < t1 && t1 < 30) )) + safe = 0 + src.icon_state = text("alarm:[]", !( safe )) + return + + + +/obj/machinery/alarm/indicator/process() + + var/safe = 1 + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + var/t1 = turf_total / 3600000.0 * 100 + if (!( (90 < t1 && t1 < 110) )) + safe = 0 + t1 = T.oxygen / turf_total * 100 + if (!( (20 < t1 && t1 < 30) )) + safe = 0 + src.icon_state = text("indicator[]", safe) + SS13_airtunnel.air_stat = safe + return + +/datum/air_tunnel/air_tunnel1/New() + + ..() + for(var/obj/move/airtunnel/A in locate(/area/airtunnel1)) + A.master = src + A.create() + src.connectors += A + //Foreach goto(21) + return + +/datum/air_tunnel/proc/siphons() + + switch(src.siphon_status) + if(0.0) + for(var/obj/machinery/atmoalter/siphs/S in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(42) + if(1.0) + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S in locate(/area/airtunnel1)) + S.t_status = 2 + S.t_per = 1000000.0 + //Foreach goto(86) + for(var/obj/machinery/atmoalter/siphs/scrubbers/S in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(136) + if(2.0) + for(var/obj/machinery/atmoalter/siphs/S in locate(/area/airtunnel1)) + S.t_status = 4 + //Foreach goto(180) + if(3.0) + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S in locate(/area/airtunnel1)) + S.t_status = 1 + S.t_per = 1000000.0 + //Foreach goto(224) + for(var/obj/machinery/atmoalter/siphs/scrubbers/S in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(274) + else + return + +/datum/air_tunnel/proc/stop() + + src.operating = 0 + return + +/datum/air_tunnel/proc/extend() + + if (src.operating) + return + src.operating = 2 + while(src.operating == 2) + var/ok = 1 + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (!( A.current.next )) + src.operating = 0 + return + if (!( A.move_left() )) + ok = 0 + //Foreach goto(56) + if (!( ok )) + src.operating = 0 + else + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (A.current) + A.current.next.loc = get_step(A.current.loc, EAST) + A.current = A.current.next + A.current.deployed = 1 + else + src.operating = 0 + //Foreach goto(150) + sleep(20) + return + +/datum/air_tunnel/proc/retract() + + if (src.operating) + return + src.operating = 1 + while(src.operating == 1) + var/ok = 1 + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (A.current == A) + src.operating = 0 + return + if (A.current) + A.current.loc = null + A.current.deployed = 0 + A.current = A.current.previous + else + ok = 0 + //Foreach goto(56) + if (!( ok )) + src.operating = 0 + else + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (!( A.current.move_right() )) + src.operating = 0 + //Foreach goto(188) + sleep(20) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/areas.dm b/ss13-40.93.2-base/ss13-40.93.2-base/areas.dm new file mode 100644 index 0000000..e20c1a8 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/areas.dm @@ -0,0 +1,75 @@ +/area + var/fire = null + level = null + name = "area" +/area/aircontrol + name = "aircontrol" +/area/airintake + name = "air intake" +/area/airtunnel1 + name = "airtunnel" +/area/control_room + name = "control room" +/area/controlaccess + name = "control access" +/area/crew_quarters + name = "crew quarters" +/area/decontamination + name = "decon" +/area/dummy + +/area/engine + name = "engine" +/area/engine_access + name = "engine access" +/area/escapezone + name = "escape zone" +/area/hallways + name = "hallway" +/area/hallways/centralhall + name = "central hall" +/area/hallways/eastairlock + name = "east airlock" +/area/hallways/labaccess + name = "lab access" +/area/hallways/loungehall + name = "lounge hall" +/area/lounge + name = "lounge" +/area/medical + name = "medical bay" +/area/medicalstorage + name = "medical storage" +/area/oxygen_storage + name = "gas storage" +/area/security + name = "security" +/area/shuttle + name = "shuttle" +/area/shuttle_airlock + name = "shuttle airlock" +/area/shuttle_prison + name = "prison shuttle" +/area/sleep_area + name = "sleep area" +/area/start +/area/supply_station + name = "supply station" +/area/testlab1 + name = "testlab1" +/area/testlab2 + name = "testlab2" +/area/testlab3 + name = "testlab3" +/area/testlab4 + name = "testlab4" +/area/toolstorage + name = "tool storage" +/area/toxinlab + name = "toxin lab" +/area/vehicles +/area/vehicles/shuttle1 +/area/vehicles/shuttle2 +/area/vehicles/shuttle3 + +// new areas diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/atmo_control.dm b/ss13-40.93.2-base/ss13-40.93.2-base/atmo_control.dm new file mode 100644 index 0000000..cefa793 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/atmo_control.dm @@ -0,0 +1,666 @@ + +/obj/machinery/proc/process() + + return + +/obj/machinery/proc/receive_gas(gas as obj, machinery as obj) + + return + +/obj/machinery/proc/orient_pipe(source as obj) + + return + +/obj/machinery/proc/cut_pipes() + + return + +/obj/machinery/proc/disc_pipe(target as obj) + + return + +/obj/machinery/meter/New() + + ..() + src.target = locate(/obj/machinery/pipes, src.loc) + return + +/obj/machinery/meter/Click() + + if (get_dist(usr, src) <= 3) + if (src.target) + usr << text("\green [] / []", src.target.gas.tot_gas(), src.target.gas.maximum) + else + usr << "\green Results: Connection Error!" + else + usr << "\green You are too far away." + return + +/obj/machinery/connector/receive_gas(var/obj/substance/gas/t_gas as obj) + + var/obj/machinery/atmoalter/canister/C = locate(/obj/machinery/atmoalter/canister, src.loc) + if (C.destroyed) + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + t_gas.turf_add(T, -1.0) + return + var/amount = C.gas.maximum - (C.gas.oxygen + C.gas.co2 + C.gas.plasma) + if (t_gas.co2 + t_gas.plasma + t_gas.oxygen < amount) + amount = t_gas.co2 + t_gas.plasma + t_gas.oxygen + C.gas.transfer_from(t_gas, amount) + return + +/obj/machinery/mass_driver/proc/drive(amount) + + for(var/obj/O in src.loc) + if (O.flags & 64) + O.throwing = 1 + O.throwspeed = 100 + spawn( 0 ) + O.throwing(src.dir, src.power) + return + //Foreach goto(17) + flick("mass_driver1", src) + return + +/obj/machinery/pipes/orient_pipe(P as obj) + + if (!( src.node1 )) + src.node1 = P + else + if (!( src.node2 )) + src.node2 = P + else + return 0 + return 1 + return + +/obj/machinery/pipes/proc/update() + + var/turf/T = src.loc + if ((src.level == 1 && isturf(src.loc) && T.intact)) + src.invisibility = 100 + else + src.invisibility = null + if ((src.node1 && src.node2)) + src.icon_state = text("[]", get_dir(src, src.node1) | get_dir(src, src.node2)) + else + var/con = 0 + var/dis = 0 + var/n1d = (src.node1 ? get_dir(src, src.node1) : null) + var/n2d = (src.node2 ? get_dir(src, src.node2) : null) + if (src.p_dir & 1) + if ((n1d == 1 || n2d == 1)) + con |= 1 + else + dis |= 1 + if (src.p_dir & 2) + if ((n1d == 2 || n2d == 2)) + con |= 2 + else + dis |= 2 + if (src.p_dir & 4) + if ((n1d == 4 || n2d == 4)) + con |= 4 + else + dis |= 4 + if (src.p_dir & 8) + if ((n1d == 8 || n2d == 8)) + con |= 8 + else + dis |= 8 + if (con == 0) + con = null + src.icon_state = text("[]-[]", con, dis) + return + +/obj/machinery/pipes/proc/explode() + + src.gas.turf_add(src.loc, -1.0) + return + +/obj/machinery/pipes/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.capacity + if (world.time > 100) + return + spawn( 50 ) + var/b1 + var/b2 + if (src.p_dir & 1) + if (!( b1 )) + b1 = 1 + else + if (!( b2 )) + b2 = 1 + if (src.p_dir & 2) + if (!( b1 )) + b1 = 2 + else + if (!( b2 )) + b2 = 2 + if (src.p_dir & 4) + if (!( b1 )) + b1 = 4 + else + if (!( b2 )) + b2 = 4 + if (src.p_dir & 8) + if (!( b1 )) + b1 = 8 + else + if (!( b2 )) + b2 = 8 + for(var/obj/machinery/M in orange(src, 1)) + var/ob1 = null + var/ob2 = null + if (M.p_dir & 1) + if (!( ob1 )) + ob1 = 1 + else + if (!( ob2 )) + ob2 = 1 + if (M.p_dir & 2) + if (!( ob1 )) + ob1 = 2 + else + if (!( ob2 )) + ob2 = 2 + if (M.p_dir & 4) + if (!( ob1 )) + ob1 = 4 + else + if (!( ob2 )) + ob2 = 4 + if (M.p_dir & 8) + if (!( ob1 )) + ob1 = 8 + else + if (!( ob2 )) + ob2 = 8 + var/t1 = get_dir(src, M) + var/t2 = get_dir(M, src) + if ((M.level == src.level && (b1 == t1 || b2 == t1) && (ob1 == t2 || ob2 == t2) )) + if (src.node1) + if (!( src.node2 )) + src.node2 = M + else + src.node1 = M + //Foreach goto(253) + src.update() + return + return + +/obj/machinery/pipes/receive_gas(var/obj/substance/gas/t_gas as obj, from as obj) + + if (t_gas.tot_gas() > src.gas.maximum) + src.gas.merge_into(t_gas) + src.explode() + return + spawn( 1 ) + if (from == src.node1) + spawn( 0 ) + src.node2.receive_gas(t_gas, src) + return + else + spawn( 0 ) + src.node1.receive_gas(t_gas, src) + return + return + return + return + +/obj/machinery/atmoalter/siphs/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/siphs/proc/releaseall() + + src.t_status = 1 + src.t_per = 1000000.0 + return + +/obj/machinery/atmoalter/siphs/proc/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/proc/release(amount, flag) + + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (!( amount )) + return + if (!( flag )) + amount = min(amount, 1000000.0) + src.gas.turf_add(T, amount) + return + +/obj/machinery/atmoalter/siphs/proc/siphon(amount, flag) + + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (!( amount )) + return + if (!( flag )) + amount = min(amount, 900000.0) + src.gas.turf_take(T, amount) + return + +/obj/machinery/atmoalter/siphs/proc/setstate() + + if (src.holding) + src.icon_state = "siphon:T" + else + if (src.t_status != 3) + src.icon_state = "siphon:1" + else + src.icon_state = "siphon:0" + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/New() + + ..() + src.gas.oxygen = 2.73E7 + src.gas.n2 = 1.027E8 + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/port/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/setstate() + + if (src.t_status == 4) + src.icon_state = "vent2" + else + if (src.t_status == 3) + src.icon_state = "vent0" + else + src.icon_state = "vent1" + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/reset(valve, auto) + + if (auto) + src.t_status = 4 + return + +/obj/machinery/atmoalter/siphs/scrubbers/process() + + if (src.t_status != 3) + var/turf/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (T.firelevel < 900000.0) + T.oxygen += src.gas.oxygen + src.gas.oxygen = 0 + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (t > t2) + t = t2 + src.gas.turf_take(T, t) + if(4.0) + if (T) + if (T.firelevel > 900000.0) + src.f_time = world.time + 400 + else + if (world.time > src.f_time) + src.gas.extract_toxs(T) + var/contain = src.gas.tot_gas() + if (contain > 1.3E8) + src.gas.turf_add(T, 1.3E8 - contain) + + if (src.c_status == 1) + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + else + src.c_status = 0 + src.setstate() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(654) + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/setstate() + + if (src.t_status == 4) + src.icon_state = "vent2" + else + if (src.t_status == 3) + src.icon_state = "vent0" + else + src.icon_state = "vent1" + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/reset(valve, auto) + + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/scrubbers/port/setstate() + + if (src.holding) + src.icon_state = "scrubber:T" + else + if (src.t_status != 3) + src.icon_state = "scrubber:1" + else + src.icon_state = "scrubber:0" + return + +/obj/machinery/atmoalter/siphs/scrubbers/port/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/process() + + if (src.t_status != 3) + var/turf/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (t > t2) + t = t2 + src.gas.turf_take(T, t) + if(4.0) + if (T) + if (T.firelevel > 900000.0) + src.f_time = world.time + 300 + else + if (world.time > src.f_time) + var/difference = 3600000.0 - (T.oxygen + T.n2) + if (difference > 0) + var/t1 = src.gas.tot_gas() + if (difference > t1) + difference = t1 + src.gas.turf_add(T, difference) + + if (src.c_status == 1) + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + else + src.c_status = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(632) + src.setstate() + return + +/obj/machinery/atmoalter/siphs/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/siphs/attack_hand(var/mob/user as mob) + + user.machine = src + var/tt + switch(src.t_status) + if(1.0) + tt = text("Releasing
Siphon Stop", src, src) + if(2.0) + tt = text("Release Siphoning Stop", src, src) + if(3.0) + tt = text("Release Siphon Stopped Automatic", src, src, src) + else + tt = "Automatic equalizers are on!" + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/at = null + if (src.t_status == 4) + at = text("Automatic On Stop", src) + var/dat = text("Canister Valves []
\n\tContains/Capacity [] / []
\n\tUpper Valve Status: [] []
\n\t\tM - - - - [] + + + + M
\n\tPipe Valve Status: []
\n\t\tM - - - - [] + + + + M
\n
\n\nClose
\n\t
", (!( src.alterable ) ? "Valves are locked. Unlock with wrench!" : "You can lock this interface with a wrench."), num2text(src.gas.tot_gas(), 10), num2text(src.maximum, 10), (src.t_status == 4 ? text("[]", at) : text("[]", tt)), (src.holding ? text("
(Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=siphon;size=600x300") + return + +/obj/machinery/atmoalter/siphs/Topic(href, href_list) + + if (usr.stat) + return + if (!( src.alterable )) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + src.t_status = 2 + if(3.0) + src.t_status = 3 + if(4.0) + src.t_status = 4 + src.f_time = 1 + else + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if (cp == 1) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(433) + src.add_fingerprint(usr) + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/siphs/attackby(var/obj/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/tank)) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + if (src.alterable) + user << "\blue You unlock the interface!" + else + user << "\blue You lock the interface!" + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/atoms.dm b/ss13-40.93.2-base/ss13-40.93.2-base/atoms.dm new file mode 100644 index 0000000..a95a5fb --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/atoms.dm @@ -0,0 +1,2771 @@ +/atom + layer = 2.0 + var/level = 2.0 + var/flags = 256.0 + var/fingerprints = null +/atom/movable + layer = 3.0 + var/last_move = null + var/anchored = 0.0 + var/weight = 25000.0 + var/elevation = 2.0 + var/move_speed = 10.0 + var/l_move_time = 1.0 + var/m_flag = 1.0 +/atom/movable/overlay + var/atom/master = null + anchored = 1.0 + +/client + var/obj/admins/holder = null + var/listen_ooc = 1.0 + var/move_delay = 1.0 + var/moving = null + +/datum/air_tunnel + //name = "air tunnel" + //connectors = (List:13) + var/operating = 0.0 + var/siphon_status = 0.0 + var/air_stat = 0.0 + + var/list/connectors = list( ) + +/datum/air_tunnel/air_tunnel1 + //name = "air tunnel1" +/datum/chemical + //var/name = "chemical" + var/moles = 0.0 + var/molarmass = 18.0 + var/density = 1.0 + var/chem_formula = "H2O" + var/name = "water-l" +/datum/chemical/ch_cou + //name = "ch cou" + molarmass = 270.0 + name = "CCSremedy-l" +/datum/chemical/epil + //name = "epil" + molarmass = 230.0 + name = "EPILremedy-l" +/datum/chemical/l_plas + //name = "l plas" + name = "plasma-l" + molarmass = 154.0 +/datum/chemical/pathogen + name = "pathogen" + var/amount = 0.0 + var/structure_id = null +/datum/chemical/pathogen/antibody + name = "antibody" + var/tar_struct = null + var/a_style = null +/datum/chemical/pathogen/blood + name = "blood" + var/antibodies = null + var/antigens = null + var/has_oxygen = null + var/has_co = null +/datum/chemical/pathogen/virus + name = "virus" +/datum/chemical/pl_coag + name = "pl coag" + name = "antipla-l" + molarmass = 176.0 +/datum/chemical/rejuv + name = "rejuv" + molarmass = 97.0 + name = "rejuv-l" +/datum/chemical/s_tox + name = "s tox" + name = "sleeptox-l" + molarmass = 45.0 +/datum/chemical/waste + name = "waste" + name = "waste-l" + molarmass = 200.0 +/datum/chemical/water + name = "water" +/datum/control + //name = "control" + var/processing = 1.0 +/datum/control/cellular + //name = "cellular" + var/checkfire = 0.0 + var/var_swap = 1.0 +/datum/control/gameticker + //name = "gameticker" + var/timeleft = null + var/timing = 0.0 + var/mob/human/killer = null + var/mob/human/target = null + var/theft_obj = null + var/objective = null + var/shuttle_location = SHUTTLE_Z + + var/mode = "secret" +/datum/control/poll + //name = "poll" + var/question = null + //answers = (List:14) + + var/list/answers = list( ) + +/datum/data + var/name = "data" + var/size = 1.0 + //name = null +/datum/data/function + name = "function" + size = 2.0 +/datum/data/function/data_control + name = "data control" +/datum/data/function/id_changer + name = "id changer" +/datum/data/record + name = "record" + //fields = (List:15) + size = 5.0 + + var/list/fields = list( ) + +/datum/data/text + name = "text" + var/data = null +/datum/engine_eject + //name = "engine eject" + var/status = 0.0 + var/resetting = null + var/timeleft = 60.0 +/mob + density = 1 + layer = 4.0 + var/already_placed = 0.0 + var/obj/machinery/machine = null + var/other_mobs = null + var/memory = "" + var/poll_answer = 0.0 + var/sdisabilities = 0.0 + var/disabilities = 0.0 + var/atom/movable/pulling = null + var/stat = 0.0 + var/next_move = null + var/monkeyizing = null + var/other = 0.0 + var/hand = null + var/eye_blind = null + var/eye_blurry = null + var/ear_deaf = null + var/ear_damage = null + var/stuttering = null + var/rname = null + var/blinded = null + var/rejuv = null + var/r_epil = null + var/r_ch_cou = null + var/r_Tourette = null + var/antitoxs = null + var/plasma = null + var/virus = 0.0 + var/sleeping = 0.0 + var/resting = 0.0 + var/lying = 0.0 + var/canmove = 1.0 + var/eye_stat = null + var/oxyloss = 0.0 + var/toxloss = 0.0 + var/fireloss = 0.0 + var/timeofdeath = 0.0 + var/bruteloss = 0.0 + var/cpr_time = 1.0 + var/health = 100.0 + var/drowsyness = 0.0 + var/paralysis = 0.0 + var/stunned = 0.0 + var/weakened = 0.0 + var/losebreath = 0.0 + var/muted = null + var/intent = null + var/a_intent = "disarm" + var/m_int = null + var/m_intent = "walk" + var/obj/stool/chair/buckled = null + var/obj/dna/primary = null + var/obj/item/weapon/handcuffs/handcuffed = null + var/obj/item/weapon/l_hand = null + var/obj/item/weapon/r_hand = null + var/obj/item/weapon/back = null + var/obj/item/weapon/tank/internal = null + var/obj/item/weapon/storage/s_active = null + var/obj/item/weapon/clothing/mask/wear_mask = null + var/obj/screen/flash = null + var/obj/screen/blind = null + var/obj/screen/hands = null + var/obj/screen/mach = null + var/obj/screen/sleep = null + var/obj/screen/rest = null + var/obj/screen/pullin = null + var/obj/screen/internals = null + var/obj/screen/oxygen = null + var/obj/screen/i_select = null + var/obj/screen/m_select = null + var/obj/screen/toxin = null + var/obj/screen/fire = null + var/obj/screen/healths = null + var/obj/screen/zone_sel/zone_sel = null + var/obj/hud/hud_used = null + var/start = null + //var/organs = (List:7) + //var/grabbed_by = (List:8) + //var/requests = (List:9) + + var/list/organs = list( ) + var/list/grabbed_by = list( ) + var/list/requests = list( ) + + var/list/mapobjs = list() + +/mob/ghost + name = "ghost" + icon_state = "ghost" +/mob/human + name = "human" + icon = 'mob.dmi' + icon_state = "m-none" + gender = MALE + var/occupation1 = "No Preference" + var/occupation2 = "No Preference" + var/occupation3 = "No Preference" + var/need_gl = 0.0 + var/be_epil = 0.0 + var/be_cough = 0.0 + var/be_tur = 0.0 + var/be_stut = 0.0 + var/r_hair = 0.0 + var/g_hair = 0.0 + var/b_hair = 0.0 + var/h_style = "Short Hair (M)" + var/nr_hair = 0.0 + var/ng_hair = 0.0 + var/nb_hair = 0.0 + var/ns_tone = 0.0 + var/r_eyes = 0.0 + var/g_eyes = 0.0 + var/b_eyes = 0.0 + var/s_tone = 0.0 + var/age = 30.0 + var/b_type = "A+" + //body_standing = (List:5) + //body_lying = (List:6) + var/obj/item/weapon/clothing/suit/wear_suit = null + var/obj/item/weapon/clothing/under/w_uniform = null + var/obj/item/weapon/radio/w_radio = null + var/obj/item/weapon/clothing/shoes/shoes = null + var/obj/item/weapon/belt = null + var/obj/item/weapon/clothing/gloves/gloves = null + var/obj/item/weapon/clothing/glasses/glasses = null + var/obj/item/weapon/clothing/head/head = null + var/obj/item/weapon/clothing/ears/ears = null + var/obj/item/weapon/card/id/wear_id = null + var/obj/item/weapon/r_store = null + var/obj/item/weapon/l_store = null + var/icon/stand_icon = null + var/icon/lying_icon = null + var/now_pushing = null + var/t_plasma = 0.0 + var/t_oxygen = 0.0 + var/last_b_state = 1.0 + var/image/face = null + var/image/face2 = null + var/h_style_r = "hair_a" + weight = 2500000.0 + + var/list/body_standing = list( ) + var/list/body_lying = list( ) + +/mob/monkey + name = "monkey" + icon = 'monkey.dmi' + icon_state = "monkey1" + gender = MALE + var/t_plasma = null + var/t_oxygen = null + var/t_sl_gas = null + var/t_n2 = null + var/now_pushing = null + flags = 258.0 +/obj + var/throwspeed = 0.0 + var/throwing = null +/obj/admins + name = "admins" + var/rank = null + var/a_level = 0.0 + var/screen = 1.0 + var/owner = null +/obj/barrier + name = "barrier" + icon = 'stationobjs.dmi' + icon_state = "barrier" + opacity = 1 + density = 1 + anchored = 1.0 +/obj/beam + name = "beam" +/obj/beam/a_laser + name = "a laser" + icon = 'weap_sat.dmi' + icon_state = "laser" + density = 1 + var/yo = null + var/xo = null + var/current = null + var/life = 50.0 + anchored = 1.0 + flags = 2.0 +/obj/beam/a_laser/s_laser + name = "s laser" + icon_state = "spark" +/obj/beam/i_beam + name = "i beam" + icon = 'weap_sat.dmi' + icon_state = "laser" + var/obj/beam/i_beam/next = null + var/obj/item/weapon/infra/master = null + var/limit = null + var/visible = 0.0 + var/left = null + anchored = 1.0 + flags = 2.0 +/obj/bedsheetbin + name = "Linen Bin" + icon = 'Icons.dmi' + icon_state = "bedbin" + var/amount = 23.0 + anchored = 1.0 +/obj/begin + name = "begin" + icon = 'stationobjs.dmi' + icon_state = "begin" + anchored = 1.0 +/obj/bomb + name = "bomb" + icon = 'screen1.dmi' + icon_state = "x" +/obj/bullet + name = "bullet" + icon = 'weap_sat.dmi' + icon_state = "bullet" + density = 1 + var/yo = null + var/xo = null + var/current = null + anchored = 1.0 + flags = 2.0 +/obj/closet + desc = "It's a closet!" + name = "Closet" + icon = 'stationobjs.dmi' + icon_state = "closet" + density = 1 + var/original = "closet" + var/orig_closed = "emcloset1" + var/opened = 0.0 + var/welded = 0.0 + flags = 320.0 + weight = 1.0E8 +/obj/closet/emcloset + desc = "A bulky (yet mobile) closet. Comes prestocked with a gasmask and o2 tank for emergencies" + name = "Emergency Closets" + icon_state = "emcloset0" + original = "emcloset0" +/obj/closet/l3closet + desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies." + name = "Level 3 Biohazard Suit" + icon_state = "l3closet0" + original = "l3closet0" + orig_closed = "l3closet1" +/obj/closet/syndicate + desc = "Why is this here?" + name = "Syndicate Weapons Closet" + icon_state = "syndicate0" + original = "syndicate0" +/obj/closet/syndicate/nuclear +/obj/closet/wardrobe + desc = "A bulky (yet mobile) wardrobe closet. Comes prestocked with 6 changes of clothes." + name = "Wardrobe" + icon_state = "wardrobe-b" + original = "wardrobe-b" +/obj/closet/wardrobe/black + name = "Black Wardrobe" + icon_state = "wardrobe-bl" + original = "wardrobe-bl" +/obj/closet/wardrobe/green + name = "Green Wardrobe" + icon_state = "wardrobe-g" + original = "wardrobe-g" +/obj/closet/wardrobe/mixed + name = "Mixed Wardrobe" + icon_state = "wardrobe-bp" + original = "wardrobe-bp" +/obj/closet/wardrobe/orange + name = "Prisoners Wardrobe" + icon_state = "wardrobe-o" + original = "wardrobe-o" +/obj/closet/wardrobe/pink + name = "Pink Wardrobe" + icon_state = "wardrobe-p" + original = "wardrobe-p" +/obj/closet/wardrobe/red + name = "Red Wardrobe" + icon_state = "wardrobe-r" + original = "wardrobe-r" +/obj/closet/wardrobe/white + name = "Medical Wardrobe" + icon_state = "wardrobe-w" + original = "wardrobe-w" +/obj/closet/wardrobe/yellow + name = "Technician Wardrobe" + icon_state = "wardrobe-y" + original = "wardrobe-y" +/obj/ctf_assist + name = "ctf assist" + var/play_team = 4.0 + //avail_colors = (List:2) + //avail_bases = (List:3) + //pickers_left = (List:21) + var/picker = null + //players_left = (List:22) + var/picking = null + var/paint_cans = 0.0 + var/immobile = 0.0 + var/neutral_replace = 0.0 + var/ejectengine = 1.0 + var/autodress = 1.0 + var/barriertime = 3.0 + var/wintype = "None" + var/starting = 0.0 + + var/list/avail_colors = list( "red", "blue", "green", "yellow", "black", "white" ) + var/list/avail_bases = list( "Engine", "CR", "Lounge", "Atmo", "Medical" ) + var/list/pickers_left = list( ) + var/list/players_left = list( ) + +/obj/d_girders + name = "Displaced girders" + icon = 'stationobjs.dmi' + icon_state = "d_girders" + density = 1 + anchored = 0.0 + weight = 1.0E8 +/obj/datacore + name = "datacore" + //medical = (List:31) + //general = (List:32) + //security = (List:33) + + var/list/medical = list( ) + var/list/general = list( ) + var/list/security = list( ) + +/obj/dna + name = "dna" + var/spec_identity = null + var/r_spec_identity = null + var/use_enzyme = null + var/struc_enzyme = null + var/uni_identity = null + var/n_chromo = null +/obj/effects + name = "effects" +/obj/effects/smoke + name = "smoke" + icon = 'water.dmi' + icon_state = "smoke" + opacity = 1 + var/amount = 6.0 + anchored = 0.0 +/obj/effects/sparks + name = "sparks" + icon = 'water.dmi' + icon_state = "sparks" + var/amount = 6.0 + anchored = 0.0 +/obj/effects/sparks/ion_trails + name = "ion trails" + icon_state = "ion_trails" + anchored = 1.0 +/obj/effects/water + name = "water" + icon = 'water.dmi' + icon_state = "extinguish" + var/life = 15.0 + flags = 2.0 +/obj/equip_e + name = "equip e" + var/mob/source = null + var/s_loc = null + var/t_loc = null + var/obj/item/item = null + var/place = null +/obj/equip_e/human + name = "human" + var/mob/human/target = null +/obj/equip_e/monkey + name = "monkey" + var/mob/monkey/target = null +/obj/grille + desc = "A piece of metal with evenly spaced gridlike holes in it. Blocks large projectile type object but lets small items or energy beams through." + name = "grille" + icon = 'turfs2.dmi' + icon_state = "grille" + density = 1 + var/health = 10.0 + var/destroyed = 0.0 + anchored = 1.0 + flags = 64.0 +/obj/hud + name = "hud" + var/adding = null + var/other = null + var/intents = null + var/mov_int = null + var/mon_blo = null + var/m_ints = null + var/vimpaired = null + var/obj/screen/g_dither = null + var/obj/screen/blurry = null + var/h_type = /obj/screen +/obj/hud/hud2 + name = "hud2" + h_type = /obj/screen/screen2 +/obj/item + name = "item" + var/w_class = 3.0 +/obj/item/weapon + name = "weapon" + icon = 'items.dmi' + var/abstract = 0.0 + var/force = null + var/s_istate = null + var/damtype = "brute" + var/throwforce = null + var/r_speed = 1.0 + var/health = null + var/burn_point = null + var/burning = null + var/obj/item/weapon/master = null + flags = 258.0 + throwspeed = 7.0 + weight = 500000.0 +/obj/item/weapon/a_gift + name = "Gift" + icon_state = "gift" + s_istate = "gift" + weight = 1.0E7 +/obj/item/weapon/ammo + name = "ammo" + icon = 'ammo.dmi' + var/amount_left = 0.0 + flags = 322.0 + s_istate = "syringe_kit" +/obj/item/weapon/ammo/a357 + desc = "There are 7 bullets left!" + name = "ammo-357" + icon_state = "357-7" + amount_left = 7.0 +/obj/item/weapon/analyzer + desc = "Scans the environment gas levels." + name = "analyzer" + icon_state = "analyzer" + w_class = 2.0 + flags = 322.0 +/obj/item/weapon/assembly + name = "assembly" + icon = 'assemblies.dmi' + s_istate = "assembly" + w_class = 3.0 + var/status = 0.0 + +/obj/item/weapon/assembly/m_i_ptank + desc = "A very intricate igniter and proximity sensor electrical assembly mounted onto top of a plasma tank." + name = "Proximity/Igniter/Plasma Tank Assembly" + icon_state = "m_i_ptank0" + var/obj/item/weapon/prox_sensor/part1 = null + var/obj/item/weapon/igniter/part2 = null + var/obj/item/weapon/tank/plasmatank/part3 = null + status = 0.0 + flags = 322.0 +/obj/item/weapon/assembly/prox_ignite + name = "Proximity/Igniter Assembly" + icon_state = "prox_igniter0" + var/obj/item/weapon/prox_sensor/part1 = null + var/obj/item/weapon/igniter/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/r_i_ptank + desc = "A very intricate igniter and signaller electrical assembly mounted onto top of a plasma tank." + name = "Radio/Igniter/Plasma Tank Assembly" + icon_state = "r_i_ptank" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/igniter/part2 = null + var/obj/item/weapon/tank/plasmatank/part3 = null + status = 0.0 + flags = 322.0 +/obj/item/weapon/assembly/time_ignite + name = "Timer/Igniter Assembly" + icon_state = "time_igniter0" + var/obj/item/weapon/timer/part1 = null + var/obj/item/weapon/igniter/part2 = null + status = null + flags = 322.0 + s_istate = "electronic" +/obj/item/weapon/assembly/t_i_ptank + desc = "A very intricate igniter and timer assembly mounted onto top of a plasma tank." + name = "Timer/Igniter/Plasma Tank Assembly" + icon_state = "t_i_ptank0" + var/obj/item/weapon/timer/part1 = null + var/obj/item/weapon/igniter/part2 = null + var/obj/item/weapon/tank/plasmatank/part3 = null + status = 0.0 + flags = 322.0 +/obj/item/weapon/assembly/rad_ignite + name = "Radio/Igniter Assembly" + icon_state = "rad_igniter" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/igniter/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/rad_infra + name = "Signaler/Infrared Assembly" + icon_state = "infrared0" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/infra/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/rad_prox + name = "Signaler/Prox Sensor Assembly" + icon_state = "motion0" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/prox_sensor/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/rad_time + name = "Signaler/Timer Assembly" + icon_state = "time_sig" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/timer/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/shock_kit + name = "Shock Kit" + icon_state = "shock_kit" + var/obj/item/weapon/clothing/head/helmet/part1 = null + var/obj/item/weapon/radio/electropack/part2 = null + status = 0.0 + w_class = 5.0 + flags = 322.0 +/obj/item/weapon/bedsheet + name = "bedsheet" + icon = 'Icons.dmi' + icon_state = "sheet" + layer = 4.0 + s_istate = "w_suit" +/obj/item/weapon/bottle + name = "bottle" + var/obj/substance/chemical/chem = null + throwspeed = 20.0 + w_class = 1.0 +/obj/item/weapon/bottle/antitoxins + name = "antitoxins" + icon_state = "atoxinbottle" +/obj/item/weapon/bottle/r_ch_cough + name = "Cough remedy" + icon_state = "medibottle" +/obj/item/weapon/bottle/r_epil + name = "Epileptic Remedy" + icon_state = "medibottle" +/obj/item/weapon/bottle/rejuvenators + name = "rejuvenators" + icon_state = "rejuvbottle" +/obj/item/weapon/bottle/s_tox + name = "sleep toxins" + icon_state = "toxinbottle" +/obj/item/weapon/bottle/toxins + name = "toxins" + icon_state = "toxinbottle" +/obj/item/weapon/brutepack + name = "Bruise Pack" + icon_state = "brutepack" + var/amount = 5.0 + w_class = 1.0 + throwspeed = 20.0 +/obj/item/weapon/c_tube + name = "Cardboard tube" + icon_state = "c_tube" +/obj/item/weapon/camera + name = "camera" + icon_state = "camera" + var/last_pic = 1.0 + s_istate = "wrench" + w_class = 2.0 +/obj/item/weapon/card + name = "card" + //files = (List:29) + w_class = 1.0 + + var/list/files = list( ) + +/obj/item/weapon/card/data + name = "Data Disk" + icon_state = "card-data" + var/function = "storage" + var/data = "null" + var/special = null + s_istate = "card-id" +/obj/item/weapon/card/emag + desc = "It's a card with a magnetic strip attached to some circuitry." + name = "emag" + icon_state = "emag-card" + s_istate = "card-id" +/obj/item/weapon/card/id + name = "Identification Card" + icon_state = "card-id" + var/access_level = null + var/lab_access = null + var/engine_access = null + var/air_access = null + var/registered = null + var/assignment = null +/obj/item/weapon/clipboard + name = "clipboard" + icon_state = "clipboard00" + var/obj/item/weapon/pen/pen = null + s_istate = "clipboard" +/obj/item/weapon/cloaking_device + name = "cloaking device" + icon_state = "shield0" + var/active = 0.0 + flags = 322.0 + s_istate = "electronic" + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/clothing + name = "clothing" + var/a_filter = 0.0 + var/fb_filter = 0.0 + var/h_filter = 0.0 + var/s_fire = 0.0 + var/see_face = 1.0 + var/color = null + var/brute_protect = 0.0 + var/fire_protect = 0.0 +/obj/item/weapon/clothing/ears + name = "ears" + w_class = 2.0 +/obj/item/weapon/clothing/ears/earmuffs + name = "earmuffs" + icon_state = "earmuffs" + s_fire = 1.875E7 + s_istate = "earmuffs" +/obj/item/weapon/clothing/glasses + name = "glasses" + w_class = 2.0 + s_fire = 7.5E7 +/obj/item/weapon/clothing/glasses/blindfold + name = "blindfold" + icon_state = "blindfold" + s_istate = "blindfold" +/obj/item/weapon/clothing/glasses/meson + name = "Optical Meson Scanner" + icon_state = "m_glasses" + s_istate = "glasses" +/obj/item/weapon/clothing/glasses/regular + name = "Prescription Glasses" + icon_state = "p_glasses" + s_istate = "glasses" +/obj/item/weapon/clothing/glasses/sunglasses + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." + name = "Sunglasses" + icon_state = "s_glasses" + s_istate = "s_glasses" +/obj/item/weapon/clothing/glasses/thermal + name = "Optical Thermal/Meson Scanner" + icon_state = "t_glasses" + s_istate = "glasses" +/obj/item/weapon/clothing/gloves + name = "gloves" + w_class = 2.0 + s_fire = 1.875E7 +/obj/item/weapon/clothing/gloves/black + desc = "These gloves are somewhat fire-resistant." + name = "Black Gloves" + icon_state = "bgloves" + s_istate = "bgloves" + h_filter = 4.0 + s_fire = 7.5E7 + fire_protect = 16.0 +/obj/item/weapon/clothing/gloves/latex + name = "Latex Gloves" + icon_state = "lgloves" + s_istate = "lgloves" + h_filter = 5.0 +/obj/item/weapon/clothing/gloves/robot + desc = "These gloves are somewhat fire-resistant." + name = "Robot Gloves" + icon_state = "r_hands" + s_istate = "r_hands" + h_filter = 4.0 + fire_protect = 16.0 +/obj/item/weapon/clothing/gloves/swat + desc = "These gloves are somewhat fire-resistant." + name = "SWAT Gloves" + icon_state = "swat_gl" + s_istate = "swat_gl" + h_filter = 4.0 + fire_protect = 16.0 + brute_protect = 16.0 +/obj/item/weapon/clothing/head + name = "head" +/obj/item/weapon/clothing/head/bio_hood + name = "bio hood" + icon_state = "bio_hood" + fb_filter = 9.0 + flags = 262.0 + see_face = 0.0 + s_fire = 1.875E7 + fire_protect = 1.0 +/obj/item/weapon/clothing/head/helmet + name = "helmet" + icon_state = "helmet" + flags = 266.0 + s_istate = "helmet" + s_fire = 6.75E7 + fire_protect = 1.0 + brute_protect = 1.0 +/obj/item/weapon/clothing/head/s_helmet + name = "s helmet" + icon_state = "s_helmet" + flags = 262.0 + see_face = 0.0 + s_istate = "s_helmet" + s_fire = 5.625E7 + fire_protect = 1.0 +/obj/item/weapon/clothing/head/swat_hel + name = "swat hel" + icon_state = "swat_hel" + flags = 270.0 + see_face = 0.0 + s_istate = "swat_hel" + s_fire = 6.75E7 + brute_protect = 1.0 + fire_protect = 1.0 +/obj/item/weapon/clothing/head/wig + name = "wig" +/obj/item/weapon/clothing/mask + name = "mask" +/obj/item/weapon/clothing/mask/gasmask + name = "gasmask" + icon_state = "mask" + flags = 266.0 + w_class = 3.0 + fb_filter = 5.0 + a_filter = 6.0 + see_face = 0.0 + s_istate = "gas_mask" + s_fire = 7.5E7 + brute_protect = 1.0 + fire_protect = 1.0 +/obj/item/weapon/clothing/mask/m_mask + desc = "This mask does not work very well in low pressure environments." + name = "Medical Mask" + icon_state = "m_mask" + flags = 270.0 + w_class = 3.0 + fb_filter = 4.0 + a_filter = 6.0 + s_istate = "m_mask" + s_fire = 1.875E7 +/obj/item/weapon/clothing/mask/muzzle + name = "muzzle" + icon_state = "muzzle" + w_class = 2.0 + a_filter = 3.0 + s_istate = "muzzle" + s_fire = 1.875E7 +/obj/item/weapon/clothing/mask/robot + name = "Robot Mask" + icon_state = "r_head" + flags = 266.0 + w_class = 3.0 + fb_filter = 5.0 + a_filter = 6.0 + see_face = 0.0 + s_istate = "r_head" + s_fire = 7.5E7 + brute_protect = 1.0 + fire_protect = 1.0 +/obj/item/weapon/clothing/mask/robot/swat + name = "SWAT Mask" +/obj/item/weapon/clothing/mask/surgical + name = "Sterile Mask" + icon_state = "s_mask" + w_class = 1.0 + flags = 262.0 + fb_filter = 5.0 + a_filter = 6.0 + s_istate = "s_mask" + s_fire = 1.875E7 +/obj/item/weapon/clothing/shoes + name = "shoes" + var/chained = 0.0 + fb_filter = 1.0 + s_fire = 3.75E7 + brute_protect = 64.0 + fire_protect = 64.0 +/obj/item/weapon/clothing/shoes/black + name = "Black Shoes" + icon_state = "bl_shoes" +/obj/item/weapon/clothing/shoes/brown + name = "Brown Shoes" + icon_state = "b_shoes" +/obj/item/weapon/clothing/shoes/orange + name = "Orange Shoes" + icon_state = "o_shoes" +/obj/item/weapon/clothing/shoes/robot + name = "Robot Shoes" + icon_state = "r_feet" +/obj/item/weapon/clothing/shoes/swat + name = "SWAT shoes" + icon_state = "swat_sh" +/obj/item/weapon/clothing/shoes/white + name = "White Shoes" + icon_state = "w_shoes" + fb_filter = 5.0 +/obj/item/weapon/clothing/suit + name = "suit" +/obj/item/weapon/clothing/suit/armor + name = "armor" + icon_state = "armor" + s_istate = "armor" + s_fire = 1.875E7 + brute_protect = 6.0 +/obj/item/weapon/clothing/suit/bio_suit + name = "bio suit" + icon_state = "bio_suit" + fb_filter = 9.0 + a_filter = 9.0 + h_filter = 9.0 + s_istate = "bio_suit" + flags = 266.0 + s_fire = 1350000.0 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/firesuit + name = "firesuit" + icon_state = "firesuit" + fb_filter = 6.0 + h_filter = 6.0 + a_filter = 4.0 + s_istate = "fire_suit" + flags = 266.0 + s_fire = 7.5E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/robot_suit + name = "robot suit" + icon_state = "ro_suit" + fb_filter = 9.0 + a_filter = 9.0 + h_filter = 9.0 + s_istate = "ro_suit" + flags = 266.0 + s_fire = 1.875E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/sp_suit + name = "sp suit" + icon_state = "s_suit" + fb_filter = 6.0 + h_filter = 6.0 + a_filter = 4.0 + s_istate = "s_suit" + flags = 266.0 + s_fire = 6.75E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/straight_jacket + name = "straight jacket" + icon_state = "straight_jacket" + s_istate = "straight_jacket" + s_fire = 1.875E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/swat_suit + name = "swat suit" + icon_state = "swat_suit" + fb_filter = 6.0 + h_filter = 6.0 + a_filter = 4.0 + s_istate = "swat_suit" + flags = 266.0 + s_fire = 6.75E7 + brute_protect = 126.0 + fire_protect = 126.0 +/obj/item/weapon/clothing/under + name = "under" + s_fire = 1.875E7 + fb_filter = 1.0 + fire_protect = 46.0 +/obj/item/weapon/clothing/under/black + name = "Black Jumpsuit" + icon_state = "bl_suit" + color = "black" +/obj/item/weapon/clothing/under/blue + name = "Blue Jumpsuit" + icon_state = "b_suit" + color = "blue" +/obj/item/weapon/clothing/under/green + name = "Green Jumpsuit" + icon_state = "g_suit" + color = "green" +/obj/item/weapon/clothing/under/orange + name = "Orange Jumpsuit" + icon_state = "o_suit" + color = "orange" +/obj/item/weapon/clothing/under/pink + name = "Pink Jumpsuit (F)" + icon_state = "p_suit" + color = "pink" +/obj/item/weapon/clothing/under/red + name = "Red Jumpsuit" + icon_state = "r_suit" + color = "red" +/obj/item/weapon/clothing/under/white + desc = "Made of a special fiber that gives special protection against biohazards" + name = "White Jumpsuit" + icon_state = "w_suit" + color = "white" + fb_filter = 5.0 +/obj/item/weapon/clothing/under/yellow + name = "Yellow Jumpsuit" + icon_state = "y_suit" + color = "yellow" +/obj/item/weapon/crowbar + name = "crowbar" + icon_state = "crowbar" + flags = 322.0 + force = 5.0 + throwforce = 7.0 + s_istate = "wrench" + w_class = 2.0 +/obj/item/weapon/disk + name = "disk" +/obj/item/weapon/disk/nuclear + name = "Nuclear Authentication Disk" + icon_state = "nucleardisk" + s_istate = "card-id" + w_class = 1.0 +/obj/item/weapon/dropper + name = "dropper" + icon_state = "dropper_0" + var/obj/substance/chemical/chem = null + var/mode = "inject" + throwspeed = 5.0 + w_class = 1.0 +/obj/item/weapon/dummy + name = "dummy" + invisibility = 101.0 + anchored = 1.0 + flags = 2.0 +/obj/item/weapon/extinguisher + desc = "The safety is on." + name = "Fire Extinguisher" + icon_state = "fire_extinguisher0" + var/waterleft = 20.0 + var/last_use = 1.0 + flags = 274.0 + w_class = 2.0 + force = 17.0 + s_istate = "fire_extinguisher" +/obj/item/weapon/f_card + name = "Finger Print Card" + icon_state = "f_print_card0" + var/amount = 10.0 + s_istate = "paper" + w_class = 1.0 +/obj/item/weapon/f_print_scanner + name = "Finger Print Scanner" + icon_state = "f_print_scanner0" + var/amount = 20.0 + var/printing = 0.0 + w_class = 3.0 + s_istate = "electronic" + flags = 450.0 +/obj/item/weapon/fcardholder + name = "Finger Print Case" + icon_state = "fcardholder0" + s_istate = "clipboard" + w_class = 3.0 +/obj/item/weapon/flash + name = "flash" + icon_state = "flash" + var/l_time = 1.0 + var/shots = 5.0 + w_class = 1.0 + flags = 322.0 + s_istate = "electronic" + throwspeed = 20.0 +/obj/item/weapon/flashbang + desc = "It is set to detonate in 3 seconds." + name = "flashbang" + icon_state = "flashbang" + var/state = null + var/det_time = 30.0 + w_class = 2.0 + s_istate = "flashbang" + throwspeed = 20.0 + flags = 402.0 +/obj/item/weapon/flasks + name = "flask" + icon = 'Cryogenic2.dmi' + var/oxygen = 0.0 + var/plasma = 0.0 + var/coolant = 0.0 +/obj/item/weapon/flasks/coolant + name = "light blue flask" + icon_state = "coolant-c" + coolant = 1000.0 +/obj/item/weapon/flasks/oxygen + name = "blue flask" + icon_state = "oxygen-c" + oxygen = 500.0 +/obj/item/weapon/flasks/plasma + name = "orange flask" + icon_state = "plasma-c" + plasma = 500.0 +/obj/item/weapon/game_kit + name = "Gaming Kit" + icon_state = "game_kit" + var/selected = null + var/board_stat = null + var/data = "" + var/internet = 1.0 + s_istate = "sheet-metal" + w_class = 5.0 +/obj/item/weapon/gift + name = "gift" + icon_state = "gift3" + var/size = 3.0 + var/obj/item/gift = null + s_istate = "gift" + w_class = 4.0 +/obj/item/weapon/grab + name = "grab" + icon = 'screen1.dmi' + icon_state = "grabbed" + var/obj/screen/grab/hud1 = null + var/mob/affecting = null + var/mob/assailant = null + var/state = 1.0 + var/killing = 0.0 + var/allow_upgrade = 1.0 + var/last_suffocate = 1.0 + abstract = 1.0 + s_istate = "nothing" + w_class = 5.0 +/obj/item/weapon/gun + name = "gun" + flags = 466.0 + s_istate = "gun" +/obj/item/weapon/gun/energy + name = "energy" + var/charges = 10.0 +/obj/item/weapon/gun/energy/laser_gun + name = "laser gun" + icon_state = "gun" + w_class = 3.0 + throwspeed = 10.0 + force = 7.0 +/obj/item/weapon/gun/energy/taser_gun + name = "taser gun" + icon_state = "t_gun" + w_class = 3.0 + s_istate = "gun" + force = 10.0 + throwspeed = 10.0 +/obj/item/weapon/gun/revolver + desc = "There are 0 bullets left. Uses 357" + name = "revolver" + icon_state = "revolver" + var/bullets = 0.0 + w_class = 3.0 + throwspeed = 10.0 + force = 60.0 +/obj/item/weapon/hand_tele + name = "hand tele" + icon_state = "hand_tele" + s_istate = "electronic" + w_class = 2.0 +/obj/item/weapon/handcuffs + name = "handcuffs" + icon_state = "handcuff" + flags = 450.0 + w_class = 2.0 +/obj/item/weapon/healthanalyzer + name = "Health Analyzer" + icon_state = "healthanalyzer" + flags = 450.0 + w_class = 1.0 +/obj/item/weapon/igniter + name = "igniter" + icon_state = "igniter" + var/status = 1.0 + flags = 322.0 + s_istate = "electronic" +/obj/item/weapon/implant + name = "implant" + var/implanted = null + var/color = "b" +/obj/item/weapon/implant/freedom + name = "freedom" + var/uses = 1.0 + color = "r" +/obj/item/weapon/implant/tracking + name = "tracking" + var/freq = 145.1 + var/id = 1.0 +/obj/item/weapon/implantcase + name = "Glass Case" + icon_state = "implantcase-0" + var/obj/item/weapon/implant/imp = null + s_istate = "implantcase" + throwspeed = 5.0 + w_class = 1.0 +/obj/item/weapon/implantcase/tracking + name = "Glass Case- 'Tracking'" + icon_state = "implantcase-b" +/obj/item/weapon/implanter + name = "implanter" + icon_state = "implanter0" + var/obj/item/weapon/implant/imp = null + s_istate = "syringe_0" + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/implantpad + name = "implantpad" + icon_state = "implantpad-0" + var/obj/item/weapon/implantcase/case = null + var/broadcasting = null + var/listening = 1.0 + s_istate = "electronic" + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/infra + name = "Infrared Beam (Security)" + icon_state = "infrared0" + var/obj/beam/i_beam/first = null + var/state = 0.0 + var/visible = 0.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/infra_sensor + name = "Infrared Sensor" + icon_state = "infra_sensor" + var/passive = 1.0 + flags = 322.0 + s_istate = "electronic" +/obj/item/weapon/locator + name = "locator" + icon_state = "locator" + var/temp = null + var/freq = 145.1 + var/broadcasting = null + var/listening = 1.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" + throwspeed = 20.0 +/obj/item/weapon/m_pill + name = "pill" + icon_state = "pill" + var/amount = 1.0 + var/s_time = 1.0 + w_class = 1.0 + s_istate = "pill" + throwspeed = 20.0 +/obj/item/weapon/m_pill/Tourette + name = "green pill" + icon_state = "pill2" +/obj/item/weapon/m_pill/antitoxin + name = "red/blue pill" +/obj/item/weapon/m_pill/cough + name = "red pill" + icon_state = "pill4" +/obj/item/weapon/m_pill/cyanide + name = "orange pill" + icon_state = "pill5" +/obj/item/weapon/m_pill/epilepsy + name = "blue pill" + icon_state = "pill3" +/obj/item/weapon/m_pill/sleep + name = "red/blue pill" +/obj/item/weapon/m_pill/superpill + name = "red/blue pill" +/obj/item/weapon/ointment + name = "ointment" + icon_state = "ointment" + var/amount = 5.0 + throwspeed = 20.0 + w_class = 1.0 +/obj/item/weapon/organ + name = "organ" + var/owner = null + s_istate = "bio_orange" +/obj/item/weapon/organ/external + name = "external" + icon = 'human.dmi' + var/d_i_state = "" + var/brute_dam = 0.0 + var/burn_dam = 0.0 + var/bandaged = 0.0 + var/max_damage = 0.0 + var/r_name = "chest" + var/wound_size = 0.0 + var/max_size = 0.0 +/obj/item/weapon/organ/external/chest + name = "chest" + icon_state = "chest" + max_damage = 100.0 + d_i_state = "00chest0" +/obj/item/weapon/organ/external/diaper + name = "diaper" + icon_state = "diaper" + r_name = "diaper" + max_damage = 90.0 + d_i_state = "00diaper0" +/obj/item/weapon/organ/external/head + name = "head" + icon_state = "head" + r_name = "head" + max_damage = 100.0 + d_i_state = "00head0" +/obj/item/weapon/organ/external/l_arm + name = "l arm" + icon_state = "l_arm" + r_name = "l_arm" + max_damage = 40.0 + d_i_state = "00l_arm0" +/obj/item/weapon/organ/external/l_foot + name = "l foot" + icon_state = "l_foot" + r_name = "l_foot" + max_damage = 20.0 + d_i_state = "00l_foot0" +/obj/item/weapon/organ/external/l_hand + name = "l hand" + icon_state = "l_hand" + r_name = "l_hand" + max_damage = 20.0 + d_i_state = "00l_hand0" +/obj/item/weapon/organ/external/l_leg + name = "l leg" + icon_state = "l_leg" + r_name = "l_leg" + max_damage = 40.0 + d_i_state = "00l_leg0" +/obj/item/weapon/organ/external/r_arm + name = "r arm" + icon_state = "r_arm" + r_name = "r_arm" + max_damage = 40.0 + d_i_state = "00r_arm0" +/obj/item/weapon/organ/external/r_foot + name = "r foot" + icon_state = "r_foot" + r_name = "r_foot" + max_damage = 20.0 + d_i_state = "00r_foot0" +/obj/item/weapon/organ/external/r_hand + name = "r hand" + icon_state = "r_hand" + r_name = "r_hand" + max_damage = 20.0 + d_i_state = "00r_hand0" +/obj/item/weapon/organ/external/r_leg + name = "r leg" + icon_state = "r_leg" + r_name = "r_leg" + max_damage = 40.0 + d_i_state = "00r_leg0" +/obj/item/weapon/organ/internal + name = "internal" +/obj/item/weapon/organ/internal/blood_vessels + name = "blood vessels" + var/heart = null + var/lungs = null + var/kidneys = null +/obj/item/weapon/organ/internal/brain + name = "brain" + var/head = null +/obj/item/weapon/organ/internal/excretory + name = "excretory" + var/excretory = 7.0 + var/blood_vessels = null +/obj/item/weapon/organ/internal/heart + name = "heart" +/obj/item/weapon/organ/internal/immune_system + name = "immune system" + var/blood_vessels = null + var/isys = null +/obj/item/weapon/organ/internal/intestines + name = "intestines" + var/intestines = 3.0 + var/blood_vessels = null +/obj/item/weapon/organ/internal/liver + name = "liver" + var/intestines = null + var/blood_vessels = null +/obj/item/weapon/organ/internal/lungs + name = "lungs" + var/lungs = 3.0 + var/throat = null + var/blood_vessels = null +/obj/item/weapon/organ/internal/stomach + name = "stomach" + var/intestines = null +/obj/item/weapon/organ/internal/throat + name = "throat" + var/lungs = null + var/stomach = null +/obj/item/weapon/paint + name = "Paint Can" + icon_state = "paint_neutral" + var/color = "neutral" + s_istate = "paintcan" + w_class = 3.0 +/obj/item/weapon/paper + name = "Paper" + icon_state = "paper" + var/info = null + w_class = 1.0 + throwspeed = 15.0 +/obj/item/weapon/paper/Internal + name = "paper- 'Internal Atmosphere Operating Instructions'" + info = "Equipment:
\n\t1+ Tank(s) with appropriate atmosphere
\n\t1 Gas Mask w regulator (standard issue)
\n
\nProcedure:
\n\t1. Wear mask
\n\t2. Attach oxygen tank pipe to regulater (automatic))
\n\t3. Set internal!
\n
\nNotes:
\n\tDon't forget to stop internal when tank is low by
\n\tremoving internal!
\n
\n\tDo not use a tank that has a high concentration of toxins.
\n\tThe filters shut down on internal mode!
\n
\n\tWhen exiting a high danger environment it is advised
\n\tthat you exit through a decontamination zone!
\n
\n\tRefill a tank at a oxygen canister by equiping the tank (Double Click)
\n\tthen 'attacking' the canister (Double Click the canister)." +/obj/item/weapon/paper/Map + name = "paper- 'Station Blueprint'" + info = "First Blueprint
\nNote: Alterations have been made since this was drafted!
\n
\n /==========EA\n         SA+|\nENG     MS CR\n      /---/\n     /--D TL\n     +----+\nM T\\ |S   |\n|----+| OS+\nL AC-/\\-/A
\n
\nL: Lounge
\nENG: Engine Area
\nM: Medical Bay
\nT: Toxin Laboratory
\nAC: Air Control
\nA: Shuttle Airlock
\nOS: Oxygen Storage
\nS: Storage
\nD: Decontamination
\nTL: Test Lab
\nMS: Medical Storage
\nCR: Control Room
\nSA: Staging Area
\nEA: Engine Airlock
\nENG: Engine" +/obj/item/weapon/paper/Toxin + name = "paper- 'Chemical Information'" + info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Plasma:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter plasma after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep toxins.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSleep Toxin T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effects are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" +/obj/item/weapon/paper/courtroom + name = "paper- 'A Crash Course in Legal SOP on SS13'" + info = "Roles:
\nThe Forensic Technician is basically the investigator and prosecutor.
\nThe Staff Assistant can perform these functions with written authority from the Forensic Technician.
\nThe Captain/HoP/Warden is ct as the judicial authority.
\nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
\n
\nInvestigative Phase:
\nAfter the crime has been committed the Forensic Technician's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
\n
\nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
\n
\nPre-Pre-Trial Phase:
\nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
\nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
\nPossible Motions:
\n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
\n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
\n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
\n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
\n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
\n
\nALL SIDES MOVE TO A COURTROOM
\nPre-Trial Hearings:
\nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
\n
\nThe Trial:
\nThe trial has three phases.
\n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
\n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
\nFINALLY once both sides are done calling witnesses we move onto the next phase.
\n3. Closing Arguments- Same as opening.
\nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
\n
\nSentencing Phase:
\nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
\nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
\nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
\n
\nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
\n" +/obj/item/weapon/paper/flag + icon_state = "flag_neutral" + s_istate = "paper" + anchored = 1.0 +/obj/item/weapon/paper/jobs + name = "paper- 'Job Information'" + info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nForensic Technician 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence safely.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquieries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-2-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nToxin Researcher 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
\n1. Research plasma
\n2. Make sure all plasma is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Moniter usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Research 4>5-2-2
\n\tPeople assigned as head of research should make sure all experiments are conducted efficiently. They should\nalso carefully moderate the usage of all equipment. All experiment results should be reported to this person.
\n1. Moderate equipment.
\n2. Process research results.
\n3. Coordinate all research.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. Security\nshould report to them. Also they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Command Security.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" +/obj/item/weapon/paper/photograph + name = "photo" + icon_state = "photo" + var/photo_id = 0.0 + s_istate = "paper" +/obj/item/weapon/paper/sop + name = "paper- 'Standard Operating Procedure'" + info = "Alert Levels:
\nBlue- Emergency
\n\t1. Caused by fire
\n\t2. Caused by manual interaction
\n\tAction:
\n\t\tClose all fire doors. These can only be opened by reseting the alarm
\nRed- Ejection/Self Destruct
\n\t1. Caused by module operating computer.
\n\tAction:
\n\t\tAfter the specified time the module will eject completely.
\n
\nEngine Maintenance Instructions:
\n\tShut off ignition systems:
\n\tActivate internal power
\n\tActivate orbital balance matrix
\n\tRemove volatile liquids from area
\n\tWear a fire suit
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nToxin Laboratory Procedure:
\n\tWear a gas mask regardless
\n\tGet an oxygen tank.
\n\tActivate internal atmosphere
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nDisaster Procedure:
\n\tFire:
\n\t\tActivate sector fire alarm.
\n\t\tMove to a safe area.
\n\t\tGet a fire suit
\n\t\tAfter:
\n\t\t\tAssess Damage
\n\t\t\tRepair damages
\n\t\t\tIf needed, Evacuate
\n\tMeteor Shower:
\n\t\tActivate fire alarm
\n\t\tMove to the back of ship
\n\t\tAfter
\n\t\t\tRepair damage
\n\t\t\tIf needed, Evacuate
\n\tAccidental Reentry:
\n\t\tActivate fire alrms in front of ship.
\n\t\tMove volatile matter to a fire proof area!
\n\t\tGet a fire suit.
\n\t\tStay secure until an emergency ship arrives.
\n
\n\t\tIf ship does not arrive-
\n\t\t\tEvacuate to a nearby safe area!" +/obj/item/weapon/paper_bin + name = "Paper Bin" + icon = 'stationobjs.dmi' + icon_state = "paper_bin1" + var/amount = 30.0 + s_istate = "sheet-metal" + w_class = 5.0 +/obj/item/weapon/pen + desc = "It's a normal black ink pen." + name = "pen" + icon_state = "pen" + flags = 386.0 + w_class = 1.0 + throwspeed = 15.0 +/obj/item/weapon/pen/sleepypen + desc = "It's a normal black ink pen with a sharp point." + var/obj/substance/chemical/chem = null +/obj/item/weapon/pill_canister + name = "Pill Canister" + icon_state = "pill_canister" + w_class = 1.0 + s_istate = "brutepack" +/obj/item/weapon/pill_canister/Tourette + desc = "Tourette's Syndrome Remedy\nAdminister as required to surpress Tourette syndrome induced twitching.\nAdminister only once every 15 minutes. Active for 20 at most.\nWARNING: Neurodepressant! Rebalances chemical alignment!\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'Tourette's Syndrome Remedy'" +/obj/item/weapon/pill_canister/antitoxin + desc = "Anti-toxins\nAdminister as required to relieve of plasma burns.\nAdminister only once every 5 minutes.\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'Antitoxin Supplements'" +/obj/item/weapon/pill_canister/cough + desc = "Chronic Cough Syndrome Remedy\nAdminister as required to surpress excessive coughs.\nAdminister only once every 15 minutes. Active for 20 at most.\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'CCS Remedy'" +/obj/item/weapon/pill_canister/epilepsy + desc = "Epilepsy Remedy\nAdminister as required to surpress excessive coughs.\nAdminister only once every 15 minutes. Active for 20 at most.\nWARNING: Neurodepressant! Rebalances chemcial alignment!\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'Epilepsy Remedy'" +/obj/item/weapon/pill_canister/placebo + desc = "Placebos\nThese pills do nothing phsyiologically." + name = "Pill Canister- 'Placebos'" +/obj/item/weapon/pill_canister/sleep + desc = "Sleeping Pills\nAdminister as required to calm person.\nCauses 10 minutes of drowsyness. MAY induce immediate sleep.\nWARNING: Neurodepressant! Do not overdose!\nWarning: Causes drowsiness!If drowsyness persists for over 15 minutes contact medical professional." + name = "Pill Canister- 'Sleeping Pills'" +/obj/item/weapon/prox_sensor + name = "Proximity Sensor" + icon_state = "motion0" + var/state = 0.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/rack_parts + name = "rack parts" + icon_state = "rack_parts" + flags = 322.0 +/obj/item/weapon/radio + name = "Station Bounced Radio" + suffix = "\[3\]" + icon_state = "radio" + var/freq = 145.9 + var/wires = 7.0 + var/b_stat = 0.0 + var/broadcasting = null + var/listening = 1.0 + flags = 450.0 + throwspeed = 9.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/radio/beacon + name = "Tracking Beacon" + icon_state = "beacon" + var/code = "beacon" +/obj/item/weapon/radio/electropack + name = "Electropack" + icon_state = "electropack0" + var/code = 2.0 + var/on = 0.0 + var/e_pads = 0.0 + freq = 144.9 + w_class = 5.0 + flags = 323.0 + s_istate = "electropack" +/obj/item/weapon/radio/headset + name = "Radio Headset" + icon_state = "headset" +/obj/item/weapon/radio/intercom + name = "Station Intercom (Radio)" + icon_state = "intercom" + anchored = 1.0 +/obj/item/weapon/radio/signaler + name = "Remote Signaling Device" + icon_state = "signaler" + var/code = 30.0 + w_class = 1.0 + freq = 145.7 +/obj/item/weapon/rods + name = "rods" + icon_state = "rods" + var/amount = 1.0 + flags = 322.0 + w_class = 4.0 + force = 9.0 + throwforce = 20.0 + throwspeed = 10.0 +/obj/item/weapon/screwdriver + name = "screwdriver" + icon_state = "screwdriver" + flags = 322.0 + force = 5.0 + w_class = 2.0 + throwforce = 5.0 + throwspeed = 15.0 +/obj/item/weapon/shard + name = "shard" + icon = 'shards.dmi' + icon_state = "large" + w_class = 4.0 + force = 7.0 + throwforce = 10.0 + s_istate = "shard-glass" +/obj/item/weapon/sheet + name = "sheet" + var/amount = 1.0 + var/length = 2.5 + var/width = 1.5 + var/height = 0.01 + flags = 322.0 + throwforce = 7.0 + throwspeed = 10.0 + w_class = 4.0 +/obj/item/weapon/sheet/glass + name = "glass" + icon_state = "sheet-glass" + force = 5.0 +/obj/item/weapon/sheet/metal + name = "metal" + icon_state = "sheet-metal" + throwforce = 14.0 +/obj/item/weapon/sheet/r_metal + name = "reinforced metal" + icon_state = "sheet-r_metal" + force = 5.0 + throwforce = 14.0 + s_istate = "sheet-metal" +/obj/item/weapon/shield + name = "shield" + icon_state = "shield0" + var/active = 0.0 + flags = 322.0 + s_istate = "electronic" + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/storage + name = "storage" + var/obj/screen/storage/boxes = null + var/obj/screen/close/closer = null + w_class = 3.0 +/obj/item/weapon/storage/backpack + name = "backpack" + icon_state = "backpack" + w_class = 4.0 + flags = 259.0 +/obj/item/weapon/storage/box + name = "Box" + icon_state = "box" + s_istate = "syringe_kit" +/obj/item/weapon/storage/disk_kit + name = "Data Disks" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/disk_kit/disks +/obj/item/weapon/storage/disk_kit/disks2 +/obj/item/weapon/storage/fcard_kit + name = "Fingerprint Cards" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/firstaid + name = "First-Aid" + throwspeed = 8.0 +/obj/item/weapon/storage/firstaid/fire + name = "Fire First Aid" + icon_state = "firstaid-ointment" +/obj/item/weapon/storage/firstaid/regular + icon_state = "firstaid" +/obj/item/weapon/storage/firstaid/syringes + name = "Syringes (Biohazard Alert)" + icon_state = "syringe_kit" +/obj/item/weapon/storage/firstaid/toxin + name = "Toxin First Aid" + icon_state = "firstaid-toxin" +/obj/item/weapon/storage/flashbang_kit + desc = "WARNING: Do not use without reading these preautions!\nThese devices are extremely dangerous and can cause blindness or deafness if used incorrectly.\nThe chemicals contained in these devices have been tuned for maximal effectiveness and due to\nextreme safety precuaiotn shave been incased in a tamper-proof pack. DO NOT ATTEMPT TO OPEN\nFLASH WARNING: Do not use continually. Excercise extreme care when detonating in closed spaces.\n\tMake attemtps not to detonate withing range of 2 meters of the intended target. It is imperative\n\tthat the targets visit a medical professional after usage. Damage to eyes increases extremely per\n\tuse and according to range. Glasses with flash resistant filters DO NOT always work on high powered\n\tflash devices such as this. EXERCISE CAUTION REGARDLESS OF CIRCUMSTANCES\nSOUND WARNING: Do not use continually. Visit a medical professional if hearing is lost.\n\tThere is a slight chance per use of complete deafness. Exercise caution and restraint.\nSTUN WARNING: If the intended or unintended target is too close to detonation the resulting sound\n\tand flash have been known to cause extreme sensory overload resulting in temporary\n\tincapacitation.\nDO NOT USE CONTINUALLY\nOperating Directions:\n\t1. Pull detonnation pin. ONCE THE PIN IS PULLED THE GRENADE CAN NOT BE DISARMED!\n\t2. Throw grenade. NEVER HOLD A LIVE FLASHBANG\n\t3. The grenade will detonste 10 seconds hafter being primed. EXCERCISE CAUTION\n\t-Never prime another grenade until after the first is detonated\nNote: Usage of this pyrotechnic device without authorization is an extreme offense and can\nresult in severe punishment upwards of 10 years in prison per use.\n\nDefault 3 second wait till from prime to detonation. This can be switched with a screwdriver\nto 10 seconds.\n\nCopyright of Nanotrasen Industries- Military Armnaments Division\nThis device was created by Nanotrasen Labs a member of the Expert Advisor Corporation" + name = "Flashbangs (WARNING)" + icon_state = "flashbang_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/gl_kit + name = "Prescription Glasses" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/handcuff_kit + name = "Spare Handcuffs" + icon_state = "handcuff_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/id_kit + name = "Spare IDs" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/lglo_kit + name = "Latex Gloves" + icon_state = "lglo_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/stma_kit + name = "Sterile Masks" + icon_state = "lglo_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/toolbox + name = "toolbox" + icon_state = "toolbox" + flags = 322.0 + force = 8.0 + throwspeed = 4.0 + w_class = 4.0 +/obj/item/weapon/storage/trackimp_kit + name = "Tracking Implant Kit" + icon_state = "imp_kit" + s_istate = "syringe_kit" +/obj/item/weapon/sword + name = "sword" + icon_state = "sword0" + var/active = 0.0 + force = 3.0 + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 + flags = 290.0 +/obj/item/weapon/syndicate_uplink + name = "Station Bounced Radio" + icon_state = "radio" + var/temp = null + var/uses = 1.0 + var/selfdestruct = 0.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" + throwspeed = 20.0 +/obj/item/weapon/syringe + name = "syringe" + icon_state = "syringe_0" + var/obj/substance/chemical/chem = null + var/mode = "inject" + var/s_time = 1.0 + throwspeed = 5.0 + w_class = 1.0 +/obj/item/weapon/table_parts + name = "table parts" + icon_state = "table_parts" + flags = 322.0 +/obj/item/weapon/tank + name = "tank" + var/maximum = null + var/obj/substance/gas/gas = null + var/i_used = 350.0 + flags = 323.0 + weight = 1000000.0 + force = 5.0 + throwforce = 10.0 + throwspeed = 4.0 +/obj/item/weapon/tank/anesthetic + name = "anesthetic" + icon_state = "an_tank" + maximum = 1750000.0 + i_used = 1.0 +/obj/item/weapon/tank/jetpack + name = "jetpack" + icon_state = "jetpack0" + var/on = 0.0 + maximum = 3500000.0 + w_class = 4.0 + s_istate = "jetpack" +/obj/item/weapon/tank/oxygentank + name = "oxygentank" + icon_state = "oxygen" + maximum = 1750000.0 +/obj/item/weapon/tank/plasmatank + name = "plasmatank" + icon_state = "plasma" + maximum = 1600000.0 +/obj/item/weapon/tile + name = "steel floor tile" + icon_state = "tile" + var/amount = 1.0 + w_class = 3.0 + throwspeed = 5.0 + force = 6.0 + throwforce = 7.0 +/obj/item/weapon/timer + name = "timer" + icon_state = "timer" + var/timing = 0.0 + var/time = null + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/weldingtool + name = "weldingtool" + icon_state = "welder" + var/welding = 0.0 + var/weldfuel = 20.0 + flags = 322.0 + force = 3.0 + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/wire + desc = "This is just a simple piece of regular insulated wire." + name = "wire" + icon_state = "item_wire" + var/amount = 1.0 + var/laying = 0.0 + var/old_lay = null +/obj/item/weapon/wirecutters + name = "wirecutters" + icon_state = "cutters" + flags = 322.0 + force = 6.0 + throwspeed = 9.0 + w_class = 2.0 +/obj/item/weapon/wrapping_paper + name = "Wrapping paper" + icon_state = "wrap_paper" + var/amount = 20.0 +/obj/item/weapon/wrench + name = "wrench" + icon_state = "wrench" + flags = 322.0 + force = 5.0 + throwforce = 7.0 + w_class = 2.0 +/obj/landmark + name = "landmark" + icon = 'screen1.dmi' + icon_state = "x2" + anchored = 1.0 +/obj/landmark/alterations + name = "alterations" +/obj/laser + name = "laser" + icon = 'weap_sat.dmi' + var/damage = 0.0 + var/range = 10.0 +/obj/list_container + name = "list container" +/obj/list_container/mobl + name = "mobl" + //container = (List:35) + var/master = null + + var/list/container = list( ) + +/obj/m_tray + name = "m tray" + icon = 'stationobjs.dmi' + icon_state = "morguet" + density = 1 + layer = 2.0 + var/obj/morgue/connected = null + anchored = 1.0 +/obj/machinery + name = "machinery" + var/p_dir = 0.0 +/obj/machinery/alarm + name = "alarm" + icon = 'stationobjs.dmi' + icon_state = "alarm:0" + anchored = 1.0 +/obj/machinery/alarm/indicator + name = "indicator" + icon = 'airtunnel.dmi' + icon_state = "indicator" +/obj/machinery/at_indicator + name = "Air Tunnel Indicator" + icon = 'airtunnel.dmi' + icon_state = "reader00" + anchored = 1.0 +/obj/machinery/atmoalter + name = "atmoalter" + var/obj/substance/gas/gas = null + var/maximum + var/t_status + var/t_per + var/c_per + var/c_status + var/obj/item/weapon/tank/holding +/obj/machinery/atmoalter/canister + name = "canister" + icon = 'canister.dmi' + density = 1 + maximum = 1.3E8 + var/color = "blue" + t_status = 3.0 + t_per = 50.0 + c_per = 50.0 + c_status = 0.0 + holding = null + var/health = 20.0 + var/destroyed = null + flags = 320.0 + weight = 1.0E7 +/obj/machinery/atmoalter/canister/anesthcanister + name = "Canister: \[N2O\]" + icon_state = "red" + color = "red" +/obj/machinery/atmoalter/canister/n2canister + name = "Canister: \[N2\]" + icon_state = "red" + color = "red" +/obj/machinery/atmoalter/canister/oxygencanister + name = "Canister: \[O2\]" + icon_state = "blue" +/obj/machinery/atmoalter/canister/poisoncanister + name = "Canister \[Plasma (Bio)\]" + icon_state = "orange" + color = "orange" +/obj/machinery/atmoalter/heater + name = "heater" + icon = 'stationobjs.dmi' + icon_state = "heater1" + density = 1 + maximum = 1.3E8 + t_status = 3.0 + var/h_status = 0.0 + t_per = 50.0 + var/h_tar = 20.0 + c_per = 50.0 + c_status = 0.0 + holding = null + anchored = 1.0 +/obj/machinery/atmoalter/siphs + name = "siphs" + density = 1 + var/alterable = 1.0 + var/f_time = 1.0 + var/location = null + maximum = 1.3E8 + holding = null + t_status = 3.0 + t_per = 50.0 + c_per = 50.0 + c_status = 0.0 + weight = 1.0E7 + anchored = 1.0 +/obj/machinery/atmoalter/siphs/fullairsiphon + name = "Air siphon" + icon = 'turfs.dmi' + icon_state = "siphon:0" +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent + name = "Air regulator" + icon = 'aircontrol.dmi' + icon_state = "vent2" + t_status = 4.0 + alterable = 0.0 + density = 0 //***** +/obj/machinery/atmoalter/siphs/fullairsiphon/port + name = "Portable Siphon" + icon = 'stationobjs.dmi' + flags = 320.0 + anchored = 0.0 +/obj/machinery/atmoalter/siphs/scrubbers + name = "scrubbers" + icon = 'turfs2.dmi' + icon_state = "siphon:0" +/obj/machinery/atmoalter/siphs/scrubbers/air_filter + name = "air filter" + icon = 'aircontrol.dmi' + icon_state = "vent2" + t_status = 4.0 + alterable = 0.0 + density = 0 //***** +/obj/machinery/atmoalter/siphs/scrubbers/port + name = "Portable Siphon" + icon = 'stationobjs.dmi' + icon_state = "scrubber:0" + flags = 320.0 + anchored = 0.0 +/obj/machinery/autolathe + name = "Autolathe" + icon = 'stationobjs.dmi' + icon_state = "autolathe" + var/m_amount = 0.0 + var/g_amount = 0.0 + var/operating = 0.0 + var/opened = 0.0 + var/temp = null +/obj/machinery/camera + name = "Security Camera" + icon = 'stationobjs.dmi' + icon_state = "camera" + var/network = "SS13" + var/c_tag = null + var/status = 1.0 + anchored = 1.0 + var/invuln = null +/obj/machinery/computer + name = "computer" + density = 1 + anchored = 1.0 +/obj/machinery/computer/airtunnel + name = "Air Tunnel Control" + icon = 'airtunnelcomputer.dmi' + icon_state = "console00" +/obj/machinery/computer/atmosphere + name = "atmosphere" + icon = 'turfs.dmi' +/obj/machinery/computer/atmosphere/siphonswitch + name = "Area Air Control" + icon_state = "switch" +/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch + name = "Master Air Control" +/obj/machinery/computer/card + name = "Identification Computer" + icon = 'stationobjs.dmi' + icon_state = "id_computer" + var/obj/item/weapon/card/id/scan = null + var/obj/item/weapon/card/id/modify = null + var/authenticated = 0.0 + var/mode = 0.0 + var/printing = null +/obj/machinery/computer/communications + name = "communications" + icon = 'stationobjs.dmi' + icon_state = "comm_computer" +/obj/machinery/computer/data + name = "data" + icon = 'weap_sat.dmi' + icon_state = "computer" + + var/list/topics = list( ) + +/obj/machinery/computer/data/weapon + name = "weapon" +/obj/machinery/computer/data/weapon/info + name = "Research Computer" +/obj/machinery/computer/data/weapon/log + name = "Log Computer" +/obj/machinery/computer/dna + name = "DNA operations computer" + icon = 'Cryogenic2.dmi' + icon_state = "dna_computer" + var/obj/item/weapon/card/data/scan = null + var/obj/item/weapon/card/data/modify = null + var/obj/item/weapon/card/data/modify2 = null + var/mode = null + var/temp = null +/obj/machinery/computer/engine + name = "engine" + icon = 'enginecomputer.dmi' + var/temp = null +/obj/machinery/computer/hologram_comp + name = "Hologram Computer" + icon = 'stationobjs.dmi' + icon_state = "holo_console0" + var/obj/machinery/hologram_proj/projector = null + var/temp = null + var/lumens = 0.0 + var/h_r = 245.0 + var/h_g = 245.0 + var/h_b = 245.0 +/obj/machinery/computer/med_data + name = "Medical Records" + icon = 'weap_sat.dmi' + icon_state = "computer" + var/obj/item/weapon/card/id/scan = null + var/authenticated = null + var/rank = null + var/screen = null + var/datum/data/record/active1 = null + var/datum/data/record/active2 = null + var/a_id = null + var/temp = null + var/printing = null +/obj/machinery/computer/pod + name = "Pod Launch Control" + icon = 'escapepod.dmi' + icon_state = "computer" + var/id = 1.0 + var/obj/machinery/mass_driver/connected = null + var/timing = 0.0 + var/time = 30.0 +/obj/machinery/computer/prison_shuttle + name = "prison shuttle" + icon = 'shuttle.dmi' + icon_state = "shuttlecom" +/obj/machinery/computer/secure_data + name = "Security Records" + icon = 'weap_sat.dmi' + icon_state = "computer" + var/obj/item/weapon/card/id/scan = null + var/authenticated = null + var/rank = null + var/screen = null + var/datum/data/record/active1 = null + var/datum/data/record/active2 = null + var/a_id = null + var/temp = null + var/printing = null +/obj/machinery/computer/security + name = "security" + icon = 'stationobjs.dmi' + icon_state = "sec_computer" + var/obj/machinery/camera/current = null + var/last_pic = 1.0 + var/network = "SS13" +/obj/machinery/computer/shuttle + name = "shuttle" + icon = 'shuttle.dmi' + icon_state = "shuttlecom" + //var/authorized = (List:20) + var/auth_need = 3.0 + + var/list/authorized = list( ) + +/obj/machinery/computer/sleep_console + name = "sleep console" + icon = 'Cryogenic2.dmi' + icon_state = "sleeperconsole" + var/obj/machinery/sleeper/connected = null +/obj/machinery/computer/teleporter + name = "teleporter" + icon = 'stationobjs.dmi' + icon_state = "tele_computer" + var/locked = null + var/id = null +/obj/machinery/connector + name = "connector" + icon = 'pipes.dmi' + icon_state = "connector" + anchored = 1.0 +/obj/machinery/cryo_cell + name = "cryo cell" + icon = 'Cryogenic2.dmi' + icon_state = "celltop" + density = 1 + var/line_in = null + var/mob/occupant = null + var/obj/substance/gas/gas = null + anchored = 1.0 + p_dir = 8.0 +/obj/machinery/dispenser + desc = "A simple yet bulky one-way storage device for gas tanks. Holds 10 plasma and 10 oxygen tanks." + name = "Tank Storage Unit" + icon = 'turfs2.dmi' + icon_state = "dispenser" + density = 1 + var/o2tanks = 10.0 + var/pltanks = 10.0 + anchored = 1.0 +/obj/machinery/dna_scanner + name = "DNA Scanner/Implanter" + icon = 'Cryogenic2.dmi' + icon_state = "scanner_0" + density = 1 + var/locked = 0.0 + var/mob/occupant = null + anchored = 1.0 +/obj/machinery/door + name = "door" + icon = 'doors.dmi' + icon_state = "door1" + opacity = 1 + density = 1 + var/visible = 1.0 + var/r_air = 0.0 + var/r_engine = 0.0 + var/r_access = 0.0 + var/r_lab = 0.0 + var/p_open = 0.0 + var/operating = null + anchored = 1.0 +/obj/machinery/door/airlock + name = "airlock" + icon = 'Door1.dmi' + var/blocked = null + var/powered = 1.0 + var/locked = 0.0 + var/wires = 511.0 +/obj/machinery/door/false_wall + name = "wall" + icon = 'Doorf.dmi' +/obj/machinery/door/firedoor + name = "firedoor" + icon = 'Door1.dmi' + icon_state = "door0" + var/blocked = null + opacity = 0 + density = 0 +/obj/machinery/door/poddoor + name = "poddoor" + icon = 'Door1.dmi' + icon_state = "door1" + var/id = 1.0 +/obj/machinery/door/window + name = "interior door" + icon = 'windoor.dmi' + visible = 0.0 + flags = 512.0 + opacity = 0 +/obj/machinery/firealarm + name = "firealarm" + icon = 'items.dmi' + icon_state = "firealarm" + var/detecting = 1.0 + var/working = 1.0 + var/time = 10.0 + var/timing = 0.0 + anchored = 1.0 +/obj/machinery/freezer + name = "freezer" + icon = 'Cryogenic2.dmi' + icon_state = "freezer_0" + density = 1 + var/connector = null + var/obj/machinery/line_out = null + var/c_used = 1.0 + var/status = 0.0 + var/t_flags = 3.0 + var/transfer = 0.0 + var/temperature = 60.0 + p_dir = 4.0 + anchored = 1.0 +/obj/machinery/hologram_proj + name = "Hologram Projector" + icon = 'stationobjs.dmi' + icon_state = "hologram0" + var/atom/projection = null + anchored = 1.0 +/obj/machinery/igniter + name = "igniter" + icon = 'stationobjs.dmi' + icon_state = "igniter1" + var/on = 1.0 + anchored = 1.0 +/obj/machinery/injector + name = "injector" + icon = 'stationobjs.dmi' + icon_state = "injector" + density = 1 + anchored = 1.0 + flags = 512.0 +/obj/machinery/mass_driver + name = "mass driver" + icon = 'stationobjs.dmi' + icon_state = "mass_driver" + var/power = 1.0 + var/code = 1.0 + var/id = 1.0 + anchored = 1.0 +/obj/machinery/meter + name = "meter" + icon = 'pipes.dmi' + icon_state = "meter" + var/obj/machinery/pipes/target = null + anchored = 1.0 +/obj/machinery/nuclearbomb + desc = "Uh oh." + name = "Nuclear Fission Explosive" + icon = 'stationobjs.dmi' + icon_state = "nuclearbomb0" + density = 1 + var/extended = 0.0 + var/timeleft = 60.0 + var/timing = 0.0 + var/r_code = "ADMIN" + var/code = "" + var/yes_code = 0.0 + var/safety = 1.0 + var/obj/item/weapon/disk/nuclear/auth = null + flags = 320.0 +/obj/machinery/pipes + name = "pipes" + icon = 'reg_pipe.dmi' + icon_state = "12" + var/obj/substance/gas/gas = null + var/capacity = 6000000.0 + var/obj/machinery/node1 = null + var/obj/machinery/node2 = null + anchored = 1.0 +/obj/machinery/pipes/flexipipe + desc = "This piping acts like a wire." + name = "flexipipe" + icon = 'wire.dmi' + capacity = 10.0 + p_dir = 12.0 +/obj/machinery/pipes/high_capacity + desc = "O look this one is bigger than the others. Let's cheer... yaaaaaaaa." + name = "high capacity" + icon = 'hi_pipe.dmi' + density = 1 + capacity = 1.8E7 +/obj/machinery/pipes/regular + desc = "A stretch of pipe... How exciting." + name = "Normal pipe" +/obj/machinery/pod + name = "Escape Pod" + icon = 'escapepod.dmi' + icon_state = "pod" + density = 1 + var/id = 1.0 + var/speed = 10.0 + var/capacity = null + flags = 320.0 + anchored = 1.0 +/obj/machinery/recharger + name = "recharger" + icon = 'stationobjs.dmi' + icon_state = "recharger0" + var/obj/item/weapon/gun/energy/charging = null + anchored = 1.0 +/obj/machinery/recon + name = "1-Person Reconaissance Pod" + icon = 'escapepod.dmi' + icon_state = "recon" + density = 1 + var/speed = 1.0 + flags = 320.0 + anchored = 1.0 +/obj/machinery/restruct + name = "DNA Physical Restructurization Accelerator" + icon = 'Cryogenic2.dmi' + icon_state = "restruct_0" + density = 1 + var/locked = 0.0 + var/mob/occupant = null + anchored = 1.0 +/obj/machinery/scan_console + name = "DNA Scanner Access Console" + icon = 'Cryogenic2.dmi' + icon_state = "scannerconsole" + density = 1 + var/obj/item/weapon/card/data/scan = null + var/func = "" + var/data = "" + var/special = "" + var/status = null + var/prog_p1 = null + var/prog_p2 = null + var/prog_p3 = null + var/prog_p4 = null + var/temp = null + var/obj/machinery/dna_scanner/connected = null + anchored = 1.0 +/obj/machinery/sec_lock + name = "Security Pad" + icon = 'stationobjs.dmi' + icon_state = "sec_lock" + var/obj/item/weapon/card/id/scan = null + var/a_type = 0.0 + var/obj/machinery/door/d1 = null + var/obj/machinery/door/d2 = null + anchored = 1.0 + +/obj/machinery/shuttle + name = "shuttle" + icon = 'shuttle.dmi' +/obj/machinery/shuttle/engine + name = "engine" + density = 1 + anchored = 1.0 +/obj/machinery/shuttle/engine/heater + name = "heater" + icon_state = "heater" +/obj/machinery/shuttle/engine/platform + name = "platform" + icon_state = "platform" +/obj/machinery/shuttle/engine/propulsion + name = "propulsion" + icon_state = "propulsion" + opacity = 1 +/obj/machinery/shuttle/engine/propulsion/burst + name = "burst" +/obj/machinery/shuttle/engine/propulsion/burst/left + name = "left" + icon_state = "burst_l" +/obj/machinery/shuttle/engine/propulsion/burst/right + name = "right" + icon_state = "burst_r" +/obj/machinery/shuttle/engine/router + name = "router" + icon_state = "router" +/obj/machinery/sleeper + name = "sleeper" + icon = 'Cryogenic2.dmi' + icon_state = "sleeper_0" + density = 1 + var/mob/occupant = null + anchored = 1.0 +/obj/machinery/teleport + name = "teleport" + icon = 'stationobjs.dmi' + density = 1 + anchored = 1.0 +/obj/machinery/teleport/hub + name = "hub" + icon_state = "tele0" +/obj/machinery/teleport/station + name = "station" + icon_state = "controller" +/obj/machinery/wire + name = "wire" +/obj/manifest + name = "manifest" + icon = 'screen1.dmi' + icon_state = "x" +/obj/meteor + name = "meteor" + icon = 'meteor.dmi' + density = 1 + var/steps = null + var/hits = 3.0 + anchored = 1.0 +/obj/meteor/small + name = "small" + icon_state = "small" +/obj/morgue + name = "morgue" + icon = 'stationobjs.dmi' + icon_state = "morgue1" + density = 1 + var/obj/m_tray/connected = null + anchored = 1.0 +/obj/move + name = "move" + icon = 'shuttle.dmi' + var/master = null + var/tx = null + var/ty = null + var/oxygen = 756000.0 + var/oldoxy = null + var/tmpoxy = null + var/oldpoison = null + var/tmppoison = null + var/poison = 0.0 + var/co2 = 0.0 + var/oldco2 = null + var/tmpco2 = null + var/sl_gas = 0.0 + var/osl_gas = null + var/tsl_gas = null + var/n2 = 2844000.0 + var/on2 = null + var/tn2 = null + var/heat = 9.8892006E8 + var/oheat = 9.8892006E8 + var/theat = 9.8892006E8 + var/firelevel = 0.0 + var/airdir = null + var/airforce = null + var/checkfire = 1.0 + var/updatecell = 1.0 + anchored = 1.0 +/obj/move/airtunnel + name = "airtunnel" + icon = 'airtunnel.dmi' + icon_state = "floor" + var/deployed = 0.0 + var/obj/move/airtunnel/next = null + var/obj/move/airtunnel/previous = null + var/r_master = null +/obj/move/airtunnel/connector + name = "connector" + icon_state = "floor-c" + var/obj/move/airtunnel/current = null + deployed = 1.0 +/obj/move/airtunnel/connector/wall + name = "wall" + icon_state = "wall-c" + opacity = 1 + density = 1 + updatecell = 0.0 +/obj/move/airtunnel/wall + name = "wall" + icon_state = "wall" + opacity = 1 + density = 1 + updatecell = 0.0 +/obj/move/floor + name = "floor" + icon_state = "floor" +/obj/move/wall + name = "wall" + icon_state = "wall" + opacity = 1 + density = 1 + updatecell = 0.0 +/obj/overlay + name = "overlay" +/obj/point + name = "point" + icon = 'screen1.dmi' + icon_state = "arrow" + layer = 16.0 +/obj/portal + name = "portal" + icon = 'stationobjs.dmi' + icon_state = "portal" + density = 1 + var/obj/target = null + anchored = 1.0 +/obj/projection + name = "Projection" + anchored = 1.0 +/obj/rack + name = "rack" + icon = 'Icons.dmi' + icon_state = "rack" + density = 1 + flags = 320.0 + anchored = 1.0 +/obj/screen + name = "screen" + icon = 'screen1.dmi' + layer = 20.0 + var/id = 0.0 + var/obj/master +/obj/screen/close + name = "close" + master = null +/obj/screen/grab + name = "grab" + master = null +/obj/screen/screen2 + name = "screen2" + icon = 'screen.dmi' +/obj/screen/storage + name = "storage" + master = null +/obj/screen/zone_sel + name = "Damage Zone" + icon = 'zone_sel.dmi' + icon_state = "blank" + var/selecting = "chest" + screen_loc = "15,15" +/obj/secloset + desc = "An immobile card-locked storage container. Works by position ... not access levels" + name = "Security Locker" + icon = 'stationobjs.dmi' + icon_state = "1secloset0" + density = 1 + var/opened = 0.0 + var/locked = 1.0 + var/allowed = null + anchored = 1.0 +/obj/secloset/animal + name = "Animal Control" +/obj/secloset/highsec + name = "Experimental Technology" + allowed = "Captain,Head of Personnel,Head of Research" +/obj/secloset/medical1 + name = "Medicine Closet" + allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research" +/obj/secloset/medical2 + name = "Anesthetic" + allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research" +/obj/secloset/personal + desc = "The first card swiped gains control." + name = "Personal Closet" + icon_state = "0secloset0" +/obj/secloset/security1 + name = "Security Equipment" + allowed = "Prison Security,Prison Warden,Security Officer,Captain,Head of Personnel,Head of Research" +/obj/secloset/security2 + name = "Forensics Locker" + allowed = "Prison Security,Prison Warden,Forensic Technician,Security Officer,Captain,Head of Personnel,Head of Research" +/obj/shut_controller + name = "shut controller" + //parts = (List:4) + var/moving = null + + var/list/parts = list( ) + +/obj/shuttle + name = "shuttle" +/obj/shuttle/door + name = "door" + icon = 'shuttle.dmi' + icon_state = "door1" + opacity = 1 + density = 1 + var/visible = 1.0 + var/operating = null + anchored = 1.0 +/obj/sp_start + name = "sp start" + icon = 'human.dmi' + icon_state = "male" + var/special = null + anchored = 1.0 +/obj/start + name = "start" + icon = 'screen1.dmi' + icon_state = "x" + anchored = 1.0 +/obj/stool + name = "stool" + icon = 'Icons.dmi' + icon_state = "stool" + flags = 320.0 +/obj/stool/bed + name = "bed" + icon_state = "bed" + anchored = 1.0 +/obj/stool/chair + name = "chair" + icon_state = "chair" + var/status = 0.0 + anchored = 1.0 +/obj/stool/chair/e_chair + name = "electrified chair" + icon_state = "e_chair0" + var/atom/movable/overlay/overl = null + var/on = 0.0 + var/obj/item/weapon/assembly/shock_kit/part1 = null + var/last_time = 1.0 +/obj/substance + name = "substance" + var/maximum + var/temperature + var/co2 + var/n2 + var/oxygen + var/plasma + var/sl_gas +/obj/substance/chemical + name = "chemical" + maximum = null + //chemicals = (List:30) + + var/list/chemicals = list( ) // contains /datum/chemical + + +/obj/substance/gas + name = "gas" + temperature = 20.0 + co2 = 0.0 + n2 = 0.0 + oxygen = 0.0 + plasma = 0.0 + sl_gas = 0.0 + maximum = -1.0 +/obj/table + name = "table" + icon = 'table.dmi' + icon_state = "alone" + density = 1 + anchored = 1.0 +/obj/team + name = "team" + var/captain = null + //members = (List:1) + var/obj/ctf_assist/master = null + var/color = null + var/base = null + var/max_players = 20.0 + + var/list/members = list( ) + +/obj/test + name = "test" + var/success = 1.0 +/obj/watertank + name = "watertank" + icon = 'stationobjs.dmi' + icon_state = "watertank" + density = 1 + flags = 320.0 + weight = 5000000.0 +/obj/weldfueltank + name = "weldfueltank" + icon = 'items.dmi' + icon_state = "weldtank" + density = 1 + flags = 320.0 + weight = 5000000.0 +/obj/window + name = "window" + icon = 'turfs2.dmi' + icon_state = "window" + density = 1 + var/health = 14.0 + var/ini_dir = null + weight = 2500000.0 + anchored = 1.0 + flags = 512.0 + +/turf + icon = 'turfs.dmi' + var/intact = 0.0 + var/firelevel = null + var/oxygen = 756000.0 + var/oldoxy = null + var/tmpoxy = null + var/oldpoison = null + var/tmppoison = null + var/poison = 0.0 + var/co2 = 0.0 + var/oldco2 = null + var/tmpco2 = null + var/sl_gas = 0.0 + var/osl_gas = null + var/tsl_gas = null + var/n2 = 2844000.0 + var/on2 = null + var/tn2 = null + var/heat = 9.8892006E8 + var/oheat = 9.8892006E8 + var/theat = 9.8892006E8 + var/airdir = null + var/airforce = null + var/checkfire = 1.0 + var/atmoalt = null + var/updatecell = null + level = 1.0 +/turf/space + name = "space" + icon_state = "space" + updatecell = 1.0 + oxygen = 0.0 + n2 = 0.0 + checkfire = 0 + oldoxy = 0.0 + oldpoison = 0.0 +/turf/station + name = "station" + intact = 1.0 +/turf/station/command + name = "command" +/turf/station/command/floor + name = "floor" + icon = 'Icons.dmi' + icon_state = "Floor3" + updatecell = 1.0 +/turf/station/command/floor/other + icon_state = "Floor" +/turf/station/command/wall + name = "wall" + icon = 'wall.dmi' + icon_state = "CCWall" + opacity = 1 + density = 1 + updatecell = 0.0 +/turf/station/command/wall/other + icon_state = "r_wall" +/turf/station/engine + name = "engine" + icon = 'engine.dmi' +/turf/station/engine/floor + name = "floor" + icon_state = "floor" + updatecell = 1.0 +/turf/station/floor + name = "floor" + icon = 'Icons.dmi' + icon_state = "Floor" + var/health = 150.0 + var/burnt = null + updatecell = 1.0 +/turf/station/floor/grid + icon = 'weap_sat.dmi' + icon_state = "grid" +/turf/station/floor/plasma_test +/turf/station/r_wall + name = "r wall" + icon = 'wall.dmi' + icon_state = "r_wall" + opacity = 1 + density = 1 + var/state = 2.0 + var/d_state = 0.0 + updatecell = 0.0 +/turf/station/shuttle + name = "shuttle" + icon = 'shuttle.dmi' +/turf/station/shuttle/floor + name = "floor" + icon_state = "floor" + updatecell = 1.0 +/turf/station/shuttle/wall + name = "wall" + icon_state = "wall" + opacity = 1 + density = 1 + updatecell = 0.0 +/turf/station/wall + name = "wall" + icon = 'wall.dmi' + opacity = 1 + density = 1 + var/state = 2.0 + updatecell = 0.0 diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/cell_process.dm b/ss13-40.93.2-base/ss13-40.93.2-base/cell_process.dm new file mode 100644 index 0000000..f01587b --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/cell_process.dm @@ -0,0 +1,928 @@ + +/obj/move/CheckPass(O as mob|obj) + + return !( src.density ) + + +/obj/move/attack_paw(user as mob) + + return src.attack_hand(user) + + +/obj/move/attack_hand(var/mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/obj/move/proc/res_vars() + + src.oldoxy = src.oxygen + src.tmpoxy = src.oxygen + src.oldpoison = src.poison + src.tmppoison = src.poison + src.oldco2 = src.co2 + src.tmpco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + src.oheat = src.heat + src.theat = src.heat + return + +/obj/move/proc/relocate(T as turf, degree) + + if (degree) + for(var/atom/movable/A as mob|obj in src.loc) + A.dir = turn(A.dir, degree) + //*****RM as 4.1beta + A.loc = T + + //Foreach goto(25) + else + for(var/atom/movable/A as mob|obj in src.loc) + A.loc = T + //Foreach goto(73) + return + +/obj/move/proc/unburn() + + src.icon_state = initial(src.icon_state) + return + + +/obj/move/proc/Neighbors() + + var/list/L = list( NORTH, SOUTH, EAST, WEST ) + for(var/obj/machinery/door/window/D in src.loc) + if(!( D.density )) + goto Label_98 + + + if (D.dir & 12) + L -= SOUTH + else + L -= EAST + + + Label_98: + //Foreach goto(36) + + for(var/obj/window/D in src.loc) + if(!( D.density )) + goto Label_182 + L -= D.dir + if (D.dir == SOUTHWEST) + L.len = null + return L + Label_182: + //Foreach goto(115) + return L + +/obj/move/proc/FindTurfs() + + var/list/L = list( ) + for(var/dir in src.Neighbors()) + var/turf/T = get_step(src.loc, dir) + //++++++ + + if(!( T )) + goto Label_299 + L += T + var/direct = flipdir(dir) + //*****RM as 4.1beta + + for(var/obj/machinery/door/window/D in T) + if(!( D.density )) + goto Label_181 + //var/direct = get_dir(src, T) + if ((D.dir & 12)) + if (dir & 1) // was direct&1 + L -= T + goto Label_181 + else + if(dir & 8) // was direct&8 + L -= T + goto Label_181 + Label_181: + //Foreach goto(81) + + for(var/obj/window/D in T) + if(!( D.density )) + goto Label_294 + //var/direct = get_dir(T, src.loc) + if (D.dir == SOUTHWEST) + L -= T + goto Label_294 + else + if(direct == D.dir) + L -= T + + + Label_294: + //Foreach goto(199) + + //***** + Label_299: + if ((locate(/obj/move, T) && L.Find(T))) + L -= T + var/obj/move/O = locate(/obj/move, T) + if (O.updatecell) + L += O + else + if ((isturf(T) && !( T.updatecell ))) + L -= T + //Foreach goto(26) + return L + + +/obj/move/proc/process() + + if (locate(/obj/shuttle/door, src.loc)) + var/obj/shuttle/door/D = locate(/obj/shuttle/door, src.loc) + src.updatecell = !( D.density ) + if (!( src.updatecell )) + return + src.checkfire = !( src.checkfire ) + if (src.checkfire) + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/turf/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(158) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(561) + else + src.firelevel = 0 + if (src.icon_state == "burning") + unburn() + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/turf/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(744) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(1153) + else + if (src.icon_state == "burning") + src.firelevel = 0 + unburn() + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + else + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/turf/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.n2 + src.poison + src.co2 + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + adiff = src.oldoxy + src.oldco2 + src.on2 - (T.oldoxy + T.oldco2 + T.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1356) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src.loc) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(1559) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/turf/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (T.tmpoxy + T.tmpco2 + T.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1927) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src.loc) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(2130) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + if ((locate(/obj/effects/water, src.loc) || src.firelevel < 900000.0)) + src.firelevel = 0 + return + +/obj/move/wall/New() + + var/F = locate(/obj/move/floor, src.loc) + if (F) + //F = null + del(F) + return + +/obj/move/wall/process() + + src.updatecell = 0 + + return + +/obj/move/New() + + if ( (src.x & 1) == (src.y & 1) ) + src.checkfire = 0 + src.tmpoxy = src.oxygen + src.oldoxy = src.oxygen + src.tmppoison = src.poison + src.oldpoison = src.poison + src.tmpco2 = src.co2 + src.oldco2 = src.co2 + src.oheat = 9.8892006E8 + src.theat = 9.8892006E8 + ..() + return + +/turf/proc/res_vars() + + src.oldoxy = src.oxygen + src.tmpoxy = src.oxygen + src.oldpoison = src.poison + src.tmppoison = src.poison + src.oldco2 = src.co2 + src.tmpco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + src.oheat = src.heat + src.theat = src.heat + return + +/turf/proc/unburn() + + src.icon_state = initial(src.icon_state) + return + + +//***** + + +/turf/proc/Neighbors() + + var/list/L = list( NORTH, SOUTH, EAST, WEST ) + for(var/obj/machinery/door/window/D in src) + if(!( D.density )) + goto Label_96 //continue + //+++++ + //L -= D.dir + + if (D.dir & 12) + L -= SOUTH + else + L -= EAST + + Label_96 + //Foreach goto(34) + for(var/obj/window/D in src) + if(!( D.density )) + goto Label_178 //continue + L -= D.dir + if (D.dir == SOUTHWEST) + L.len = null + return L + Label_178 + //Foreach goto(111) + return L + + +/proc/flipdir(dir) + + switch(dir) + if(1) + return 2 + if(2) + return 1 + if(4) + return 8 + if(8) + return 4 + if(5) + return 10 + if(6) + return 9 + if(9) + return 10 + if(10) + return 9 + else + return 0 + + +/turf/proc/FindTurfs() + + var/list/L = list( ) + if (locate(/obj/move, src)) + return list( ) + for(var/dir in src.Neighbors()) + var/turf/T = get_step(src, dir) + //*****RM + + // + if((!( T ) || !( T.updatecell ))) + goto Label_317 + + L += T + var/direct = flipdir(dir) + //*****RM as 4.1beta + + for(var/obj/machinery/door/window/D in T) + if(!( D.density )) + goto Label_201 + //var/direct = get_dir(src, T) + if (D.dir & 12) + if((dir & 1)) // was (direct & 1) + L -= T + goto Label_201 + else + if(dir & 8) //was (direct&8) + L -= T + + Label_201: + //Foreach goto(101) + + for(var/obj/window/D in T) + if(!( D.density )) + goto Label_312 + //var/direct = get_dir(T, src) + if (D.dir == SOUTHWEST) + L -= T + goto Label_312 + else + if(direct == D.dir) + L -= T + + Label_312: + + //Foreach goto(219) + + //***** + + Label_317: + //Foreach goto(40) + + for(var/turf/T in L) + if (locate(/obj/move, T)) + L -= T + var/obj/move/O = locate(/obj/move, T) + if (O.updatecell) + L += O + //Foreach goto(333) + return L + +/turf/New() + + if ((src.x & 1) == (src.y & 1)) + src.checkfire = 0 + src.tmpoxy = src.oxygen + src.oldoxy = src.oxygen + src.tmppoison = src.poison + src.oldpoison = src.poison + src.tmpco2 = src.co2 + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + src.oheat = src.heat + src.theat = src.heat + ..() + return + +/turf/updatecell() + + + src.checkfire = !( src.checkfire ) + if (src.checkfire) + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/turf/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + break //*****RM + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(113) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(522) + else + src.firelevel = 0 + if (src.icon_state == "burning") + unburn() + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/turf/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + break //*****RM + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(705) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(1114) + else + if (src.icon_state == "burning") + src.firelevel = 0 + unburn() + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + else + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, T) + break //*****RM + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + adiff = src.oldoxy + src.oldco2 + src.on2 - (T.oldoxy + T.oldco2 + T.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1317) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(1518) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/S in src.FindTurfs()) + var/turf/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, T) + break //*****RM + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (T.tmpoxy + T.tmpco2 + T.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1872) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(2073) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + if ((locate(/obj/effects/water, src) || src.firelevel < 900000.0)) + src.firelevel = 0 + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/cellautomata.dm b/ss13-40.93.2-base/ss13-40.93.2-base/cellautomata.dm new file mode 100644 index 0000000..32a4e99 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/cellautomata.dm @@ -0,0 +1,1652 @@ + +/obj/team/proc/process() + + if (src.base) + var/obj/starting = locate(text("landmark*CTF-base-[]", src.base)) + while(locate(text("landmark*CTF-supply-[]", src.base))) + var/obj/L = locate(text("landmark*CTF-supply-[]", src.base)) + var/obj/item/weapon/card/id/I = new /obj/item/weapon/card/id( L.loc ) + I.access_level = 5 + I.lab_access = 5 + I.engine_access = 5 + I.air_access = 5 + I.assignment = "Captain" + I.registered = text("[]", uppertext((src.color ? src.color : "rogue"))) + I.name = text("[]'s ID Card ([]>[]-[]-[])", I.registered, I.access_level, I.lab_access, I.engine_access, I.air_access) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( L.loc ) + if (src.color) + F.icon_state = text("flag_[]", src.color) + F.name = text("flag- '[] Team's Flag'", uppertext(src.color)) + else + F.name = "flag- 'NEUTRAL Team's Flag'" + F.icon_state = "flag_neutral" + F.info = text("This is an authentic [] flag!\nCapture the Flag", (src.color ? src.color : "neutral")) + if (src.master.paint_cans) + var/obj/item/weapon/paint/P = new /obj/item/weapon/paint( L.loc ) + if (src.color) + P.color = src.color + P.icon_state = text("paint_[]", src.color) + else + P.color = "neutral" + P.icon_state = text("paint_[]", src.color) + //L = null + del(L) + while(locate(text("landmark*CTF-wardrobe-[]", src.base))) + var/obj/L = locate(text("landmark*CTF-wardrobe-[]", src.base)) + switch(src.color) + if("blue") + new /obj/closet/wardrobe( L.loc ) + if("green") + new /obj/closet/wardrobe/green( L.loc ) + if("yellow") + new /obj/closet/wardrobe/yellow( L.loc ) + if("black") + new /obj/closet/wardrobe/black( L.loc ) + if("white") + new /obj/closet/wardrobe/white( L.loc ) + if("red") + new /obj/closet/wardrobe/red( L.loc ) + else + //L = null + del(L) + if (starting) + for(var/mob/human/H in src.members) + H.loc = starting.loc + if ((src.master.autodress && src.color)) + H.w_uniform = null + del(H.w_uniform) + H.shoes = null + del(H.shoes) + switch(src.color) + if("blue") + H.w_uniform = new /obj/item/weapon/clothing/under/blue( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + if("green") + H.w_uniform = new /obj/item/weapon/clothing/under/green( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + if("yellow") + H.w_uniform = new /obj/item/weapon/clothing/under/yellow( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + if("black") + H.w_uniform = new /obj/item/weapon/clothing/under/black( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + if("white") + H.w_uniform = new /obj/item/weapon/clothing/under/white( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + if("red") + H.w_uniform = new /obj/item/weapon/clothing/under/red( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + else + H.w_uniform = new /obj/item/weapon/clothing/under/orange( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + H.w_uniform.layer = 20 + H.shoes.layer = 20 + //Foreach goto(507) + return + +/obj/team/proc/show_screen(user as mob) + + var/dat = "

CTF Team


"
+	dat += text("\[disband\]\n", src)
+	dat += text("Max Players: []\n", src, src.max_players)
+	dat += text("Captain: []\n", src, (src.captain ? src.captain : "NONE"))
+	dat += "Members:\n"
+	for(var/mob/M in src.members)
+		dat += text("\t[] ([])\n", M.rname, M.key)
+		//Foreach goto(79)
+	dat += text("Base: \t[]\nColor: \t[]\n\nRefresh", src, src.base, src, src.color, src)
+	dat += "
" + user << browse(dat, "window=ctf_team") + return + +/obj/team/Topic(href, href_list) + + if (ticker) + return + if ((usr.CanAdmin() || usr == src.captain)) + if (href_list["color"]) + var/t = input(usr, "Please select a new color", null, null) as null|anything in src.master.avail_colors + if ((t && src.master.avail_colors.Find(t))) + src.master.avail_colors -= t + src.master.avail_colors += src.color + src.color = t + if (href_list["base"]) + var/t = input(usr, "Please select a new base", null, null) as null|anything in src.master.avail_bases + if ((t && src.master.avail_bases.Find(t))) + src.master.avail_bases -= t + src.master.avail_bases += src.base + src.base = t + if (usr.CanAdmin()) + if (href_list["disband"]) + //SN src = null + del(src) + return + if (href_list["max_players"]) + src.max_players = input(usr, "What is the max number of players on this team?", null, null) as num + src.max_players = max(src.max_players, 1) + if (href_list["captain"]) + var/L = list( ) + for(var/mob/human/H in world) + if (H.client) + L += H + //Foreach goto(331) + for(var/obj/team/T in world) + L -= T.members + L -= T.captain + //Foreach goto(370) + var/mob/m = input(usr, "Please select a new captain", null, null) as null|anything in L + if (ismob(m)) + src.members -= src.captain + src.members += m + src.captain = m + else + src.members -= src.captain + src.captain = null + show_screen(src.captain) + src.show_screen(usr) + for(var/mob/human/H in world) + if ((H.CanAdmin() || H == src.captain)) + src.master.show_screen(H) + //Foreach goto(510) + return + +/obj/ctf_assist/New() + + ..() + going = 0 + master_mode = "extended" + world << "Capture the Flag Mode activated!" + world << "The game start has been frozen to accomodate!" + for(var/obj/begin/B in world) + if (!( locate(/obj/grille, B.loc) )) + new /obj/grille( B.loc ) + //Foreach goto(50) + for(var/mob/human/M in world) + M.loc = locate(/area/start) + if (M.start) + M.primary = null + del(M.primary) + for(var/obj/item/weapon/I in M) + //M = null + del(M) + //Foreach goto(165) + M.start = 0 + //Foreach goto(106) + world << "All players have been pushed back!" + return + +/obj/ctf_assist/proc/next_pick() + + src.pickers_left -= src.picker + src.picker = null + if (src.players_left.len < 1) + world << "We are done picking! (No more people to be picked!)" + src.picker = 0 + return null + if (src.pickers_left.len < 1) + for(var/obj/team/T in src) + if ((T.members.len < src.play_team && T.members.len < T.max_players)) + if (T.captain) + src.pickers_left += T.captain + else + src.pickers_left += T + //Foreach goto(78) + if (src.pickers_left.len < 1) + world << "We are done picking! (All teams are full!)" + src.picker = 0 + return null + else + src.picker = pick(src.pickers_left) + if (ismob(src.picker)) + show_pick(src.picker) + world << text("[] is picking!", src.picker) + else + if (istype(src.picker, /obj/team)) + var/H = pick(src.players_left) + var/obj/team/T = src.picker + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + spawn( 0 ) + next_pick() + return + return src.picker + return + +/obj/ctf_assist/proc/show_pick(user as mob) + + var/dat = "

CTF Mode Pick


" + dat += text("Players (per Team): []
\n\"Please Pick a Player
", src.play_team) + for(var/mob/human/H in src.players_left) + dat += text("[] ([])
", src, H, H.rname, H.key) + //Foreach goto(39) + user << browse(dat, "window=ctf_pick") + return + +/obj/ctf_assist/proc/get_team(captain as mob) + + for(var/obj/team/T in src) + if (T.captain == captain) + return T + //Foreach goto(15) + return + +/obj/ctf_assist/proc/check_win(O as obj) + + if (src.wintype == "none") + return + var/obj/item/weapon/paper/flag/F = locate(/obj/item/weapon/paper/flag) + var/winning = 1 + for(var/obj/item/weapon/paper/flag/L in world) + if (F.icon_state != L.icon_state) + winning = 0 + else + if (src.wintype == "collect") + if (F.loc != O) + winning = 0 + //Foreach goto(45) + if (!( winning )) + return + var/obj/team/winner = null + for(var/obj/team/T in src) + if (text("flag_[]", T.color) == text("[]", F.icon_state)) + winner = T + else + //Foreach continue //goto(157) + if (winner) + world << "

The game has been won!!!

" + world << text("Team: [] Team led by [] in []", uppertext(winner.color), winner.captain, winner.base) + world << "Original Members:" + for(var/mob/human/H in winner.members) + if (H.client) + world << text("\t [] ([])", H.rname, H.key) + //Foreach goto(266) + return + +/obj/ctf_assist/proc/show_screen(user as mob) + + var/dat = "

CTF Mode Helper


"
+	dat += text("Players (per Team): []\nBarrier Time: [] minutes\n\nTeams:\n", src, src.play_team, src, src.barriertime)
+	for(var/obj/team/O in src)
+		if (ismob(O.captain))
+			if (O.color)
+				dat += text("\t[]'s Team ([])\n", src, O, O.captain, O.color)
+			else
+				dat += text("\t[]'s Team\n", src, O, O.captain)
+		else
+			if (O.color)
+				dat += text("\t[] Team\n", src, O, O.color)
+			else
+				dat += text("\tNo Captain\n", src, O)
+		//Foreach goto(43)
+	dat += text("\[Add Team\]\nCaptains Select Members\n\nStart the Game (and Set up Map)\n\nWin Options: []\nCollection - All flags same color on clipboard\nConversion - All flags same color\nNone\n\nOther Options:\nAuto-Dress (Teams): []\nRemove Engine Ejection: []\nPaint Cans: []\nImmobile flags (Territory): []\nAdd Neutral Flags to Unused Bases: []\n\nRefresh", src, src, src, src.wintype, src, src, src, src, (src.autodress ? "Yes" : "No"), src, (src.ejectengine ? "Yes" : "No"), src, (src.paint_cans ? "Yes" : "No"), src, (src.immobile ? "Yes" : "No"), src, (src.neutral_replace ? "Yes" : "No"), src)
+	dat += "
" + user << browse(dat, "window=ctf_assist") + return + +/obj/ctf_assist/Topic(href, href_list) + + if ((ticker || src.starting)) + return + if (href_list["pick"]) + if (src.picker == usr) + var/H = locate(href_list["pick"]) + if ((istype(H, /mob/human) && src.players_left.Find(H))) + var/obj/team/T = get_team(src.picker) + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + next_pick() + return + else + usr << "It's not your turn!" + if (!( usr.CanAdmin() )) + return + if (href_list["team"]) + var/obj/team/T = locate(href_list["team"]) + if (istype(T, /obj/team)) + T.show_screen(usr) + if (href_list["play_team"]) + src.play_team = input(usr, "What is the max number of players per team?", null, null) as num + src.play_team = max(src.play_team, 1) + if (href_list["barriertime"]) + src.barriertime = input(usr, "What is the barrier life time (in minutes- decimals allowed)?", null, null) as num + src.barriertime = max(src.barriertime, 0.1) + if (href_list["win"]) + if ((href_list["win"] in list( "collect", "convert", "none" ))) + src.wintype = href_list["win"] + if (href_list["autodress"]) + src.autodress = !( src.autodress ) + if (href_list["ejectengine"]) + src.ejectengine = !( src.ejectengine ) + if (href_list["paint_cans"]) + src.paint_cans = !( src.paint_cans ) + if (href_list["neutral_replace"]) + src.neutral_replace = !( src.neutral_replace ) + if (href_list["immobile"]) + src.immobile = !( src.immobile ) + if (href_list["add_team"]) + if (src.avail_bases.len > 0) + var/obj/team/T = new /obj/team( src ) + T.master = src + T.base = pick(src.avail_bases) + T.color = pick(src.avail_colors) + src.avail_bases -= T.base + src.avail_colors -= T.color + if (href_list["select_team"]) + if (!( src.picking )) + src.picking = 1 + for(var/mob/human/H in world) + src.players_left += H + //Foreach goto(578) + for(var/obj/team/T in src) + if (T.members.len < src.play_team) + if (T.captain) + src.pickers_left += T.captain + else + src.pickers_left += T + src.players_left -= T.members + //Foreach goto(618) + if ((!( src.players_left.len ) || !( src.pickers_left.len ))) + src.picking = 0 + src.players_left.len = 0 + src.pickers_left.len = 0 + usr << "Not enough players/teams!" + return + world << "Now Selecting Teams!!!" + src.picker = pick(src.pickers_left) + if (ismob(src.picker)) + show_pick(src.picker) + world << text("[] is picking!", src.picker) + else + if (istype(src.picker, /obj/team)) + var/H = pick(src.players_left) + var/obj/team/T = src.picker + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + next_pick() + else + show_pick(src.picker) + world << text("[] is picking!", src.picker) + if (href_list["start"]) + src.starting = 1 + var/obj/begin/use_me = locate(/obj/begin) + for(var/mob/human/H in world) + if (H.client) + H.start = 1 + H.occupation1 = pick("Staff Assistant", "Research Assistant", "Technical Assistant", "Medical Assistant") + use_me.get_dna_ready(H) + H.update_face() + //Foreach goto(923) + world << "STARTING!!!" + for(var/obj/landmark/alterations/A in world) + switch(A.name) + if("prison shuttle") + new /obj/machinery/computer/prison_shuttle( A.loc ) + //A = null + del(A) + if("id computer") + new /obj/machinery/computer/card( A.loc ) + //A = null + del(A) + if("Experimental Technology") + new /obj/secloset/highsec( A.loc ) + //A = null + del(A) + if("Security Locker") + new /obj/secloset/security1( A.loc ) + //A = null + del(A) + if("recharger") + new /obj/machinery/recharger( A.loc ) + //A = null + del(A) + if("barrier") + new /obj/barrier( A.loc ) + //A = null + del(A) + else + //Foreach goto(1035) + for(var/obj/closet/wardrobe/W in world) + //W = null + del(W) + //Foreach goto(1238) + for(var/obj/item/weapon/clothing/under/T in world) + //T = null + del(T) + //Foreach goto(1281) + if (src.ejectengine) + for(var/obj/machinery/computer/engine/T in world) + //T = null + del(T) + //Foreach goto(1333) + for(var/obj/landmark/alterations/A in world) + switch(A.name) + if("Prisoners Wardrobe") + new /obj/closet/wardrobe/orange( A.loc ) + //A = null + del(A) + else + //Foreach goto(1376) + var/obj/rogue = locate("landmark*CTF-rogue") + for(var/mob/human/H in world) + H.loc = rogue.loc + H.w_uniform = new /obj/item/weapon/clothing/under/orange( H ) + H.w_uniform.layer = 20 + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + H.shoes.layer = 20 + //Foreach goto(1453) + for(var/obj/team/T in src) + T.process() + //Foreach goto(1545) + if (src.paint_cans) + for(var/obj/secloset/highsec/S in world) + new /obj/item/weapon/paint( S ) + //Foreach goto(1595) + if (src.neutral_replace) + while(src.avail_bases.len > 0) + var/t = pick(src.avail_bases) + src.avail_bases -= t + var/obj/L = locate(text("landmark*CTF-supply-[]", t)) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( L.loc ) + F.name = "flag- 'NEUTRAL Team's Flag'" + F.icon_state = "flag_neutral" + F.info = "This is an authentic neutral flag!\nCapture the Flag" + //L = null + del(L) + for(var/obj/begin/B in world) + if (locate(/obj/grille, B.loc)) + for(var/obj/grille/G in B.loc) + //G = null + del(G) + //Foreach goto(1789) + //Foreach goto(1742) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + ticker.process() + return + data_core = new /obj/datacore( ) + src.show_screen(usr) + for(var/mob/human/H in world) + if (H.CanAdmin()) + src.show_screen(H) + //Foreach goto(1881) + return + +/obj/landmark/New() + + ..() + src.tag = text("landmark*[]", src.name) + src.invisibility = 100 + + return + +/obj/start/New() + + ..() + src.tag = text("start*[]", src.name) + src.invisibility = 100 + return + +/obj/sp_start/New() + + src.tag = text("spstart[]", src.name) + src.invisibility = 100 + return + +/obj/admins/Topic(href, href_list) + + if (usr.client != src.owner) + world << text("\blue [] has attempted to override the admin panel!", usr.key) + world.log << text("ADMIN: [] tried to use the admin panel without authorization.", usr.key) + return + if (href_list["boot"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Boot Player:
" + for(var/mob/M in world) + dat += text("N:[] R:[] (K:[])
", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(103) + usr << browse(dat, "window=boot") + if (href_list["boot2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/mob/M = locate(href_list["boot2"]) + if (ismob(M)) + if ((M.client && M.client.holder && M.client.holder.rank >= src.rank)) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + world.log << text("ADMIN: [] booted [].", usr.key, M.key) + //M.client = null + del(M.client) + if (href_list["ban"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Ban Player:
" + for(var/mob/M in world) + dat += text("N: [] R: [] (K: [])
", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(362) + dat += "
Unban Player:
" + for(var/t in banned) + dat += text("K: []
", src, ckey(t), t) + //Foreach goto(424) + usr << browse(dat, "window=ban") + if (href_list["ban2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/mob/M = locate(href_list["ban2"]) + if (ismob(M)) + if ((M.client && M.client.holder && M.client.holder.rank >= src.rank)) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + world.log << text("ADMIN: [] banned [].", usr.key, M.key) + banned += ckey(M.key) + //M.client = null + del(M.client) + if (href_list["unban2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/t = href_list["unban2"] + if (t) + banned -= t + world.log << text("ADMIN: [] unbanned [].", usr.key, t) + if (href_list["mute"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Mute/Unmute Player:
" + for(var/mob/M in world) + dat += text("N:[] R:[] (K:[]) \[[]\]
", src, M, M.name, M.rname, (M.client ? M.client : "No client"), (M.muted ? "Muted" : "Voiced")) + //Foreach goto(757) + usr << browse(dat, "window=mute") + if (href_list["mute2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/mob/M = locate(href_list["mute2"]) + if (ismob(M)) + if ((M.client && M.client.holder && M.client.holder.rank >= src.rank)) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + world.log << text("ADMIN: [] altered []'s mute status.", usr.key, M.key) + M.muted = !( M.muted ) + if (href_list["restart"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = text("Restart game?
\n
\nYes\n", src) + usr << browse(dat, "window=restart") + if (href_list["restart2"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + world << text("\red Restarting world!\blue Initiated by []!", usr.key) + world.log << text("ADMIN: [] initiated a reboot.", usr.key) + sleep(50) + world.Reboot() + if (href_list["c_mode"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert(usr, "The game has already started.", null, null, null, null) + var/dat = text("What mode do you wish to play?
\nSecret\nTraitor\nMeteor\nExtended\nMonkey\nNuclear Emergency\n\nNow: []\n", src, src, src, src, src, src, master_mode) + usr << browse(dat, "window=c_mode") + if (href_list["c_mode2"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert(usr, "The game has already started.", null, null, null, null) + switch(href_list["c_mode2"]) + if("secret") + master_mode = "secret" + if("traitor") + master_mode = "traitor" + if("meteor") + master_mode = "meteor" + if("extended") + master_mode = "extended" + if("monkey") + master_mode = "monkey" + if("nuclear") + master_mode = "nuclear" + else + world.log << text("ADMIN: [] set the mode as [].", usr.key, master_mode) + world << text("\blue The mode is now: []", master_mode) + if (href_list["l_ban"]) + var/dat = "
Banned Keys:
" + for(var/t in banned) + dat += text("[]
", ckey(t)) + //Foreach goto(1424) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + dat += text("
Goto Ban Control Screen", src) + usr << browse(dat, "window=ban_k") + if (href_list["l_keys"]) + var/dat = "Keys:
" + for(var/mob/M in world) + if (M.client) + dat += text("[]
", M.client.ckey) + //Foreach goto(1525) + usr << browse(dat, "window=keys") + if (href_list["l_players"]) + var/dat = "Name/Real Name/Key:
" + for(var/mob/M in world) + dat += text("N: [] R: [] (K: [])
", M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(1602) + usr << browse(dat, "window=players") + if (href_list["g_send"]) + var/t = input("Global message to send:", "Admin Announce", null, null) as message + if (t) + world << text("\blue [] Announces:\n \t []", usr.key, t) + if (href_list["p_send"]) + var/dat = "Who are you sending a message to?
" + for(var/mob/M in world) + dat += text("N:[] R:[] (K:[])
", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(1737) + usr << browse(dat, "window=p_send") + if (href_list["p_send2"]) + if (locate(href_list["p_send2"])) + var/mob/M = locate(href_list["p_send2"]) + if (!( ismob(M) )) + return + var/t = input("Message:", text("Private message to []", M.key), null, null) as text + if (!( t )) + return + if (M.client && M.client.holder) + M << text("\blue Admin PM from-[]: []", M.client.holder, usr, usr.key, t) + else + M << text("\blue Admin PM from-[]: []", usr.key, t) + usr << text("\blue Admin PM to-[]: []", src, M, M.key, t) + if (href_list["m_item"]) + var/X = typesof(/obj/item/weapon) + var/Q = input("What item?", null, null, null) as null|anything in X + if (!( Q )) + return + new Q( usr.loc ) + world.log << text("ADMIN: [] created a []", usr.key, Q) + if (href_list["m_obj"]) + var/X = typesof(/obj) + var/Q = input("What object?", null, null, null) as null|anything in X + if (!( Q )) + return + new Q( usr.loc ) + world.log << text("ADMIN: [] created a []", usr.key, Q) + if (href_list["dna"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Registered DNA sequences:
" + for(var/M in reg_dna) + dat += text("\t [] = []
", M, reg_dna[text("[]", M)]) + //Foreach goto(2171) + usr << browse(dat, "window=dna") + if (href_list["t_ooc"]) + if ((src.rank in list( "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + world.log << text("ADMIN: [] toggled OOC.", usr.key) + if (href_list["toggle_enter"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + enter_allowed = !( enter_allowed ) + if (!( enter_allowed )) + world << "You may no longer enter the game." + else + world << "The may enter the game." + world.log << text("ADMIN: [] toggled new player game entering.", usr.key) + world.update_stat() + if (href_list["toggle_abandon"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + abandon_allowed = !( abandon_allowed ) + if (abandon_allowed) + world << "You may now abandon mob." + else + world << "Live or Die Mode Activated" + world.log << text("ADMIN: [] toggled abandon mob ability.", usr.key) + world.update_stat() + if (href_list["delay"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert("Too late... The game has already started!", null, null, null, null, null) + going = !( going ) + if (!( going )) + world << text("The game start has been delayed by [] (Administrator to SS13)", usr.key) + world.log << text("ADMIN: [] delayed the game.", usr.key) + else + world << text("The game will now start thanks to [] (Administrator to SS13)", usr.key) + world.log << text("ADMIN: [] removed the delay.", usr.key) + if (href_list["secrets"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = text("What mode do you wish to play?
\nRemove 'internal' clothing
\nRemove ALL clothing
\nRemove firesuits, grilles, and pods
\nRemove all bombs currently existence
\nShow a list of all people who made a bomb
\nShow the key of the traitor
\nToxic Air (WARNING: dangerous)
\nTurn all humans into monkies
", src, src, src, src, src, src, src, src) + usr << browse(dat, "window=secrets") + if (href_list["secrets2"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/ok = 0 + switch(href_list["secrets2"]) + if("sec_clothes") + for(var/obj/item/weapon/clothing/under/O in world) + //O = null + del(O) + //Foreach goto(2781) + ok = 1 + if("sec_all_clothes") + for(var/obj/item/weapon/clothing/O in world) + //O = null + del(O) + //Foreach goto(2833) + ok = 1 + if("sec_classic1") + for(var/obj/item/weapon/clothing/suit/firesuit/O in world) + //O = null + del(O) + //Foreach goto(2885) + for(var/obj/grille/O in world) + //O = null + del(O) + //Foreach goto(2928) + for(var/obj/machinery/pod/O in world) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + //Foreach goto(3001) + //O = null + del(O) + //Foreach goto(2971) + ok = 1 + if("clear_bombs") + for(var/obj/item/weapon/assembly/r_i_ptank/O in world) + //O = null + del(O) + //Foreach goto(3088) + ok = 1 + if("list_bombers") + var/dat = "Don't be insane about this list Get the facts. They also could have disarmed one.
" + for(var/l in bombers) + dat += text("[] 'made' a bomb.
", l) + //Foreach goto(3149) + usr << browse(dat, "window=bombers") + if("toxic") + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/O in world) + O.t_status = 3 + //Foreach goto(3194) + for(var/obj/machinery/atmoalter/siphs/scrubbers/O in world) + O.t_status = 1 + O.t_per = 1000000.0 + //Foreach goto(3234) + for(var/obj/machinery/atmoalter/canister/O in world) + if (!( istype(O, /obj/machinery/atmoalter/canister/oxygencanister) )) + O.t_status = 1 + O.t_per = 1000000.0 + else + O.t_status = 3 + //Foreach goto(3282) + if("check_antagonist") + if (ticker) + if (ticker.killer) + if (ticker.killer.ckey) + alert(text("The traitor's key is [].", ticker.killer.ckey), null, null, null, null, null) + else + alert("It seems like the traitor logged out...", null, null, null, null, null) + else + alert("There is no traitor.", null, null, null, null, null) + else + alert("The game has not started yet.", null, null, null, null, null) + if("monkey") + world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + for(var/mob/human/H in world) + H.monkeyize() + //Foreach goto(3504) + ok = 1 + else + if (usr) + world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + if (ok) + world << text("A secret has been activated by []!", usr.key) + return + +/obj/admins/proc/update() + + var/dat + switch(src.screen) + if(1.0) + switch(src.rank) + if("Moderator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src, src) + if("Supervisor") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\nRestart Game
\n
\nAppoint/Assignments: (To Level 1)
\nAppoint Moderator
\nRemove Moderator
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src, src, src, src, src, src) + if("Administrator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\nRestart Game
\n
\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nDelay Game
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\n
\nAppoint/Assignments: (To Level 2)
\nAppoint Game Master
\nAppoint Moderator
\nAppoint Supervisor
\nReassign Admins
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + if("Game Master") + dat = text("
Admin Control Console

\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\nRestart Game
\n
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src) + if("Major Administrator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\n
\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\nRestart Game
\n
\nAppoint/Assignments: (To Level 3)
\nAppoint Game Master
\nAppoint Moderator
\nAppoint Supervisor
\nAppoint Administrator
\nReassign Admins
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + if("Primary Administrator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\n
\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\nRestart Game
\n
\nAppoint/Assignments: (To Level 4)
\nAppoint Game Master
\nAppoint Moderator
\nAppoint Supervisor
\nAppoint Administrator
\nAppoint Major Administrator
\nReassign Admins
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + else + else + dat = text("
Admin Control Center

\nAccess Admin Commands
\nContact Admins
\nAccess Messageboard
\n
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src) + usr << browse(dat, "window=admin") + return + +/world/proc/update_stat() + + if (ticker) + src.status = text("Space Station 13 V.[] ([],[],[])[]", SS13_version, master_mode, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), (host ? text(" hosted by []", host) : null), host) + else + src.status = text("Space Station 13 V.[] (STARTING,[],[])[]", SS13_version, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), (host ? text(" hosted by []", host) : null), host) + return + +/world/New() + + var/motd = file2text("motd.txt") + if (motd) + world_message = motd + var/ad_text = file2text("admins.txt") + var/list/L = dd_text2list(ad_text, "\n") + for(var/t in L) + if (t) + if (copytext(t, 1, 2) == ";") + continue //goto(64) + var/t1 = findtext(t, " - ", 1, null) + if (t1) + var/m_key = copytext(t, 1, t1) + var/a_lev = text("[]", copytext(t, t1 + 3, length(t) + 1)) + admins[text("[]", m_key)] = text("[]", a_lev) + //Foreach goto(64) + admins["exadv1"] = "Primary Administrator" + main_hud = new /obj/hud( ) + main_hud2 = new /obj/hud/hud2( ) + SS13_airtunnel = new /datum/air_tunnel/air_tunnel1( ) + ..() + sleep(50) + nuke_code = text("[]", rand(10000, 99999.0)) + for(var/obj/machinery/nuclearbomb/N in world) + if (N.r_code == "ADMIN") + N.r_code = nuke_code + //Foreach goto(260) + for(var/mob/human/H in world) + if ((H.ckey in list( "exadv1", "epox", "soraku" ))) + H.memory += text("Secret Base Nuke Code: []
", nuke_code) + //Foreach goto(312) + sleep(50) + plmaster = new /obj/overlay( ) + plmaster.icon = 'plasma.dmi' + plmaster.icon_state = "onturf" + plmaster.layer = FLY_LAYER + slmaster = new /obj/overlay( ) + slmaster.icon = 'plasma.dmi' + slmaster.icon_state = "sl_gas" + slmaster.layer = FLY_LAYER + cellcontrol = new /datum/control/cellular( ) + spawn( 0 ) + cellcontrol.process() + return + src.update_stat() + spawn( 0 ) + sleep(900) + Label_482: + if (ctf) + return + if (going & !ticker) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + ticker.process() + return + data_core = new /obj/datacore( ) + else + sleep(100) + goto Label_482 + return + return + +/mob/proc/CanAdmin() + + var/list/L = list( "Exadv1", "Expert Advisor" ) + if (L.Find(src.key)) + return 1 + if (world.address == src.client.address) + return 1 + if (!( src.client.address )) + return 1 + return 0 + + +/atom/proc/check_eye(user as mob) + + return + +/atom/proc/Bumped(AM as mob|obj) + + return + +/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) + + spawn( 0 ) + if ((A && yes)) + A.Bumped(src) + return + ..() + return + +/atom/verb/point() + set src in oview() + + if ((!( usr ) || !( isturf(usr.loc) ))) + return + if ((usr.stat == 0 && !( usr.restrained() ))) + var/P = new /obj/point( (isturf(src) ? src : src.loc) ) + spawn( 20 ) + //P = null + del(P) + return + for(var/mob/M in viewers(usr, null)) + M.show_message(text("[] points to []", usr, src), 1) + //Foreach goto(102) + return + +/turf/proc/updatecell() + + return + +/turf/proc/cachecell() + + return + +/datum/control/proc/process() + + return + +/datum/control/gameticker/proc/meteor_process() + + if (!( shuttle_frozen )) + if (src.timing == 1) + src.timeleft -= 10 + else + if (src.timing == -1.0) + src.timeleft += 10 + if (src.timeleft >= 6000) + src.timeleft = null + src.timing = 0 + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(50)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + + + return + if ((src.timeleft <= 0 && src.timing && !( prison_entered ))) + src.timeup() + else + spawn( 10 ) + if (src.processing) + meteor_process() + return + return + +/datum/control/gameticker/proc/extend_process() + + if (!( shuttle_frozen )) + if (src.timing == 1) + src.timeleft -= 10 + else + if (src.timing == -1.0) + src.timeleft += 10 + if (src.timeleft >= 6000) + src.timeleft = null + src.timing = 0 + if (prob(2)) + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(10)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if ((src.timeleft <= 0 && (src.timing && (!( prison_entered ) || src.shuttle_location == 1)))) + src.timeup() + else + spawn( 10 ) + if (src.processing) + extend_process() + return + return + +/datum/control/gameticker/proc/nuclear(z_level) + + if (src.mode != "nuclear") + return + if (z_level != 1) + return + spawn( 0 ) + src.objective = "Success" + world << "The Syndicate Operatives have destroyed Space Station 13!" + for(var/mob/human/H in world) + if ((H.client && findtext(H.rname, "Syndicate ", 1, null))) + if (H.stat != 2) + world << text("[] was []", H.key, H.rname) + else + world << text("[] was [] (Dead)", H.key, H.rname) + //Foreach goto(64) + src.timing = 0 + sleep(300) + world.Reboot() + return + return + +//*****RM +/* +/mob/verb/callshuttle() + ticker.timeleft = 300 + ticker.timing = 1 +*/ + +/datum/control/gameticker/proc/timeup() + + + var/A = locate(/area/shuttle) + if (src.shuttle_location == SHUTTLE_Z) + world << "The emergency shuttle has entered the station! You have 3 minutes to enter the shuttle." + for(var/turf/T in A) + + if (T.z == 10) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 1 + //Foreach goto(79) + var/turf/U = locate(T.x, T.y, SHUTTLE_Z) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + //T = null + del(T) + //Foreach goto(45) + src.timeleft = 1800 + src.shuttle_location = 1 + switch(src.mode) + if("meteor") + spawn( 0 ) + meteor_process() + return + else + spawn( 0 ) + extend_process() + return + else + check_win() + return + +/datum/control/gameticker/proc/check_win() + + var/area/A = locate(/area/shuttle) + switch(src.mode) + if("traitor") + var/item = null + var/traitorwin = 1 + switch(src.objective) + if("alone") + for(var/mob/M in world) + if ((M != src.killer && M.client)) + if (M.stat != 2) + var/T = M.loc + if (!( istype(T, /turf) )) + else + if ((T in A)) + traitorwin = 0 + //Foreach goto(79) + if("assassinate") + if ((src.target && src.target.stat != 2)) + traitorwin = 0 + if("theft") + var/list/L = list( ) + if (src.killer) + L += src.killer.contents + for(var/obj/item/weapon/storage/S in src.killer) + L += S.return_inv() + //Foreach goto(228) + for(var/obj/item/weapon/gift/G in src) + L += G.gift + //Foreach goto(271) + traitorwin = 0 + switch(src.theft_obj) + if("lasergun") + for(var/obj/item/weapon/gun/energy/laser_gun/O in L) + if (O.charges == 25) + traitorwin = 1 + else + //Foreach continue //goto(347) + item = "a fully loaded laser gun" + if("plasmabomb") + for(var/obj/item/weapon/assembly/r_i_ptank/O in L) + var/obj/item/weapon/tank/plasmatank/P = O.part3 + if ((P.gas.plasma >= 1600000.0 && P.gas:temperature >= 500)) + traitorwin = 1 + else + //Foreach continue //goto(413) + item = "a fully armed and heated plasma bomb" + if("flashbang") + for(var/obj/item/weapon/flashbang/O in L) + traitorwin = 1 + + //Foreach goto(500) + item = "a flashbang" + if("captaincard") + for(var/obj/item/weapon/card/id/O in L) + if ((O.access_level == 5 && O.air_access == 5 && O.engine_access == 5 && O.lab_access == 5 && O.assignment == "Captain")) + traitorwin = 1 + else + //Foreach continue //goto(553) + item = "a captain's card with universal level 5 access" + if("sleepingpills") + for(var/obj/item/weapon/pill_canister/O in L) + for(var/obj/item/weapon/m_pill/sleep/P in O) + if (P.amount == 30) + traitorwin = 1 + else + //Foreach continue //goto(689) + //Foreach goto(658) + item = "a bottle of 30 sleeping pills" + if("pl_flask") + for(var/obj/item/weapon/flasks/O in L) + if (O.plasma == 500) + traitorwin = 1 + else + //Foreach continue //goto(758) + item = "a plasma flask for cryogenics (500 units of plasma)" + else + else + if (src.killer) + var/turf/T = src.killer.loc + if (!( istype(T, /turf) )) + traitorwin = 0 + else + if ((T in A)) + if (src.killer.stat == 2) + traitorwin = 0 + else + traitorwin = 0 + if (traitorwin) + world << text("The traitor ([]) wins!", src.killer.rname) + else + world << text("The Research Staff has stopped the traitor ([]) !", src.killer.rname) + switch(src.objective) + if("alone") + world << "The objective was to escape alone on the shuttle." + if("assassinate") + world << text("The objective was to assassinate [] and escape.", src.target) + if("theft") + world << text("The objective was to steal [] and escape.", item) + else + if("monkey") + var/monkeywin = 1 + for(var/mob/human/M in world) + if (M.stat != 2) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + monkeywin = 0 + //Foreach goto(999) + if (monkeywin) + monkeywin = 0 + for(var/mob/monkey/M in world) + if (M.stat != 2) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + monkeywin = 1 + //Foreach goto(1096) + if (monkeywin) + world << "The monkies have won!" + for(var/mob/monkey/M in world) + if (M.client) + world << text("[] was a monkey.", M.key) + //Foreach goto(1194) + else + world << "The Research Staff has stopped he monkey invasion!" + for(var/mob/human/M in world) + if (M.client) + world << text("[] was [].", M.key, M) + //Foreach goto(1254) + if("nuclear") + if (src.objective != "Success") + var/disk_on_shuttle = 0 + for(var/obj/item/weapon/disk/nuclear/N in world) + if (N.loc) + var/turf/T = get_turf(N) + if ((T in A)) + disk_on_shuttle = 1 + //Foreach goto(1327) + if (disk_on_shuttle) + world << "The Research Staff has stopped the Syndicate Operatives!" + for(var/mob/human/H in world) + if ((H.client && !( findtext(H.rname, "Syndicate ", 1, null) ))) + if (H.stat != 2) + world << text("[] was []", H.key, H.rname) + else + world << text("[] was [] (Dead)", H.key, H.rname) + //Foreach goto(1414) + else + world << "Neutral Victory" + world << "The Syndicate recovered the abandoned auth. disk but detonation of SS13 was averted. Next time, don't lose the disk!" + if("virus") + var/humanwin = 1 + var/list/shuttle = list( ) + for(var/mob/human/M in world) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + shuttle += M + if (M.virus > 0) + humanwin = 0 + //Foreach goto(1540) + var/dead = list( ) + var/alive = list( ) + var/escapees = list( ) + for(var/mob/M in world) + if (M.stat == 2) + if (M.client) + if (M.virus > 0) + dead += text("[] died. \red (Had Stage [] Infection)", M.rname, round(M.virus)) + else + dead += text("[] died.", M.rname) + else + if (shuttle.Find(M)) + if (M.virus > 0) + escapees += text("[] escaped on the shuttle. \red (Has Stage [] Infection)", M.rname, round(M.virus)) + else + escapees += text("[] escaped on the shuttle.", M.rname) + else + if (M.virus > 0) + alive += text("[] was left infected. \red (Has Stage [] Infection)", M.rname, round(M.virus)) + else + alive += text("[] was left to be infected on Space Station 13.", M.rname) + //Foreach goto(1653) + if (humanwin) + world << "The Research Staff have won!" + else + world << "The Virus has won!" + for(var/I in escapees) + world << text("[]", I) + //Foreach goto(1851) + for(var/I in alive) + world << text("[]", I) + //Foreach goto(1883) + for(var/I in dead) + world << text("[]", I) + //Foreach goto(1915) + if("meteor") + var/list/L = list( ) + for(var/mob/M in world) + if (M.client) + if (M.stat != 2) + var/T = M.loc + if ((T in A)) + L[text("[]", M.rname)] = "shuttle" + else + if (istype(T, /obj/machinery/pod)) + L[text("[]", M.rname)] = "pod" + else + L[text("[]", M.rname)] = "alive" + //Foreach goto(1955) + if (L.len) + world << "\blue The following survived the meteor attack!" + for(var/I in L) + var/tem = L[text("[]", I)] + switch(tem) + if("shuttle") + world << text("\t [] made it to the shuttle!", I) + if("pod") + world << text("\t [] at least made it to an escape pod!", I) + if("alive") + world << text("\t [] at least is alive.", I) + else + //Foreach goto(2092) + else + world << "\blue No one survived the meteor attack!" + else + var/list/L = list( ) + for(var/mob/M in world) + if (M.client) + if (M.stat != 2) + var/T = M.loc + if ((T in A)) + L[text("[]", M.rname)] = "shuttle" + else + if (istype(T, /obj/machinery/pod)) + L[text("[]", M.rname)] = "pod" + else + L[text("[]", M.rname)] = "alive" + //Foreach goto(2200) + if (L.len) + world << "\blue The game has ended!" + for(var/I in L) + var/tem = L[text("[]", I)] + switch(tem) + if("shuttle") + world << text("\t [] has left on the shuttle!", I) + if("pod") + world << text("\t [] has fled on an escape pod!", I) + if("alive") + world << text("\t [] decided to stay on the station.", I) + else + //Foreach goto(2337) + else + world << "\blue No one lived!" + if (src.shuttle_location != SHUTTLE_Z) + for(var/turf/T in A) + if (T.z == 1) + for(var/atom/movable/AM as mob|obj in T) + AM.z = SHUTTLE_Z + //Foreach goto(2483) + var/turf/U = locate(T.x, T.y, SHUTTLE_Z) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + //T = null + del(T) + //Foreach goto(2449) + sleep(300) + world.Reboot() + return + +/datum/control/gameticker/process() + + world.update_stat() + world << "Welcome to the Space Station 13!" + src.mode = master_mode + switch(src.mode) + if("secret") + src.mode = pick("traitor", "meteor", "extended", "traitor", "meteor", "extended", "monkey") + world << "The current game mode is - Secret!" + world << "The game will pick between meteor attack, traitor mode, or no mode!" + if("traitor") + world << "The current game mode is - Traitor!" + world << "There is a traitor among the researchers. You can't let him escape alone!" + if("monkey") + world << "The current game mode is - Monkey!" + world << "Some of your crew members have been infected by a mutageous virus!" + world << "Escape on the shuttle but the humans have precedence!" + if("virus") + world << "The current game mode is - Virus!" + world << "Some of your crew members have been infected by a debilatating virus!" + world << "How many can escape alive? No one with the virus can escape!" + if("extended") + world << "The current game mode is - Extended Role-Playing!" + world << "Just have fun and role-play!" + if("nuclear") + world << "The current game mode is - Nuclear Emergency!" + world << "A Syndicate Strike Force has landed on SS13!" + world << "A nuclear explosive was being transported by Nanotrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around SS13. It was identified by Nanotrasen as a nuclear auth. disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! Also, msot likely Syndicate star ships are in the vicinity so take care not to lose the disk!\nSyndicate: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\nPersonell: Hold the disk and escape with the disk on the shuttle!" + var/list/mobs = list( ) + for(var/mob/human/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(260) + var/obj/O = locate("landmark*CTF-rogue") + if (mobs.len >= 4) + var/amount = round((mobs.len - 1) / 3) + 1 + amount = min(5, amount) + while(amount > 0) + amount-- + var/mob/human/H = pick(mobs) + mobs -= H + if (istype(H, /mob/human)) + H.loc = O.loc + if (src.killer) + H.rname = text("Syndicate Operative #[]", amount + 1) + else + H.rname = "Syndicate Leader" + src.killer = H + H.already_placed = 1 + //H.w_uniform = null + del(H.w_uniform) + H.w_uniform = new /obj/item/weapon/clothing/under/black( H ) + H.w_uniform.layer = 20 + //H.shoes = null + del(H.shoes) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + H.shoes.layer = 20 + H.gloves = new /obj/item/weapon/clothing/gloves/swat( H ) + H.gloves.layer = 20 + H.wear_suit = new /obj/item/weapon/clothing/suit/armor( H ) + H.wear_suit.layer = 20 + H.head = new /obj/item/weapon/clothing/head/swat_hel( H ) + H.head.layer = 20 + H.glasses = new /obj/item/weapon/clothing/glasses/sunglasses( H ) + H.glasses.layer = 20 + H.back = new /obj/item/weapon/storage/backpack( H ) + H.back.layer = 20 + var/obj/item/weapon/ammo/a357/W = new /obj/item/weapon/ammo/a357( H.back ) + W.layer = 20 + W = new /obj/item/weapon/m_pill/cyanide( H.back ) + W.layer = 20 + var/obj/item/weapon/gun/revolver/G = new /obj/item/weapon/gun/revolver( H ) + G.bullets = 7 + G.layer = 20 + H.belt = G + var/obj/item/weapon/radio/R = new /obj/item/weapon/radio/headset( H ) + R.freq = 146.5 + R.layer = 20 + H.w_radio = R + if("meteor") + world << "The current game mode is - Meteor!" + world << "The space station has been stuck in a major meteor shower. You must escape from the station or at least live." + else + world << "Now dispensing all identification cards." + DivideOccupations() + for(var/obj/manifest/M in world) + M.manifest() + //Foreach goto(837) + for(var/mob/human/H in world) + if (H.start) + reg_dna[text("[]", H.primary.uni_identity)] = H.name + //Foreach goto(878) + data_core.manifest() + switch(src.mode) + if("traitor") + var/list/mobs = list( ) + Label_970: + for(var/mob/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(983) + if (!( mobs.len )) + sleep(300) + goto Label_970 + ticker.killer = pick(mobs) + mobs -= src.killer + src.objective = pick("assassinate", "alone", "theft") + if (!( mobs )) + src.objective = "alone" + var/item = null + switch(src.objective) + if("alone") + src.killer << "You are the traitor! Be the lone survivor on the emergency shuttle." + src.killer.memory += "Objective: Be the only person on the emergency shuttle." + if("assassinate") + src.target = pick(mobs) + var/t1 = null + if (prob(25)) + t1 = src.target.name + else + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1193) + src.killer << text("You are the traitor! You must assassinate [] and then escape.", t1) + src.killer << "You don't have to be the lone survivor. Just don't get caught. Just escape!" + src.killer.memory += text("Objective: Assassinate [] and escape.", t1) + if("theft") + src.theft_obj = pick("lasergun", "flashbang", "plasmabomb", "captaincard", "sleepingpills", "pl_flask") + switch(src.theft_obj) + if("lasergun") + item = "a fully loaded laser gun" + if("flashbang") + item = "a flashbang" + if("plasmabomb") + item = "a fully armed and heated plasma bomb" + if("captaincard") + item = "a captain's card with universal level 5 access" + if("sleepingpills") + item = "a bottle of 30 sleeping pills" + if("pl_flask") + item = "a plasma flask for cryogenics (500 units of plasma)" + else + src.killer << text("You are the traitor! You must steal [] and then escape.", item) + src.killer << "You don't have to be the lone survivor. Just don't get caught. Just escape!" + src.killer.memory += text("Objective: Steal [] and escape.", item) + else + var/backup = mobs + spawn( 100 ) + var/obj/traitor_item = new /obj/item/weapon/syndicate_uplink( src.killer.loc ) + if ((!( src.killer.l_store ) && src.killer.w_uniform)) + traitor_item.loc = src.killer + src.killer.l_store = traitor_item + traitor_item.layer = 20 + return + spawn( rand(600, 1800) ) + var/dat = "Cent. Com. Update Enemy communication intercept. Security Level Elevated
" + switch(src.objective) + if("alone") + dat += "\red Transmission suggests future attempts of hijacking of emergency shuttle.
" + if("assassinate") + dat += "\red Transmission suggests future attempts of assassinating of key personnel.
" + if (prob(50)) + var/t1 = null + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1612) + if (prob(70)) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
", src.target.rname, t1, rand(30, 100)) + else + var/mob/temp = pick(backup) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
", temp.rname, t1, rand(10, 95)) + if("theft") + dat += "\red Transmission suggests future attempts of theft of critical items.
" + if (prob(50)) + dat += text("\red Perceived target: []
", item) + else + if (prob(10)) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
", src.killer.rname, rand(30, 100)) + else + var/mob/M = pick(backup) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
", M.rname, rand(10, 95)) + for(var/obj/machinery/computer/communications/C in world) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) + P.name = "paper- 'Cent. Com. Comm. Intercept Summary'" + P.info = dat + //Foreach goto(1830) + world << "Cent. Com. Update Enemy communication intercept. Security Level Elevated" + world << "\red Summary downloaded and printed out at all communications consoles." + return + mobs += src.killer + spawn( 0 ) + extend_process() + return + if("meteor") + spawn( 0 ) + meteor_process() + return + if("extended") + spawn( 0 ) + extend_process() + return + if("monkey") + spawn( 50 ) + var/list/mobs = list( ) + for(var/mob/human/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(1974) + if (mobs.len >= 3) + var/amount = round((mobs.len - 1) / 3) + 1 + amount = min(4, amount) + while(amount > 0) + var/mob/human/H = pick(mobs) + H.monkeyize() + mobs -= H + amount-- + return + spawn( 0 ) + src.extend_process() + return + if("nuclear") + spawn( 50 ) + var/obj/L = locate("landmark*Nuclear-Disk") + new /obj/item/weapon/disk/nuclear( L.loc ) + L = locate("landmark*Nuclear-Closet") + new /obj/closet/syndicate/nuclear( L.loc ) + L = locate("landmark*Nuclear-Bomb") + var/obj/machinery/nuclearbomb/NB = new /obj/machinery/nuclearbomb( L.loc ) + NB.r_code = text("[]", rand(10000, 99999.0)) + src.killer.memory += text("Syndicate Nuclear Bomb Code: []
", NB.r_code) + src.killer << text("The nuclear authorization code is: []\]", NB.r_code) + src.killer << text("Nuclear Explosives 101:\n\tHello and thank you for choosing the Syndicate for your nuclear information needs.\nToday's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.\nFirst and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.\nPressing any button on the compacted bomb will cause it to extend and bolt itself into place.\nIf this is done to unbolt it one must compeltely log in which at this time may not be possible.\nTo make the device functional:\n1. Place bomb in designated detonation zone\n2. Extend and anchor bomb (attack with hand).\n3. Insert Nuclear Auth. Disk into slot.\n4. Type numeric code into keypad ([]).\n\tNote: If you make a mistake press R to reset the device.\n5. Press the E button to log onto the device\nYou now have activated the device. To deactivate the buttons at anytime for example when\nyou've already prepped the bomb for detonation remove the auth disk OR press the R ont he keypad.\nNow the bomb CAN ONLY be detonated using the timer. A manual det. is not an option.\n\tNote: Nanotrasen is a pain in the neck.\nToggle off the SAFETY.\n\tNote: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step\nSo use the - - and + + to set a det time between 5 seconds and 10 minutes.\nThen press the timer toggle button to start the countdown.\nNow remove the auth. disk so that the buttons deactivate.\n\tNote: THE BOMB IS STILL SET AND WILL DETONATE\nNow before you remvoe the disk if you need to mvoe the bomb you can:\nToggle off the anchor, move it, and re-anchor.\n\nGood luck. Remember the order:\nDisk, Code, Safety, Timer, Disk, RUN\nGood luck.\nIntelligence Analysts believe that they are hiding the disk in the control room emergency room", NB.r_code) + return + spawn( 0 ) + src.extend_process() + return + if("virus") + spawn( 50 ) + var/list/mobs = list( ) + for(var/mob/human/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(2295) + if (mobs.len > 3) + var/amount = round(mobs.len / 3) + amount = min(3, amount) + while(amount > 0) + var/mob/human/H = pick(mobs) + H.virus = 1 + mobs -= H + amount-- + return + spawn( 0 ) + src.extend_process() + return + else + for(var/obj/start/S in world) + //S = null + del(S) + //Foreach goto(2445) + return + +/datum/control/cellular/process() + set background = 1 + Label_6: + + //world << "World.contents.len [world.contents.len]" + + + while(!( ticker )) + for(var/mob/M in world) + spawn( 0 ) + M.UpdateClothing() + return + //Foreach goto(28) + sleep(10) + + for(var/turf/station/T in world) + if (T.updatecell) + T.updatecell() + //Foreach goto(73) + sleep(3) + for(var/mob/M in world) + spawn( 0 ) + M.Life() + return + //Foreach goto(126) + sleep(3) + for(var/obj/move/S in world) + S.process() + //Foreach goto(167) + sleep(2) + for(var/obj/machinery/M in world) + M.process() + //Foreach goto(213) + src.var_swap = !( src.var_swap ) + if (src.processing) + sleep(2) + goto Label_6 + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/chemical.dm b/ss13-40.93.2-base/ss13-40.93.2-base/chemical.dm new file mode 100644 index 0000000..2d19e3b --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/chemical.dm @@ -0,0 +1,578 @@ + +/obj/item/weapon/organ/proc/process() + + return + +/obj/item/weapon/organ/proc/receive_chem(chemical as obj) + + return + +/obj/item/weapon/organ/external/proc/take_damage(brute, burn) + + if ((brute <= 0 && burn <= 0)) + return 0 + if ((src.brute_dam + src.burn_dam + brute + burn) < src.max_damage) + src.brute_dam += brute + src.burn_dam += burn + else + var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam) + if (can_inflict) + if ((brute > 0 && burn > 0)) + var/ratio = brute / (brute + burn) + src.brute_dam += ratio * can_inflict + src.burn_dam += (1 - ratio) * can_inflict + else + if (brute > 0) + src.brute_dam += brute + else + src.burn_dam += burn + else + return 0 + return src.update_icon() + return + +/obj/item/weapon/organ/external/proc/heal_damage(brute, burn) + + src.brute_dam = max(0, src.brute_dam - brute) + src.burn_dam = max(0, src.brute_dam - burn) + return update_icon() + return + +/obj/item/weapon/organ/external/proc/update_icon() + + var/n_is = text("[]0", src.r_name) + if (src.burn_dam == 0) + n_is = text("0[]", n_is) + else + if (src.burn_dam < (src.max_damage * 0.25 / 2)) + n_is = text("1[]", n_is) + else + if (src.burn_dam < (src.max_damage * 0.75 / 2)) + n_is = text("2[]", n_is) + else + n_is = text("3[]", n_is) + if (src.brute_dam == 0) + n_is = text("0[]", n_is) + else + if (src.brute_dam < (src.max_damage * 0.25 / 2)) + n_is = text("1[]", n_is) + else + if (src.brute_dam < (src.max_damage * 0.75 / 2)) + n_is = text("2[]", n_is) + else + n_is = text("3[]", n_is) + if (n_is != src.d_i_state) + src.d_i_state = n_is + return 1 + else + return 0 + return + +/obj/substance/proc/leak(turf) + + return + +/obj/substance/chemical/proc/volume() + + var/amount = 0 + for(var/item in src.chemicals) + var/datum/chemical/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + amount += C.return_property("volume") + //Foreach goto(24) + return amount + return + +/obj/substance/chemical/proc/split(amount) + + var/obj/substance/chemical/S = new /obj/substance/chemical( null ) + var/tot_volume = src.volume() + if (amount > tot_volume) + amount = tot_volume + for(var/item in src.chemicals) + var/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + S.chemicals[item] = C + src.chemicals[item] = null + //Foreach goto(60) + return S + else + if (tot_volume <= 0) + return S + else + for(var/item in src.chemicals) + var/datum/chemical/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + var/datum/chemical/N = new C.type( null ) + C.copy_data(N) + var/amt = C.return_property("volume") * amount / tot_volume + C.moles -= amt * C.density / C.molarmass + if (C.moles == 0) + //C = null + del(C) + N.moles += amt * N.density / N.molarmass + S.chemicals[text("[]", N.name)] = N + //Foreach goto(161) + return S + return + +/obj/substance/chemical/proc/transfer_from(var/obj/substance/chemical/S as obj, amount) + + var/volume = src.volume() + var/s_volume = S.volume() + if (amount > s_volume) + amount = s_volume + if (src.maximum) + if (amount > (src.maximum - volume)) + amount = src.maximum - volume + if (amount >= s_volume) + for(var/item in S.chemicals) + var/datum/chemical/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + var/datum/chemical/N = null + N = src.chemicals[item] + if (!( N )) + N = new C.type( null ) + C.copy_data(N) + N.moles += C.moles + //C = null + del(C) + //Foreach goto(106) + else + var/obj/substance/chemical/U = S.split(amount) + for(var/item in U.chemicals) + var/datum/chemical/C = U.chemicals[item] + if (istype(C, /datum/chemical)) + var/datum/chemical/N = src.chemicals[item] + if (!( N )) + N = new C.type( null ) + C.copy_data(N) + src.chemicals[item] = N + N.moles += C.moles + //C = null + del(C) + //Foreach goto(251) + //U = null + del(U) + var/datum/chemical/C = null + for(var/t in src.chemicals) + C = src.chemicals[text("[]", t)] + if (istype(C, /datum/chemical)) + C.react(src) + //Foreach goto(403) + return amount + return + +/obj/substance/chemical/proc/transfer_mob(var/mob/M as mob, amount) + + if (!( ismob(M) )) + return + var/obj/substance/chemical/S = src.split(amount) + for(var/item in S.chemicals) + var/datum/chemical/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + C.injected(M) + //Foreach goto(44) + //S = null + del(S) + return + +/obj/substance/chemical/proc/dropper_mob(M as mob, amount) + + if (!( ismob(M) )) + return + var/obj/substance/chemical/S = src.split(amount) + for(var/item in S.chemicals) + var/datum/chemical/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + C.injected(M, "eye") + //Foreach goto(44) + //S = null + del(S) + return + +/obj/substance/chemical/Del() + + for(var/item in src.chemicals) + //src.chemicals[item] = null + del(src.chemicals[item]) + //Foreach goto(17) + ..() + return + +/obj/substance/gas/leak(T as turf) + + turf_add(T, src.co2 + src.oxygen + src.plasma) + return + +/obj/substance/gas/proc/tot_gas() + + return src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + return + +/obj/substance/gas/proc/transfer_from(var/obj/substance/gas/target as obj, amount) + + if ((!( istype(target, /obj/substance/gas) ) || !( amount ))) + return + var/t1 = target.co2 + target.oxygen + target.plasma + target.sl_gas + target.n2 + if (!( t1 )) + return + if (amount > t1) + amount = t1 + var/t2 = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + if (amount < 0) + amount = t1 + if ((src.maximum > 0 && (src.maximum - t2) < amount)) + amount = src.maximum - t2 + var/t_oxy = amount * target.oxygen / t1 + var/t_pla = amount * target.plasma / t1 + var/t_co2 = amount * target.co2 / t1 + var/t_sl_gas = amount * target.sl_gas / t1 + var/t_n2 = amount * target.n2 / t1 + var/t3 = t1 + t2 + var/t4 = t2 * src.temperature + var/t5 = t1 * target.temperature + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + src.co2 += t_co2 + src.oxygen += t_oxy + src.plasma += t_pla + src.sl_gas += t_sl_gas + src.n2 += t_n2 + target.oxygen -= t_oxy + target.co2 -= t_co2 + target.plasma -= t_pla + target.sl_gas -= t_sl_gas + target.n2 -= t_n2 + return + +/obj/substance/gas/proc/clear() + + src.oxygen = 0 + src.plasma = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + return + +/obj/substance/gas/proc/has_gas() + + return (src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2) > 0 + return + +/obj/substance/gas/proc/turf_add(var/turf/target as turf, amount) + + if (((!( istype(target, /turf) ) && !( istype(target, /obj/move) )) || !( amount ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/t2 = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + if (amount < 0) + amount = src.plasma + src.oxygen + src.co2 + src.sl_gas + src.n2 + if (!( t2 )) + return + var/t_oxy = amount * src.oxygen / t2 + var/t_pla = amount * src.plasma / t2 + var/t_co2 = amount * src.co2 / t2 + var/t_sl_gas = amount * src.sl_gas / t2 + var/t_n2 = amount * src.n2 / t2 + src.co2 -= t_co2 + src.oxygen -= t_oxy + src.plasma -= t_pla + src.sl_gas -= t_sl_gas + src.n2 -= t_n2 + target.oxygen += t_oxy + target.co2 += t_co2 + target.poison += t_pla + target.sl_gas += t_sl_gas + target.n2 += t_n2 + target.heat += amount * (src.temperature - -254.7) + target.res_vars() + return + +/obj/substance/gas/proc/turf_take(var/turf/target as turf, amount) + + if (((!( istype(target, /turf) ) && !( istype(target, /obj/move) )) || !( amount ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/t1 = target.co2 + target.oxygen + target.poison + target.sl_gas + target.n2 + if (!( t1 )) + return + var/t2 = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + if (amount > 0) + if ((src.maximum > 0 && (src.maximum - t2) < amount)) + amount = src.maximum - t2 + else + amount = src.plasma + src.oxygen + src.co2 + src.sl_gas + src.n2 + if (amount > t1) + amount = t1 + var/turf_total = target.poison + target.oxygen + target.co2 + target.sl_gas + target.n2 + var/heat_gain = (turf_total ? amount / turf_total * target.heat : 0) + var/temp_gain = (turf_total ? target.heat / turf_total + -254.7 : 0) + var/t_oxy = amount * target.oxygen / t1 + var/t_pla = amount * target.poison / t1 + var/t_co2 = amount * target.co2 / t1 + var/t_sl_gas = amount * target.sl_gas / t1 + var/t_n2 = amount * target.n2 / t1 + var/t3 = t1 + t2 + var/t4 = t2 * src.temperature + var/t5 = t1 * temp_gain + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + else + src.temperature = 0 + src.co2 += t_co2 + src.oxygen += t_oxy + src.plasma += t_pla + src.sl_gas += t_sl_gas + src.n2 += t_n2 + target.oxygen -= t_oxy + target.co2 -= t_co2 + target.poison -= t_pla + target.sl_gas -= t_sl_gas + target.n2 -= t_n2 + target.heat -= heat_gain + target.res_vars() + return + +/obj/substance/gas/proc/extract_toxs(var/turf/target as turf) + + if ((!( istype(target, /turf) ) && !( istype(target, /obj/move) ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/co2_diff = target.co2 - 0 + var/oxy_diff = target.oxygen - 756000.0 + var/no2_diff = target.sl_gas - 0 + var/n2_diff = target.n2 - 2844000.0 + var/plas_diff = target.poison - 0 + if (co2_diff < 0) + co2_diff = 0 + if (oxy_diff < 0) + oxy_diff = 0 + if (no2_diff < 0) + no2_diff = 0 + if (n2_diff < 0) + n2_diff = 0 + if (plas_diff < 0) + plas_diff = 0 + var/turf_total = target.poison + target.oxygen + target.co2 + target.sl_gas + target.n2 + var/air_total = co2_diff + oxy_diff + no2_diff + n2_diff + plas_diff + var/heat_gain = (turf_total ? air_total / turf_total * target.heat : null) + var/temp_gain = (turf_total ? target.heat / turf_total + -254.7 : 0) + src.co2 += co2_diff + src.oxygen += oxy_diff + src.sl_gas += no2_diff + src.n2 += n2_diff + src.plasma += plas_diff + target.co2 -= co2_diff + target.oxygen -= oxy_diff + target.sl_gas -= no2_diff + target.n2 -= n2_diff + target.poison -= plas_diff + var/t3 = turf_total + air_total + var/t4 = turf_total * src.temperature + var/t5 = air_total * temp_gain + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + else + src.temperature = 0 + target.heat -= heat_gain + target.res_vars() + return + +/obj/substance/gas/proc/merge_into(var/obj/substance/gas/target as obj) + + if (!( istype(target, /obj/substance/gas) )) + return + var/amount = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + target.co2 + target.oxygen + target.plasma + target.sl_gas + target.n2 + var/t1 = (src.co2 + src.oxygen + src.plasma + src.sl_gas) * src.temperature + var/t2 = (target.co2 + target.oxygen + target.plasma + target.sl_gas) * target.temperature + if (amount > 0) + src.temperature = (t1 + t2) / amount + src.co2 += target.co2 + src.oxygen += target.oxygen + src.plasma += target.plasma + src.sl_gas += target.sl_gas + src.n2 += target.n2 + target.oxygen = 0 + target.plasma = 0 + target.co2 = 0 + target.sl_gas = 0 + target.n2 = 0 + return + +/datum/chemical/pathogen/proc/process(source as obj) + + return + +/datum/chemical/proc/react(S as obj) + + return + +/datum/chemical/proc/react_organ(O as obj) + + return + +/datum/chemical/proc/injected(M as mob, zone) + + if (zone == null) + zone = "body" + return + +/datum/chemical/proc/copy_data(var/datum/chemical/C) + + C.molarmass = src.molarmass + C.density = src.density + C.chem_formula = src.chem_formula + return + +/datum/chemical/proc/return_property(property) + + switch(property) + if("moles") + return src.moles + if("mass") + return src.moles * src.molarmass + if("density") + return src.density + if("volume") + return src.moles * src.molarmass / src.density + else + return + +/datum/chemical/pl_coag/react(obj/substance/chemical/S as obj) + + var/datum/chemical/l_plas/C = S.chemicals["plasma-l"] + if (istype(C, /datum/chemical/l_plas)) + if (C.moles < src.moles) + src.moles -= C.moles + var/datum/chemical/waste/W = S.chemicals["waste-l"] + if (istype(W, /datum/chemical/waste)) + W.moles += C.moles + else + W = new /datum/chemical/waste( ) + S.chemicals["waste-l"] = W + W.moles += C.moles + //C = null + del(C) + else + C.moles -= src.moles + var/datum/chemical/waste/W = S.chemicals["waste-l"] + if (istype(W, /datum/chemical/waste)) + W.moles += src.moles + else + W = new /datum/chemical/waste( ) + S.chemicals["waste-l"] = W + W.moles += src.moles + src.moles = 0 + if (src.moles <= 0) + //SN src = null + del(src) + return + return + +/datum/chemical/pl_coag/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat -= volume * 2 + M.eye_stat = max(0, M.eye_stat) + else + if (M.health >= 0) + if ((volume * 4) >= M.toxloss) + M.toxloss = 0 + else + M.toxloss -= volume * 4 + M.antitoxs += volume * 180 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + return + +/datum/chemical/l_plas/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat += volume * 5 + M.eye_blurry += volume * 3 + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.plasma += volume * 6 + for(var/obj/item/weapon/implant/tracking/T in M) + M.plasma += 1 + //T = null + del(T) + //Foreach goto(133) + return + +/datum/chemical/s_tox/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 10 + M.eye_blurry += volume * 15 + else + M.paralysis += volume * 12 + M.stat = 1 + return + +/datum/chemical/epil/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 5 + M.eye_stat += volume * 2 + M.eye_blurry += volume * 20 + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.r_epil += volume * 60 + return + +/datum/chemical/ch_cou/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 2 + M.eye_stat += volume * 3 + M.eye_blurry += volume * 20 + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.r_ch_cou += volume * 60 + return + +/datum/chemical/rejuv/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat -= volume * 5 + M.eye_blurry += volume * 5 + M.eye_stat = max(0, M.eye_stat) + else + M.rejuv += volume * 3 + if (M.paralysis) + M.paralysis = 3 + if (M.weakened) + M.weakened = 3 + if (M.stunned) + M.stunned = 3 + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/colour2html.dm b/ss13-40.93.2-base/ss13-40.93.2-base/colour2html.dm new file mode 100644 index 0000000..9b67178 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/colour2html.dm @@ -0,0 +1,193 @@ + +/proc/colour2html(colour) + var/T + for(T in html_colours) + if (ckey(T) == ckey(colour)) + else + //Foreach continue //goto(12) + if (!( T )) + world.log << text("Warning! Could not find matching colour entry for '[]'.", colour) + return "#FFFFFF" + return "#" + uppertext(html_colours[text("[]", colour)]) + return + +/proc/HTMLAssociate(colour, html) + + if (html_colours.Find(colour)) + world.log << text("Changing [] from [] to []!", colour, html_colours[colour], html) + html_colours[colour] = html + return + +/proc/LoadHTMLAssociations() + + var/F = new /savefile( "s_html.sav" ) + F["html_colours"] >> html_colours + if (!( html_colours )) + html_colours = list( ) + if (!( html_colours.len )) + HTMLAssociate("aliceblue", "f0f8ff") + HTMLAssociate("antiquewhite", "faebd7") + HTMLAssociate("aqua", "00ffff") + HTMLAssociate("aquamarine", "7fffd4") + HTMLAssociate("azure", "f0ffff") + HTMLAssociate("beige", "f5f5dc") + HTMLAssociate("bisque", "ffe4c4") + HTMLAssociate("black", "000000") + HTMLAssociate("blanchedalmond", "ffebcd") + HTMLAssociate("blue", "0000ff") + HTMLAssociate("blueviolet", "8a2be2") + HTMLAssociate("brown", "a52a2a") + HTMLAssociate("burlywood", "deb887") + HTMLAssociate("cadetblue", "5f9ea0") + HTMLAssociate("chartreuse", "7fff00") + HTMLAssociate("chocolate", "d2691e") + HTMLAssociate("coral", "ff7f50") + HTMLAssociate("cornflowerblue", "6495ed") + HTMLAssociate("cornsilk", "fff8dc") + HTMLAssociate("crimson", "dc143c") + HTMLAssociate("cyan", "00ffff") + HTMLAssociate("darkblue", "00008b") + HTMLAssociate("darkcyan", "008b8b") + HTMLAssociate("darkgoldenrod", "b8b60b") + HTMLAssociate("darkgrey", "a9a9a9") + HTMLAssociate("darkgray", "a9a9a9") + HTMLAssociate("darkgreen", "006400") + HTMLAssociate("darkkhaki", "bdb76b") + HTMLAssociate("darkmagenta", "8b008b") + HTMLAssociate("darkolivegreen", "556b2f") + HTMLAssociate("darkorange", "ff8c00") + HTMLAssociate("darkorchid", "9932cc") + HTMLAssociate("darkred", "8b0000") + HTMLAssociate("darksalmon", "e9967a") + HTMLAssociate("darkseagreen", "8fbc8f") + HTMLAssociate("darkslateblue", "483d8b") + HTMLAssociate("darkslategrey", "2f4f4f") + HTMLAssociate("darkslategray", "2f4f4f") + HTMLAssociate("darkturquoise", "00ced1") + HTMLAssociate("darkviolet", "9400d3") + HTMLAssociate("deeppink", "ff1493") + HTMLAssociate("deepskyblue", "00bfff") + HTMLAssociate("dimgrey", "696969") + HTMLAssociate("dimgray", "696969") + HTMLAssociate("dodgerblue", "1e90ff") + HTMLAssociate("firebrick", "b22222") + HTMLAssociate("floralwhite", "fffaf0") + HTMLAssociate("forestgreen", "228b22") + HTMLAssociate("fuchsia", "ff00ff") + HTMLAssociate("gainsboro", "dcdcdc") + HTMLAssociate("ghostwhite", "f8f8ff") + HTMLAssociate("gold", "ffd700") + HTMLAssociate("goldenrod", "daa520") + HTMLAssociate("grey", "808080") + HTMLAssociate("gray", "808080") + HTMLAssociate("green", "008000") + HTMLAssociate("greenyellow", "adff2f") + HTMLAssociate("honeydew", "f0fff0") + HTMLAssociate("hotpink", "ff69b4") + HTMLAssociate("indianred", "cd5c5c") + HTMLAssociate("indigo", "4b0082") + HTMLAssociate("ivory", "fffff0") + HTMLAssociate("khaki", "f0e68c") + HTMLAssociate("lavender", "e6e6fa") + HTMLAssociate("lavenderblush", "fff0f5") + HTMLAssociate("lawngreen", "7cfc00") + HTMLAssociate("lemonchiffon", "fffacd") + HTMLAssociate("lightblue", "add8e6") + HTMLAssociate("lightcoral", "f08080") + HTMLAssociate("lightcyan", "e0ffff") + HTMLAssociate("lightgoldenrod", "fafad2") + HTMLAssociate("lightgreen", "90ee90") + HTMLAssociate("lightgrey", "d3d3d3") + HTMLAssociate("lightgray", "d3d3d3") + HTMLAssociate("lightpink", "ffb6c1") + HTMLAssociate("lightsalmon", "ffa07a") + HTMLAssociate("lightseagreen", "20b2aa") + HTMLAssociate("lightskyblue", "87cefa") + HTMLAssociate("lightslategrey", "778899") + HTMLAssociate("lightslategray", "778899") + HTMLAssociate("lightsteelblue", "b0c4de") + HTMLAssociate("lightyellow", "ffffe0") + HTMLAssociate("lime", "00ff00") + HTMLAssociate("limegreen", "32cd32") + HTMLAssociate("linen", "faf0e6") + HTMLAssociate("magenta", "ff00ff") + HTMLAssociate("maroon", "800000") + HTMLAssociate("mediumaquamarine", "66cdaa") + HTMLAssociate("mediumblue", "0000cd") + HTMLAssociate("mediumorchid", "ba55d3") + HTMLAssociate("mediumpurple", "9370db") + HTMLAssociate("mediumseagreen", "3cb371") + HTMLAssociate("mediumslateblue", "7b68ee") + HTMLAssociate("mediumspringgreen", "00fa9a") + HTMLAssociate("mediumturquoise", "48d1cc") + HTMLAssociate("mediumvioletred", "c71585") + HTMLAssociate("midnightblue", "191970") + HTMLAssociate("mintcream", "f5fffa") + HTMLAssociate("mistyrose", "ffe4e1") + HTMLAssociate("moccasin", "ffe4b5") + HTMLAssociate("navajowhite", "ffdead") + HTMLAssociate("navy", "000080") + HTMLAssociate("oldlace", "fdf5e6") + HTMLAssociate("olive", "808000") + HTMLAssociate("olivedrab", "6b8e23") + HTMLAssociate("orange", "ffa500") + HTMLAssociate("orangered", "ff4500") + HTMLAssociate("orchid", "da70d6") + HTMLAssociate("palegoldenrod", "eee8aa") + HTMLAssociate("palegreen", "98fb98") + HTMLAssociate("paleturquoise", "afeeee") + HTMLAssociate("palevioletred", "db7093") + HTMLAssociate("papayawhip", "ffefd5") + HTMLAssociate("peachpuff", "ffdab9") + HTMLAssociate("peru", "cd853f") + HTMLAssociate("pink", "ffc0cd") + HTMLAssociate("plum", "dda0dd") + HTMLAssociate("powderblue", "b0e0e6") + HTMLAssociate("purple", "800080") + HTMLAssociate("red", "ff0000") + HTMLAssociate("rosybrown", "bc8f8f") + HTMLAssociate("royalblue", "4169e1") + HTMLAssociate("saddlebrown", "8b4513") + HTMLAssociate("salmon", "fa8072") + HTMLAssociate("sandybrown", "f4a460") + HTMLAssociate("seagreen", "2e8b57") + HTMLAssociate("seashell", "fff5ee") + HTMLAssociate("sienna", "a0522d") + HTMLAssociate("silver", "c0c0c0") + HTMLAssociate("skyblue", "87ceed") + HTMLAssociate("slateblue", "6a5acd") + HTMLAssociate("slategrey", "708090") + HTMLAssociate("slategray", "708090") + HTMLAssociate("snow", "fffafa") + HTMLAssociate("springgreen", "00ff7f") + HTMLAssociate("steelblue", "4682b4") + HTMLAssociate("tan", "d2b48c") + HTMLAssociate("teal", "008080") + HTMLAssociate("thistle", "d8bfd8") + HTMLAssociate("tomato", "ff6347") + HTMLAssociate("turquoise", "40e0d0") + HTMLAssociate("violet", "ee82ee") + HTMLAssociate("wheat", "f5deb3") + HTMLAssociate("white", "ffffff") + HTMLAssociate("whitesmoke", "f5f5f5") + HTMLAssociate("yellow", "ffff00") + HTMLAssociate("yellowgreen", "a9cd32") + return + +/proc/SaveHTMLAssociations() + + var/F = new /savefile( "s_html.sav" ) + F["html_colours"] << html_colours + return + +/world/New() + + ..() + LoadHTMLAssociations() + return + +/world/Del() + + SaveHTMLAssociations() + ..() + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/computer.dm b/ss13-40.93.2-base/ss13-40.93.2-base/computer.dm new file mode 100644 index 0000000..cb4aac8 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/computer.dm @@ -0,0 +1,1015 @@ + +/obj/machinery/computer/security/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/security/attack_hand(var/mob/user as mob) + + var/list/L = list( ) + user.machine = src + for(var/obj/machinery/camera/C in world) + if (C.network == src.network) + L[text("[][]", C.c_tag, (C.status ? null : " (Deactivated)"))] = C + //Foreach goto(31) + L["Cancel"] = "Cancel" + var/t = input(user, "Which camera should you change to?", null, null) in L + var/obj/machinery/camera/C = L[t] + if (t == "Cancel") + user.machine = null + return 0 + if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) || !( C.status ))) + return 0 + else + src.current = C + spawn( 0 ) + attack_hand(user) + return + return + +/obj/machinery/computer/security/check_eye(var/mob/user as mob) + + if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( src.current ) || !( src.current.status ))) + return null + user.reset_view(src.current) + return 1 + return + +/obj/machinery/computer/meteorhit(var/obj/O as obj) + + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(17) + src.icon_state = "broken" + return + +/obj/machinery/computer/communications/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/communications/verb/call_shuttle() + set src in oview(1) + + if ((!( ticker ) || ticker.shuttle_location == 1)) + return + world << "\blue Alert: The emergency shuttle has been called. It will arrive in T-10:00 minutes." + if (!( ticker.timeleft )) + ticker.timeleft = 6000 + ticker.timing = 1 + src.add_fingerprint(usr) + return + +/obj/machinery/computer/communications/verb/cancel_call() + set src in oview(1) + + if ((!( ticker ) || ticker.shuttle_location == 1 || ticker.timing == 0 || ticker.timeleft < 300)) + return + world << "\blue Alert: The shuttle is going back!" + ticker.timing = -1.0 + src.add_fingerprint(usr) + return + +/obj/machinery/computer/card/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/card/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/card/attack_hand(var/mob/user as mob) + + user.machine = src + var/dat + if (!( ticker )) + return + if (src.mode) + var/d2 = text("Confirm Identity: []\n[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), (src.authenticated ? "You are logged in!" : text("{Log in}", src))) + var/d1 = "Please use security Records to modify entries.
" + for(var/datum/data/record/t in data_core.general) + d1 += text("[] - []
", t.fields["name"], t.fields["rank"]) + //Foreach goto(104) + dat = text("[]
\n
\nCrew Manifest:
\n[]\n
\nPrint
\n
\nAccess ID modification console.
\n
", d2, d1, src, src) + else + var/d1 = text("{Log in}", src) + if ((src.authenticated && src.modify)) + var/vo = null + var/va = null + var/vl = null + var/ve = null + switch(src.modify.access_level) + if(1.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + else + vo = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.lab_access) + if(1.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + else + vl = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.engine_access) + if(1.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + else + ve = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.air_access) + if(1.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + else + va = text("0 1 2 3 4 5", src, src, src, src, src) + var/list/L = list( "Research Assistant", "Staff Assistant", "Medical Assistant", "Technical Assistant", "Engineer", "Forensic Technician", "Research Technician", "Medical Doctor", "Captain", "Security Officer", "Medical Researcher", "Toxin Researcher", "Head of Research", "Head of Personnel", "Station Technician", "Atmospheric Technician", "Unassigned", "Systems" ) + var/assign = "" + if (istype(user, /mob/human)) + var/counter = 1 + for(var/t in L) + assign += text("[] ", src, t, t) + counter++ + if (counter >= 4) + assign += "
" + counter = 1 + //Foreach goto(912) + d1 = text("[] :
\nGeneral Access Level: []
\nLaboratory Access: []
\nReactor/Engine Access: []
\nMain Systems Access: []
\nRegistered: []
\nAssignment: []
\n[]
", src.modify.name, vo, vl, ve, va, src, (src.modify.registered ? text("[]", src.modify.registered) : "{None: Click to modify}"), (src.modify.assignment ? text("[]", src.modify.assignment) : "None"), assign) + else + var/counter = 1 + for(var/t in L) + assign += text("[] ", src, t, stars(t)) + counter++ + if (counter >= 4) + assign += "
" + counter = 1 + //Foreach goto(1057) + d1 = text("[] :
\n[] []
\n[] []
\n[] []
\n[] []
\n[] []
\n[] []
\n[]
", stars("modify.name"), stars("General Access Level:"), vo, stars("Laboratory Access:"), vl, stars("Reactor/Engine Access:"), ve, stars("Main Systems Access:"), va, stars("Registered:"), src, (src.modify.registered ? text("[]", stars(src.modify.registered)) : text("[]", stars("{None: Click to modify}"))), stars("Assignment:"), (src.modify.assignment ? text("[]", stars(src.modify.assignment)) : "None"), assign) + if (istype(user, /mob/human)) + dat = text("Identification Card Modifier
\nPlease Insert the cards into the slots
\nTarget: []
\nConfirm Identity: []
\n-----------------
\n[]
\n
\n
\nAccess Crew Manifest
\n
", src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.scan ? text("[]", src.scan.name) : "----------"), d1, src) + else + dat = text("[]
\n[]
\n[] []
\n[] []
\n-----------------
\n[]
\n
\n
\n[]
\n
", stars("Identification Card Modifier"), stars("Please Insert the cards into the slots"), stars("Target:"), src, (src.modify ? text("[]", stars(src.modify.name)) : "----------"), stars("Confirm Identity:"), src, (src.scan ? text("[]", stars(src.scan.name)) : "----------"), d1, src, stars("Access Crew Manifest")) + user << browse(dat, "window=id_com;size=400x500") + return + +/obj/machinery/computer/card/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["modify"]) + if (src.modify) + src.modify.name = text("[]'s ID Card ([]>[]-[]-[])", src.modify.registered, src.modify.access_level, src.modify.lab_access, src.modify.engine_access, src.modify.air_access) + src.modify.loc = src.loc + src.modify = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.modify = I + src.authenticated = 0 + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + src.authenticated = 0 + if (href_list["auth"]) + if ((!( src.authenticated ) && src.scan && (src.modify || src.mode))) + if ((src.scan.assignment == "Captain" || src.scan.assignment == "Head of Personnel")) + src.authenticated = 1 + if (href_list["vo"]) + if (src.authenticated) + var/t1 = text2num(href_list["vo"]) + if (t1 == -1.0) + t1 = 0 + src.modify.access_level = t1 + if (href_list["vl"]) + if (src.authenticated) + var/t1 = text2num(href_list["vl"]) + if (t1 == -1.0) + t1 = 0 + src.modify.lab_access = t1 + if (href_list["ve"]) + if (src.authenticated) + var/t1 = text2num(href_list["ve"]) + if (t1 == -1.0) + t1 = 0 + src.modify.engine_access = t1 + if (href_list["va"]) + if (src.authenticated) + var/t1 = text2num(href_list["va"]) + if (t1 == -1.0) + t1 = 0 + src.modify.air_access = t1 + if (href_list["assign"]) + if (src.authenticated) + var/t1 = href_list["assign"] + src.modify.assignment = t1 + if (href_list["reg"]) + if (src.authenticated) + var/t2 = src.modify + var/t1 = input(usr, "What name?", "ID computer", null) as text + if ((src.authenticated && src.modify == t2 && get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + src.modify.registered = t1 + if (href_list["mode"]) + src.mode = text2num(href_list["mode"]) + if (href_list["print"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + var/t1 = "Crew Manifest:
" + for(var/datum/data/record/t in data_core.general) + t1 += text("[] - []
", t.fields["name"], t.fields["rank"]) + //Foreach goto(868) + P.info = text("[]", t1) + P.name = "paper- 'Crew Manifest'" + src.printing = null + if (href_list["mode"]) + src.authenticated = 0 + src.mode = text2num(href_list["mode"]) + if (src.modify) + src.name = text("[]'s ID Card ([]>[]-[]-[])", src.modify.registered, src.modify.access_level, src.modify.lab_access, src.modify.engine_access, src.modify.air_access) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(1015) + src.add_fingerprint(usr) + else + usr << browse(null, "window=id_com") + return + return + +/obj/machinery/computer/card/attackby(I as obj, user as mob) + + src.attack_hand(user) + return + +/obj/machinery/computer/pod/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/pod/proc/alarm() + + if (!( src.connected )) + viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!" + return + for(var/obj/machinery/door/poddoor/M in world) + if (M.id == src.id) + spawn( 0 ) + M.openpod() + return + //Foreach goto(41) + sleep(20) + + //src.connected.drive() *****RM from 40.93.3S + for(var/obj/machinery/mass_driver/M in world) + if(M.id == src.id) + M.power = src.connected.power + M.drive() + + //***** + sleep(50) + for(var/obj/machinery/door/poddoor/M in world) + if (M.id == src.id) + spawn( 0 ) + M.closepod() + return + //Foreach goto(123) + return + +/obj/machinery/computer/pod/New() + + ..() + spawn( 5 ) + for(var/obj/machinery/mass_driver/M in world) + if (M.id == src.id) + src.connected = M + else + //Foreach continue //goto(25) + return + return + +/obj/machinery/computer/pod/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/pod/attack_hand(var/mob/user as mob) + + var/dat = "Mass Driver Controls" + user.machine = src + var/d2 + if (src.timing) + d2 = text("Stop Time Launch", src) + else + d2 = text("Initiate Time Launch", src) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + dat += text("
\nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + if (src.connected) + var/temp = "" + var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) + for(var/t in L) + if (t == src.connected.power) + temp += text("[] ", t) + else + temp += text("[] ", src, t, t) + //Foreach goto(172) + dat += text("
\nPower Level: []
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
", temp, src, src, src) + //*****RM from 40.93.3S + else + dat += text("
\nToggle Outer Door
", src) + //***** + dat += text("

Close
", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/pod/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + alarm() + src.time = 0 + src.timing = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(68) + return + +/obj/machinery/computer/pod/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["power"]) + var/t = text2num(href_list["power"]) + t = min(max(0.25, t), 16) + if (src.connected) + src.connected.power = t + else + if (href_list["alarm"]) + src.alarm() + else + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + else + if (href_list["door"]) + for(var/obj/machinery/door/poddoor/M in world) + if (M.id == src.id) + if (M.density) + spawn( 0 ) + M.openpod() + return + else + spawn( 0 ) + M.closepod() + return + //Foreach goto(298) + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(394) + return + +/obj/machinery/door/poddoor/open() + + usr << "This is a remote pod door!" + return + +/obj/machinery/door/poddoor/close() + + usr << "This is a remote pod door!" + return + +/obj/machinery/door/poddoor/proc/openpod() + set src in oview(1) + + if (src.operating || !src.density) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + +/obj/machinery/door/poddoor/proc/closepod() + set src in oview(1) + + if (src.operating || src.density) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + src.opacity = 1 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/pod/meteorhit(var/obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + //SN src = null + del(src) + return + return + +/obj/machinery/pod/process() + + if (src.speed) + if (src.speed <= 10) + var/t1 = 10 - src.speed + while(t1 > 0) + step(src, src.dir) + sleep(1) + t1-- + else + var/t1 = round(src.speed / 5) + while(t1 > 0) + step(src, src.dir) + t1-- + return + +/obj/machinery/pod/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + //SN src = null + del(src) + return + else + return + +/obj/machinery/pod/Bump(var/atom/A) + + //world << "[src] bumped into [A]" + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/pod/relaymove(mob/user as mob, direction) + + if (user.stat) + return + if ((user in src)) + if (direction & 1) + src.speed = max(src.speed - 1, 1) + else + if (direction & 2) + src.speed++ + if (src.speed > 10) + src.speed = 10 + if (direction & 4) + src.dir = turn(src.dir, -90.0) + else + if (direction & 8) + src.dir = turn(src.dir, 90) + return + +/obj/machinery/pod/verb/eject() + set src = usr.loc + + if (usr.stat) + return + var/mob/M = usr + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + step(M, turn(src.dir, 180)) + return + +/obj/machinery/pod/verb/board() + set src in oview(1) + + if (usr.stat) + return + var/mob/M = usr + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + return + +/obj/machinery/pod/verb/load() + set src in oview(1) + + + + if (usr.stat) + return + if (( ( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/mob/human/H = usr + + if ((H.pulling && !( H.pulling.anchored ))) + + H.pulling.loc = src + + + if (ismob(H.pulling)) + var/mob/M = H.pulling + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] loads [] into []!", H, H.pulling, src) + //Foreach goto(152) + H.pulling = null + return + +/obj/machinery/pod/verb/unload(var/atom/movable/A in src.contents) + set src in oview(1) + + if (usr.stat) + return + if (istype(A, /atom/movable)) + A.loc = src.loc + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unloads [] from []!", usr, A, src) + //Foreach goto(54) + if (ismob(A)) + var/mob/M = A + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + step(A, turn(src.dir, 180)) + return + +/obj/machinery/recon/meteorhit(var/obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + //SN src = null + del(src) + return + return + +/obj/machinery/recon/process() + + if (src.speed) + if (src.speed <= 10) + var/t1 = 10 - src.speed + while(t1 > 0) + step(src, src.dir) + sleep(1) + t1-- + else + var/t1 = round(src.speed / 5) + while(t1 > 0) + step(src, src.dir) + t1-- + return + +/obj/machinery/recon/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + //SN src = null + del(src) + return + else + return + +/obj/machinery/recon/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/recon/verb/eject() + set src = usr.loc + + if (usr.stat) + return + var/mob/M = usr + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + return + +/obj/machinery/recon/verb/board() + set src in oview(1) + + if (usr.stat) + return + if (locate(/mob, src)) + usr << "There is no room! You can only fit one person." + return + var/mob/M = usr + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + return + +/obj/machinery/recon/verb/load() + set src in oview(1) + + if (usr.stat) + return + if ((( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/mob/human/H = usr + if ((H.pulling && !( H.pulling.anchored ))) + if (!( istype(H.pulling, /obj/item/weapon) )) + usr << "You may only place items in." + else + if ((locate(/mob, src) && ismob(H.pulling))) + usr << "There is no room! You can only fit one person." + else + H.pulling.loc = src + if (ismob(H.pulling)) + var/mob/M = H.pulling + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] loads [] into []!", H, H.pulling, src) + //Foreach goto(204) + H.pulling = null + return + +/obj/machinery/recon/verb/unload(var/atom/movable/A in src) + set src in oview(1) + + if (usr.stat) + return + if (istype(A, /atom/movable)) + A.loc = src.loc + for(var/mob/O in view(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unloads [] from []!", usr, A, src) + //Foreach goto(53) + if (ismob(A)) + var/mob/M = A + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + return + +/obj/machinery/recon/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/recon/relaymove(var/mob/user as mob, direction) + + if (user.stat) + return + if ((user in src)) + if (direction & 1) + src.speed = max(src.speed - 1, 1) + else + if (direction & 2) + src.speed++ + if (direction & 4) + src.dir = turn(src.dir, -90.0) + else + if (direction & 8) + src.dir = turn(src.dir, 90) + if (direction & 16) + src.speed = 30 + else + src.speed = min(src.speed, 10) + return + +/obj/datacore/proc/manifest() + + for(var/mob/human/H in world) + if ((H.start && !( findtext(H.rname, "Syndicate ", 1, null) ))) + var/datum/data/record/G = new /datum/data/record( ) + var/datum/data/record/M = new /datum/data/record( ) + var/datum/data/record/S = new /datum/data/record( ) + var/obj/item/weapon/card/id/C = H.wear_id + if (C) + G.fields["rank"] = C.assignment + else + G.fields["rank"] = "Unassigned" + G.fields["name"] = H.rname + G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + M.fields["name"] = G.fields["name"] + M.fields["id"] = G.fields["id"] + S.fields["name"] = G.fields["name"] + S.fields["id"] = G.fields["id"] + if (H.gender == "female") + G.fields["sex"] = "Female" + else + G.fields["sex"] = "Male" + G.fields["age"] = text("[]", H.age) + G.fields["fingerprint"] = text("[]", md5(H.primary.uni_identity)) + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + M.fields["b_type"] = text("[]", H.b_type) + M.fields["mi_dis"] = "None" + M.fields["mi_dis_d"] = "No minor disabilities have been declared." + M.fields["ma_dis"] = "None" + M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + M.fields["alg"] = "None" + M.fields["alg_d"] = "No allergies have been detected in this patient." + M.fields["cdi"] = "None" + M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + M.fields["notes"] = "No notes." + S.fields["criminal"] = "None" + S.fields["mi_crim"] = "None" + S.fields["mi_crim_d"] = "No minor crime convictions." + S.fields["ma_crim"] = "None" + S.fields["ma_crim_d"] = "No minor crime convictions." + S.fields["notes"] = "No notes." + src.general += G + src.medical += M + src.security += S + //Foreach goto(15) + return + +/turf/space/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/turf/space/attack_hand(mob/user as mob) + + if ((user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/space/attackby(obj/item/weapon/tile/T as obj, mob/user as mob) + + if (istype(T, /obj/item/weapon/tile)) + T.build(src) + T.amount-- + T.add_fingerprint(user) + if (T.amount < 1) + user.u_equip(T) + //SN src = null + del(T) + return + return + +/turf/space/updatecell() + + return + + +/turf/space/Entered(atom/movable/A as mob|obj) + + ..() + if ((!( A ) || src != A.loc || istype(null, /obj/beam))) + return + if (!( A.last_move )) + return + if (locate(/obj/move, src)) + return 1 + if ((ismob(A) && src.x > 2 && src.x < (world.maxx - 2) )) + var/mob/M = A + if ((!( M.restrained() ) && M.canmove)) + var/t1 = 5 + if (locate(/obj/grille, oview(1, M))) + if (!( M.l_hand )) + t1 -= 2 + else + if (M.l_hand.w_class <= 2) + t1 -= 1 + if (!( M.r_hand )) + t1 -= 2 + else + if (M.r_hand.w_class <= 2) + t1 -= 1 + else + if (locate(/turf/station, oview(1, M))) + if (!( M.l_hand )) + t1 -= 1 + else + if (M.l_hand.w_class <= 2) + t1 -= 0.5 + if (!( M.r_hand )) + t1 -= 1 + else + if (M.r_hand.w_class <= 2) + t1 -= 0.5 + t1 = round(t1) + if (t1 < 5) + if (prob(t1)) + M << "\blue You slipped!" + else + spawn( 5 ) + if (src == A.loc) + spawn( 0 ) + src.Entered(A) + return + return + return 0 + if (src.x <= 2) + if (src.z >= 10) + if (world.maxz < 10) + world.maxz++ + A.z++ + else + A.z = 9 + else + A.z++ + A.x = world.maxx - 2 + spawn( 0 ) + if ((A && A.loc)) + A.loc.Entered(A) + return + else + if (A.x >= (world.maxx - 1) ) + if (A.z > 3) + A.z-- + else + A.z = 1 + A.x = 3 + spawn( 0 ) + if ((A && A.loc)) + A.loc.Entered(A) + return + else + spawn( 5 ) + if ((A && !( A.anchored ) && A.loc == src)) + if (step(A, A.last_move)) + else + spawn( 0 ) + src.Entered(A) + return + return + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/cryo.dm b/ss13-40.93.2-base/ss13-40.93.2-base/cryo.dm new file mode 100644 index 0000000..455b5f6 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/cryo.dm @@ -0,0 +1,1633 @@ + +/obj/machinery/computer/med_data/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/med_data/attack_hand(mob/user as mob) + + var/dat + if (src.temp) + dat = text("[]

Clear Screen", src.temp, src) + else + dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------")) + if (src.authenticated) + switch(src.screen) + if(1.0) + dat += text("Search Records
\nList Records
\n
\nRecord Maintenance
\n{Log Out}
\n", src, src, src, src) + if(2.0) + dat += "Record List:
" + for(var/datum/data/record/R in data_core.general) + dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(132) + dat += text("
Back", src) + if(3.0) + dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) + if(4.0) + dat += "
Medical Record

" + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + dat += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.active1.fields["id"], src, src.active1.fields["sex"], src, src.active1.fields["age"], src, src.active1.fields["fingerprint"], src, src.active1.fields["p_stat"], src, src.active1.fields["m_stat"]) + else + dat += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + dat += text("
\n
Medical Data

\nBlood Type: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src, src.active2.fields["b_type"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + dat += text("[]
Delete Entry

", src.active2.fields[text("com_[]", counter)], src, counter) + counter++ + dat += text("Add Entry

", src) + dat += text("Delete Record (Medical Only)

", src) + else + dat += "Medical Record Lost!
" + dat += text("New Record

", src) + dat += text("\nPrint Record
\nBack
", src, src) + else + else + dat += text("{Log In}", src) + user << browse(text("Medical Records[]", dat), "window=med_rec") + return + +/obj/machinery/computer/med_data/Topic(href, href_list) + + if (!( data_core.general.Find(src.active1) )) + src.active1 = null + if (!( data_core.medical.Find(src.active2) )) + src.active2 = null + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + else + if (href_list["logout"]) + src.authenticated = null + src.screen = null + src.active1 = null + src.active2 = null + else + if (href_list["login"]) + if (istype(src.scan, /obj/item/weapon/card/id)) + src.active1 = null + src.active2 = null + var/list/L = list( "Medical Researcher", "Medical Doctor", "Head of Personnel", "Captain" ) + if (L.Find(src.scan.assignment)) + src.authenticated = src.scan.registered + src.rank = src.scan.assignment + src.screen = 1 + if (src.authenticated) + if (href_list["list"]) + src.screen = 2 + src.active1 = null + src.active2 = null + else + if (href_list["rec_m"]) + src.screen = 3 + src.active1 = null + src.active2 = null + else + if (href_list["del_all"]) + src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_all2"]) + for(var/datum/data/record/R in data_core.medical) + //R = null + del(R) + //Foreach goto(494) + src.temp = "All records deleted." + else + if (href_list["main"]) + src.screen = 1 + src.active1 = null + src.active2 = null + else + if (href_list["field"]) + var/a1 = src.active1 + var/a2 = src.active2 + switch(href_list["field"]) + if("fingerprint") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input fingerprint hash:", "Med. records", src.active1.fields["id"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["fingerprint"] = t1 + if("sex") + if (istype(src.active1, /datum/data/record)) + if (src.active1.fields["sex"] == "Male") + src.active1.fields["sex"] = "Female" + else + src.active1.fields["sex"] = "Male" + if("age") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["age"] = t1 + if("mi_dis") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_dis"] = t1 + if("mi_dis_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_dis_d"] = t1 + if("ma_dis") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_dis"] = t1 + if("ma_dis_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_dis_d"] = t1 + if("alg") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["alg"] = t1 + if("alg_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["alg_d"] = t1 + if("cdi") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["cdi"] = t1 + if("cdi_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["cdi_d"] = t1 + if("notes") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["notes"] = t1 + if("p_stat") + if (istype(src.active1, /datum/data/record)) + src.temp = text("Physical Condition:
\n\t*Deceased*
\n\t*Unconscious*
\n\tActive
\n\tPhysically Unfit
", src, src, src, src) + if("m_stat") + if (istype(src.active1, /datum/data/record)) + src.temp = text("Mental Condition:
\n\t*Insane*
\n\t*Unstable*
\n\t*Watch*
\n\tStable
", src, src, src, src) + if("b_type") + if (istype(src.active2, /datum/data/record)) + src.temp = text("Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
", src, src, src, src, src, src, src, src) + else + else + if (href_list["p_stat"]) + if (src.active1) + switch(href_list["p_stat"]) + if("deceased") + src.active1.fields["p_stat"] = "*Deceased*" + if("unconscious") + src.active1.fields["p_stat"] = "*Unconscious*" + if("active") + src.active1.fields["p_stat"] = "Active" + if("unfit") + src.active1.fields["p_stat"] = "Physically Unfit" + else + if (href_list["m_stat"]) + if (src.active1) + switch(href_list["m_stat"]) + if("insane") + src.active1.fields["m_stat"] = "*Insane*" + if("unstable") + src.active1.fields["m_stat"] = "*Unstable*" + if("watch") + src.active1.fields["m_stat"] = "*Watch*" + if("stable") + src.active2.fields["m_stat"] = "Stable" + + else + if (href_list["b_type"]) + if (src.active2) + switch(href_list["b_type"]) + if("an") + src.active2.fields["b_type"] = "A-" + if("bn") + src.active2.fields["b_type"] = "B-" + if("abn") + src.active2.fields["b_type"] = "AB-" + if("on") + src.active2.fields["b_type"] = "O-" + if("ap") + src.active2.fields["b_type"] = "A+" + if("bp") + src.active2.fields["b_type"] = "B+" + if("abp") + src.active2.fields["b_type"] = "AB+" + if("op") + src.active2.fields["b_type"] = "O+" + + else + if (href_list["del_r"]) + if (src.active2) + src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_r2"]) + if (src.active2) + //src.active2 = null + del(src.active2) + else + if (href_list["d_rec"]) + var/datum/data/record/R = locate(href_list["d_rec"]) + var/datum/data/record/M = locate(href_list["d_rec"]) + if (!( data_core.general.Find(R) )) + src.temp = "Record Not Found!" + return + for(var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + M = E + else + //Foreach continue //goto(2540) + src.active1 = R + src.active2 = M + src.screen = 4 + else + if (href_list["new"]) + if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + var/datum/data/record/R = new /datum/data/record( ) + R.fields["name"] = src.active1.fields["name"] + R.fields["id"] = src.active1.fields["id"] + R.name = text("Medical Record #[]", R.fields["id"]) + R.fields["b_type"] = "Unknown" + R.fields["mi_dis"] = "None" + R.fields["mi_dis_d"] = "No minor disabilities have been declared." + R.fields["ma_dis"] = "None" + R.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + R.fields["alg"] = "None" + R.fields["alg_d"] = "No allergies have been detected in this patient." + R.fields["cdi"] = "None" + R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + R.fields["notes"] = "No notes." + data_core.medical += R + src.active2 = R + src.screen = 4 + else + if (href_list["add_c"]) + if (!( istype(src.active2, /datum/data/record) )) + return + var/a2 = src.active2 + var/t1 = input("Add Comment:", "Med. records", null, null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + counter++ + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
[]", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1) + else + if (href_list["del_c"]) + if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" + else + if (href_list["search"]) + var/t1 = input("Search String: (Name or ID)", "Med. records", null, null) as text + if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || get_dist(src, usr) > 1)) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) + src.active1 = R + else + //Foreach continue //goto(3229) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3334) + src.screen = 4 + else + if (href_list["print_p"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = "
Medical Record

" + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) + else + P.info += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + P.info += text("
\n
Medical Data

\nBlood Type: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["b_type"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + P.info += text("[]
", src.active2.fields[text("com_[]", counter)]) + counter++ + else + P.info += "Medical Record Lost!
" + P.info += "" + P.name = "paper- 'Medical Record'" + src.printing = null + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(3792) + return + +/obj/machinery/computer/secure_data/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/secure_data/attack_hand(mob/user as mob) + + var/dat + if (src.temp) + dat = text("[]

Clear Screen", src.temp, src) + else + dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------")) + if (src.authenticated) + switch(src.screen) + if(1.0) + dat += text("Search Records
\nList Records
\nSearch Fingerprints
\nNew Record
\n
\nRecord Maintenance
\n{Log Out}
\n", src, src, src, src, src, src) + if(2.0) + dat += "Record List:
" + for(var/datum/data/record/R in data_core.general) + dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(136) + dat += text("
Back", src) + if(3.0) + dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) + if(4.0) + dat += "
Security Record

" + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + dat += text("Name: [] ID: []
\nSex: []
\nAge: []
\nRank: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src, src.active1.fields["name"], src, src.active1.fields["id"], src, src.active1.fields["sex"], src, src.active1.fields["age"], src, src.active1.fields["rank"], src, src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) + else + dat += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) + dat += text("
\n
Security Data

\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src, src.active2.fields["criminal"], src, src.active2.fields["mi_crim"], src, src.active2.fields["mi_crim_d"], src, src.active2.fields["ma_crim"], src, src.active2.fields["ma_crim_d"], src, src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + dat += text("[]
Delete Entry

", src.active2.fields[text("com_[]", counter)], src, counter) + counter++ + dat += text("Add Entry

", src) + dat += text("Delete Record (Security Only)

", src) + else + dat += "Security Record Lost!
" + dat += text("New Record

", src) + dat += text("\nDelete Record (ALL)

\nPrint Record
\nBack
", src, src, src) + else + else + dat += text("{Log In}", src) + user << browse(text("Security Records[]", dat), "window=secure_rec") + return + +/obj/machinery/computer/secure_data/Topic(href, href_list) + + if (!( data_core.general.Find(src.active1) )) + src.active1 = null + if (!( data_core.security.Find(src.active2) )) + src.active2 = null + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + else + if (href_list["logout"]) + src.authenticated = null + src.screen = null + src.active1 = null + src.active2 = null + else + if (href_list["login"]) + if (istype(src.scan, /obj/item/weapon/card/id)) + src.active1 = null + src.active2 = null + var/list/L = list( "Security Officer", "Forensic Technician", "Prison Warden", "Head of Personnel", "Captain" ) + if (L.Find(src.scan.assignment)) + src.authenticated = src.scan.registered + src.rank = src.scan.assignment + src.screen = 1 + if (src.authenticated) + if (href_list["list"]) + src.screen = 2 + src.active1 = null + src.active2 = null + else + if (href_list["rec_m"]) + src.screen = 3 + src.active1 = null + src.active2 = null + else + if (href_list["del_all"]) + src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_all2"]) + for(var/datum/data/record/R in data_core.security) + //R = null + del(R) + //Foreach goto(497) + src.temp = "All records deleted." + else + if (href_list["main"]) + src.screen = 1 + src.active1 = null + src.active2 = null + else + if (href_list["field"]) + var/a1 = src.active1 + var/a2 = src.active2 + switch(href_list["field"]) + if("name") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input name:", "Secure. records", src.active1.fields["name"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["name"] = t1 + if("id") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input id:", "Secure. records", src.active1.fields["id"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["id"] = t1 + if("fingerprint") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input fingerprint hash:", "Secure. records", src.active1.fields["fingerprint"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["fingerprint"] = t1 + if("sex") + if (istype(src.active1, /datum/data/record)) + if (src.active1.fields["sex"] == "Male") + src.active1.fields["sex"] = "Female" + else + src.active1.fields["sex"] = "Male" + if("age") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input age:", "Secure. records", src.active1.fields["age"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["age"] = t1 + if("mi_crim") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input minor disabilities list:", "Secure. records", src.active2.fields["mi_crim"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_crim"] = t1 + if("mi_crim_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize minor dis.:", "Secure. records", src.active2.fields["mi_crim_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_crim_d"] = t1 + if("ma_crim") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input major diabilities list:", "Secure. records", src.active2.fields["ma_crim"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_crim"] = t1 + if("ma_crim_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize major dis.:", "Secure. records", src.active2.fields["ma_crim_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_crim_d"] = t1 + if("notes") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize notes:", "Secure. records", src.active2.fields["notes"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["notes"] = t1 + if("criminal") + if (istype(src.active2, /datum/data/record)) + src.temp = text("Criminal Status:
\n\tNone
\n\t*Arrest*
\n\tIncarcerated
\n\tParolled
\n\tReleased
", src, src, src, src, src) + if("rank") + var/list/L = list( "Head of Personnel", "Captain" ) + if ((istype(src.active1, /datum/data/record) && L.Find(src.rank))) + src.temp = text("Rank:
\nAssistants:
\nResearch Assistant
\nStaff Assistant
\nMedical Assistant
\nTechnical Assistant
\nTechnicians:
\nForensic Technician
\nResearch Technician
\nStation Technician
\nAtmospheric Technician
\nEngineer (Engine Technician)\nResearchers:
\n
Medical Researcher
\nToxin Researcher
\nOfficers:
\nMedical Doctor
\nSecurity Officer
\nHigher Officers:
\nHead of Research
\nHead of Personnel
\nCaptain
", src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + else + else + if (href_list["rank"]) + var/list/L = list( "Head of Personnel", "Captain" ) + if ((src.active1 && L.Find(src.rank))) + switch(href_list["rank"]) + if("res_assist") + src.active1.fields["rank"] = "Research Assistant" + if("staff_assist") + src.active1.fields["rank"] = "Staff Assistant" + if("med_assist") + src.active1.fields["rank"] = "Medical Assistant" + if("tech_assist") + src.active1.fields["rank"] = "Technical Assistant" + if("foren_tech") + src.active1.fields["rank"] = "Forensic Technician" + if("res_tech") + src.active1.fields["rank"] = "Research Technician" + if("stat_tech") + src.active1.fields["rank"] = "Station Technician" + if("atmo_tech") + src.active1.fields["rank"] = "Atmospheric Technician" + if("engineer") + src.active1.fields["rank"] = "Engineer" + if("med_res") + src.active1.fields["rank"] = "Medical Researcher" + if("tox_res") + src.active1.fields["rank"] = "Toxin Researcher" + if("med_doc") + src.active1.fields["rank"] = "Medical Doctor" + if("secure_off") + src.active1.fields["rank"] = "Security Officer" + if("hoperson") + src.active1.fields["rank"] = "Head of Research" + if("horesearch") + src.active1.fields["rank"] = "Head of Personnel" + if("captain") + src.active1.fields["rank"] = "Captain" + + else + if (href_list["criminal2"]) + if (src.active2) + switch(href_list["criminal2"]) + if("none") + src.active2.fields["criminal"] = "None" + if("arrest") + src.active2.fields["criminal"] = "*Arrest*" + if("incarcerated") + src.active2.fields["criminal"] = "Incarcerated" + if("parolled") + src.active2.fields["criminal"] = "Parolled" + if("released") + src.active2.fields["criminal"] = "Released" + + else + if (href_list["del_r"]) + if (src.active2) + src.temp = text("Are you sure you wish to delete the record (Security Portion Only)?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_r2"]) + if (src.active2) + //src.active2 = null + del(src.active2) + else + if (href_list["dela_r"]) + if (src.active1) + src.temp = text("Are you sure you wish to delete the record (ALL)?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["dela_r2"]) + for(var/datum/data/record/R in data_core.medical) + if ((R.fields["name"] == src.active1.fields["name"] || R.fields["id"] == src.active1.fields["id"])) + //R = null + del(R) + else + //Foreach continue //goto(2405) + if (src.active2) + //src.active2 = null + del(src.active2) + if (src.active1) + //src.active1 = null + del(src.active1) + else + if (href_list["d_rec"]) + var/datum/data/record/R = locate(href_list["d_rec"]) + var/S = locate(href_list["d_rec"]) + if (!( data_core.general.Find(R) )) + src.temp = "Record Not Found!" + return + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + S = E + else + //Foreach continue //goto(2614) + src.active1 = R + src.active2 = S + src.screen = 4 + else + if (href_list["new_r"]) + var/datum/data/record/G = new /datum/data/record( ) + G.fields["name"] = "New Record" + G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + G.fields["rank"] = "Unassigned" + G.fields["sex"] = "Male" + G.fields["age"] = "Unknown" + G.fields["fingerprint"] = "Unknown" + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + data_core.general += G + src.active1 = G + src.active2 = null + else + if (href_list["new"]) + if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + var/datum/data/record/R = new /datum/data/record( ) + R.fields["name"] = src.active1.fields["name"] + R.fields["id"] = src.active1.fields["id"] + R.name = text("Security Record #[]", R.fields["id"]) + R.fields["criminal"] = "None" + R.fields["mi_crim"] = "None" + R.fields["mi_crim_d"] = "No minor crime convictions." + R.fields["ma_crim"] = "None" + R.fields["ma_crim_d"] = "No minor crime convictions." + R.fields["notes"] = "No notes." + data_core.security += R + src.active2 = R + src.screen = 4 + else + if (href_list["add_c"]) + if (!( istype(src.active2, /datum/data/record) )) + return + var/a2 = src.active2 + var/t1 = input("Add Comment:", "Secure. records", null, null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + counter++ + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
[]", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1) + else + if (href_list["del_c"]) + if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" + else + if (href_list["search_f"]) + var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text + if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || get_dist(src, usr) > 1)) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if (lowertext(R.fields["fingerprint"]) == t1) + src.active1 = R + else + //Foreach continue //goto(3414) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3502) + src.screen = 4 + else + if (href_list["search"]) + var/t1 = input("Search String: (Name or ID)", "Secure. records", null, null) as text + if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || get_dist(src, usr) > 1)) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) + src.active1 = R + else + //Foreach continue //goto(3708) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3813) + src.screen = 4 + else + if (href_list["print_p"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = "
Security Record

" + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) + else + P.info += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) + P.info += text("
\n
Security Data

\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["criminal"], src.active2.fields["mi_crim"], src.active2.fields["mi_crim_d"], src.active2.fields["ma_crim"], src.active2.fields["ma_crim_d"], src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + P.info += text("[]
", src.active2.fields[text("com_[]", counter)]) + counter++ + else + P.info += "Security Record Lost!
" + P.info += "" + P.name = "paper- 'Security Record'" + src.printing = null + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(4247) + return + +/obj/machinery/computer/sleep_console/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/computer/sleep_console/New() + + ..() + spawn( 5 ) + src.connected = locate(/obj/machinery/sleeper, get_step(src, WEST)) + return + return + +/obj/machinery/computer/sleep_console/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/sleep_console/attack_hand(mob/user as mob) + + if (src.connected) + var/mob/occupant = src.connected.occupant + var/dat = "Occupant Statistics:
" + if (occupant) + var/t1 + switch(occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\tHealth %: [] ([])
", (occupant.health > 50 ? "" : ""), occupant.health, t1) + dat += text("[]\t-Respiratory Damage %: []
", (occupant.oxyloss < 60 ? "" : ""), occupant.oxyloss) + dat += text("[]\t-Toxin Content %: []
", (occupant.toxloss < 60 ? "" : ""), occupant.toxloss) + dat += text("[]\t-Burn Severity %: []
", (occupant.fireloss < 60 ? "" : ""), occupant.fireloss) + dat += text("
Paralysis Summary %: [] ([] seconds left!)

", occupant.paralysis, round(occupant.paralysis / 4)) + dat += text("
Refresh
Inject Rejuvenators", src, src) + else + dat += "The sleeper is empty." + dat += text("

Close", user) + user << browse(dat, "window=sleeper;size=400x500") + return + +/obj/machinery/computer/sleep_console/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["rejuv"]) + if (src.connected) + src.connected.inject(usr) + if (href_list["refresh"]) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(123) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/sleep_console/process() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/freezer/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/freezer/attack_hand(mob/user as mob) + + user.machine = src + + if (( !( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/d1 + if (locate(/obj/item/weapon/flasks, src)) + var/counter = 1 + + for(var/obj/item/weapon/flasks/F in src) + d1 += text("Flask []: [] / [] / []
", src, counter, counter, F.oxygen, F.plasma, F.coolant) + counter++ + //Foreach goto(78) + d1 += "Key: Oxygen / Plasma / Coolant
" + else + d1 = "No flasks!" + var/t1 = null + switch(src.t_flags) + if(0.0) + t1 = text("Oxygen-No Plasma-No", src, src) + if(1.0) + t1 = text("Oxygen-Yes Plasma-No", src, src) + if(2.0) + t1 = text("Oxygen-No Plasma-Yes", src, src) + if(3.0) + t1 = text("Oxygen-Yes Plasma-Yes", src, src) + else + var/t2 = null + if (src.status) + t2 = text("Cooling-[] Stop", src.c_used, src) + else + t2 = text("Cool Stopped", src) + var/dat = text("
\n\t\tTemperature: []
\n\t\tTransfer Status: []
\n\t\t Chemicals Used: []
\n\t\tFreezer status: []
\n\t\t - - [] + +
\n
\n\t[]
\n
\n
\n\tClose
\n\t
", src.temperature, (src.transfer ? text("Transfering Stop", src) : text("Transfer Stopped", src)), t1, t2, src, src, src.c_used, src, src, d1, user) + user << browse(dat, "window=freezer;size=400x500") + else + var/d1 = null + if (locate(/obj/item/weapon/flasks, src)) + var/counter = 1 + for(var/obj/item/weapon/flasks/F in src) + d1 += text("[] []: []
", src, counter, stars("Flask"), counter, stars(text("[] / [] / []", F.oxygen, F.plasma, F.coolant))) + counter++ + //Foreach goto(380) + d1 += "Key: Oxygen / Plasma / Coolant
" + else + d1 = "No flasks!" + var/t1 = null + switch(src.t_flags) + if(0.0) + t1 = text("[] []", src, stars("Oxygen-No"), src, stars("Plasma-No")) + if(1.0) + t1 = text("[] []", src, stars("Oxygen-Yes"), src, stars("Plasma-No")) + if(2.0) + t1 = text("[] []", src, stars("Oxygen-No"), src, stars("Plasma-Yes")) + if(3.0) + t1 = text("[] []", src, stars("Oxygen-Yes"), src, stars("Plasma-Yes")) + else + var/t2 = null + if (src.status) + t2 = text("Cooling-[] []", src.c_used, src, stars("Stop")) + else + t2 = text("Cool []", src, stars("Stopped")) + var/dat = text("
\n\t\t[]: []
\n\t\t[]: []
\n\t\t []: []
\n\t\t[]: []
\n\t\t - - [] + +
\n
\n\t[]
\n
\n
\n\tClose\n\t
", stars("Temperature"), src.temperature, stars("Transfer Status"), (src.transfer ? text("Transfering Stop", src) : text("Transfer Stopped", src)), stars("Chemicals Used"), t1, stars("Freezer status"), t2, src, src, src.c_used, src, src, d1, user) + user << browse(dat, "window=freezer;size=400x500") + return + +/obj/machinery/freezer/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_used += cp + src.c_used = min(max(round(src.c_used), 0), 10) + if (href_list["oxygen"]) + var/t1 = text2num(href_list["oxygen"]) + if (t1) + src.t_flags |= 1 + else + src.t_flags &= 65534 + if (href_list["plasma"]) + var/t1 = text2num(href_list["plasma"]) + if (t1) + src.t_flags |= 2 + else + src.t_flags &= 65533 + if (href_list["cool"]) + src.status = text2num(href_list["cool"]) + src.icon_state = text("freezer_[]", src.status) + if (href_list["transfer"]) + src.transfer = text2num(href_list["transfer"]) + if (href_list["flask"]) + var/t1 = text2num(href_list["flask"]) + if (t1 <= src.contents.len) + var/obj/F = src.contents[t1] + F.loc = src.loc + src.rebuild_overlay() + src.add_fingerprint(usr) + return + +/obj/machinery/freezer/process() + + var/obj/item/weapon/flasks/F1 + var/obj/item/weapon/flasks/F2 + var/obj/item/weapon/flasks/F3 + if (src.contents.len >= 3) + F3 = src.contents[3] + if (src.contents.len >= 2) + F2 = src.contents[2] + if (src.contents.len >= 1) + F1 = src.contents[1] + var/u_cool = 0 + if (src.status) + u_cool = src.c_used + if ((F2 && F2.coolant)) + if (F2.coolant >= u_cool) + F2.coolant -= u_cool + else + u_cool = F2.coolant + F2.coolant = 0 + else + if ((F1 && F1.coolant)) + if (F1.coolant >= u_cool) + F1.coolant -= u_cool + else + u_cool = F1.coolant + F1.coolant = 0 + else + if ((F3 && F3.coolant)) + if (F3.coolant >= u_cool) + F3.coolant -= u_cool + else + u_cool = F3.coolant + F3.coolant = 0 + else + u_cool = 0 + if (u_cool) + src.temperature = max(-100.0, src.temperature - (u_cool * 5) ) + src.temperature = min(src.temperature + 5, 20) + if (src.transfer) + var/u_oxy = 0 + var/u_pla = 0 + if (src.t_flags & 1) + u_oxy = 1 + if ((F1 && F1.oxygen)) + if (F1.oxygen >= u_oxy) + F1.oxygen -= u_oxy + else + u_oxy = F1.oxygen + F1.oxygen = 0 + else + if ((F2 && F2.oxygen)) + if (F2.oxygen >= u_oxy) + F2.oxygen -= u_oxy + else + u_oxy = F2.oxygen + F2.oxygen = 0 + else + if ((F3 && F3.oxygen)) + if (F3.oxygen >= u_oxy) + F3.oxygen -= u_oxy + else + u_oxy = F3.oxygen + F3.oxygen = 0 + else + u_oxy = 0 + if (src.t_flags & 2) + u_pla = 1 + if ((F3 && F3.plasma)) + if (F3.plasma >= u_pla) + F3.plasma -= u_pla + else + u_pla = F3.plasma + F3.plasma = 0 + else + if ((F2 && F2.plasma)) + if (F2.plasma >= u_pla) + F2.plasma -= u_pla + else + u_pla = F2.plasma + F2.plasma = 0 + else + if ((F1 && F1.plasma)) + if (F1.plasma >= u_pla) + F1.plasma -= u_pla + else + u_pla = F1.plasma + F1.plasma = 0 + else + u_pla = 0 + if ( (u_oxy + u_pla) > 0) + var/obj/substance/gas/G = new /obj/substance/gas( null ) + G.oxygen = u_oxy + G.plasma = u_pla + G.temperature = src.temperature + spawn( 3 ) + if (src.line_out) + src.line_out.receive_gas(G, src) + return + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(809) + return + +/obj/machinery/freezer/receive_gas(S as obj, source as obj) + + //S = null + del(S) + return + +/obj/machinery/freezer/orient_pipe(P as obj) + + if (!( src.line_out )) + src.line_out = P + else + return 0 + return 1 + return + +/obj/machinery/freezer/New() + + ..() + var/obj/overlay/O1 = new /obj/overlay( ) + O1.icon = 'Cryogenic2.dmi' + O1.icon_state = "canister connector_0" + O1.pixel_y = -16.0 + src.overlays += O1 + src.connector = O1 + new /obj/item/weapon/flasks/oxygen( src ) + new /obj/item/weapon/flasks/coolant( src ) + new /obj/item/weapon/flasks/plasma( src ) + rebuild_overlay() + spawn( 50 ) + for(var/obj/machinery/M in orange(src, 1)) + if ((M.level == src.level && src.p_dir & get_dir(src, M) && M.p_dir & get_dir(M, src))) + if (!( src.line_out )) + src.line_out = M + //Foreach goto(117) + return + return + +/obj/machinery/freezer/attackby(obj/item/weapon/flasks/F as obj, mob/user as mob) + + if (!( istype(F, /obj/item/weapon/flasks) )) + return + if (src.contents.len >= 3) + user << "\blue All slots are full!" + return + else + user.drop_item() + F.loc = src + src.rebuild_overlay() + return + +/obj/machinery/freezer/proc/rebuild_overlay() + + for(var/x in src.overlays) + src.overlays -= x + //Foreach goto(17) + src.overlays += src.connector + var/counter = 0 + for(var/obj/item/weapon/flasks/F in src.contents) + var/obj/overlay/O = new /obj/overlay( ) + O.icon = F.icon + O.icon_state = F.icon_state + O.pixel_y = -17.0 + O.pixel_x = counter * 12 + src.overlays += O + counter++ + if (counter >= 3) + return + //Foreach goto(64) + return + +/obj/machinery/sleeper/allow_drop() + + return 0 + return + +/obj/machinery/sleeper/process() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/sleeper/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + //SN src = null + del(src) + return + else + return + +/obj/machinery/sleeper/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/sleeper/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The sleeper is already occupied!" + return + if (usr.abiotic()) + usr << "Subject may not have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "sleeper_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/sleeper/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The sleeper is already occupied!" + return + if (G.affecting.abiotic()) + user << "Subject may not have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "sleeper_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/sleeper/proc/go_out() + + if (!( src.occupant )) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(26) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "sleeper_0" + return + +/obj/machinery/sleeper/proc/inject(mob/user as mob) + + if (src.occupant) + if (src.occupant.rejuv < 60) + src.occupant.rejuv = 60 + user << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", src.occupant.rejuv) + else + user << "No occupant!" + return + +/obj/machinery/sleeper/proc/check(mob/user as mob) + + if (src.occupant) + user << text("\blue Occupant ([]) Statistics:", src.occupant) + var/t1 + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + user << text("[]\t Health %: [] ([])", (src.occupant.health > 50 ? "\blue " : "\red "), src.occupant.health, t1) + user << text("[]\t -Respiratory Damage %: []", (src.occupant.oxyloss < 60 ? "\blue " : "\red "), src.occupant.oxyloss) + user << text("[]\t -Toxin Content %: []", (src.occupant.toxloss < 60 ? "\blue " : "\red "), src.occupant.toxloss) + user << text("[]\t -Burn Severity %: []", (src.occupant.fireloss < 60 ? "\blue " : "\red "), src.occupant.fireloss) + user << "\blue Expected time till occupant can safely awake: (note: If health is below 20% these times are inaccurate)" + user << text("\blue \t [] second\s (if around 1 or 2 the sleeper is keeping them asleep.)", src.occupant.paralysis / 5) + else + user << "\blue There is no one inside!" + return + +/obj/machinery/sleeper/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/machinery/sleeper/alter_health(mob/M as mob) + + if (M.health > 0) + if (M.oxyloss >= 10) + var/amount = max(0.15, 1) + M.oxyloss -= amount + else + M.oxyloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + M.paralysis -= 4 + M.weakened -= 4 + M.stunned -= 4 + if (M.paralysis <= 1) + M.paralysis = 3 + if (M.weakened <= 1) + M.weakened = 3 + if (M.stunned <= 1) + M.stunned = 3 + if (M.rejuv < 3) + M.rejuv = 4 + return + +/obj/machinery/cryo_cell/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(54) + src.icon_state = "broken" + else + return + +/obj/machinery/cryo_cell/orient_pipe(P as obj) + + if (!( src.line_in )) + src.line_in = P + else + return 0 + return 1 + return + +/obj/machinery/cryo_cell/allow_drop() + + return 0 + return + +/obj/machinery/cryo_cell/New() + + ..() + src.gas = new /obj/substance/gas( null ) + spawn( 50 ) + for(var/obj/machinery/M in orange(src, 1)) + if ((M.level == src.level && src.p_dir & get_dir(src, M) && M.p_dir & get_dir(M, src))) + if (!( src.line_in )) + src.line_in = M + //Foreach goto(42) + return + return + +/obj/machinery/cryo_cell/verb/move_eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/cryo_cell/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The cell is already occupied!" + return + if (usr.abiotic()) + usr << "Subject may not have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "celltop_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/cryo_cell/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The cell is already occupied!" + return + if (G.affecting.abiotic()) + user << "Subject may not have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "celltop_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/cryo_cell/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/cryo_cell/attack_hand(mob/user as mob) + + user.machine = src + if (istype(user, /mob/human)) + var/dat = " System Statistics:
" + if (src.gas.temperature > 0) + dat += text("\tTemperature (Farenheight): [] (MUST be below 0, add coolant to mixture)
", src.gas.temperature) + else + dat += text("\tTemperature(Farenheight): []
", src.gas.temperature) + if (src.gas.plasma < 1) + dat += text("\tPlasma Units: [] (Add plasma to mixture!)
", src.gas.plasma) + else + dat += text("\tPlasma Units: []
", src.gas.plasma) + if (src.gas.oxygen < 1) + dat += text("\tOxygen Units: [] (Add oxygen to mixture!)
", src.gas.oxygen) + else + dat += text("\tOxygen Units: []
", src.gas.oxygen) + if (src.occupant) + dat += "Occupant Statistics:
" + var/t1 + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\tHealth %: [] ([])

", (src.occupant.health > 50 ? "" : ""), src.occupant.health, t1) + dat += text("[]\t-Respiratory Damage %: []
", (src.occupant.oxyloss < 60 ? "" : ""), src.occupant.oxyloss) + dat += text("[]\t-Toxin Content %: []
", (src.occupant.toxloss < 60 ? "" : ""), src.occupant.toxloss) + dat += text("[]\t-Burn Severity %: []", (src.occupant.fireloss < 60 ? "" : ""), src.occupant.fireloss) + dat += text("

Close", user) + user << browse(dat, "window=cryo;size=400x500") + else + var/dat = text(" []
", stars("System Statistics:")) + if (src.gas.temperature > 0) + dat += text("\t[]
", stars(text("Temperature (Farenheight): [] (MUST be below 0, add coolant to mixture)", src.gas.temperature))) + else + dat += text("\t[]
", stars(text("Temperature(Farenheight): []", src.gas.temperature))) + if (src.gas.plasma < 1) + dat += text("\t[]
", stars(text("Plasma Units: [] (Add plasma to mixture!)", src.gas.plasma))) + else + dat += text("\t[]
", stars(text("Plasma Units: []", src.gas.plasma))) + if (src.gas.oxygen < 1) + dat += text("\t[]
", stars(text("Oxygen Units: [] (Add oxygen to mixture!)", src.gas.oxygen))) + else + dat += text("\t[]
", stars(text("Oxygen Units: []", src.gas.oxygen))) + if (src.occupant) + dat += "Occupant Statistics:
" + var/t1 = null + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\t[]

", (src.occupant.health > 50 ? "" : ""), stars(text("Health %: [] ([])", src.occupant.health, t1))) + dat += text("[]\t[]
", (src.occupant.oxyloss < 60 ? "" : ""), stars(text("-Respiratory Damage %: []", src.occupant.oxyloss))) + dat += text("[]\t[]
", (src.occupant.toxloss < 60 ? "" : ""), stars(text("-Toxin Content %: []", src.occupant.toxloss))) + dat += text("[]\t[]", (src.occupant.fireloss < 60 ? "" : ""), stars(text("-Burn Severity %: []", src.occupant.fireloss))) + dat += text("

Close", user) + user << browse(dat, "window=cryo;size=400x500") + return + +/obj/machinery/cryo_cell/proc/go_out() + + if (!( src.occupant )) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(26) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "celltop" + return + +/obj/machinery/cryo_cell/relaymove(mob/user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/cryo_cell/alter_health(mob/M as mob) + + if (M.health < 0) + if ((src.gas.temperature > 0 || src.gas.plasma < 1)) + return + if (M.stat == 2) + return + if (src.gas.oxygen >= 1) + src.gas.oxygen-- + if (M.oxyloss >= 10) + var/amount = max(0.15, 2) + M.oxyloss -= amount + else + M.oxyloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + if ((src.gas.temperature < 0 && src.gas.plasma >= 1)) + src.gas.plasma-- + if (M.toxloss > 5) + var/amount = max(0.1, 2) + M.toxloss -= amount + else + M.toxloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + if (istype(M, /mob/human)) + var/mob/human/H = M + var/ok = 0 + for(var/organ in H.organs) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", organ)] + ok += affecting.heal_damage(5, 5) + //Foreach goto(267) + if (ok) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + if (M.fireloss > 15) + var/amount = max(0.3, 2) + M.fireloss -= amount + else + M.fireloss = 0 + if (M.bruteloss > 10) + var/amount = max(0.3, 2) + M.bruteloss -= amount + else + M.bruteloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + M.paralysis += 5 + if (src.gas.temperature < 60) + src.gas.temperature = min(src.gas.temperature + 1, 60) + for(var/mob/E in viewers(1, src)) + if ((E.client && E.machine == src)) + src.attack_hand(E) + //Foreach goto(489) + return + return + +/obj/machinery/cryo_cell/receive_gas(S as obj, source as obj) + + if (!( istype(S, /obj/substance/gas) )) + //S = null + del(S) + return + else + src.gas.merge_into(S) + //S = null + del(S) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(74) + return + +/obj/machinery/cryo_cell/New() + + ..() + src.layer = 5 + var/obj/overlay/O1 = new /obj/overlay( ) + O1.icon = 'Cryogenic2.dmi' + O1.icon_state = "cellconsole" + O1.pixel_y = -32.0 + O1.layer = 4 + var/obj/overlay/O2 = new /obj/overlay( ) + O2.icon = 'Cryogenic2.dmi' + O2.icon_state = "cellbottom" + O2.pixel_y = -32.0 + src.pixel_y = 32 + src.overlays += O2 + src.overlays += O1 + return + +/obj/item/weapon/flasks/examine() + set src in oview(1) + + usr << text("The flask is []% full", (src.oxygen + src.plasma + src.coolant) * 100 / 500) + usr << "The flask can ONLY store liquids." + return + +/mob/human/abiotic() + + if ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.w_radio || src.glasses || src.ears || src.gloves)) + return 1 + else + return 0 + return + +/mob/proc/abiotic() + + if ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || src.back || src.wear_mask) + return 1 + else + return 0 + return + +/datum/data/function/proc/reset() + + return + +/datum/data/function/proc/r_input(href, href_list, mob/user as mob) + + return + +/datum/data/function/proc/display() + + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/demo.dm b/ss13-40.93.2-base/ss13-40.93.2-base/demo.dm new file mode 100644 index 0000000..0387e4e --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/demo.dm @@ -0,0 +1,2890 @@ + +/obj/machinery/door/meteorhit(obj/M as obj) + + src.open() + return + +/obj/machinery/door/Move() + + ..() + if (src.density) + var/turf/location = src.loc + if (istype(location, /turf)) + location.updatecell = 0 + return + +/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob) + + if (src.operating) + return + src.add_fingerprint(user) + if ((src.density && istype(I, /obj/item/weapon/card/emag))) + src.operating = 1 + flick("door_spark", src) + sleep(6) + src.operating = null + open() + return 1 + var/obj/item/weapon/card/id/card + if (istype(user, /mob/human)) + var/mob/human/H = user + card = H.wear_id + if (istype(I, /obj/item/weapon/card/id)) + card = I + else + if (!( istype(card, /obj/item/weapon/card/id) )) + return 0 + if ((card.air_access >= src.r_air && card.lab_access >= src.r_lab && card.engine_access >= src.r_engine && card.access_level >= src.r_access)) + if (src.density) + open() + else + close() + else + if (src.density) + flick("door_deny", src) + return + +/obj/machinery/door/window/close() + + ..() + var/turf/T = src.loc + if (T) + T.updatecell = 1 + return + +/obj/machinery/door/window/New() + + ..() + var/turf/T = src.loc + if (T) + T.updatecell = 1 + if ((src.r_air || src.r_engine || src.r_access || src.r_lab)) + src.icon = 'security.dmi' + return + +/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) + + if (!( ismob(AM) )) + return + if (!( ticker )) + return + if (src.operating) + return + if ((src.r_air == 0 && src.r_engine == 0 && src.r_lab == 0 && src.r_access == 0)) + open() + sleep(50) + close() + return + +/obj/machinery/door/window/CheckPass(atom/movable/O as mob|obj, target as turf) + + if (src.density) + var/direct = get_dir(O, target) + if ((direct == NORTH && src.dir & 12)) + return 0 + else + if ((direct == WEST && src.dir & 3)) + return 0 + return 1 + return + +/obj/machinery/door/window/CheckExit(atom/movable/O as mob|obj, target as turf) + + if (src.density) + var/direct = get_dir(O, target) + if ((direct == SOUTH && src.dir & 12)) + return 0 + else + if ((direct == EAST && src.dir & 3)) + return 0 + return 1 + return + +/obj/machinery/door/false_wall/New() + + src.verbs -= /atom/movable/verb/pull + return + +/obj/machinery/door/false_wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall" + return + +/obj/machinery/door/false_wall/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/door/false_wall/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (src.density) + if (prob(25)) + open() + else + user << "\blue You push the wall but nothing happens!" + else + close() + return + +/obj/machinery/door/false_wall/attackby(obj/item/weapon/screwdriver/S as obj, mob/user as mob) + + src.add_fingerprint(user) + if (istype(S, /obj/item/weapon/screwdriver)) + new /obj/item/weapon/sheet/metal( src.loc ) + new /obj/d_girders( src.loc ) + //SN src = null + del(src) + return + else + ..() + return + +/obj/machinery/door/airlock/proc/update() + + if (((!( src.wires & 2 ) || !( src.wires & 8 ) || !( src.wires & 32 ) || !( src.wires & 64 ) || !( src.wires & 128 ) || !( src.wires & 256 )) && src.powered)) + src.locked = 1 + if ((!( src.wires & 1 ) && !( src.wires & 4 ) && !( src.wires & 16 ))) + src.powered = 0 + else + src.powered = 1 + var/d = src.density + if (src.blocked) + d = "l" + src.icon_state = text("[]door[]", (src.p_open ? "o_" : null), d) + return + +/obj/machinery/door/airlock/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/door/airlock/attack_hand(mob/user as mob) + + if (src.p_open) + user.machine = src + var/t1 = text("Access Panel
\nOrange Wire: []
\nDark Red Wire: []
\nWhite Wire: []
\nYellow Wire: []
\nRed Wire: []
\nBlue Wire: []
\nGreen Wire: []
\nGrey Wire: []
\nBlack Wire: []
\n
\n[]
\n[]", (src.wires & 256 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 128 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 64 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 32 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 16 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 8 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), (src.powered ? "The test light is on." : "The test light is off!")) + user << browse(t1, "window=airlock") + return + +/obj/machinery/door/airlock/Topic(href, href_list) + + if (usr.stat) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if (!( src.p_open )) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + else + if (t1 & 8) + if (src.wires & 8) + src.wires &= 65527 + else + src.wires |= 8 + else + if (t1 & 16) + if (src.wires & 16) + src.wires &= 65519 + else + src.wires |= 16 + else + if (t1 & 32) + if (src.wires & 32) + src.wires &= 65503 + else + src.wires |= 32 + else + if (t1 & 64) + if (src.wires & 64) + src.wires &= 65471 + else + src.wires |= 64 + else + if (t1 & 128) + if (src.wires & 128) + src.wires &= 65407 + else + src.wires |= 128 + else + if (t1 & 256) + if (src.wires & 256) + src.wires &= 65279 + else + src.wires |= 256 + src.update() + add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(477) + return + +/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob) + + src.add_fingerprint(user) + if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) + var/obj/item/weapon/weldingtool/W = C + if (W.weldfuel > 2) + W.weldfuel -= 2 + else + user << "Need more wleding fuel!" + return + if (!( src.blocked )) + src.blocked = 1 + else + src.blocked = null + src.update() + return + else + if (istype(C, /obj/item/weapon/wrench)) + if (src.p_open) + if (src.powered) + src.locked = null + else + user << alert("You need power assist!", null, null, null, null, null) + src.update() + else + if (istype(C, /obj/item/weapon/screwdriver)) + src.p_open = !( src.p_open ) + update() + else + if (istype(C, /obj/item/weapon/crowbar)) + if ((src.density && !( src.blocked ) && !( src.operating ) && !( src.powered ) && !( src.locked ))) + spawn( 0 ) + src.operating = 1 + flick(text("[]doorc0", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door0", (src.p_open ? "o_" : null)) + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + else + ..() + return + +/obj/machinery/door/airlock/open() + + if ((src.blocked || src.locked || !( src.powered ))) + return + ..() + return + +/obj/machinery/door/airlock/close() + + if (!( src.powered )) + return + ..() + var/turf/T = src.loc + if (T) + T.firelevel = 0 + return + +/obj/machinery/door/firedoor/open() + + usr << "This is a remote firedoor!" + return + +/obj/machinery/door/firedoor/close() + + usr << "This is a remote firedoor!" + return + +/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob) + + src.add_fingerprint(user) + if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) + var/obj/item/weapon/weldingtool/W = C + if (W.weldfuel > 2) + W.weldfuel -= 2 + if (!( src.blocked )) + src.blocked = 1 + src.icon_state = "doorl" + else + src.blocked = 0 + src.icon_state = "door1" + return + else + if (!( istype(C, /obj/item/weapon/crowbar) )) + return + if ((src.density && !( src.blocked ) && !( src.operating ))) + spawn( 0 ) + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + return + +/obj/machinery/door/firedoor/proc/openfire() + set src in oview(1) + + if ((src.operating || src.blocked)) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + +/obj/machinery/door/firedoor/proc/closefire() + set src in oview(1) + + if (src.operating) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + src.opacity = 1 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + T.firelevel = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/door/New() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + if (src.density) + T.updatecell = 0 + return + +/obj/machinery/door/proc/open() + + if (src.operating) + return + src.operating = 1 + flick(text("[]doorc0", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door0", (src.p_open ? "o_" : null)) + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + +/obj/machinery/door/proc/close() + + if (src.operating) + return + src.operating = 1 + flick(text("[]doorc1", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door1", (src.p_open ? "o_" : null)) + src.density = 1 + if (src.visible) + src.opacity = 1 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/igniter/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/igniter/attack_hand(mob/user as mob) + + ..() + src.on = !( src.on ) + src.icon_state = text("igniter[]", src.on) + add_fingerprint(user) + return + +/obj/machinery/igniter/process() + + if (src.on) + var/turf/T = src.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (T.firelevel < 900000.0) + T.firelevel = T.poison + return + +/obj/machinery/firealarm/burn(fi_amount) + + src.alarm() + return + +/obj/machinery/firealarm/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/firealarm/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.detecting = !( src.detecting ) + if (src.detecting) + viewers(user, null) << text("\red [] has reconnected []'s detecting unit!", user, src) + else + viewers(user, null) << text("\red [] has disconnected []'s detecting unit!", user, src) + else + src.alarm() + src.add_fingerprint(user) + return + +/obj/machinery/firealarm/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + alarm() + src.time = 0 + src.timing = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(68) + return + +/obj/machinery/firealarm/attack_hand(mob/user as mob) + + user.machine = src + var/area/A = src.loc + var/d1 + var/d2 + if (istype(user, /mob/human)) + A = A.loc + + if (A.fire) + d1 = text("Reset - Lockdown", src) + else + d1 = text("Alarm - Lockdown", src) + if (src.timing) + d2 = text("Stop Time Lock", src) + else + d2 = text("Initiate Time Lock", src) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("Fire alarm []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + user << browse(dat, "window=firealarm") + else + A = A.loc + if (A.fire) + d1 = text("[]", src, stars("Reset - Lockdown")) + else + d1 = text("[]", src, stars("Alarm - Lockdown")) + if (src.timing) + d2 = text("[]", src, stars("Stop Time Lock")) + else + d2 = text("[]", src, stars("Initiate Time Lock")) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("[] []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", stars("Fire alarm"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + user << browse(dat, "window=firealarm") + return + +/obj/machinery/firealarm/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["reset"]) + src.reset() + else + if (href_list["alarm"]) + src.alarm() + else + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(194) + src.add_fingerprint(usr) + else + usr << browse(null, "window=firealarm") + return + return + +/obj/machinery/firealarm/proc/reset() + + if (!( src.working )) + return + var/area/A = src.loc + A = A.loc + if (!( istype(A, /area) )) + return + A.fire = 0 + if (A.icon_state == "blue-red") + A.icon_state = "red" + else + A.icon_state = null + for(var/obj/machinery/door/firedoor/D in A) + if (D.density) + spawn( 0 ) + D.openfire() + return + //Foreach goto(93) + return + +/obj/machinery/firealarm/proc/alarm() + + if (!( src.working )) + return + var/area/A = src.loc + A = A.loc + if (!( istype(A, /area) )) + return + A.firealert() + return + +/obj/machinery/dispenser/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + else + return + +/obj/machinery/dispenser/meteorhit() + + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + //SN src = null + del(src) + return + return + +/obj/machinery/dispenser/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/dispenser/attack_hand(mob/user as mob) + + user.machine = src + var/dat = text("Loaded Tank Dispensing Unit
\nOxygen: [] []
\nPlasma: [] []
\n
", src.o2tanks, (src.o2tanks ? text("Dispense", src) : "empty"), src.pltanks, (src.pltanks ? text("Dispense", src) : "empty")) + user << browse(dat, "window=dispenser") + return + +/obj/machinery/dispenser/Topic(href, href_list) + + if (usr.stat) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["oxygen"]) + if (text2num(href_list["oxygen"])) + if (src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + if (istype(src.loc, /mob)) + attack_hand(src.loc) + else + if (href_list["plasma"]) + if (text2num(href_list["plasma"])) + if (src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + if (istype(src.loc, /mob)) + attack_hand(src.loc) + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(275) + else + usr << browse(null, "window=dispenser") + return + return + +/obj/item/weapon/clothing/burn(fi_amount) + + if (fi_amount > src.s_fire) + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + //SN src = null + del(src) + return + return + return + return 0 + return 1 + return + +/obj/item/weapon/clothing/gloves/examine() + set src in usr + + ..() + return + +/obj/item/weapon/clothing/shoes/orange/attack_self(mob/user as mob) + + if (src.chained) + src.chained = null + new /obj/item/weapon/handcuffs( user.loc ) + src.icon_state = "o_shoes" + return + +/obj/item/weapon/clothing/shoes/orange/attackby(H as obj, loc) + + if ((istype(H, /obj/item/weapon/handcuffs) && !( src.chained ))) + //H = null + del(H) + src.chained = 1 + src.icon_state = "o_shoes1" + return + +/obj/item/weapon/clothing/mask/muzzle/attack_paw(mob/user as mob) + + if (src == user.wear_mask) + return + else + ..() + return + +/obj/item/weapon/tank/attack_self(mob/user as mob) + + user.machine = src + if (!( src.gas )) + return + var/dat = text("Tank
\nContains/Capacity [] / []
\nInterals Valve: [] Gas Flow
\n\t- - - [] + + +
\n
\nClose\n
", src.gas.tot_gas(), src.maximum, src, ((src.loc == user && user.internal == src) ? "Stop" : "Restore"), src, src, src, src.i_used, src, src, src, user) + user << browse(dat, "window=tank;size=600x300") + return + +/obj/item/weapon/tank/Topic(href, href_list) + + if (usr.stat) + return + if (src.loc == usr) + usr.machine = src + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.i_used += cp + src.i_used = min(max(round(src.i_used), 0), 10000) + if ((href_list["stat"] && src.loc == usr)) + if (usr.internal == src) + usr.internal = null + return + if (usr.internal) + usr.internal = null + if ((!( usr.wear_mask ) || !( usr.wear_mask.flags & 8 ))) + return + usr.internal = src + usr << "\blue Now running on internals!" + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src.loc)) + if ((M.client && M.machine == src)) + src.attack_self(M) + //Foreach goto(206) + else + usr << browse(null, "window=tank") + return + return + +/obj/item/weapon/tank/proc/process(mob/M as mob, obj/substance/gas/G as obj) + + var/amount = src.i_used + var/total = src.gas.tot_gas() + if (amount > total) + amount = total + if (total > 0) + G.transfer_from(src.gas, amount) + return G + return + +/obj/item/weapon/tank/attack(mob/M as mob, mob/user as mob) + + ..() + if ((prob(30) && M.stat < 2)) + var/mob/human/H = M + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.stunned < time) + M.stunned = time + M.stat = 1 + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been knocked unconscious!", M) + //Foreach goto(169) + M << text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120) + return + +/obj/item/weapon/tank/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/item/weapon/tank/Del() + + //src.gas = null + del(src.gas) + return + return + +/obj/item/weapon/tank/burn(fi_amount) + + if ( (fi_amount * src.gas.tot_gas()) > (src.maximum * 3.75E7) ) + src.gas.turf_add(get_turf(src.loc), src.gas.tot_gas()) + //SN src = null + del(src) + return + return + +/obj/item/weapon/tank/examine() + set src in view(1) + + usr << text("\blue The \icon[] contains [] unit\s of gas.", src, src.gas.tot_gas()) + return + +/obj/item/weapon/tank/oxygentank/New() + + ..() + src.gas.oxygen = src.maximum + return + +/obj/item/weapon/tank/jetpack/New() + + ..() + src.gas.oxygen = src.maximum + return + +/obj/item/weapon/tank/jetpack/verb/toggle() + + src.on = !( src.on ) + src.icon_state = text("jetpack[]", src.on) + return + +/obj/item/weapon/tank/jetpack/proc/allow_thrust(num, mob/user as mob) + + if (!( src.on )) + return 0 + if ((num < 1 || src.gas.tot_gas() < num)) + return 0 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, num) + if (G.oxygen >= 100) + return 1 + if (G.plasma > 10) + if (user) + var/d = G.plasma / 2 + d = min(abs(user.health + 100), d, 25) + user.fireloss += d + user.health = 100 - user.oxyloss - user.toxloss - user.fireloss - user.bruteloss + return (G.oxygen >= 75 ? 0.5 : 0) + else + if (G.oxygen >= 75) + return 0.5 + else + return 0 + //G = null + del(G) + return + +/obj/item/weapon/tank/anesthetic/New() + + ..() + src.gas.sl_gas = 1000 + return + + +/obj/item/weapon/tank/plasmatank/proc/ignite() + + if ((src.gas.plasma < 1600000.0 || src.gas.temperature < 500)) + var/turf/T = get_turf(src.loc) + T.poison += src.gas.plasma + T.firelevel = T.poison + T.res_vars() + if ((src.gas.temperature > 450 && src.gas.plasma == 1600000.0)) + var/turf/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/turf/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 1) && U.y >= (T.y - 1) && U.x <= (T.x + 2) && U.x >= (T.x - 2)) ) + zone = 3 + if ((U.y <= (T.y + 1) && U.y >= (T.y - 1) && U.x <= (T.x + 1) && U.x >= (T.x - 1) )) + zone = 2 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(342) + U.ex_act(zone) + //Foreach goto(170) + else + if ((src.gas.temperature > 300 && src.gas.plasma == 1600000.0)) + var/turf/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/turf/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 2) && U.y >= (T.y - 2) && U.x <= (T.x + 2) && U.x >= (T.x - 2)) ) + zone = 3 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(598) + U.ex_act(zone) + //Foreach goto(498) + //src.master = null + del(src.master) + //SN src = null + del(src) + return + + var/turf/T = src.loc + while(!( istype(T, /turf) )) + T = T.loc + + if(src.master) + src.master.loc = null + del(src.master) + + for(var/mob/M in range(T, null)) + flick("flash", M.flash) + //Foreach goto(732) + var/m_range = 2 + for(var/obj/machinery/atmoalter/canister/C in range(2, T)) + if (!( C.destroyed )) + if (C.gas.plasma >= 35000) + C.destroyed = 1 + m_range++ + //Foreach goto(776) + var/min = m_range + var/med = m_range * 2 + var/max = m_range * 3 + var/u_max = m_range * 4 + var/turf/sw = locate(max(T.x - u_max, 1), max(T.y - u_max, 1), T.z) + var/turf/ne = locate(min(T.x + u_max, world.maxx), min(T.y + u_max, world.maxy), T.z) + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + max) && U.y >= (T.y - max) && U.x <= (T.x + max) && U.x >= (T.x - max) )) + zone = 3 + if ((U.y <= (T.y + med) && U.y >= (T.y - med) && U.x <= (T.x + med) && U.x >= (T.x - med) )) + zone = 2 + if ((U.y <= (T.y + min) && U.y >= (T.y - min) && U.x <= (T.x + min) && U.x >= (T.x - min) )) + zone = 1 + for(var/atom/A in U) + A.ex_act(zone) + //Foreach goto(1217) + U.ex_act(zone) + //Foreach goto(961) + //src.master = null + + + //SN src = null + del(src) + return + return + +/obj/item/weapon/tank/plasmatank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/assembly/rad_ignite)) + var/obj/item/weapon/assembly/rad_ignite/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/r_i_ptank/R = new /obj/item/weapon/assembly/r_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + //S = null + del(S) + if (istype(W, /obj/item/weapon/assembly/prox_ignite)) + var/obj/item/weapon/assembly/prox_ignite/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/m_i_ptank/R = new /obj/item/weapon/assembly/m_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + //S = null + del(S) + + return + +/obj/item/weapon/tank/plasmatank/New() + + ..() + src.gas.plasma = src.maximum + return + +/obj/meteor/small/Move() + + if (src.steps < 7) + src.steps++ + if (src.steps >= 7) + src.icon_state = "smallf" + else + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + 5 + ..() + if (src.z != 1) + //SN src = null + del(src) + return + spawn( 3 ) + step(src, WEST) + if (prob(30)) + step(src, pick(NORTH, SOUTH)) + return + return + +/obj/meteor/New() + + ..() + sleep(1) + step(src, WEST) + return + +/obj/meteor/Move() + + if (src.steps < 7) + src.steps++ + if (src.steps >= 7) + src.icon_state = "flaming" + else + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + 5 + ..() + if (src.z != 1) + //SN src = null + del(src) + return + spawn( 3 ) + step(src, WEST) + if (prob(30)) + step(src, pick(NORTH, SOUTH)) + return + return + +/obj/meteor/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + if (A) + A.meteorhit(src) + + + + + if (--src.hits <= 0) + //SN src = null + del(src) + return + return + return + +/obj/meteor/ex_act(severity) + + if (severity < 4) + //SN src = null + del(src) + return + return + +/obj/secloset/alter_health() + + return src.loc + return + +/obj/secloset/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/secloset/personal/New() + + ..() + sleep(2) + new /obj/item/weapon/storage/backpack( src ) + new /obj/item/weapon/radio/headset( src ) + new /obj/item/weapon/radio/signaler( src ) + new /obj/item/weapon/pen( src ) + return + +/obj/secloset/personal/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.opened) + user.drop_item() + W.loc = src.loc + else + if (istype(W, /obj/item/weapon/card/id)) + var/list/L = list( ) + if (W:assignment == "Systems") + src.allowed = null + src.icon_state = "0secloset0" + src.locked = 1 + src.desc = "The first card swiped gains control." + return + if (src.allowed) + L = dd_text2list(src.allowed, ",") + if ((L.Find(W:assignment) || !( src.allowed ) || L.Find(text("m[]", W:registered)))) + src.locked = !( src.locked ) + for(var/mob/O in viewers(user, 3)) + if ((O.client && !( O.blinded ))) + O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user) + //Foreach goto(185) + src.icon_state = text("[]secloset0", (src.locked ? "1" : null)) + if (!( src.allowed )) + src.allowed = text("m[],Captain,Head of Personnel", W:registered) + src.desc = text("Owned by [], Clear by using a card of rank 'Systems'", W:registered) + else + user << "\red Access Denied" + else + user << "\red It's closed..." + return + +/obj/secloset/security2/New() + + ..() + sleep(2) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/camera( src ) + new /obj/item/weapon/f_print_scanner( src ) + new /obj/item/weapon/f_print_scanner( src ) + new /obj/item/weapon/f_print_scanner( src ) + return + +/obj/secloset/security1/New() + + ..() + sleep(2) + new /obj/item/weapon/storage/flashbang_kit( src ) + new /obj/item/weapon/storage/handcuff_kit( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/flash( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/helmet( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + return + +/obj/secloset/highsec/New() + + ..() + sleep(2) + new /obj/item/weapon/gun/energy/laser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/flash( src ) + new /obj/item/weapon/storage/id_kit( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/helmet( src ) + return + +/obj/secloset/animal/New() + + ..() + sleep(2) + new /obj/item/weapon/radio/signaler( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + return + +/obj/secloset/medical1/New() + + ..() + sleep(2) + new /obj/item/weapon/bottle/toxins( src ) + new /obj/item/weapon/bottle/rejuvenators( src ) + new /obj/item/weapon/bottle/s_tox( src ) + new /obj/item/weapon/bottle/s_tox( src ) + new /obj/item/weapon/bottle/toxins( src ) + new /obj/item/weapon/bottle/r_epil( src ) + new /obj/item/weapon/bottle/r_ch_cough( src ) + new /obj/item/weapon/pill_canister/Tourette( src ) + new /obj/item/weapon/pill_canister/cough( src ) + new /obj/item/weapon/pill_canister/epilepsy( src ) + new /obj/item/weapon/pill_canister/sleep( src ) + new /obj/item/weapon/pill_canister/antitoxin( src ) + new /obj/item/weapon/pill_canister/placebo( src ) + new /obj/item/weapon/storage/firstaid/syringes( src ) + new /obj/item/weapon/storage/gl_kit( src ) + new /obj/item/weapon/dropper( src ) + return + +/obj/secloset/medical2/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + return + +/obj/secloset/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/secloset/meteorhit(obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src.icon_state = "secloset1" + //SN src = null + del(src) + return + return + +/obj/secloset/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.opened) + user.drop_item() + W.loc = src.loc + else + if (istype(W, /obj/item/weapon/card/id)) + var/list/L = list( ) + if (src.allowed) + L = dd_text2list(src.allowed, ",") + if ((L.Find(W:assignment) || !( src.allowed ))) + src.locked = !( src.locked ) + for(var/mob/O in viewers(user, 3)) + if ((O.client && !( O.blinded ))) + O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user) + //Foreach goto(121) + src.icon_state = text("[]secloset0", (src.locked ? "1" : null)) + else + user << "\red Access Denied" + else + user << "\red It's closed..." + return + +/obj/secloset/relaymove(mob/user as mob) + + if (user.stat) + return + if (!( src.locked )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(36) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(78) + src.icon_state = "secloset1" + src.opened = 1 + else + user << "\blue It's welded shut!" + for(var/mob/M in hearers(src, null)) + M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) + //Foreach goto(170) + return + +/obj/secloset/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + + if ((user.restrained() || user.stat)) + return + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + return + step_towards(O, src.loc) + if (user != O) + for(var/mob/B in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + B << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(115) + src.add_fingerprint(user) + return + +/obj/secloset/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/secloset/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (!( src.opened )) + if (!( src.locked )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(43) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(85) + src.icon_state = "secloset1" + src.opened = 1 + else + usr << "\blue It's locked tight!" + else + for(var/obj/item/I in src.loc) + if (!( I.anchored )) + I.loc = src + //Foreach goto(176) + for(var/mob/M in src.loc) + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + //Foreach goto(226) + src.icon_state = "secloset0" + src.opened = 0 + return + +/obj/morgue/proc/update() + + if (src.connected) + src.icon_state = "morgue0" + else + if (src.contents.len) + src.icon_state = "morgue2" + else + src.icon_state = "morgue1" + return + +/obj/morgue/alter_health() + + return src.loc + return + +/obj/morgue/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/morgue/attack_hand(mob/user as mob) + + if (src.connected) + for(var/atom/movable/A as mob|obj in src.connected.loc) + if (!( A.anchored )) + A.loc = src + //Foreach goto(28) + //src.connected = null + del(src.connected) + else + src.connected = new /obj/m_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.loc = src.connected.loc + //Foreach goto(168) + src.connected.icon_state = "morguet" + else + //src.connected = null + del(src.connected) + src.add_fingerprint(user) + update() + return + +/obj/morgue/attackby(P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != P) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("Morgue- '[]'", t) + else + src.name = "Morgue" + src.add_fingerprint(user) + return + +/obj/morgue/relaymove(mob/user as mob) + + if (user.stat) + return + src.connected = new /obj/m_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.loc = src.connected.loc + //Foreach goto(106) + src.connected.icon_state = "morguet" + else + //src.connected = null + del(src.connected) + return + +/obj/m_tray/CheckPass(D as obj) + + if (istype(D, /obj/item/weapon/dummy)) + return 1 + else + return ..() + return + +/obj/m_tray/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/m_tray/attack_hand(mob/user as mob) + + if (src.connected) + for(var/atom/movable/A as mob|obj in src.loc) + if (!( A.anchored )) + A.loc = src.connected + //Foreach goto(26) + src.connected.connected = null + src.connected.update() + add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + return + O.loc = src.loc + if (user != O) + for(var/mob/B in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + B << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(99) + return + +/obj/closet/alter_health() + + return src.loc + return + +/obj/closet/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/closet/syndicate/nuclear/New() + + ..() + sleep(2) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/storage/handcuff_kit( src ) + new /obj/item/weapon/storage/flashbang_kit( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink( src ) + U.uses = 5 + return + +/obj/closet/emcloset/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/oxygentank( src ) + new /obj/item/weapon/clothing/mask/gasmask( src ) + return + +/obj/closet/l3closet/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/oxygentank( src ) + new /obj/item/weapon/clothing/mask/gasmask( src ) + new /obj/item/weapon/clothing/suit/bio_suit( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/head/bio_hood( src ) + return + +/obj/closet/wardrobe/New() + + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/red/New() + + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/pink/New() + + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/black/New() + + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + return + +/obj/closet/wardrobe/green/New() + + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + return + +/obj/closet/wardrobe/orange/New() + + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + return + +/obj/closet/wardrobe/yellow/New() + + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + return + +/obj/closet/wardrobe/mixed/New() + + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/white/New() + + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/storage/stma_kit( src ) + return + +/obj/closet/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/closet/meteorhit(obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src.icon_state = "emcloset1" + //SN src = null + del(src) + return + return + +/obj/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((src.opened || W.damtype != "fire" || !( istype(W, /obj/item/weapon/weldingtool) ))) + user.drop_item() + W.loc = src.loc + else + src.welded = !( src.welded ) + for(var/mob/M in viewers(user, null)) + if (M.client) + M.show_message(text("\red [] has been [] by [].", src, (src.welded ? "welded shut" : "unwelded"), user), 3, "\red You hear welding.", 2) + //Foreach goto(82) + return + +/obj/closet/relaymove(mob/user as mob) + + if (user.stat) + return + if (!( src.welded )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(36) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(78) + src.icon_state = "emcloset1" + src.opened = 1 + else + user << "\blue It's welded shut!" + for(var/mob/M in hearers(src, null)) + M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) + //Foreach goto(170) + return + +/obj/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + + if ((user.restrained() || user.stat)) + return + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + return + step_towards(O, src.loc) + for(var/mob/M in viewers(user, null)) + if ((M.client && !( M.blinded ))) + M << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(104) + src.add_fingerprint(user) + return + +/obj/closet/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/closet/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (!( src.opened )) + if (!( src.welded )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(43) + for(var/mob/M in src) + if (!( M.buckled )) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(85) + src.icon_state = "emcloset1" + src.opened = 1 + else + usr << "\blue It's welded shut!" + else + for(var/obj/item/I in src.loc) + if (!( I.anchored )) + I.loc = src + //Foreach goto(187) + for(var/mob/M in src.loc) + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + //Foreach goto(237) + src.icon_state = src.original + src.opened = 0 + return + +/obj/closet/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/stool/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/stool/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + return + +/obj/stool/bed/attackby(obj/item/weapon/W as obj, mob/user as mob) + + return + +/obj/stool/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) + + ..() + if (istype(W, /obj/item/weapon/assembly/shock_kit)) + var/obj/stool/chair/e_chair/E = new /obj/stool/chair/e_chair( src.loc ) + E.dir = src.dir + E.part1 = W + W.loc = E + W.master = E + user.u_equip(W) + W.layer = initial(W.layer) + //SN src = null + del(src) + return + return + +/obj/stool/chair/e_chair/New() + + src.overl = new /atom/movable/overlay( src.loc ) + src.overl.icon = 'Icons.dmi' + src.overl.icon_state = "e_chairo0" + src.overl.layer = 5 + src.overl.name = "electrified chair" + src.overl.master = src + return + +/obj/stool/chair/e_chair/Del() + + //src.overl = null + del(src.overl) + ..() + return + +/obj/stool/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + var/obj/stool/chair/C = new /obj/stool/chair( src.loc ) + C.dir = src.dir + src.part1.loc = src.loc + src.part1.master = null + src.part1 = null + //SN src = null + del(src) + return + return + +/obj/stool/chair/e_chair/verb/toggle_power() + set src in oview(1) + + if ((usr.stat || usr.restrained() || !( usr.canmove ) || usr.lying)) + return + src.on = !( src.on ) + src.icon_state = text("e_chair[]", src.on) + src.overl.icon_state = text("e_chairo[]", src.on) + return + +/obj/stool/chair/e_chair/proc/shock() + + if (!( src.on )) + return + if ( (src.last_time + 50) > world.time) + return + src.last_time = world.time + flick("e_chairs", src) + flick("e_chairos", src.overl) + for(var/mob/M in src.loc) + M.burn(7.5E7) + M << "\red You feel a deep shock curse through your body!" + sleep(1) + M.burn(7.5E7) + M.stunned = 600 + //Foreach goto(72) + for(var/mob/M in hearers(src, null)) + if (!( M.blinded )) + M << "\red The electric chair went off!" + else + M << "\red You hear a deep sharp shock." + //Foreach goto(142) + return + +/obj/stool/chair/ex_act(severity) + + if (severity < 4) + for(var/mob/M in src.loc) + M.buckled = null + //Foreach goto(28) + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/stool/chair/New() + + src.verbs -= /atom/movable/verb/pull + if (src.dir == NORTH) + src.layer = FLY_LAYER + ..() + return + +/obj/stool/chair/Del() + + for(var/mob/M in src.loc) + if (M.buckled == src) + M.buckled = null + //Foreach goto(17) + ..() + return + +/obj/stool/chair/verb/rotate() + set src in oview(1) + + src.dir = turn(src.dir, 90) + if (src.dir == NORTH) + src.layer = FLY_LAYER + else + src.layer = OBJ_LAYER + return + +/obj/stool/chair/MouseDrop_T(mob/M as mob, mob/user as mob) + + if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat)) + return + if (M == usr) + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] buckles in!", user) + //Foreach goto(83) + else + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] is buckled in by []!", M, user) + //Foreach goto(137) + M.anchored = 1 + M.buckled = src + M.loc = src.loc + src.add_fingerprint(user) + return + +/obj/stool/chair/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/stool/chair/attack_hand(mob/user as mob) + + for(var/mob/M in src.loc) + if (M.buckled) + if (M != user) + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] is unbuckled by [].", M, user) + //Foreach goto(64) + else + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unbuckles.", M) + //Foreach goto(123) + M.anchored = 0 + M.buckled = null + src.add_fingerprint(user) + //Foreach goto(17) + return + +/obj/grille/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + src.health -= 11 + healthcheck() + else + return + +/obj/grille/meteorhit(var/obj/M) // RM was meteorhit(void) + + if (M.icon_state == "flaming") // RM was src,icon_state + src.health -= 3 // fixed bug with grilles not being damaged by flaming meteors + healthcheck() + return + +/obj/grille/CheckPass(var/obj/B as obj) + + if ((istype(B, /obj/effects) || istype(B, /obj/item/weapon/dummy) || istype(B, /obj/beam) || istype(B, /obj/meteor/small))) + return 1 + else + if (istype(B, /obj/bullet)) + return prob(30) + else + return !( src.density ) + return + +/obj/grille/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.health = 0 + else + if ((istype(W, /obj/item/weapon/screwdriver) && (istype(src.loc, /turf/station) || src.anchored))) + src.anchored = !( src.anchored ) + user << (src.anchored ? "You have fastened the grille to the floor." : "You have unfastened the grill.") + else + switch(W.damtype) + if("fire") + src.health -= W.force + if("brute") + src.health -= W.force * 0.1 + else + src.healthcheck() + ..() + return + +/obj/grille/proc/healthcheck() + + if (src.health <= 0) + if (!( src.destroyed )) + src.icon_state = "brokengrille" + src.density = 0 + src.destroyed = 1 + new /obj/item/weapon/rods( src.loc ) + else + if (src.health <= -10.0) + new /obj/item/weapon/rods( src.loc ) + //SN src = null + del(src) + return + return + +/obj/window/las_act(flag) + + if (flag == "bullet") + new /obj/item/weapon/shard( src.loc ) + //SN src = null + del(src) + return + return + +/obj/window/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + new /obj/item/weapon/shard( src.loc ) + //SN src = null + del(src) + return + if(3.0) + if (prob(50)) + new /obj/item/weapon/shard( src.loc ) + //SN src = null + del(src) + return + else + return + +/obj/window/CheckPass(atom/movable/O as mob|obj, target as turf) + + if (istype(O, /obj/beam)) + return 1 + if (src.dir == SOUTHWEST) + return 0 + else + if (get_dir(target, O.loc) == src.dir) + return 0 + return 1 + return + +/obj/window/CheckExit(atom/movable/O as mob|obj, target as turf) + + if (istype(O, /obj/beam)) + return 1 + if (get_dir(O.loc, target) == src.dir) + return 0 + return 1 + return + +/obj/window/meteorhit() + + //*****RM + //world << "glass at [x],[y],[z] Mhit" + src.health = 0 + new /obj/item/weapon/shard( src.loc ) + + ////SN src = null + del(src) + return + + +/obj/window/hitby(obj/item/weapon/W as obj) + + ..() + src.health = max(0, src.health - W.throwforce) + if (src.health <= 7) + src.anchored = 0 + step(src, get_dir(W, src)) + if (src.health <= 0) + new /obj/item/weapon/shard( src.loc ) + //SN src = null + del(src) + return + ..() + return + +/obj/window/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + src.anchored = !( src.anchored ) + user << (src.anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") + else + src.health = max(0, src.health - W.force) + if (src.health <= 7) + src.anchored = 0 + step(src, get_dir(user, src)) + if (src.health <= 0) + if (src.dir == SOUTHWEST) + var/index = null + index = 0 + while(index < 2) + new /obj/item/weapon/shard( src.loc ) + index++ + else + new /obj/item/weapon/shard( src.loc ) + //SN src = null + del(src) + return + ..() + return + +/obj/window/verb/rotate() + set src in oview(1) + + if (src.anchored) + usr << "It is fastened to the floor; therefore, you can't rotate it!" + return 0 + else + if (src.dir == SOUTHWEST) + usr << "You can't rotate this! " + return 0 + src.dir = turn(src.dir, 90) + src.ini_dir = src.dir + return + +/obj/window/New() + + ..() + src.ini_dir = src.dir + return + +/obj/window/Move() + + ..() + src.dir = src.ini_dir + return + +/atom/proc/meteorhit(obj/meteor as obj) + + return + +/atom/proc/allow_drop() + + return 1 + +/atom/proc/CheckPass(atom/O as mob|obj|turf|area) + + return (!( O.density ) || !( src.density )) + +/atom/proc/CheckExit() + + return 1 + +/atom/proc/HasEntered(atom/movable/AM as mob|obj) + + return + +/atom/proc/HasProximity(atom/movable/AM as mob|obj) + + return + +/atom/movable/overlay/attackby(a, b) + + if (src.master) + return src.master.attackby(a, b) + return + +/atom/movable/overlay/attack_paw(a, b, c) + + if (src.master) + return src.master.attack_paw(a, b, c) + return + +/atom/movable/overlay/attack_hand(a, b, c) + + if (src.master) + return src.master.attack_hand(a, b, c) + return + +/atom/movable/overlay/New() + + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(17) + return + +/turf/CheckPass(atom/O as mob|obj|turf|area) + + return !( src.density ) + return + +/turf/New() + + ..() + for(var/atom/movable/AM as mob|obj in src) + spawn( 0 ) + src.Entered(AM) + return + //Foreach goto(19) + return + +/turf/Enter(atom/movable/O as mob|obj, atom/forget as mob|obj|turf|area) + + if (!( isturf(O.loc) )) + return 1 + for(var/atom/A as mob|obj|turf|area in O.loc) + if ((!( A.CheckExit(O, src) ) && O != A && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(34) + for(var/atom/A as mob|obj|turf|area in src) + if ((A.flags & 512 && get_dir(A, O) & A.dir)) + if ((!( A.CheckPass(O, src) ) && A != src && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(127) + for(var/atom/A as mob|obj|turf|area in src) + if ((!( A.CheckPass(O, src) ) && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(244) + if (src != forget) + if (!( src.CheckPass(O, src) )) + if (O) + O.Bump(src, 1) + return 0 + return 1 + return + +/turf/Entered(atom/movable/M as mob|obj) + + ..() + for(var/atom/A as mob|obj|turf|area in src) + spawn( 0 ) + if ((A && M)) + A.HasEntered(M, 1) + return + //Foreach goto(19) + for(var/atom/A as mob|obj|turf|area in range(1, null)) + spawn( 0 ) + if ((A && M)) + A.HasProximity(M, 1) + return + //Foreach goto(86) + return + +/turf/station/r_wall/updatecell() + + if (src.state == 2) + return + else + ..() + return + +/turf/station/r_wall/proc/update() + + if (src.d_state > 6) + src.d_state = 0 + src.state = 1 + if (src.state == 2) + src.icon_state = text("r_wall[]", (src.d_state > 0 ? text("-[]", src.d_state) : null)) + src.opacity = 1 + src.density = 1 + src.updatecell = 0 + else + src.icon_state = "r_girder" + src.opacity = 0 + src.density = 1 + src.updatecell = 1 + return + +/turf/station/r_wall/unburn() + + src.update() + return + +/turf/station/r_wall/meteorhit(obj/M as obj) + + if ((M.icon_state == "flaming" && prob(30))) + if (src.state == 2) + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + update() + else + if ((prob(20) && src.state == 1)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + return + +/turf/station/r_wall/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(75)) + src.opacity = 0 + src.updatecell = 1 + src.state = 1 + src.intact = 0 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + else + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + if(3.0) + if (prob(15)) + src.opacity = 0 + src.updatecell = 1 + src.intact = 0 + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + update() + else + return + +/turf/station/r_wall/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (src.state == 2) + if (istype(W, /obj/item/weapon/wrench)) + if (src.d_state == 4) + var/turf/T = user.loc + user << "\blue Cutting support rods." + sleep(40) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 5 + else + if (istype(W, /obj/item/weapon/wirecutters)) + if (src.d_state == 0) + src.d_state = 1 + new /obj/item/weapon/rods( src ) + else + if (istype(W, /obj/item/weapon/weldingtool)) + if (src.d_state == 2) + var/turf/T = user.loc + user << "\blue Slicing metal cover." + sleep(60) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 3 + else + if (src.d_state == 5) + var/turf/T = user.loc + user << "\blue Removing support rods." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 6 + new /obj/item/weapon/rods( src ) + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.d_state == 1) + var/turf/T = user.loc + user << "\blue Removing support lines." + sleep(40) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 2 + else + if (istype(W, /obj/item/weapon/crowbar)) + if (src.d_state == 3) + var/turf/T = user.loc + user << "\blue Prying cover off." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 4 + else + if (src.d_state == 6) + var/turf/T = user.loc + user << "\blue Prying outer sheath off." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 7 + new /obj/item/weapon/sheet/metal( src ) + else + if (istype(W, /obj/item/weapon/sheet/metal)) + var/turf/T = user.loc + user << "\blue Repairing wall." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ) && src.state == 2)) + src.d_state = 0 + if (W:amount > 1) + W:amount-- + else + //W = null + del(W) + if (src.state == 1) + if (istype(W, /obj/item/weapon/wrench)) + user << "\blue Now dismantling girders." + var/turf/T = user.loc + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + else + if (istype(W, /obj/item/weapon/sheet/r_metal)) + src.state = 2 + src.d_state = 0 + //W = null + del(W) + src.update() + return + +/turf/station/wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall." + return + +/turf/station/wall/updatecell() + + if (src.state == 2) + return + else + ..() + return + +/turf/station/wall/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + src.opacity = 0 + src.updatecell = 1 + src.state = 1 + src.intact = 0 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + else + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + if(3.0) + if (prob(25)) + src.opacity = 0 + src.updatecell = 1 + src.intact = 0 + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + else + return + +/turf/station/wall/unburn() + + if (src.state == 1) + src.icon_state = "girder" + else + src.icon_state = "" + return + +/turf/station/wall/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/turf/station/wall/attack_hand(mob/user as mob) + + user << "\blue You push the wall but nothing happens!" + src.add_fingerprint(user) + return + +/turf/station/wall/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if ((istype(W, /obj/item/weapon/wrench) && src.state == 1)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now dissembling the reinforced girders. Please stand still. This is a long process." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && src.state == 1 && user.equipped() == W)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + else + if ((istype(W, /obj/item/weapon/screwdriver) && src.state == 1)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now dislodging girders." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && src.state == 1 && user.equipped() == W)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/d_girders( F ) + new /obj/item/weapon/sheet/metal( F ) + else + if ((istype(W, /obj/item/weapon/sheet/r_metal) && src.state == 1)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now reinforcing girders." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && src.state == 1 && user.equipped() == W)) + src.state = 0 + var/turf/station/r_wall/F = new /turf/station/r_wall( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + F.icon_state = "r_girder" + F.state = 1 + F.opacity = 0 + F.updatecell = 1 + else + if ((istype(W, /obj/item/weapon/weldingtool) && src.state == 2)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + var/obj/item/weapon/weldingtool/WT = W + if (WT.weldfuel < 5) + user << "\blue You need more welding fuel to complete this task." + return + WT.weldfuel -= 5 + user << "\blue Now dissembling the outer wall plating. Please stand still." + sleep(50) + if ((user.loc == T && src.state == 2 && user.equipped() == W)) + src.opacity = 0 + src.updatecell = 1 + src.state = 1 + src.intact = 0 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + return + +/turf/station/wall/meteorhit(obj/M as obj) + + if (M.icon_state == "flaming") + src.icon_state = "girder" + if (src.state == 2) + src.state = 1 + src.opacity = 0 + src.updatecell = 1 + src.firelevel = 11 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + else + if ((prob(20) && src.state == 1)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + return + +/turf/station/floor/CheckPass(atom/movable/O as mob|obj) + + if ((istype(O, /obj/machinery/pod) && !( src.burnt ))) + if (!( locate(/obj/machinery/mass_driver, src) )) + return 0 + return 1 + return + +/turf/station/floor/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + src.icon_state = "burning" + src.burnt = 1 + src.health = 30 + src.intact = 0 + src.firelevel = 1800000.0 + if(3.0) + if (prob(50)) + src.burnt = 1 + src.health = 1 + src.intact = 0 + src.icon_state = "Floor1" + else + return + +/turf/station/floor/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/turf/station/floor/attack_hand(mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/station/floor/attackby(obj/item/weapon/C as obj, mob/user as mob) + + if (istype(C, /obj/item/weapon/crowbar)) + if (src.health > 100) + src.health = 100 + src.burnt = 1 + src.intact = 0 + new /obj/item/weapon/tile( src ) + src.icon_state = text("Floor[]", (src.burnt ? "1" : "")) + else + if (istype(C, /obj/item/weapon/tile)) + if (src.health <= 100) + src.intact = 1 + src.health = 150 + src.burnt = 0 + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + else + src.icon_state = "Floor" + var/obj/item/weapon/tile/T = C + T.amount-- + if (T.amount < 1) + //T = null + del(T) + return + +/turf/station/floor/unburn() + + src.icon_state = text("Floor[]", (src.burnt ? "1" : "")) + return + +/turf/station/floor/updatecell() + + ..() + if (src.checkfire) + if (src.firelevel >= 2700000.0) + src.health-- + if (src.health <= 0) + src.burnt = 1 + src.intact = 0 + //SN src = null + del(src) + return + else + if (src.health <= 100) + src.burnt = 1 + src.intact = 0 + return + +/turf/station/floor/plasma_test/updatecell() + + ..() + src.poison = 7.5E7 + res_vars() + return + +/area/New() + + ..() + src.icon = 'alert.dmi' + src.layer = 10 + return + +/area/vehicles/New() + + ..() + sleep(1) + var/obj/shut_controller/S = new /obj/shut_controller( ) + shuttles += S + for(var/obj/move/O in src) + S.parts += O + O.master = S + //Foreach goto(42) + spawn( 5 ) + world << "Vehicle loaded!" + return + return + +/area/proc/firealert() + + if (!( src.fire )) + if ((src.icon_state == "red" || src.icon_state == "blue-red")) + src.icon_state = "blue-red" + else + src.icon_state = "blue" + src.fire = 1 + for(var/obj/machinery/door/firedoor/D in src) + if (!( D.density )) + spawn( 0 ) + D.closefire() + return + //Foreach goto(74) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/demo2.dm b/ss13-40.93.2-base/ss13-40.93.2-base/demo2.dm new file mode 100644 index 0000000..2c70e27 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/demo2.dm @@ -0,0 +1,581 @@ + +/obj/machinery/computer/atmosphere/proc/returnarea() + + return + +/obj/machinery/computer/atmosphere/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/atmosphere/siphonswitch/returnarea() + + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + return T.loc.contents + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/siphon_all() + set src in oview(1) + + if (usr.stat) + return + usr << "Starting all siphon systems." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(1, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/stop_all() + set src in oview(1) + + if (usr.stat) + return + usr << "Stopping all siphon systems." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(0, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/auto_on() + set src in oview(1) + + if (usr.stat) + return + usr << "Starting automatic air control systems." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(0, 1) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/release_scrubbers() + set src in oview(1) + + if (usr.stat) + return + usr << "Releasing all scrubber toxins." + for(var/obj/machinery/atmoalter/siphs/scrubbers/S in src.returnarea()) + S.reset(-1.0, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/release_all() + + if (usr.stat) + return + usr << "REleasing all stored air." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(-1.0, 0) + //Foreach goto(37) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/returnarea() + + return world + return + +/obj/machinery/atmoalter/heater/proc/setstate() + + if (src.holding) + src.icon_state = "heater1-h" + else + src.icon_state = "heater1" + return + +/obj/machinery/atmoalter/heater/process() + + var/turf/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + if (src.h_status) + var/t1 = src.gas.tot_gas() + if ((t1 > 0 && src.gas.temperature < src.h_tar)) + var/increase = 1500000.0 / t1 + var/n_temp = src.gas.temperature + increase + src.gas.temperature = min(n_temp, src.h_tar) + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + src.t_status = 3 + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + src.t_status = 3 + else + if (src.c_status == 1) + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + else + src.c_status = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(432) + src.setstate() + return + +/obj/machinery/atmoalter/heater/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/heater/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/heater/attack_hand(var/mob/user as mob) + + user.machine = src + var/tt + switch(src.t_status) + if(1.0) + tt = text("Releasing Siphon Stop", src, src) + if(2.0) + tt = text("Release SiphoningStop", src, src) + if(3.0) + tt = text("Release Siphon Stopped", src, src) + else + var/ht = null + if (src.h_status) + ht = text("Heating Stop", src) + else + ht = text("Heat Stopped", src) + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/dat = text("Canister Valves
\nContains/Capacity [] / []
\nUpper Valve Status: [][]
\n\tM - - - - [] + + + + M
\nHeater Status: [] - []
\n\tTrg Tmp: - - - [] + + +
\n
\nPipe Valve Status: []
\n\tM - - - - [] + + + + M
\n
\nClose
\n
", src.gas.tot_gas(), src.maximum, tt, (src.holding ? text("
Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ht, (src.gas.tot_gas() ? src.gas.temperature : 20), src, src, src, src.h_tar, src, src, src, ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=canister;size=600x300") + return + +/obj/machinery/atmoalter/heater/Topic(href, href_list) + + if (usr.stat) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + src.t_status = 2 + if(3.0) + src.t_status = 3 + else + else + if (href_list["h"]) + var/h = text2num(href_list["h"]) + if (h == 1) + src.h_status = 1 + else + src.h_status = null + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["ht"]) + var/cp = text2num(href_list["ht"]) + src.h_tar += cp + src.h_tar = min(max(round(src.h_tar), 0), 500) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if ((cp == 1 && src.holding)) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(515) + src.add_fingerprint(usr) + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/heater/attackby(var/obj/W as obj, var/mob/user as mob) + + if (istype(W, /obj/item/weapon/tank)) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + return + +/obj/machinery/atmoalter/canister/proc/update_icon() + + var/air_in = src.gas.tot_gas() + if (src.destroyed) + src.icon_state = text("[]-1", src.color) + else + if (air_in < 10) + src.icon_state = text("0[][]", src.color, (src.holding ? "-T" : null)) + else + if (air_in < (src.gas.maximum * 0.2)) + src.icon_state = text("1[][]", src.color, (src.holding ? "-T" : null)) + else + if (air_in < (src.maximum * 0.6)) + src.icon_state = text("2[][]", src.color, (src.holding ? "-T" : null)) + else + src.icon_state = text("3[][]", src.color, (src.holding ? "-T" : null)) + return + +/obj/machinery/atmoalter/canister/proc/healthcheck() + + if (src.health <= 10) + var/T = src.loc + if (!( istype(T, /turf) )) + return + src.gas.turf_add(T, -1.0) + src.destroyed = 1 + src.density = 0 + update_icon() + if (src.holding) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + return + +/obj/machinery/atmoalter/canister/process() + + if (src.destroyed) + return + var/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + src.update_icon() + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + src.t_status = 3 + src.update_icon() + else + if (src.c_status == 1) + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + src.update_icon() + else + src.c_status = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(450) + src.update_icon() + return + +/obj/machinery/atmoalter/canister/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/canister/burn(fi_amount) + + src.health -= 1 + healthcheck() + return + +/obj/machinery/atmoalter/canister/meteorhit(var/obj/O as obj) + + src.health = 0 + healthcheck() + return + +/obj/machinery/atmoalter/canister/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/canister/attack_hand(var/mob/user as mob) + + if (src.destroyed) + return + user.machine = src + var/tt + switch(src.t_status) + if(1.0) + tt = text("Releasing Siphon (only tank) Stop", src, src) + if(2.0) + tt = text("Release Siphoning (only tank) Stop", src, src) + if(3.0) + tt = text("Release Siphon (only tank) Stopped", src, src) + else + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/dat = text({"Canister Valves
+Contains/Capacity [] / []
+Upper Valve Status: []
+\t[]
+\tM - - - - [] + + + + M
+Pipe Valve Status: []
+\tM - - - - [] + + + + M
+
+Close
+
"}, num2text(src.gas.tot_gas(), 20), num2text(src.maximum, 20), tt, (src.holding ? text("Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=canister;size=600x300") + return + +/obj/machinery/atmoalter/canister/Topic(href, href_list) + + if (usr.stat) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + if (src.holding) + src.t_status = 2 + else + src.t_status = 3 + if(3.0) + src.t_status = 3 + else + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if ((cp == 1 && src.holding)) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(423) + src.add_fingerprint(usr) + update_icon() + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + + if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + update_icon() + else + if ((istype(W, /obj/item/weapon/screwdriver) && !( src.destroyed ))) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + switch(W.damtype) + if("fire") + src.health -= W.force + if("brute") + src.health -= W.force * 0.5 + else + src.healthcheck() + ..() + return + +/obj/machinery/atmoalter/canister/las_act(flag) + + if (flag == "bullet") + src.health = 0 + spawn( 0 ) + healthcheck() + return + if (flag) + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + else + T.firelevel = T.poison + else + src.health = 0 + spawn( 0 ) + healthcheck() + return + return + +/obj/machinery/atmoalter/canister/poisoncanister/New() + + ..() + src.update_icon() + src.gas.plasma = 9.0E7 + return + +/obj/machinery/atmoalter/canister/oxygencanister/New() + + ..() + src.gas.oxygen = 1.0E8 + return + +/obj/machinery/atmoalter/canister/anesthcanister/New() + + ..() + src.gas.sl_gas = 1.0E8 + return + +/obj/machinery/atmoalter/canister/n2canister/New() + + ..() + src.gas.n2 = 1.0E8 + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/dna.dm b/ss13-40.93.2-base/ss13-40.93.2-base/dna.dm new file mode 100644 index 0000000..7bd06d7 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/dna.dm @@ -0,0 +1,939 @@ + +/proc/scram(n) + + var/t = "" + var/p = null + p = 1 + while(p <= n) + t = text("[][]", t, rand(1, 9)) + p++ + return t + return + +/obj/machinery/computer/dna/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/dna/attack_hand(mob/user as mob) + + user.machine = src + if (istype(user, /mob/human)) + var/dat = text("Please Insert the cards into the slots
\n\t\t\t\tFunction Disk: []
\n\t\t\t\tTarget Disk: []
\n\t\t\t\tAux. Data Disk: []
\n\t\t\t\t\t(Not always used!)
\n\t\t\t\t[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("Execute Function", src) : "No function disk inserted!")) + if (src.temp) + dat = text("[]

Clear Message", src.temp, src) + user << browse(dat, "window=dna_comp") + else + var/dat = text("[]
\n\t\t\t\t[] []
\n\t\t\t\t[] []
\n\t\t\t\t[] []
\n\t\t\t\t\t(Not always used!)
\n\t\t\t\t[]", stars("Please Insert the cards into the slots"), stars("Function Disk:"), src, (src.scan ? text("[]", src.scan.name) : "----------"), stars("Target Disk:"), src, (src.modify ? text("[]", src.modify.name) : "----------"), stars("Aux. Data Disk:"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("[]", src, stars("Execute Function")) : stars("No function disk inserted!"))) + if (src.temp) + dat = text("[]

[]", stars(src.temp), src, stars("Clear Message")) + user << browse(dat, "window=dna_comp") + return + +/obj/machinery/computer/dna/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["modify"]) + if (src.modify) + src.modify.loc = src.loc + src.modify = null + src.mode = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.modify = I + src.mode = null + if (href_list["modify2"]) + if (src.modify2) + src.modify2.loc = src.loc + src.modify2 = null + src.mode = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.modify2 = I + src.mode = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + src.mode = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.scan = I + src.mode = null + if (href_list["clear"]) + src.temp = null + if (href_list["execute"]) + if ((src.scan && src.scan.function)) + switch(src.scan.function) + if("data_mutate") + if (src.modify) + if (!( findtext(src.scan.data, "-", 1, null) )) + if ((src.modify.data && src.scan.data && length(src.modify.data) >= length(src.scan.data))) + src.modify.data = text("[][]", src.scan.data, (length(src.modify.data) > length(src.scan.data) ? copytext(src.modify.data, length(src.scan.data) + 1, length(src.modify.data) + 1) : null)) + else + src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" + else + var/d = findtext(src.modify.data, "-", 1, null) + var/t = copytext(src.modify.data, d + 1, length(src.modify.data) + 1) + d = text2num(copytext(1, d, null)) + if ((d && t && src.modify.data && src.scan.data && length(src.modify.data) >= (length(t) + d - 1) )) + src.modify.data = text("[][][]", copytext(src.modify.data, 1, d), t, (length(src.modify.data) > length(t) + d ? copytext(src.modify.data, length(t) + d, length(src.modify.data) + 1) : null)) + else + src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("dna_seq") + src.temp = "DNA Systems Help:\nHuman DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (28 chromosomes)\n\t\t5BDFE293BA5500F9FFFD500AAFFE\n\tStructural Enzymes:\n\t\tCDE375C9A6C25A7DBDA50EC05AC6CEB63\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\t493DB249EB6D13236100A37000800AB71\n\tSpecies/Genus Classification: Homo Sapien\n\nMonkey DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (16 chromosomes)\n\t\t2B6696D2B127E5A4\n\tStructural Enzymes:\n\t\tCDEAF5B90AADBC6BA8033DB0A7FD613FA\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\tC8FFFE7EC09D80AEDEDB9A5A0B4085B61\n\tSpecies/Genus Classification: Generic Monkey\n>" + if("dna_help") + src.temp = "DNA Systems Help:\nThe DNA systems consists 3 systems.\nI. DNA Scanner/Implanter - This system is slightly advanced to use. It accepts\n\t1 disk. Before you wish to run a function/program you must implant the\n\tdisk data into the temporary memory. Note that once this is done the disk can\n\tbe removed to place a data disk in.\nII. DNA computer - This is a simple yet fast computer that basically operates on data.\nIII. Restructurer - This device reorganizes the anatomical structure of the subject\n\taccording to the DNA sequences. Please note that it is illegal to perform a\n\ttransfer from one species to or from the Homo sapiens species but\n\thuman to human is acceptable under UNSD guidlines.\n\tNote: This machine is programmed to operate on specific preprogrammed species with\n\tspecialized anatomical blueprints hard coded into its databanks. It cannot operate\n\ton other species. (Current: Human, Monkey)\n\nData Disks:\n\tThese run on 2 (or 3) types: DNA scanner program disks and data modification\nfunctions (and disk modification functions)\n\nDisk-Copy\n\tThis erases the target disk and completely copies the data from the aux. disk.\nDisk-Erase\n\tThis erases everything on the target disk.\nData-Clear\n\tThis erases (clears) only the data.\n\nData-Trunicate\n\tThis removes data from the target disk (parameters gathered from data slot on target\n\tdisk). This fuction has 4 modes (a,b,c,default) defined by this way. (mode id)(#)\n\ta - This cuts # data from the end. (ex a1 on ABCD = ABC)\n\tb - This cuts # data from the beginning. (ex b1 on ABCD = BCD)\n\tc - This limits the data from the end. (ex c1 on ABCD = A)\n\tdefault - This limits the data from the end. (ex 1 on ABCD = D)\nData-Add\n\tThis adds thedata on the aux. disk to the data on the target disk.\nData-Sramble\n\tThis scrambles the data on the target disk. The length is equal to\n\tthe length of the original data.\nData-Input\n\tThis lets you input data into the data slot of any data disk.\n\tNote: This doesn't work only on storage.\nData-Mutate\n\tThis basically inserts text. You follow this format:\n\tpos-text (or just text for automatic pos 1)\n\tie 2-IVE on FOUR yields FIVE\n" + if("data_add") + if (src.modify) + if (src.modify2) + if ((src.modify.data && src.modify2.data)) + src.modify.data += src.modify2 + src.temp = text("Done!
New Data:
[]", src.modify.data) + else + src.temp = "Cannot read data! (may be null)" + else + src.temp = "Disk Failure: Cannot read aux. data disk!" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_scramble") + if (src.modify) + if (length(text("[]", src.modify.data)) >= 1) + src.modify.data = scram(length(text("[]", src.modify.data))) + src.temp = text("Data scrambled: []", src.modify.data) + else + src.temp = "No data to scramble" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_input") + if (src.modify) + var/dat = input(usr, ">", text("[]", src.name), null) as text + var/s = src.scan + var/m = src.modify + if ((usr.stat || usr.restrained() || src.modify != m || src.scan != s)) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + src.modify.data = dat + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_copy") + if (src.modify) + if (src.modify2) + src.modify.function = src.modify2.function + src.modify.data = src.modify2.data + src.modify.special = src.modify2.special + src.temp = "All disk data/programs copied." + else + src.temp = "Disk Failure: Cannot read aux. data disk!" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_dis") + if (src.modify) + src.temp = text("Function: [][]
Data: []", src.modify.function, (src.modify.special ? text("-[]", src.modify.special) : null), src.modify.data) + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_erase") + if (src.modify) + src.modify.data = null + src.modify.function = "storage" + src.modify.special = null + src.temp = "All Disk contents deleted." + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_clear") + if (src.modify) + src.modify.data = null + src.temp = "Disk data cleared." + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_trun") + if (src.modify) + if ((src.modify.data && src.scan.data)) + var/l1 = length(src.modify.data) + var/l2 = max(round(text2num(src.scan.data)), 1) + switch(copytext(src.modify.data, 1, 2)) + if("a") + if (l1 > l2) + src.modify.data = copytext(src.modify.data, 1, (l1 - l2) + 1) + else + src.modify.data = "" + src.temp = text("Done!
New Data:
[]", src.modify.data) + if("b") + if (l1 > l2) + src.modify.data = copytext(src.modify.data, l2, l1 + 1) + else + src.modify.data = "" + src.temp = text("Done!
New Data:
[]", src.modify.data) + if("c") + if (l1 >= l2) + src.modify.data = copytext(src.modify.data, l1 - l2, l1 + 1) + src.temp = text("Done!
New Data:
[]", src.modify.data) + else + if (l1 >= l2) + src.modify.data = copytext(src.modify.data, 1, l2 + 1) + src.temp = text("Done!
New Data:
[]", src.modify.data) + else + src.temp = "Cannot read data! (may be null and note that function data slot is used instead of aux disk!!)" + else + src.temp = "Disk Failure: Cannot read target disk!" + else + else + src.temp = "System Failure: Cannot read disk function!" + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(1764) + return + +/obj/machinery/computer/dna/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/dna_scanner/allow_drop() + + return 0 + return + +/obj/machinery/dna_scanner/relaymove(mob/user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/dna_scanner/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/dna_scanner/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The scanner is already occupied!" + return + if (usr.abiotic()) + usr << "\blue Subject cannot have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "scanner_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/dna_scanner/attackby(obj/item/weapon/grab/G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The scanner is already occupied!" + return + if (G.affecting.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "scanner_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/dna_scanner/proc/go_out() + + if ((!( src.occupant ) || src.locked)) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(30) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "scanner_0" + return + +/obj/machinery/dna_scanner/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/machinery/scan_console/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/scan_console/New() + + ..() + spawn( 5 ) + src.connected = locate(/obj/machinery/dna_scanner, get_step(src, WEST)) + return + return + +/obj/machinery/scan_console/process() + + var/mob/M + if (!( src.status )) + return + if (!( src.func )) + src.temp = "No function loaded into memory core!" + src.status = null + if ((src.connected && src.connected.occupant)) + M = src.connected.occupant + if (src.status == "load") + src.prog_p1 = null + src.prog_p2 = null + src.prog_p3 = null + src.prog_p4 = null + switch(src.func) + if("dna_trun") + if (src.data) + src.prog_p1 = copytext(src.data, 1, 2) + src.prog_p2 = text2num(src.data) + src.prog_p3 = src.special + src.status = "dna_trun" + src.temp = "Executing trunication function on occupant." + else + src.temp = "No data implanted in core memory." + src.status = null + if("dna_scan") + if (src.special) + if (src.scan) + if (istype(M, /mob)) + switch(src.special) + if("UI") + src.temp = text("Scan Complete:
Data downloaded to disk!
Unique Identifier: []", M.primary.uni_identity) + src.scan.data = M.primary.uni_identity + if("SE") + src.temp = text("Scan Complete:
Data downloaded to disk!
Structural Enzymes: []", M.primary.struc_enzyme) + src.scan.data = M.primary.struc_enzyme + if("UE") + src.temp = text("Scan Complete:
Data downloaded to disk!
Used Enzynmes: []", M.primary.use_enzyme) + src.scan.data = M.primary.use_enzyme + if("SI") + src.temp = text("Scan Complete:
Data downloaded to disk!
Species Identifier: []", M.primary.spec_identity) + src.scan.data = M.primary.spec_identity + else + else + src.temp = "No occupant to scan!" + else + src.temp = "Error: No disk to upload data to." + else + src.temp = "Error: Function program errors." + src.status = null + if("dna_replace") + if ((src.data && src.special)) + src.prog_p1 = src.special + src.prog_p2 = src.data + src.status = "dna_replace" + src.temp = "Executing repalcement function on occupant." + else + src.temp = "Error: No DNA data loaded into core or function program errors." + src.status = null + if("dna_add") + if ((src.data && src.special)) + src.prog_p1 = src.special + src.prog_p2 = src.data + src.status = "dna_add" + src.temp = "Executing addition function on occupant." + else + src.temp = "Error: No DNA data loaded into core or function program errors." + src.status = null + else + src.temp = "Cannot execute program!" + src.status = null + else + if (src.status == "dna_trun") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p3) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + switch(src.prog_p1) + if("a") + src.prog_p4 = length(t) + if("b") + src.prog_p4 = 1 + else + else + if (src.prog_p1 == "a") + src.prog_p4-- + else + if (src.prog_p1 == "b") + src.prog_p4-- + switch(src.prog_p1) + if("a") + if (src.prog_p4 <= 0) + src.temp = "Trunication complete" + src.status = null + else + t = copytext(t, 1, length(t)) + src.temp = text("Trunicating []'s DNA sequence...
[]
Status: [] units left.

Emergency Abort", M.name, t, src.prog_p4, src) + if("b") + if (src.prog_p4 <= 0) + src.temp = "Trunication complete" + src.status = null + else + t = copytext(t, 2, length(t) + 1) + src.temp = text("Trunicating []'s DNA sequence...
[]
Status: [] units left.

Emergency Abort", M.name, t, src.prog_p4, src) + if("c") + if (length(t) <= src.prog_p2) + src.temp = "Limitation complete" + src.status = null + else + t = copytext(t, 1, length(t)) + src.temp = text("Limiting []'s DNA sequence...
[]
Status: [] units converting to [] units.

Emergency Abort", M.name, t, length(t), src.prog_p2, src) + else + if (length(t) <= src.prog_p2) + src.temp = "Limitation complete" + src.status = null + else + t = copytext(t, 2, length(t) + 1) + src.temp = text("Limiting []'s DNA sequence...
[]
Status: [] units converting to [] units.

Emergency Abort", M.name, t, length(t), src.prog_p2, src) + switch(src.prog_p3) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + src.temp = "Process terminated due to lack of occupant in DNA chamber." + src.status = null + else + if (src.status == "dna_replace") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p1) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + src.prog_p4 = 1 + else + src.prog_p4++ + if ((src.prog_p4 > length(t) || src.prog_p4 > length(src.prog_p2))) + src.temp = "Replacement complete" + src.status = null + else + t = text("[][][]", copytext(t, 1, src.prog_p4), copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1), (src.prog_p4 < length(t) ? copytext(t, src.prog_p4 + 1, length(t) + 1) : null)) + src.temp = text("Replacing []'s DNA sequence...
[]
Target: []
Status: At position []

Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) + switch(src.prog_p1) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + src.temp = "Process terminated due to lack of occupant in DNA chamber." + src.status = null + else + if (src.status == "dna_add") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p1) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + src.prog_p4 = 1 + else + src.prog_p4++ + if (src.prog_p4 > length(src.prog_p2)) + src.temp = "Addition complete" + src.status = null + else + t = text("[][]", t, copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1)) + src.temp = text("Adding to []'s DNA sequence...
[]
Adding: []
Position: []

Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) + switch(src.prog_p1) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + src.temp = "Process terminated due to lack of occupant in DNA chamber." + src.status = null + else + src.status = null + src.temp = "Unknown system error." + for(var/mob/O in viewers(1, src)) + if ((O.client && O.machine == src)) + src.attack_hand(O) + //Foreach goto(1755) + return + +/obj/machinery/scan_console/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/scan_console/attack_hand(user as mob) + + var/dat + if (src.temp) + dat = text("[]

Clear Message", src.temp, src) + else + if (src.connected) + var/mob/occupant = src.connected.occupant + dat = "Occupant Statistics:
" + if (occupant) + var/t1 + switch(occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + else + t1 = "*dead*" + dat += text("[]\tHealth %: [] ([])


", (occupant.health > 50 ? "" : ""), occupant.health, t1) + else + dat += "The scanner is empty.
" + if (!( src.connected.locked )) + dat += text("Lock (Unlocked)
", src) + else + dat += text("Unlock (Locked)
", src) + dat += text("Disk: []
\n[]
\n[]
", src, (src.scan ? text("[]", src.scan.name) : "----------"), (src.scan ? text("Upload Data", src) : "No disk to upload"), ((src.data || src.func || src.special) ? text("Clear Data
Execute Data
Function Type: [][]
Data: []", src, src, src.func, (src.special ? text("-[]", src.special) : null), src.data) : "No data uploaded")) + dat += text("

Close", user) + user << browse(dat, "window=scanner;size=400x500") + return + +/obj/machinery/scan_console/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["locked"]) + if ((src.connected && src.connected.occupant)) + src.connected.locked = !( src.connected.locked ) + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.scan = I + if (href_list["u_dat"]) + if ((src.scan && !( src.status ))) + if ((src.scan.function && src.scan.function != "storage")) + src.func = src.scan.function + src.special = src.scan.special + if (src.scan.data) + src.data = src.scan.data + else + src.temp = "No disk found or core data access lock out!" + if (href_list["c_dat"]) + if (!( src.status )) + src.func = null + src.data = null + src.special = null + else + src.temp = "No disk found or core data access lock out!" + if (href_list["clear"]) + src.temp = null + if (href_list["abort"]) + src.status = null + if (href_list["e_dat"]) + if (!( src.status )) + src.status = "load" + src.temp = "Loading..." + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(484) + return + +/obj/machinery/restruct/allow_drop() + + return 0 + return + +/obj/machinery/restruct/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/restruct/verb/operate() + set src in oview(1) + + src.add_fingerprint(usr) + if ((src.occupant && src.occupant.primary)) + switch(src.occupant.primary.spec_identity) + if("5BDFE293BA5500F9FFFD500AAFFE") + if (!( istype(src.occupant, /mob/human) )) + for(var/obj/O in src.occupant) + //O = null + del(O) + //Foreach goto(78) + var/mob/human/O = new /mob/human( src ) + var/mob/M = src.occupant + O.start = 1 + O.primary = M.primary + M.primary = null + var/t1 = hex2num(copytext(O.primary.uni_identity, 25, 28)) + if (t1 < 125) + O.gender = "male" + else + O.gender = "female" + M << "Genetic Transversal Complete!" + if (M.client) + M << "Transferring..." + M.client.mob = O + O << "Neural Sequencing Complete!" + O.loc = src + src.occupant = O + //M = null + del(M) + src.occupant = O + src.occupant << "Done!" + if("2B6696D2B127E5A4") + if (!( istype(src.occupant, /mob/monkey) )) + for(var/obj/O in src.occupant) + //O = null + del(O) + //Foreach goto(337) + var/mob/monkey/O = new /mob/monkey( src ) + var/mob/M = src.occupant + O.start = 1 + O.primary = M.primary + M.primary = null + M << "Genetic Transversal Complete!" + if (M.client) + M << "Transferring..." + M.client.mob = O + O << "Neural Sequencing Complete!" + O.loc = src + O << "Genetic Transversal Complete!" + src.occupant = O + //M = null + del(M) + O.name = text("monkey ([])", copytext(md5(src.occupant.primary.uni_identity), 2, 6)) + src.occupant << "Done!" + else + if (istype(src.occupant, /mob/human)) + var/mob/human/H = src.occupant + if (reg_dna[text("[]", H.primary.uni_identity)]) + H.rname = reg_dna[text("[]", H.primary.uni_identity)] + else + if (findname("Unknown")) + var/counter = 1 + while(findname(text("Unknown #[]", counter))) + counter++ + H.rname = text("Unknown #[]", counter) + else + H.rname = "Unknown" + reg_dna[text("[]", H.primary.uni_identity)] = H.rname + H << text("\red Your name is now [].", H.rname) + var/speak = (length(H.primary.struc_enzyme) >= 25 ? hex2num(copytext(H.primary.struc_enzyme, 22, 25)) : 9999) + var/ears = (length(H.primary.struc_enzyme) >= 10 ? hex2num(copytext(H.primary.struc_enzyme, 7, 10)) : 9999) + var/vision = (length(H.primary.struc_enzyme) >= 16 ? hex2num(copytext(H.primary.struc_enzyme, 13, 16)) : 1) + var/mental1 = (length(H.primary.struc_enzyme) >= 31 ? hex2num(copytext(H.primary.struc_enzyme, 28, 31)) : 1) + var/mental2 = (length(H.primary.struc_enzyme) >= 28 ? hex2num(copytext(H.primary.struc_enzyme, 25, 28)) : 1) + var/speak2 = (length(H.primary.struc_enzyme) >= 22 ? hex2num(copytext(H.primary.struc_enzyme, 19, 22)) : 1) + H.sdisabilities = 0 + H.disabilities = 0 + if (speak < 3776) + H.disabilities = H.disabilities | 4 + else + if (speak > 3776) + H.sdisabilities = H.sdisabilities | 2 + if (speak2 < 2640) + H.disabilities = H.disabilities | 16 + if (ears > 3226) + H.sdisabilities = H.sdisabilities | 4 + if (vision < 1447) + H.sdisabilities = H.sdisabilities | 1 + else + if (vision > 1447) + H.disabilities = H.disabilities | 1 + if (mental1 < 1742) + H.disabilities = H.disabilities | 2 + if (mental2 < 1452) + H.disabilities = H.disabilities | 8 + var/t1 = null + if (length(H.primary.uni_identity) >= 20) + t1 = copytext(H.primary.uni_identity, 19, 21) + if (hex2num(t1) > 127) + H.gender = "female" + else + H.gender = "male" + else + H.gender = "neuter" + if (length(H.primary.uni_identity) >= 18) + t1 = copytext(H.primary.uni_identity, 17, 19) + H.ns_tone = hex2num(t1) + H.ns_tone = -H.ns_tone + 35 + else + H.ns_tone = 1 + H.ns_tone = -H.ns_tone + 35 + if (length(H.primary.uni_identity) >= 16) + t1 = copytext(H.primary.uni_identity, 15, 17) + H.b_eyes = hex2num(t1) + else + H.b_eyes = 255 + if (length(H.primary.uni_identity) >= 14) + t1 = copytext(H.primary.uni_identity, 13, 15) + H.g_eyes = hex2num(t1) + else + H.g_eyes = 255 + if (length(H.primary.uni_identity) >= 12) + t1 = copytext(H.primary.uni_identity, 11, 13) + H.r_eyes = hex2num(t1) + else + H.r_eyes = 255 + if (length(H.primary.uni_identity) >= 10) + t1 = copytext(H.primary.uni_identity, 9, 11) + H.nb_hair = hex2num(t1) + else + H.nb_hair = 255 + if (length(H.primary.uni_identity) >= 8) + t1 = copytext(H.primary.uni_identity, 7, 9) + H.ng_hair = hex2num(t1) + else + H.ng_hair = 255 + if (length(H.primary.uni_identity) >= 6) + t1 = copytext(H.primary.uni_identity, 5, 7) + H.nr_hair = hex2num(t1) + else + H.nr_hair = 255 + H.r_hair = H.nr_hair + H.g_hair = H.ng_hair + H.b_hair = H.nb_hair + H.s_tone = H.ns_tone + H.update_face() + H.update_body() + return + +/obj/machinery/restruct/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The scanner is already occupied!" + return + if (usr.abiotic()) + usr << "\blue Subject cannot have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "restruct_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/restruct/relaymove(mob/user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/restruct/attackby(obj/item/weapon/grab/G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The machine is already occupied!" + return + if (G.affecting.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "restruct_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/restruct/proc/go_out() + + if ((!( src.occupant ) || src.locked)) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(30) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "restruct_0" + return + +/obj/machinery/restruct/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/engine.dm b/ss13-40.93.2-base/ss13-40.93.2-base/engine.dm new file mode 100644 index 0000000..97b6db7 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/engine.dm @@ -0,0 +1,242 @@ + +/obj/machinery/computer/engine/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/engine/New() + + if (!( engine_eject_control )) + engine_eject_control = new /datum/engine_eject( ) + ..() + return + +/obj/machinery/computer/engine/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/engine/attack_hand(var/mob/user as mob) + + user.machine = src + var/dat + if (src.temp) + dat = text("[]

Clear Screen", src.temp, src) + else + if (engine_eject_control.status == 0) + dat = text("Engine Ejection Module
\nStatus: Docked
\n
\nCountdown: []/60 \[Reset\]
\n
\nEject Engine
\n
\nClose", engine_eject_control.timeleft, src, src, user) + else + if (engine_eject_control.status == 1) + dat = text("Engine Ejection Module
\nStatus: Ejecting
\n
\nCountdown: []/60 \[Reset\]
\n
\nStop Ejection
\n
\nClose", engine_eject_control.timeleft, src, user) + else + dat = text("Engine Ejection Module
\nStatus: Ejected
\n
\nCountdown: N/60 \[Reset\]
\n
\nEngine Ejected!
\n
\nClose", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/engine/process() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/computer/engine/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["eject"]) + if (engine_eject_control.status == 0) + src.temp = text("Eject Engine?

Yes
No", src, src) + else + if (href_list["eject2"]) + if (engine_eject_control.status == 0) + engine_eject_control.ejectstart() + src.temp = null + else + if (href_list["stop"]) + if (engine_eject_control.status > 0) + src.temp = text("Stop Ejection?

Yes
No", src, src) + else + if (href_list["stop2"]) + if (engine_eject_control.status > 0) + engine_eject_control.stopcount() + src.temp = null + else + if (href_list["reset"]) + if (engine_eject_control.status == 0) + engine_eject_control.resetcount() + else + if (href_list["temp"]) + src.temp = null + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(351) + return + +/turf/station/engine/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/turf/station/engine/attack_hand(var/mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/station/engine/floor/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/datum/engine_eject/proc/ejectstart() + + if (!( src.status )) + if (src.timeleft <= 0) + src.timeleft = 60 + world << "\red Alert: Ejection Sequence for Engine Module has been engaged." + world << text("\red Ejection Time in T-[] seconds!", src.timeleft) + src.resetting = 0 + var/area/engine = locate(/area/engine) + engine.icon = 'alert.dmi' + if (!( engine.icon_state )) + engine.icon_state = "red" + else + engine.icon_state = "blue-red" + src.status = 1 + for(var/obj/machinery/computer/engine/E in world) + E.icon_state = "engaging" + //Foreach goto(113) + spawn( 0 ) + src.countdown() + return + return + +/datum/engine_eject/proc/resetcount() + + if (!( src.status )) + src.resetting = 1 + sleep(50) + if (src.resetting) + src.timeleft = 60 + world << "\red Alert: Ejection Sequence Countdown for Engine Module has been reset." + return + +/datum/engine_eject/proc/countdone() + + src.status = -1.0 + var/area/engine = locate(/area/engine) + engine.icon = 'alert.dmi' + engine.icon_state = null + var/area/A = locate(/area/engine) + for(var/turf/T in A) + var/turf/S = new T.type( locate(T.x, T.y, ENGINE_EJECT_Z) ) + for(var/atom/movable/AM as mob|obj in T) + AM.loc = S + S.oxygen = T.oxygen + S.oldoxy = T.oldoxy + S.tmpoxy = T.tmpoxy + S.poison = T.poison + S.oldpoison = T.oldpoison + S.tmppoison = T.tmppoison + S.co2 = T.co2 + S.oldco2 = T.oldco2 + S.tmpco2 = T.tmpco2 + S.sl_gas = T.sl_gas + S.osl_gas = T.osl_gas + S.tsl_gas = T.tsl_gas + S.n2 = T.n2 + S.on2 = T.on2 + S.tn2 = T.tn2 + //Foreach goto(100) + A.contents += S + var/turf/P = new T.type( locate(T.x, T.y, T.z) ) + var/area/D = locate(/area/dummy) + D.contents += P + //T = null + del(T) + //Foreach goto(60) + world << "\red Engine Ejected!" + for(var/obj/machinery/computer/engine/E in world) + E.icon_state = "engaged" + //Foreach goto(392) + return + +/datum/engine_eject/proc/stopcount() + + if (src.status > 0) + src.status = 0 + world << "\red Alert: Ejection Sequence for Engine Module has been disengaged!" + var/area/engine = locate(/area/engine) + engine.icon = 'alert.dmi' + if (engine.icon_state == "blue-red") + engine.icon_state = "blue" + else + engine.icon_state = null + for(var/obj/machinery/computer/engine/E in world) + E.icon_state = null + //Foreach goto(84) + return + +/datum/engine_eject/proc/countdown() + + if (src.timeleft <= 0) + spawn( 0 ) + countdone() + return + return + if (src.status > 0) + src.timeleft-- + if ((src.timeleft <= 15 || src.timeleft == 30)) + world << text("\red [] seconds until engine ejection.", src.timeleft) + spawn( 10 ) + src.countdown() + return + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/globals.dm b/ss13-40.93.2-base/ss13-40.93.2-base/globals.dm new file mode 100644 index 0000000..ef09084 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/globals.dm @@ -0,0 +1,54 @@ +var + //occupations = (List:10) + //assistant_occupations = (List:11) + world_message = "Welcome to SS13!" + savefile_ver = "3" + SS13_version = "40.93.2" + changes = "Changes\nWhen making bug reports make sure on post title to include version name!\nVersion 40.93.2\n\tNow compatible with website game listings\n\n\tSo many bug fixes.\n\tSo many more...\n\n\tAdded proper courtroom procedure papers to a few places.\n\tAdded a memory verb and add_memory verb\n\t\tBasically the meory is used to store information and will be used to\n\t\tstore special objectives.\n\tRight now it stores the traitors objective (if your traitor)\n\tor nuclear detonation codes if they apply to you (ie Syndicate Leader)\n\tYou can use it as a notepad for anything else as well.\n\n\tThe Syndicate have developed (stolen) a new technology:\n\t\tActive Cloaking\n\t\t\tThis device generates a specialized particle shield around the user.\n\t\t\tThe particles are able to transfer light energy across the sphere\n\t\t\t\tcreating a near perfect cloak.\n\t\t\tHowever this device does not block thermal energy and is highly susceptible to\n\t\t\t\toverload from energy weapons and light bursts.\n\n\tNew Game Mode- Nuclear Emergency\n\t\tJust try it uot. It is quite interesting\n\tAdministrative actions (show panel only) are now logged in world.log\n\n\tVersion/Game Status information is now given\n\tInstead of the pop-up box for a traitor item\n\t\tthe traitor gets a special syndicate uplink console\n\tSome OOC spam protection is in.\n\n\tNames have a 25 character limit/disallow HTML.\n\tTracking implants should work now.\n\tDNA machines should correctly restructure skin tone now.\n\tOOC is a little more spam proof.\n\tElectropacks are now a HUGE class item.\n\tDead people can no longer manipulate\n\t\tpods, closets, morgues, cryos, sleepers, etc.\n\tYou can't move projections.\n\tMonkies don't phantom move anymore.\n\tMonkies now run their AI ABOUT only 1 time every 10 seconds.\n\tRechargers causing guns to disappear fixed\n\nVersion 40.92\n\tSkin tone- You can now input a skin tone in character setup.\n\tMonkeys now have a random name based on their unique identifier.\n\tMonkeys without a client have do stuff randomly.\n\tPrison Station 13 has a security camera network.\n\t\tSS13/PS13 networks are DIFFERENT\n\tEnergy pistols (laser/taser guns) now have a visual ammo indicator\n\tEngine Ejection Control now has a nice HTML interface.\n\n\tPeople going through walls should be fixed.\n\tPods can now be ejected.\n\t\tstill cannot go on floors (intended)\n\tLocator now displays tracking implants.\n\tReset Machine icon fixed.\n\tMagic box bug fixed.\n\tHuman residue organs after monkeyization fixed.\n\tThrowing items out of lockers/pods/etc. fixed.\n\tClosets/Morgue units no longer have infinite air.\n\tInjectors are fixed and have an icon change as well.\n\tReinforced girder icon fixed\n\nVersion 40.91\n\tImplants are much improved now.\n\t\tthere is a new tracking implant\n\t\tlocators have been revamped to track the tracking implants\n\n\tThe REALLY old diagonal attack bug has been fixed!\n\t\t(the old bug that let you circumvent windows and doors)\n\n\tAir Tunnels are extremely redone.\n\t\tI know it takes ages to repressurize it.\n\t\tEventually a better method will be worked out.\n\t\tReleasing a large amonut of gas and letting it se for a while at stop helps.\n\n\tFires take MUCH less plasma to start now.\n\tThe fuel gauge on the canisters actually 'works' now.\n\n\t10+ players on monkey mode gives you 4 monkies.\n\tToxin Lab is more secure..\n\tI altered the format used to display damage zones\n\t\tIt should have a LOT less alg but it uses more objects/lists.\n\t\teventually I'll hit the 65536 limit and it won't be pretty.\n\tMake sure to post your ideas on damage system effects.\n\t\tThis system is so much more versatile and I don't want it to goto waste!\n\tYou can now 'throw' grabbed people.\n\t\tFOR NOW the type of grab has no effect\n\tAttacking a cryo/sleeper/DNA Machine with a grab puts them in it if you can\n\t\t(replaces place_inside)\n\tTraitor Items\n\t\tThe Traitor can select one special item (4/5 are new)\n\t\t to give a slight edge.\n\tFIXED: not allowing you into sleepers/cryo/DNA machines\n\nVersion 40.90\n\tDamage zones are in.\n\t\tAlmost everything uses it and it should be pretty intuitive.\n\tHosts:\n\t\tmotd.txt can be used to set the beginning message.\n\nVersion 40.87.1\n\tAdmin System\n\t\tMost major functions are complete.\n\t\tThe reassigning and appointing functions do not work yet.\n\t\tFixed major bug.\n\tIf you grabbing someone you can only walk.\n\tPretty sure dense corpses bug fixed.\n\nVersion 40.86\n\tGrabbing system- enhanced pulling\n\tMake a passive grab (friendly like to rescue someone) by setting intent to grab and attacking them.\n\tYou can the upgrade that to an active aggressive grab which limis their movment/hand usage.\n\tYou can upgrade again to a headlock which allows you to ...\n\t\tsingle click disarms them and makes them lsoe their breath\n\t\tdouble click start strangling them\n\t\tas an added plus they work as a somewhat useful shield\n\tGrabbed people can form chain and move as blobs...\n\tExperiment and have fun...\n\t\tThis is beta so post plenty of bug reports and ANY reasonable suggesitons you have!!!\n\nVersion 40.85(1)(2)(3)\n\tHeaters heat 50% faster.\n\t\tCan siphon/release like normal now...\n\tCanisters/Heaters/Siphons\n\t\tHave M s at the +/- ends which go to 0 and maximum\n\tFingerprints no longer show the UI\n\t\tbut instead use a hashing function first.\n\t\tit actually works now\n\tDNA Machines now change hair color, eye color, and gender\n\tBombs can deafen you.\n\tNew item slot: ears\n\t\tNew item: earmuffs- block damage from flashbangs/bombs but prevent all hearing.\n\t\t\tWill have more uses in the future as a safety device\n\tEscape pods will push you in the opposite direction negating the getting stuck problem\n\tFire Extinguishers vastly improved with a new spray model\n\t\tshould produce a more realistic and less laggy effect!\n\t\tDon't forget to remove the pin before use.\n\t\tYou need 2 seconds between bursts\n\tLate-joiners don't get any access levels\n\tNumerous bug fixess\n\tAttn. Server Hosts: Delete all savefiles if you experience hexadecimal errors.\n\t\tImplemented inernal savefile vesion to prevent other types of errors.\n\t\t\tit should repair the hex errors BUT it's not failsafe!\nVersion 40.85\n\tYou can build a floor turf a new way by attacking the space turf\n\t\t(no more can't build under immobile object problem!)\n\tNumerous bug fixes\n\nVersion 40.84.9\n\tUpdated the air system\n\t\tThanks to Puzzlemaker who provided the troves of numbers involved!\n\tAdd proximity sensor\n\t\tit gives 3 more assemblies\n\tCritical bug fixes!\n\t\tGotta love those bug fixes!\n\t\tFixed plasma toxin damage... you will actually receive tox damage now!!!\n\tLink has decided to take a slight leave from administrative duties and\n\t\tis temporarily not an active administrator\n\tCapture the Flag Mode 'Helper'\n\t\tThe perfect in game tool for your own capture the flag mode!\n\t\tI even added a flag item (derived from paper BUT unburnable)\n\t\tMore refinement gives more options for even more customizable modes!\n\t\tTeam autopicking may work...\n\t\tDocumentation coming soon\n\nVersion 40.83.3\n\tYou can take someone's fingerprints more easily (use scanner on them)\n\tMedical records can store the fingerprint hash.\n\tThe traitor can hijack the shuttle at cent com.\n\tAn electric fence is possible now.\n\tAdded security Records computer\n\nVersion 40.83\n\tMap Alterations\n\tFixed papers\n\tNew System- Fingerprint System (also v40.82(13))\n\tSecurity has access to a forensics locker that is able to provide machinery\n\t\tto perform forensics tests.\n\tAlmost anything you touch/use leaves a fingerprint (your UI by the way)\n\t\t(with a cap of 3 different people)\n\t\tThis includes machinery as well as items!\n\tBe careful with the fingerprint cards as one touch leaves a fingerprint\n\t\truining it. (hint: wear gloves)\n\t\tAlso to take someone's fingerprint you 'put the card' in their hand,\n\t\tFor handling and trials put them in the holder.\n\t\tThey CAN BE LABELLED with a PEN. (holder AND cards)\n\tThe fingerprint scanner isd able to print or just display\n\t\tfingerprints if you prefer to just record.\n\tYou can wear gloves to not leave any fingerprints.\n\t\tI suggest security/forensic techs at a crime scene WEAR GLOVES\n\t\tYou can easily invalidate fingerprint evidence\n\t\t\tby reasons of contamination\n\tA new job has been added- Forensic Technician\n\t\tThis job's sole purpose is operating the forensic stuff so security\n\t\tisn't so tied up.\n\tI hope this allows some better trials and investigations!\n\nVersion 40.82.13:\n\tStuttering has been added. It has uses other than a disability.\n\tI toned down getting a disability a bit.\n\tOverconsumption of certain chemicals can cause adverse effects\n\t\tinjected plasma no longer causes instant damage\n\t\tinjected antitoxs can provide blood immunity\n\t\t\tto overconsumption\n\t\t\tit CAN also be overconsumed\n\tI added a delay to administering a pill.\n\t\tYou can eat one instantly however.\n\tAdded placebos\n\tBug fixes.\n\t\tdead say should be back\n\t\tI THINK that health going outta proportion should be repaired.\n\t\tYou can force others to eat pills now.\n\t\tYour little airlock bug was fixed.\n\t\t\tI never really saw the problem\n\tEscape pods can't go on shuttle parts or floors.\n\t\t(there are a few floor exceptions:\n\t\t\tinfinite air floors, 'burnt' floors,\n\t\t\tand engine floor are some of them)\n\tI finally caved into the excessive amount of requests...\n\t\tI thought you guys wanted better things but due\n\t\t\tto the really nice icon by SoraKu =\]\n\t\t\tI added the straight jackets :/\n\tNew mode! Hosts: You need more than 3 players\n\t\tmore bug fixes, even more and more\n\t\talso with organization its easy for the humans to win.\n\tMode Changes (traitor)!\n\t\tThe traitor mode was given a new twist\n\t\tAlso a theft objective was added.\n\t\tRemember some parts of the transmission MAY be false!\n\t\tThe transmission is no longer world announced.\n\t\t\tInstead its printed uot at the consoles.\n\t\t\t(A message is given alerting you of this)\n\tObject restraints:\n\t\tno one can take off an electropack by themselves\n\t\thumans can't take off a straight jacket\n\t\tmonkeys can't unmuzzle by themselves\n\tAltered flashbang detonation time. Read the box before using.\n\t\t(like I'm sure you all always do :D)\n\nVersion 40.82:\n\tTourette's Syndrome added\n\t\tits pills for it are added\n\tAdded a few more medical items:\n\t\tPills that relieve antitoxin damage, chronic cough,\n\t\tepilepsy, Tourette, and let you sleep are in.\n\tTheir canisters are marked and described and adequately dispersed\n\tYou can put health analyzers on your belt.\n\t\tOther medical diagnosis ideas would be nice...\n\n\tI added another courtroom to prison station.\n\tThe radio frequencies have been changed.\n\t\tThere are now 25 freqs and 100 codes. 2500 possibilities for signaller =\]\n\tBug Fixes\n\nVersion 40.81: (40.811/2 with bug fixes)\n\tThe heat system is in partially. It does nothing yet.\n\t\tYou can check a tiles heat with an analyzer.\n\t\tTry playing around with it and report strange behaviors to me.\n\tYou can 'push' (or pull) what you arepullng more accruately without trying to move.\n\t\tThis is done by double clicking on a floor tile. the object will TRY to go there.\n\tID thievery is now exceedingly more difficult\n\t\tSpeaking gives you away\n\t\tYou must be covering your face else its obvious your lying\n\tNO MORE BAN SPAM!!!!!!\n\nVersion 40.8:\n\tPrison Station\n\t\t3 new jobs:\n\t\t\tPrison Security: A securiy officer in the prison. There are 2.\n\t\t\tPrison Doctor: A doctor in the prison infirmary. He CAN act as an officer\n\t\t\t\tif so equipped.\n\t\t\tPrison Warden: The ruler of the station.\n\t\t1 new shuttle:\n\t\t\tThe shuttle is docked at the prison station and can be piloted to SS13\n\t\t\t\tby a prison official (and anyone who gets to the controls)\n\t\tI suggest that only major criminals go there but it is a safe palce to put prisoners\n\t\t\tas it stays VERY isolated.\n\t\tWorking here isn't exactly exciting and would most likely be exceedingly boring.\n\t\t\tHowever someone has to do it. It's a great last resort job.\n\tAlso the stations a tank. you can't drill through the walls.floors. I made them\n\t\tinvulnerable. This station was made to stop that build up of prisoners.\n\nVersion 40.77:\n\tFlashbang grenades\n\tRedone blindness/deafness\n\tEyedropper\n\nVersion 40.76:\n\tWirecutters cut paper\n\tYou can repair reinforced walls\n\tYellow Jumpsuits (Technicians)\n\tBug fixes\n\nVersion 40.70+40.75\n\tThis version contains a slight remodellnig of the rooms as well as\nbug fixes.\n\nVersion 40.66\n\tExperiment with assemblies!\n\nVersion 40.5 Changes:\n\nFlashes have a slightly more offensive use when aimed at someone at CLOSE range.\nI mean close range.\nDue to this they have a slight ammo thing.\nSo give them to staff assistants security guards... You already got your tasers.\n\nNo air in shuttle fixed, dead men breathing, and dead men DNA fixed.\n\nhttp://elegant-galleria.com/ryan/ has a file called atcache.zip.\nDownload it and extract to your BYOND cache (which is located in BYOND/users/*/cache)." + //bombers = (List:12) + datum/air_tunnel/air_tunnel1/SS13_airtunnel = null + datum/control/cellular/cellcontrol = null + datum/control/gameticker/ticker = null + obj/datacore/data_core = null + obj/overlay/plmaster = null + obj/overlay/slmaster = null + going = 1.0 + master_mode = "secret" + obj/ctf_assist/ctf = null + //admins = (List:16) + nuke_code = null + poll_controller = null + //shuttles = (List:17) + //reg_dna = (List:18) + datum/engine_eject/engine_eject_control = null + host = null + obj/hud/main_hud = null + obj/hud/hud2/main_hud2 = null + ooc_allowed = 1.0 + //banned = (List:19) + dna_ident = 1.0 + abandon_allowed = 1.0 + enter_allowed = 1.0 + shuttle_frozen = 0.0 + prison_entered = null + + list/html_colours = new/list(0) + list/occupations = list( "Engineer", "Engineer", "Security Officer", "Security Officer", "Forensic Technician", "Medical Researcher", "Research Technician", "Toxin Researcher", "Atmospheric Technician", "Medical Doctor", "Station Technician", "Head of Personnel", "Head of Research", "Prison Security", "Prison Security", "Prison Doctor", "Prison Warden" ) + list/assistant_occupations = list( "Technical Assistant", "Medical Assistant", "Research Assistant", "Staff Assistant" ) + list/bombers = list( ) + list/admins = list( ) + list/shuttles = list( ) + list/reg_dna = list( ) + list/banned = list( ) + + + // + +world + mob = /mob/human + turf = /turf/space + area = /area + view = "15x15" + hub = "Exadv1.spacestation13" + name = "Space Station 13" + diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/hexadecimal.dm b/ss13-40.93.2-base/ss13-40.93.2-base/hexadecimal.dm new file mode 100644 index 0000000..5565f25 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/hexadecimal.dm @@ -0,0 +1,78 @@ + +/proc/hex2num(hex) + + if (!( istext(hex) )) + CRASH("hex2num not given a hexadecimal string argument (user error)") + return + var/num = 0 + var/power = 0 + var/i = null + i = length(hex) + while(i > 0) + var/char = copytext(hex, i, i + 1) + switch(char) + if("0") + power++ + goto Label_290 + if("9", "8", "7", "6", "5", "4", "3", "2", "1") + num += text2num(char) * 16 ** power + if("a", "A") + num += 16 ** power * 10 + if("b", "B") + num += 16 ** power * 11 + if("c", "C") + num += 16 ** power * 12 + if("d", "D") + num += 16 ** power * 13 + if("e", "E") + num += 16 ** power * 14 + if("f", "F") + num += 16 ** power * 15 + else + CRASH("hex2num given non-hexadecimal string (user error)") + return + power++ + Label_290: + i-- + return num + return + +/proc/num2hex(num, placeholder) + + if (placeholder == null) + placeholder = 2 + if (!( isnum(num) )) + CRASH("num2hex not given a numeric argument (user error)") + return + if (!( num )) + return "0" + var/hex = "" + var/i = 0 + while(16 ** i < num) + i++ + var/power = null + power = i - 1 + while(power >= 0) + var/val = round(num / 16 ** power) + num -= val * 16 ** power + switch(val) + if(9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0) + hex += text("[]", val) + if(10.0) + hex += "A" + if(11.0) + hex += "B" + if(12.0) + hex += "C" + if(13.0) + hex += "D" + if(14.0) + hex += "E" + if(15.0) + hex += "F" + else + power-- + while(length(hex) < placeholder) + hex = text("0[]", hex) + return hex + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/instructions.dm b/ss13-40.93.2-base/ss13-40.93.2-base/instructions.dm new file mode 100644 index 0000000..5145c72 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/instructions.dm @@ -0,0 +1,343 @@ + +/obj/machinery/computer/hologram_comp/New() + + ..() + spawn( 10 ) + src.projector = locate(/obj/machinery/hologram_proj, get_step(src.loc, NORTH)) + return + return + +/obj/machinery/computer/hologram_comp/DblClick() + + if (get_dist(src, usr) > 1) + return 0 + src.show_console(usr) + return + +/obj/machinery/computer/hologram_comp/proc/render() + + var/icon/I = new /icon( 'human.dmi', "male" ) + if (src.lumens >= 0) + I.Blend(rgb(src.lumens, src.lumens, src.lumens), 0) + else + I.Blend(rgb(- src.lumens, -src.lumens, -src.lumens), 1) + I.Blend(new /icon( 'human.dmi', "mouth" ), 3) + var/icon/U = new /icon( 'human.dmi', "diaper" ) + U.Blend(U, 3) + U = new /icon( 'mob.dmi', "hair_a" ) + U.Blend(rgb(src.h_r, src.h_g, src.h_b), 0) + I.Blend(U, 3) + src.projector.projection.icon = I + return + +/obj/machinery/computer/hologram_comp/proc/show_console(var/mob/user as mob) + + var/dat + user.machine = src + if (src.temp) + dat = text("[]

Clear", src.temp, src) + else + dat = text("Hologram Status:
\nPower: []
\nHologram Control:
\nColor Luminosity: []/220 \[Reset\]
\nLighten: 1 10
\nDarken: 1 10
\n
\nHair Color: ([],[],[]) \[Reset\]
\nRed (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nGreen (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nBlue (0-255): \[0\] -10 -1 [] 1 10 \[255\]
", src, (src.projector.projection ? "On" : "Off"), -src.lumens + 35, src, src, src, src, src, src.h_r, src.h_g, src.h_b, src, src, src, src, src.h_r, src, src, src, src, src, src, src.h_g, src, src, src, src, src, src, src.h_b, src, src, src) + user << browse(dat, "window=hologram_console") + return + +/obj/machinery/computer/hologram_comp/Topic(href, href_list) + + if (get_dist(src, usr) <= 1) + flick("holo_console1", src) + if (href_list["power"]) + if (src.projector.projection) + src.projector.icon_state = "hologram0" + //src.projector.projection = null + del(src.projector.projection) + else + src.projector.projection = new /obj/projection( src.projector.loc ) + src.projector.projection.icon = 'human.dmi' + src.projector.projection.icon_state = "male" + src.projector.icon_state = "hologram1" + src.render() + else + if (href_list["h_r"]) + if (src.projector.projection) + src.h_r += text2num(href_list["h_r"]) + src.h_r = min(max(src.h_r, 0), 255) + render() + else + if (href_list["h_g"]) + if (src.projector.projection) + src.h_g += text2num(href_list["h_g"]) + src.h_g = min(max(src.h_g, 0), 255) + render() + else + if (href_list["h_b"]) + if (src.projector.projection) + src.h_b += text2num(href_list["h_b"]) + src.h_b = min(max(src.h_b, 0), 255) + render() + else + if (href_list["light"]) + if (src.projector.projection) + src.lumens += text2num(href_list["light"]) + src.lumens = min(max(src.lumens, -185.0), 35) + render() + else + if (href_list["reset"]) + if (src.projector.projection) + src.lumens = 0 + render() + else + if (href_list["temp"]) + src.temp = null + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.show_console(M) + //Foreach goto(446) + return + +/obj/begin/verb/ready() + set src in usr.loc + + + if ((!( istype(usr, /mob/human) ) || usr.start)) + usr << "You have already started!" + return + var/mob/human/M = usr + src.get_dna_ready(M) + if ((!( M.w_uniform ) && !( ticker ))) + if (M.gender == "female") + M.w_uniform = new /obj/item/weapon/clothing/under/pink( M ) + else + M.w_uniform = new /obj/item/weapon/clothing/under/blue( M ) + M.w_uniform.layer = 20 + M.shoes = new /obj/item/weapon/clothing/shoes/brown( M ) + M.shoes.layer = 20 + else + M << "You will have to find clothes from the station." + if ((ticker && !( M.l_hand ))) + var/obj/item/weapon/card/id/I = new /obj/item/weapon/card/id( M ) + var/list/L = list( "Technical Assistant", "Research Assistant", "Staff Assistant", "Medical Assistant" ) + var/choose + if (L.Find(M.occupation1)) + choose = M.occupation1 + else + choose = pick(L) + switch(choose) + if("Research Assistant") + I.assignment = "Research Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + if("Technical Assistant") + I.assignment = "Technical Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + if("Medical Assistant") + I.assignment = "Medical Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + if("Staff Assistant") + I.assignment = "Staff Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + else + I.name = text("[]'s ID Card ([]>[]-[]-[])", I.registered, I.access_level, I.lab_access, I.engine_access, I.air_access) + I.layer = 20 + M.l_hand = I + M.start = 1 + M.update_face() + M.update_body() + return + +/obj/begin/verb/enter() + set src in usr.loc + + + if (!( enter_allowed )) + usr << "\blue There is an administrative lock on entering the game!" + return + if ((!( usr.start ) || !( istype(usr, /mob/human) ))) + usr << "\blue You aren't ready! Use the ready verb on this pad to set up your character!" + return + if (ctf) + var/obj/rogue = locate("landmark*CTF-rogue") + usr.loc = rogue.loc + usr << "It's CTF mode. You are a late joiner so you are a Rogue!" + usr << "\blue Now teleporting." + if (ticker) + var/mob/H = usr + if (istype(H, /mob/human)) + reg_dna[text("[]", H.primary.uni_identity)] = H.rname + return + var/mob/human/M = usr + var/list/start_loc = list( ) + if ((M.key in list( "Thief jack", "Link43130", "Hutchy2k1", "Easty", "Exadv1" ))) + start_loc["Supply Station"] = locate(77, 40, 10) + var/area/A = locate(/area/sleep_area) + var/list/L = list( ) + for(var/turf/T in A) + L += T + //Foreach goto(239) + start_loc["SS13"] = pick(L) + if (locate(text("spstart[]", M.ckey))) + for(var/obj/sp_start/S in world) + if (S.tag == text("spstart[]", M.ckey)) + start_loc[text("[]", S.desc)] = S + //Foreach goto(295) + var/option = input(M, "Where should you start?", "Start Selector", null) in start_loc + if ((!( usr.start ) || !( istype(usr, /mob/human) ) || usr.loc != src.loc)) + return + if (ticker) + reg_dna[text("[]", M.primary.uni_identity)] = M.rname + var/obj/sp_start/S = start_loc[option] + if (istype(S, /obj/sp_start)) + M << "\blue Now teleporting to special location." + if (S.special == 2) + for(var/obj/O in M) + //O = null + del(O) + //Foreach goto(492) + M.loc = S.loc + else + if (S.special == 3) + for(var/obj/O in M) + //O = null + del(O) + //Foreach goto(560) + var/obj/O = new /mob/monkey( S.loc ) + M.client.mob = O + O.loc = S.loc + //M = null + del(M) + else + M.loc = S.loc //was O.loc + else + if (isturf(S)) + M << "\blue Now teleporting." + M.loc = S + return + +/obj/begin/proc/get_dna_ready(var/mob/user as mob) + + var/mob/human/M = user + if (!( M.primary )) + M.r_hair = M.nr_hair + M.b_hair = M.nb_hair + M.g_hair = M.ng_hair + M.s_tone = M.ns_tone + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + M.primary = new /obj/dna( null ) + M.primary.uni_identity = text("[]", add_zero(num2hex(dna_ident), 4)) + var/t2 = add_zero(num2hex(M.nr_hair), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.ng_hair), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.nb_hair), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.r_eyes), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.g_eyes), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.b_eyes), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex( -M.ns_tone + 35), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = (M.gender == "male" ? text("[]", num2hex(rand(1, 124))) : text("[]", num2hex(rand(127, 250)))) + if (length(t2) < 2) + M.primary.uni_identity = text("[]0[]", M.primary.uni_identity, t2) + else + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + M.primary.spec_identity = "5BDFE293BA5500F9FFFD500AAFFE" + M.primary.struc_enzyme = "CDE375C9A6C25A7DBDA50EC05AC6CEB63" + if (rand(1, 3125) == 13) + M.need_gl = 1 + M.be_epil = 1 + M.be_cough = 1 + M.be_tur = 1 + M.be_stut = 1 + + var/b_vis + if (M.need_gl) + b_vis = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 1 + M << "\blue You need glasses!" + else + b_vis = "5A7" + var/epil + if (M.be_epil) + epil = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 2 + M << "\blue You are epileptic!" + else + epil = "6CE" + var/cough + if (M.be_cough) + cough = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 4 + M << "\blue You have a chronic coughing syndrome!" + else + cough = "EC0" + var/Tourette + if (M.be_tur) + epil = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 8 + M << "\blue You have Tourette syndrome!" + else + Tourette = "5AC" + var/stutter + if (M.be_stut) + stutter = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 16 + M << "\blue You have a stuttering problem!" + else + stutter = "A50" + M.primary.struc_enzyme = text("CDE375C9A6C2[]DBD[][][][]B63", b_vis, stutter, cough, Tourette, epil) + M.primary.use_enzyme = "493DB249EB6D13236100A37000800AB71" + M.primary.n_chromo = 28 + return + +/turf/station/command/floor/updatecell() + + src.oxygen = 756000.0 + src.firelevel = 0 + src.co2 = 0 + src.poison = 0 + src.sl_gas = 0 + src.n2 = 0 + return + +/turf/station/command/floor/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/turf/station/command/floor/attack_hand(var/mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/inverthtml.dm b/ss13-40.93.2-base/ss13-40.93.2-base/inverthtml.dm new file mode 100644 index 0000000..fd51487 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/inverthtml.dm @@ -0,0 +1,27 @@ + +/proc/invertHTML(HTMLstring) + + if (!( istext(HTMLstring) )) + CRASH("Given non-text argument!") + return + else + if (length(HTMLstring) != 7) + CRASH("Given non-HTML argument!") + return + var/textr = copytext(HTMLstring, 2, 4) + var/textg = copytext(HTMLstring, 4, 6) + var/textb = copytext(HTMLstring, 6, 8) + var/r = hex2num(textr) + var/g = hex2num(textg) + var/b = hex2num(textb) + textr = num2hex(255 - r) + textg = num2hex(255 - g) + textb = num2hex(255 - b) + if (length(textr) < 2) + textr = text("0[]", textr) + if (length(textg) < 2) + textr = text("0[]", textg) + if (length(textb) < 2) + textr = text("0[]", textb) + return text("#[][][]", textr, textg, textb) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/items.dm b/ss13-40.93.2-base/ss13-40.93.2-base/items.dm new file mode 100644 index 0000000..033b53c --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/items.dm @@ -0,0 +1,5479 @@ + +/proc/text2dir(direction) + + switch(uppertext(direction)) + if("NORTH") + return 1 + if("SOUTH") + return 2 + if("EAST") + return 4 + if("WEST") + return 8 + if("NORTHEAST") + return 5 + if("NORTHWEST") + return 9 + if("SOUTHEAST") + return 6 + if("SOUTHWEST") + return 10 + else + return + +/proc/get_turf(turf/T as turf) + + while((!( istype(T, /turf) ) && T)) + T = T.loc + return T + return + +/proc/dir2text(direction) + + switch(direction) + if(1.0) + return "north" + if(2.0) + return "south" + if(4.0) + return "east" + if(8.0) + return "west" + if(5.0) + return "northeast" + if(6.0) + return "southeast" + if(9.0) + return "northwest" + if(10.0) + return "southwest" + else + return + +/obj/proc/hear_talk(mob/M as mob, text) + + return + +/obj/machinery/recharger/process() + + if (src.charging) + if (src.charging.charges < 10) + src.charging.charges++ + src.icon_state = "recharger1" + else + src.icon_state = "recharger2" + else + src.icon_state = "recharger0" + return + +/obj/machinery/recharger/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/recharger/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (src.charging) + src.charging.update_icon() + src.charging.loc = src.loc + src.charging = null + return + +/obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) + + if (src.charging) + return + if (istype(G, /obj/item/weapon/gun/energy)) + user.drop_item() + G.loc = src + src.charging = G + return + return + +/obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + return + +/obj/item/weapon/table_parts/attack_self(mob/user as mob) + + var/state = input(user, "What type of table?", "Assembling Table", null) in list( "sides", "corners", "alone" ) + var/direct = SOUTH + if (state == "corners") + direct = input(user, "Direction?", "Assembling Table", null) in list( "northwest", "northeast", "southwest", "southeast" ) + else + if (state == "sides") + direct = input(user, "Direction?", "Assembling Table", null) in list( "north", "east", "south", "west" ) + var/obj/table/T = new /obj/table( user.loc ) + T.icon_state = state + T.dir = text2dir(direct) + T.add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + return + +/obj/item/weapon/rack_parts/attack_self(mob/user as mob) + + var/obj/rack/R = new /obj/rack( user.loc ) + R.add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/item/weapon/paper_bin/proc/update() + + src.icon_state = text("paper_bin[]", ((src.amount || locate(/obj/item/weapon/paper, src)) ? "1" : null)) + return + +/obj/item/weapon/paper_bin/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/paper)) + user.drop_item() + W.loc = src + else + if (istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/T = W + if ((T.welding && T.weldfuel > 0)) + viewers(user, null) << text("[] burns the paper with the welding tool!", user) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(W, /obj/item/weapon/igniter)) + viewers(user, null) << text("[] burns the paper with the igniter!", user) + spawn( 0 ) + src.burn(1800000.0) + return + src.update() + return + +/obj/item/weapon/paper_bin/burn(fi_amount) + + flick("paper_binb", src) + for(var/atom/movable/A as mob|obj in src) + A.burn(fi_amount) + //Foreach goto(23) + if (fi_amount >= 900000.0) + src.amount = 0 + src.update() + return + +/obj/item/weapon/paper_bin/MouseDrop(mob/user as mob) + + if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || get_dist(src, usr) <= 1))))) + if (usr.hand) + if (!( usr.l_hand )) + spawn( 0 ) + src.attack_hand(usr, 1, 1) + return + else + if (!( usr.r_hand )) + spawn( 0 ) + src.attack_hand(usr, 0, 1) + return + return + +/obj/item/weapon/paper_bin/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/paper_bin/attack_hand(mob/user as mob, unused, flag) + + if (flag) + return ..() + src.add_fingerprint(user) + if (locate(/obj/item/weapon/paper, src)) + for(var/obj/item/weapon/paper/P in src) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + P = null + usr.UpdateClothing() + break//// + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + P = null + usr.UpdateClothing() + break//// + ////else + //Foreach goto(48) + else + if (src.amount >= 1) + src.amount-- + new /obj/item/weapon/paper( usr.loc ) + src.update() + return + +/obj/item/weapon/paper_bin/examine() + set src in oview(1) + + src.amount = round(src.amount) + var/n = src.amount + for(var/obj/item/weapon/paper/P in src) + n++ + //Foreach goto(33) + if (n <= 0) + n = 0 + usr << "There are no papers in the bin." + else + if (n == 1) + usr << "There is one paper in the bin." + else + usr << text("There are [] papers in the bin.", n) + return + +/obj/item/weapon/dummy/ex_act() + + return + +/obj/item/weapon/game_kit/New() + + src.board_stat = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" + src.selected = "CR" + return + +/obj/item/weapon/game_kit/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/game_kit/MouseDrop(mob/user as mob) + + if ((user == usr && !( usr.restrained() ) && !( usr.stat ) && (usr.contents.Find(src) || get_dist(src, usr) <= 1))) + if (usr.hand) + if (!( usr.l_hand )) + spawn( 0 ) + src.attack_hand(usr, 1, 1) + return + else + if (!( usr.r_hand )) + spawn( 0 ) + src.attack_hand(usr, 0, 1) + return + return + +/obj/item/weapon/game_kit/proc/update() + + if (!( src.internet )) + var/dat = text("
Game Board

[] remove
", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src) + var/counter = null + counter = 1 + while(counter <= 8) + dat += text("\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t", + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 1) * 2 - 1, ((counter - 1) * 8 + 1) * 2 + 1), ((counter + 1) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 2) * 2 - 1, ((counter - 1) * 8 + 2) * 2 + 1), ((counter + 2) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 3) * 2 - 1, ((counter - 1) * 8 + 3) * 2 + 1), ((counter + 3) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 4) * 2 - 1, ((counter - 1) * 8 + 4) * 2 + 1), ((counter + 4) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 5) * 2 - 1, ((counter - 1) * 8 + 5) * 2 + 1), ((counter + 5) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 6) * 2 - 1, ((counter - 1) * 8 + 6) * 2 + 1), ((counter + 6) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 7) * 2 - 1, ((counter - 1) * 8 + 7) * 2 + 1), ((counter + 7) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 8) * 2 - 1, ((counter - 1) * 8 + 8) * 2 + 1), ((counter + 8) % 2 ? "W" : "B")) + counter++ + dat += "

Chips: " + dat += text("", src) + dat += text("", src) + dat += "
Chess pieces:
" + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("Using cache for pictures", src) + src.data = dat + else + var/dat = text("
Game Board

[] remove
", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src) + var/counter = null + counter = 1 + while(counter <= 8) + dat += text("\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t", + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 1) * 2 - 1, ((counter - 1) * 8 + 1) * 2 + 1), ((counter + 1) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 2) * 2 - 1, ((counter - 1) * 8 + 2) * 2 + 1), ((counter + 2) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 3) * 2 - 1, ((counter - 1) * 8 + 3) * 2 + 1), ((counter + 3) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 4) * 2 - 1, ((counter - 1) * 8 + 4) * 2 + 1), ((counter + 4) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 5) * 2 - 1, ((counter - 1) * 8 + 5) * 2 + 1), ((counter + 5) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 6) * 2 - 1, ((counter - 1) * 8 + 6) * 2 + 1), ((counter + 6) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 7) * 2 - 1, ((counter - 1) * 8 + 7) * 2 + 1), ((counter + 7) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 8) * 2 - 1, ((counter - 1) * 8 + 8) * 2 + 1), ((counter + 8) % 2 ? "W" : "B")) + counter++ + dat += "

Chips: " + dat += text("", src) + dat += text("", src) + dat += "
Chess pieces:
" + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("Using Internet for pictures", src) + src.data = dat + return + +/obj/item/weapon/game_kit/attack_hand(mob/user as mob, unused, flag) + + if (flag) + return ..() + else + user.machine = src + if (!( src.data )) + update() + user << browse(src.data, "window=game_kit") + return + return + +/obj/item/weapon/game_kit/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + if (href_list["s_piece"]) + src.selected = href_list["s_piece"] + else + if (href_list["mode"]) + if (href_list["mode"] == "remove") + src.selected = "remove" + else + src.selected = null + else + if (href_list["sw_pic"]) + src.internet = !( src.internet ) + else + if (href_list["s_board"]) + if (!( src.selected )) + src.selected = href_list["s_board"] + else + var/tx = text2num(copytext(href_list["s_board"], 1, 2)) + var/ty = text2num(copytext(href_list["s_board"], 3, 4)) + if ((copytext(src.selected, 2, 3) == " " && length(src.selected) == 3)) + var/sx = text2num(copytext(src.selected, 1, 2)) + var/sy = text2num(copytext(src.selected, 3, 4)) + var/place = ((sy - 1) * 8 + sx) * 2 - 1 + src.selected = copytext(src.board_stat, place, place + 2) + if (place == 1) + src.board_stat = text("BB[]", copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[]BB", copytext(src.board_stat, 1, 127)) + else + if (place) + src.board_stat = text("[]BB[]", copytext(src.board_stat, 1, place), copytext(src.board_stat, place + 2, 129)) + place = ((ty - 1) * 8 + tx) * 2 - 1 + if (place == 1) + src.board_stat = text("[][]", src.selected, copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[][]", copytext(src.board_stat, 1, 127), src.selected) + else + if (place) + src.board_stat = text("[][][]", copytext(src.board_stat, 1, place), src.selected, copytext(src.board_stat, place + 2, 129)) + src.selected = null + else + if (src.selected == "remove") + var/place = ((ty - 1) * 8 + tx) * 2 - 1 + if (place == 1) + src.board_stat = text("BB[]", copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[]BB", copytext(src.board_stat, 1, 127)) + else + if (place) + src.board_stat = text("[]BB[]", copytext(src.board_stat, 1, place), copytext(src.board_stat, place + 2, 129)) + else + if (length(src.selected) == 2) + var/place = ((ty - 1) * 8 + tx) * 2 - 1 + if (place == 1) + src.board_stat = text("[][]", src.selected, copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[][]", copytext(src.board_stat, 1, 127), src.selected) + else + if (place) + src.board_stat = text("[][][]", copytext(src.board_stat, 1, place), src.selected, copytext(src.board_stat, place + 2, 129)) + src.add_fingerprint(usr) + update() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(835) + return + +/obj/item/weapon/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +//*****RM + +/obj/item/weapon/verb/move_to_top() + set src in oview(1) + + if(!istype(src.loc, /turf)) + return + + var/turf/T = src.loc + + src.loc = null + + src.loc = T + + +//***** + + +/obj/item/weapon/proc/attack_self() + + return + +/obj/item/weapon/proc/talk_into(mob/M as mob, text) + + return + +/obj/item/weapon/proc/moved(mob/user as mob, old_loc as turf) + + return + +/obj/item/weapon/proc/dropped(mob/user as mob) + + return + +/obj/item/weapon/proc/afterattack() + + return + return + +/obj/item/weapon/proc/attack(mob/M as mob, mob/user as mob, def_zone) + + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been attacked with [][] ", M, src, (user ? text(" by [].", user) : ".")), 1) + //Foreach goto(20) + var/power = src.force + if (M.health >= -10.0) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/obj/item/weapon/organ/external/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + if (!( def_zone )) + var/mob/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + def_zone = ran_zone(t) + if (H.organs[text("[]", def_zone)]) + affecting = H.organs[text("[]", def_zone)] + if (istype(affecting, /obj/item/weapon/organ/external)) + var/b_dam = (src.damtype == "brute" ? src.force : 0) + var/f_dam = (src.damtype == "fire" ? src.force : 0) + if (def_zone == "head") + if ((b_dam && (((H.head && H.head.brute_protect & 1) || (H.wear_mask && H.wear_mask.brute_protect & 1)) && prob(75)))) + if (prob(20)) + affecting.take_damage(power, 0) + else + H.show_message("\red You have been protected from a hit to the head.") + return + if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam))) + var/time = rand(10, 120) + if (prob(90)) + if (H.paralysis < time) + H.paralysis = time + else + if (H.weakened < time) + H.weakened = time + H.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(514) + H.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120)) + affecting.take_damage(b_dam, f_dam) + else + if (def_zone == "chest") + if ((b_dam && (((H.wear_suit && H.wear_suit.brute_protect & 2) || (H.w_uniform && H.w_uniform.brute_protect & 2)) && prob(90 - src.force)))) + H.show_message("\red You have been protected from a hit to the chest.") + return + if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam))) + if (prob(50)) + if (H.weakened < 5) + H.weakened = 5 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been knocked down!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(738) + else + if (H.stunned < 2) + H.stunned = 2 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been stunned!", H), 1) + //Foreach goto(808) + H.stat = 1 + affecting.take_damage(b_dam, f_dam) + else + if (def_zone == "diaper") + if ((b_dam && (((H.wear_suit && H.wear_suit.brute_protect & 4) || (H.w_uniform && H.w_uniform.brute_protect & 4)) && prob(90 - src.force)))) + H.show_message("\red You have been protected from a hit to the lower chest/diaper.") + return + if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam))) + if (prob(50)) + if (H.weakened < 5) + H.weakened = 5 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been knocked down!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(1014) + else + if (H.stunned < 2) + H.stunned = 2 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been stunned!", H), 1) + //Foreach goto(1084) + H.stat = 1 + affecting.take_damage(b_dam, f_dam) + else + affecting.take_damage(b_dam, f_dam) + H.UpdateDamageIcon() + else + switch(src.damtype) + if("brute") + M.bruteloss += power + if("fire") + M.fireloss += power + else + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + src.add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/ex_act(severity) + + if (severity <= 2) + //SN src = null + del(src) + return + return + +/obj/item/weapon/bedsheet/attack_self(mob/user as mob) + + user.drop_item() + src.layer = 5 + add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/burn(fi_amount) + + if (fi_amount > 3.0E7) + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + //SN src = null + del(src) + return + return + return + return + +/obj/item/weapon/wrapping_paper/examine() + set src in oview(1) + + ..() + usr << text("There is about [] square units of paper left!", src.amount) + return + +/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (!( locate(/obj/table, src.loc) )) + user << "\blue You MUST put the paper on a table!" + if (W.w_class < 4) + if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters))) + var/a_used = 2 ** (src.w_class - 1) + if (src.amount < a_used) + user << "\blue You need more paper!" + return + else + src.amount -= a_used + user.drop_item() + var/obj/item/weapon/gift/G = new /obj/item/weapon/gift( src.loc ) + G.size = W.w_class + G.w_class = G.size + 1 + G.icon_state = text("gift[]", G.size) + G.gift = W + W.loc = G + G.add_fingerprint(user) + W.add_fingerprint(user) + src.add_fingerprint(user) + if (src.amount <= 0) + new /obj/item/weapon/c_tube( src.loc ) + //SN src = null + del(src) + return + else + user << "\blue You need scissors!" + else + user << "\blue The object is FAR too large!" + return + +/obj/item/weapon/gift/attack_self(mob/user as mob) + + src.gift.loc = user + if (user.hand) + user.l_hand = src.gift + else + user.r_hand = src.gift + src.gift.layer = 20 + src.gift.add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/item/weapon/a_gift/ex_act() + + //SN src = null + del(src) + return + return + +/obj/item/weapon/a_gift/burn(fi_amount) + + if (fi_amount > 900000.0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/a_gift/attack_self(mob/M as mob) + + switch(pick("pill", "flash", "t_gun", "l_gun", "shield", "sword")) + if("pill") + var/obj/item/weapon/m_pill/superpill/W = new /obj/item/weapon/m_pill/superpill( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("flash") + var/obj/item/weapon/flash/W = new /obj/item/weapon/flash( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("l_gun") + var/obj/item/weapon/gun/energy/laser_gun/W = new /obj/item/weapon/gun/energy/laser_gun( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("t_gun") + var/obj/item/weapon/gun/energy/taser_gun/W = new /obj/item/weapon/gun/energy/taser_gun( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("shield") + var/obj/item/weapon/shield/W = new /obj/item/weapon/shield( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("sword") + var/obj/item/weapon/sword/W = new /obj/item/weapon/sword( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + else + return + +/obj/item/weapon/flashbang/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.det_time == 30) + src.det_time = 30 + user.show_message("\blue You set the flashbang for 3 second detonation time.") + src.desc = "It is set to detonate in 3 seconds." + else + src.det_time = 100 + user.show_message("\blue You set the flashbang for 10 second detonation time.") + src.desc = "It is set to detonate in 10 seconds." + src.add_fingerprint(user) + return + +/obj/item/weapon/flashbang/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + + if (user.equipped() == src) + if (!( src.state )) + user << "\red You prime the flashbang! 10 seconds!" + src.state = 1 + src.icon_state = "flashbang1" + spawn( src.det_time ) + prime() + return + user.dir = get_dir(user, target) + user.drop_item() + var/t = (isturf(target) ? target : target.loc) + walk_towards(src, t, 3) + src.add_fingerprint(user) + return + +/obj/item/weapon/flashbang/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/flashbang/attack_hand() + + walk(src, null, null) + src.throwspeed = 20 + ..() + return + +/obj/item/weapon/flashbang/proc/prime() + + var/turf/T = get_turf(src) + T.firelevel = T.poison + for(var/mob/M in viewers(T, null)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S in M) + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(72) + if ((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) + flick("e_flash", M.flash) + M.stunned = 10 + M.weakened = 3 + M << "\red BANG" + if ((prob(14) || (M == src.loc && prob(70)))) + M.ear_damage += rand(10, 20) + else + if (prob(30)) + M.ear_damage += rand(7, 14) + if (!( M.paralysis )) + M.eye_stat += rand(10, 15) + if (prob(10)) + M.eye_stat += 7 + M.ear_deaf += 30 + if (M == src.loc) + M.eye_stat += 10 + if (prob(60)) + if (istype(M, /mob/human)) + var/mob/human/H = M + if (!( istype(H.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + M.ear_damage += 15 + M.ear_deaf += 60 + else + M.ear_damage += 15 + M.ear_deaf += 60 + else + if (get_dist(M, T) <= 5) + flick("e_flash", M.flash) + if (!( istype(M, /mob/human) )) + M.stunned = 7 + M.weakened = 2 + else + var/mob/human/H = M + M.ear_deaf += 10 + if (prob(20)) + M.ear_damage += 10 + if ((!( istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses) ) || M.paralysis)) + M.stunned = 7 + M.weakened = 2 + else + if (!( M.paralysis )) + M.eye_stat += rand(1, 3) + M << "\red BANG" + else + if (!( istype(M, /mob/human) )) + flick("flash", M.flash) + else + var/mob/human/H = M + if (!( istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses) )) + flick("flash", M.flash) + M.eye_stat += rand(1, 2) + M.ear_deaf += 5 + M << "\red BANG" + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + if (M.ear_damage >= 15) + M << "\red Your ears start to ring badly!" + if (prob(M.ear_damage - 10 + 5)) + M << "\red You go deaf!" + M.sdisabilities |= 4 + else + if (M.ear_damage >= 5) + M << "\red Your ears start to ring!" + //Foreach goto(39) + //SN src = null + del(src) + return + return + +/obj/item/weapon/flashbang/attack_self(mob/user as mob) + + if (!( src.state )) + user << "\red You prime the flashbang! 10 seconds!" + src.state = 1 + src.icon_state = "flashbang1" + add_fingerprint(user) + spawn( src.det_time ) + prime() + return + return + +/obj/item/weapon/flash/attack(mob/M as mob, mob/user as mob) + + if (src.shots > 0) + var/safety = null + if (istype(M, /mob/human)) + var/mob/human/H = M + if (istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses)) + safety = 1 + if (!( safety )) + M.weakened = 10 + if (M.client) + if (!( safety )) + if ((M.eye_stat > 15 && prob(M.eye_stat + 50))) + flick("e_flash", M.flash) + M.eye_stat += rand(1, 2) + else + flick("flash", M.flash) + M.eye_stat += rand(0, 2) + if (M.eye_stat >= 20) + M << "\red You eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] blinds [] with the flash!", user, M)) + //Foreach goto(229) + src.attack_self(user, 1) + return + +/obj/item/weapon/flash/attack_self(mob/user as mob, flag) + + if ( (world.time + 600) > src.l_time) + src.shots = 5 + if (src.shots < 1) + user.show_message("\red *click* *click*", 2) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.l_time = world.time + add_fingerprint(user) + src.shots-- + flick("flash2", src) + if (!( flag )) + for(var/mob/M in oviewers(3, null)) + if (prob(50)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S in M) + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(201) + if (M.client) + var/safety = null + if (istype(M, /mob/human)) + var/mob/human/H = M + if (istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses)) + safety = 1 + if (!( safety )) + flick("flash", M.flash) + //Foreach goto(160) + return + +/obj/item/weapon/locator/attack_self(mob/user as mob) + + user.machine = src + var/dat + if (src.temp) + dat = text("[]

Clear", src.temp, src) + else + dat = text("Persistent Signal Locator
\nFrequency: -- [] ++
\nRefresh", src, src, src.freq, src, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/locator/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["refresh"]) + src.temp = "Persistent Signal Locator
" + var/turf/sr = get_turf(src) + if (sr) + src.temp += "Located Beacons:
" + for(var/obj/item/weapon/radio/beacon/W in world) + if (W.freq == src.freq) + var/turf/tr = get_turf(W) + if ((tr.z == sr.z && tr)) + var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) + if (direct < 5) + direct = "very strong" + else + if (direct < 10) + direct = "strong" + else + if (direct < 20) + direct = "weak" + else + direct = "very weak" + src.temp += text("[]-[]-[]
", W.code, dir2text(get_dir(sr, tr)), direct) + //Foreach goto(114) + src.temp += "Extranneous Signals:
" + for(var/obj/item/weapon/implant/tracking/W in world) + //Label_332: + if (W.freq == src.freq) + if ((!( W.implanted ) || !( ismob(W.loc) ))) + continue //goto Label_332 + else + var/mob/M = W.loc + if (M.stat == 2) + if (M.timeofdeath + 6000 < world.time) + continue //goto(332) + var/turf/tr = get_turf(W) + if ((tr.z == sr.z && tr)) + var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) + if (direct < 20) + if (direct < 5) + direct = "very strong" + else + if (direct < 10) + direct = "strong" + else + direct = "weak" + src.temp += text("[]-[]-[]
", W.id, dir2text(get_dir(sr, tr)), direct) + //Foreach goto(332) + src.temp += text("You are at \[[],[],[]\] in orbital coordinates.

Refresh
", sr.x, sr.y, sr.z, src) + else + src.temp += "Processing Error: Unable to locate orbital position.
" + else + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(749) + return + +/obj/item/weapon/syndicate_uplink/proc/explode() + + var/turf/T = get_turf(src.loc) + T.firelevel = T.poison + T.res_vars() + var/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= T.y + 2 && U.y >= T.y - 2 && U.x <= T.x + 2 && U.x >= T.x - 2)) + zone = 3 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(209) + U.ex_act(zone) + //Foreach goto(109) + //src.master = null + del(src.master) + //SN src = null + del(src) + return + return + +/obj/item/weapon/syndicate_uplink/attack_self(mob/user as mob) + + user.machine = src + var/dat + if (src.selfdestruct) + dat = "Self Destructing..." + else + if (src.temp) + dat = text("[]

Clear", src.temp, src) + else + dat = text("Syndicate Uplink Console:
\nTele-Crystals left: []
\nRequest item: (uses 1 tele-crystal)
\nElectromagnet Card
\nSleepy Pen
\nCyanide Pill
\nCloaking Device
\nRevolver
\nImplant- Freedom (with injector)
\n
\nSelf-Destruct", src.uses, src, src, src, src, src, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/syndicate_uplink/Topic(href, href_list) + + if (usr.stat) + return + var/mob/human/H = usr + if (!( istype(H, /mob/human) )) + return 1 + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["item_emag"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/card/emag( H.loc ) + else + if (href_list["item_sleepypen"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/pen/sleepypen( H.loc ) + else + if (href_list["item_cyanide"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/m_pill/cyanide( H.loc ) + else + if (href_list["item_cloak"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/cloaking_device( H.loc ) + else + if (href_list["item_revolver"]) + if (src.uses > 0) + src.uses-- + var/obj/item/weapon/gun/revolver/O = new /obj/item/weapon/gun/revolver( H.loc ) + O.bullets = 7 + else + if (href_list["item_imp_freedom"]) + if (src.uses > 0) + src.uses-- + var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter( H.loc ) + O.imp = new /obj/item/weapon/implant/freedom( O ) + src.temp = "The implant is triggered by chuckling and has a random amount of uses." + if (href_list["selfdestruct"]) + src.temp = text("Self-Destruct", src) + if (href_list["selfdestruct2"]) + src.selfdestruct = 1 + spawn( 30 ) + explode() + return + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(488) + return + +/obj/item/weapon/sword/attack(target as mob, mob/user as mob) + + ..() + if (user.key == "Exadv1") + user.next_move = 1 + return + +/obj/item/weapon/sword/attack_self(mob/user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The sword is now active." + src.force = 40 + src.icon_state = "sword1" + src.w_class = 4 + else + user << "\blue The sword can now be concealed." + src.force = 3 + src.icon_state = "sword0" + src.w_class = 2 + src.add_fingerprint(user) + return + +/obj/item/weapon/shield/attack_self(mob/user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The shield is now active." + src.force = 40 + src.icon_state = "shield1" + else + user << "\blue The shield is now inactive." + src.force = 3 + src.icon_state = "shield0" + src.add_fingerprint(user) + return + +/obj/item/weapon/cloaking_device/attack_self(mob/user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The cloaking device is now active." + src.force = 40 + src.icon_state = "shield1" + else + user << "\blue The cloaking device is now inactive." + src.force = 3 + src.icon_state = "shield0" + src.add_fingerprint(user) + return + +/obj/item/weapon/ammo/proc/update_icon() + + return + +/obj/item/weapon/ammo/a357/update_icon() + + src.icon_state = text("357-[]", src.amount_left) + src.desc = text("There are [] bullet\s left!", src.amount_left) + return + +/obj/item/weapon/gun/revolver/examine() + set src in usr + + src.desc = text("There are [] bullet\s left! Uses 357.", src.bullets) + ..() + return + +/obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/user as mob) + + if (istype(A, /obj/item/weapon/ammo/a357)) + if (src.bullets >= 7) + user << "\blue It's already fully loaded!" + return 1 + if (A.amount_left <= 0) + user << "\red There is no more bullets!" + return 1 + if (A.amount_left < (7 - src.bullets)) + src.bullets += A.amount_left + user << text("\red You reload [] bullet\s!", A.amount_left) + A.amount_left = 0 + else + user << text("\red You reload [] bullet\s!", 7 - src.bullets) + A.amount_left -= 7 - src.bullets + src.bullets = 7 + A.update_icon() + return 1 + return + +/obj/item/weapon/gun/revolver/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.bullets < 1) + user.show_message("\red *click* *click*", 2) + return + src.bullets-- + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] fires a revolver at []!", user, target), 1, "\red You hear a gunshot", 2) + //Foreach goto(122) + var/turf/T = user.loc + var/turf/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while(!( istype(U, /turf) )) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act() + return + var/obj/bullet/A = new /obj/bullet( user.loc ) + if (!( istype(U, /turf) )) + //A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + user.next_move = world.time + 4 + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/revolver/attack(mob/M as mob, mob/user as mob) + + src.add_fingerprint(user) + var/mob/human/H = M + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + if ((user.a_intent == "hurt" && src.bullets > 0)) + if (prob(20)) + if (M.paralysis < 10) + M.paralysis = 10 + else + if (M.weakened < 10) + M.weakened = 10 + src.bullets-- + src.force = 75 + ..() + src.force = 60 + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been shot point-blank by []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(192) + else + if (prob(50)) + if (M.paralysis < 60) + M.paralysis = 60 + else + if (M.weakened < 60) + M.weakened = 60 + src.force = 60 + ..() + M.stat = 1 + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been pistol whipped []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(315) + return + +/obj/item/weapon/gun/energy/proc/update_icon() + + var/ratio = src.charges / 10 + ratio = round(ratio, 0.25) * 100 + src.icon_state = text("gun[]", ratio) + return + +/obj/item/weapon/gun/energy/laser_gun/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.charges < 1) + user.show_message("\red *click* *click*", 2) + return + src.charges-- + update_icon() + var/turf/T = user.loc + var/atom/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while(!( istype(U, /turf) )) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act() + return + var/obj/beam/a_laser/A = new /obj/beam/a_laser( user.loc ) + if (!( istype(U, /turf) )) + //A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + user.next_move = world.time + 4 + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/energy/laser_gun/attack(mob/M as mob, mob/user as mob) + + ..() + src.add_fingerprint(user) + if ((prob(30) && M.stat < 2)) + var/mob/human/H = M + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.weakened < time) + M.weakened = time + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall", 2) + //Foreach goto(181) + M.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120)) + return + +/obj/item/weapon/gun/energy/taser_gun/update_icon() + + var/ratio = src.charges / 10 + ratio = round(ratio, 0.25) * 100 + src.icon_state = text("t_gun[]", ratio) + return + +/obj/item/weapon/gun/energy/taser_gun/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.charges < 1) + user.show_message("\red *click* *click*", 2) + return + src.charges-- + update_icon() + var/turf/T = user.loc + var/turf/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while((!( istype(U, /turf) ) && U)) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act(1) + return + var/obj/beam/a_laser/s_laser/A = new /obj/beam/a_laser/s_laser( user.loc ) + if (!( istype(U, /turf) )) + //A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/energy/taser_gun/attack(mob/M as mob, mob/user as mob) + + src.add_fingerprint(user) + var/mob/human/H = M + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + if (user.a_intent == "hurt") + if (prob(20)) + if (M.paralysis < 10) + M.paralysis = 10 + else + if (M.weakened < 10) + M.weakened = 10 + if (M.stuttering < 10) + M.stuttering = 10 + ..() + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall", 2) + //Foreach goto(182) + else + if (prob(50)) + if (M.paralysis < 60) + M.paralysis = 60 + else + if (M.weakened < 60) + M.weakened = 60 + if (M.stuttering < 60) + M.stuttering = 60 + M.stat = 1 + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been stunned with the taser gun by []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(309) + return + +/obj/item/weapon/pill_canister/New() + + ..() + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + return + +/obj/item/weapon/pill_canister/placebo/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/P = new /obj/item/weapon/m_pill( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/antitoxin/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/antitoxin/P = new /obj/item/weapon/m_pill/antitoxin( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/Tourette/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/Tourette/P = new /obj/item/weapon/m_pill/Tourette( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/sleep/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/sleep/P = new /obj/item/weapon/m_pill/sleep( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/epilepsy/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/epilepsy/P = new /obj/item/weapon/m_pill/epilepsy( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/cough/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/cough/P = new /obj/item/weapon/m_pill/cough( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/examine() + set src in view(1) + + ..() + if (src.contents.len) + var/pills = 0 + for(var/obj/item/weapon/m_pill/M in src) + pills += M.amount + //Foreach goto(39) + usr << text("\blue There are [] pills inside!", pills) + else + usr << "\blue It looks empty!" + return + +/obj/item/weapon/pill_canister/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/item/weapon/pill_canister/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + var/obj/item/weapon/m_pill/P = pick(src.contents) + if (P) + P.amount-- + var/obj/item/weapon/m_pill/W = new P.type( user ) + if (user.hand) + user.l_hand = W + else + user.r_hand = W + W.layer = 20 + if (P.amount <= 0) + //P = null + del(P) + W.add_fingerprint(user) + src.add_fingerprint(user) + else + return ..() + return + +/obj/item/weapon/pill_canister/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/m_pill)) + var/pills = 0 + for(var/obj/item/weapon/m_pill/M in src) + pills += M.amount + //Foreach goto(34) + if (pills > 30) + usr << "\blue There are too many pills inside!" + return + for(var/obj/item/weapon/m_pill/M in src) + if (M.type == W.type) + M.amount += W:amount + //W = null + del(W) + return + //Foreach goto(97) + if (W) + user.drop_item() + W.loc = src + src.add_fingerprint(user) + W.add_fingerprint(user) + if (istype(W, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != W) + return + if (src.loc != user) + return + t = html_encode(t) + if (t) + src.name = text("Pill Canister- '[]'", t) + else + src.name = "Pill Canister" + return + +/obj/item/weapon/m_pill/proc/ingest(mob/M as mob) + + src.amount-- + if (src.amount <= 0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/m_pill/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/m_pill/F = new src.type( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/m_pill/attack(mob/M as mob, mob/user as mob) + + if ((user != M && istype(M, /mob/human))) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] is forcing [] to swallow the []", user, M, src), 1) + //Foreach goto(41) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = src + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "pill" + M.requests += O + spawn( 0 ) + O.process() + return + else + src.add_fingerprint(user) + ingest(M) + return + +/obj/item/weapon/m_pill/superpill/ingest(mob/M as mob) + + M.fireloss = 0 + M.toxloss = 0 + M.bruteloss = 0 + M.oxyloss = 0 + M.paralysis = 5 + M.stunned = 15 + M.weakened = 10 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/sleep/ingest(mob/M as mob) + + if (M.drowsyness < 600) + M.drowsyness += 600 + M.drowsyness = min(M.drowsyness, 1800) + if (prob(25)) + M.paralysis += 60 + else + if (prob(50)) + M.paralysis += 30 + ..() + return + +/obj/item/weapon/m_pill/cyanide/ingest(mob/M as mob) + + if (M.health > -50.0) + M.toxloss += M.health + 50 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/antitoxin/ingest(mob/M as mob) + + if ((prob(50) && M.drowsyness < 600)) + M.drowsyness += 60 + M.drowsyness = min(M.drowsyness, 600) + if (M.health >= 0) + if (M.toxloss <= 20) + M.toxloss = 0 + else + M.toxloss -= 20 + M.antitoxs += 600 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/cough/ingest(mob/M as mob) + + if ((prob(75) && M.drowsyness < 600)) + M.drowsyness += 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_ch_cou += 1200 + ..() + return + +/obj/item/weapon/m_pill/epilepsy/ingest(mob/M as mob) + + if (M.drowsyness < 600) + M.drowsyness += rand(2, 3) * 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_epil += 1200 + ..() + return + +/obj/item/weapon/m_pill/Tourette/ingest(mob/M as mob) + + if (M.drowsyness < 600) + M.drowsyness += rand(3, 5) * 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_Tourette += 1200 + ..() + return + +/obj/item/weapon/m_pill/examine() + set src in view(1) + + ..() + usr << text("\blue There are [] pills left on the stack!", src.amount) + return + +/obj/item/weapon/m_pill/attackby(obj/item/weapon/m_pill/W as obj, mob/user as mob) + + if (!( istype(W, src.type) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/handcuffs/attack(mob/M as mob, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (istype(M, /mob/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + else + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + return + +/obj/item/weapon/throwing(t_dir, rs) + + if (!( rs )) + rs = src.r_speed + ..(t_dir, rs) + return + +/obj/item/weapon/examine() + set src in view() + + var/t + switch(src.w_class) + if(1.0) + t = "tiny" + if(2.0) + t = "small" + if(3.0) + t = "normal-sized" + if(4.0) + t = "bulky" + if(5.0) + t = "huge" + else + usr << text("This is a \icon[][]. It is a [] item.", src, src.name, t) + ..() + return + +/obj/item/weapon/attack_hand(mob/user as mob) + + if (istype(src.loc, /obj/item/weapon/storage)) + for(var/mob/M in range(1, src.loc)) + if (M.s_active == src.loc) + if (M.client) + M.client.screen -= src + //Foreach goto(34) + src.throwing = 0 + if (src.loc == user) + user.u_equip(src) + if (user.hand) + user.l_hand = src + else + user.r_hand = src + src.loc = user + src.layer = 20 + add_fingerprint(user) + user.UpdateClothing() + return + +/obj/item/weapon/attack_paw(mob/user as mob) + + if (istype(src.loc, /obj/item/weapon/storage)) + for(var/mob/M in range(1, src.loc)) + if (M.s_active == src.loc) + if (M.client) + M.client.screen -= src + //Foreach goto(34) + src.throwing = 0 + if (src.loc == user) + user.u_equip(src) + if (user.hand) + user.l_hand = src + else + user.r_hand = src + src.loc = user + src.layer = 20 + user.UpdateClothing() + return + +/obj/item/weapon/wire/proc/update() + + if (src.amount > 1) + src.icon_state = "spool_wire" + src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount) + else + src.icon_state = "item_wire" + src.desc = "This is just a simple piece of regular insulated wire." + return + +/obj/item/weapon/wire/attack_self(mob/user as mob) + + if (src.laying) + src.laying = 0 + user << "\blue Your done laying wire!" + else + user << "\blue You are not using this to lay wire..." + return + +/obj/item/weapon/card/data/verb/label(t as text) + set src in usr + + if (t) + src.name = text("Data Disk- '[]'", t) + else + src.name = "Data Disk" + src.add_fingerprint(usr) + return + +/obj/item/weapon/card/id/attack_self(mob/user as mob) + + for(var/mob/O in viewers(user, null)) + O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1) + //Foreach goto(20) + src.add_fingerprint(user) + return + +/obj/item/weapon/card/id/verb/read() + set src in usr + + usr << text("\icon[] []: The current assignment on the card is [].", src, src.name, src.assignment) + usr << "\blue The rubric for the 4 access numbers is: general>lab-engine-air" + return + +/obj/item/weapon/rods/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/rods/F = new /obj/item/weapon/rods( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/rods/attackby(obj/item/weapon/rods/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/rods) )) + return + if (W.amount == 6) + return + if (W.amount + src.amount > 6) + src.amount = W.amount + src.amount - 6 + W.amount = 6 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/rods/examine() + set src in view(1) + + ..() + usr << text("There are [] rod\s left on the stack.", src.amount) + return + +/obj/item/weapon/rods/attack_self(mob/user as mob) + + if (locate(/obj/grille, usr.loc)) + for(var/obj/grille/G in usr.loc) + if (G.destroyed) + G.health = 10 + G.density = 1 + G.destroyed = 0 + G.icon_state = "grille" + src.amount-- + else + //Foreach continue //goto(30) + else + if (src.amount < 2) + return + src.amount -= 2 + new /obj/grille( usr.loc ) + if (src.amount < 1) + //SN src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/sheet/metal/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/metal/F = new /obj/item/weapon/sheet/metal( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/metal/attackby(obj/item/weapon/sheet/metal/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/sheet/metal) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/sheet/metal/examine() + set src in view(1) + + ..() + usr << text("There are [] metal sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/metal/attack_self(mob/user as mob) + + var/t1 = text("Amount Left: []
", src.amount) + var/counter = 1 + var/list/L = list( ) + L["rods"] = "metal rods (makes 2)" + L["stool"] = "stool" + L["chair"] = "chair" + L["table"] = "table parts (2)" + L["rack"] = "rack parts" + L["o2can"] = "o2 canister (2)" + L["plcan"] = "pl canister (2)" + L["closet"] = "closet (2)" + L["fl_tiles"] = "floor tiles (makes 4)" + L["reinforced"] = "reinforced sheet (2) (Doesn't stack)" + L["repair"] = "repair wall" + L["construct"] = "construct wall" + for(var/t in L) + counter++ + t1 += text("[] ", src, t, L[t]) + if (counter > 2) + counter = 1 + t1 += "
" + //Foreach goto(186) + t1 += "
" + user << browse(t1, "window=met_sheet") + return + +/obj/item/weapon/sheet/metal/Topic(href, href_list) + + if ((usr.restrained() || usr.stat || usr.equipped() != src)) + return + if (href_list["make"]) + if (src.amount < 1) + //SN src = null + del(src) + return + switch(href_list["make"]) + if("rods") + src.amount-- + var/obj/item/weapon/rods/R = new /obj/item/weapon/rods( usr.loc ) + R.amount = 2 + if("table") + if (src.amount < 2) + return + src.amount -= 2 + new /obj/item/weapon/table_parts( usr.loc ) + if("stool") + src.amount-- + new /obj/stool( usr.loc ) + if("chair") + src.amount-- + var/obj/stool/chair/C = new /obj/stool/chair( usr.loc ) + C.dir = usr.dir + if (C.dir == NORTH) + C.layer = 5 + if("rack") + src.amount-- + new /obj/item/weapon/rack_parts( usr.loc ) + if("o2can") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/machinery/atmoalter/canister/oxygencanister/C = new /obj/machinery/atmoalter/canister/oxygencanister( usr.loc ) + C.gas.oxygen = 0 + if("plcan") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/machinery/atmoalter/canister/poisoncanister/C = new /obj/machinery/atmoalter/canister/poisoncanister( usr.loc ) + C.gas.plasma = 0 + if("reinforced") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/item/weapon/sheet/r_metal/C = new /obj/item/weapon/sheet/r_metal( usr.loc ) + C.amount = 1 + if("closet") + if (src.amount < 2) + return + src.amount -= 2 + new /obj/closet( usr.loc ) + if("fl_tiles") + src.amount-- + var/obj/item/weapon/tile/R = new /obj/item/weapon/tile( usr.loc ) + R.amount = 4 + if("construct") + if (src.amount < 2) + return + src.amount -= 2 + var/turf/F = get_step(usr, usr.dir) + if (!( istype(F, /turf/station/floor) )) + return + var/turf/station/wall/W = new /turf/station/wall( locate(F.x, F.y, F.z) ) + W.icon_state = "girder" + W.updatecell = 1 + W.opacity = 0 + W.state = 1 + W.density = 1 + else + if (src.amount < 2) + return + var/turf/station/wall/W = get_step(usr, usr.dir) + if (!( istype(W, /turf/station/wall) )) + return + src.amount -= 2 + W.icon_state = "" + W.state = 2 + W.density = 1 + W.opacity = 1 + W.updatecell = 0 + if (src.amount <= 0) + //SN src = null + del(src) + return + spawn( 0 ) + src.attack_self(usr) + return + return + +/obj/item/weapon/sheet/glass/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/glass/F = new /obj/item/weapon/sheet/glass( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/glass/attackby(obj/item/weapon/sheet/glass/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/sheet/glass) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/sheet/glass/examine() + set src in view(1) + + ..() + usr << text("There are [] glass sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/glass/attack_self(mob/user as mob) + + if (!( istype(usr.loc, /turf/station) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + switch(alert("Sheet-Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", null, null)) + if("one direct") + var/obj/window/W = new /obj/window( usr.loc ) + W.anchored = 0 + if (src.amount < 1) + return + src.amount-- + if("full (2 sheets)") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/window/W = new /obj/window( usr.loc ) + W.dir = SOUTHWEST + W.ini_dir = SOUTHWEST + W.anchored = 0 + else + if (src.amount <= 0) + user.u_equip(src) + //SN src = null + del(src) + return + return + +/obj/item/weapon/clipboard/attack_self(mob/user as mob) + + var/dat = "Clipboard
" + if (src.pen) + dat += text("Remove Pen

", src) + for(var/obj/item/weapon/paper/P in src) + dat += text("[] Write Remove
", src, P, P.name, src, P, src, P) + //Foreach goto(42) + user << browse(dat, "window=clipboard") + return + +/obj/item/weapon/clipboard/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if (usr.contents.Find(src)) + usr.machine = src + if (href_list["pen"]) + if (src.pen) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = src.pen + src.pen.loc = usr + src.pen.layer = 20 + src.pen = null + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = src.pen + src.pen.loc = usr + src.pen.layer = 20 + src.pen = null + usr.UpdateClothing() + if (src.pen) + src.pen.add_fingerprint(usr) + src.add_fingerprint(usr) + if (href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if ((P && P.loc == src)) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + P.add_fingerprint(usr) + src.add_fingerprint(usr) + if (href_list["write"]) + var/obj/item/P = locate(href_list["write"]) + if ((P && P.loc == src)) + if (istype(usr.r_hand, /obj/item/weapon/pen)) + P.attackby(usr.r_hand, usr) + else + if (istype(usr.l_hand, /obj/item/weapon/pen)) + P.attackby(usr.l_hand, usr) + else + if (istype(src.pen, /obj/item/weapon/pen)) + P.attackby(src.pen, usr) + src.add_fingerprint(usr) + if (href_list["read"]) + var/obj/item/weapon/paper/P = locate(href_list["read"]) + if ((P && P.loc == src)) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", P.name, stars(P.info)), text("window=[]", P.name)) + else + usr << browse(text("[][]", P.name, P.info), text("window=[]", P.name)) + if (ismob(src.loc)) + var/mob/M = src.loc + if (M.machine == src) + spawn( 0 ) + src.attack_self(M) + return + return + +/obj/item/weapon/clipboard/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/clipboard/attack_hand(mob/user as mob) + + if ((locate(/obj/item/weapon/paper, src) && (!( user.equipped() ) && (user.l_hand == src || user.r_hand == src)))) + var/obj/item/weapon/paper/P + for(P in src) + break + //Foreach goto(50) + if (P) + if (user.hand) + user.l_hand = P + else + user.r_hand = P + P.loc = user + P.layer = 20 + P.add_fingerprint(user) + user.UpdateClothing() + src.add_fingerprint(user) + else + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + else + return ..() + return + +/obj/item/weapon/clipboard/attackby(obj/item/weapon/P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/paper)) + if (src.contents.len < 15) + user.drop_item() + P.loc = src + if (istype(P, /obj/item/weapon/paper/flag)) + if (ctf) + ctf.check_win(src) + else + user << "\blue Not enough space!!!" + else + if (istype(P, /obj/item/weapon/pen)) + if (!( src.pen )) + user.drop_item() + P.loc = src + src.pen = P + else + return + src.update() + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/clipboard/proc/update() + + src.icon_state = text("clipboard[][]", (locate(/obj/item/weapon/paper, src) ? "1" : "0"), (locate(/obj/item/weapon/pen, src) ? "1" : "0")) + return + +/obj/item/weapon/fcardholder/attack_self(mob/user as mob) + + var/dat = "Clipboard
" + for(var/obj/item/weapon/f_card/P in src) + dat += text("[] Remove
", src, P, P.name, src, P) + //Foreach goto(23) + user << browse(dat, "window=fcardholder") + return + +/obj/item/weapon/fcardholder/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if (usr.contents.Find(src)) + usr.machine = src + if (href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if ((P && P.loc == src)) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + src.add_fingerprint(usr) + P.add_fingerprint(usr) + src.update() + if (href_list["read"]) + var/obj/item/weapon/f_card/P = locate(href_list["read"]) + if ((P && P.loc == src)) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", P.name, P.display()), text("window=[]", P.name)) + else + usr << browse(text("[][]", P.name, P.display()), text("window=[]", P.name)) + src.add_fingerprint(usr) + if (ismob(src.loc)) + var/mob/M = src.loc + if (M.machine == src) + spawn( 0 ) + src.attack_self(M) + return + return + +/obj/item/weapon/fcardholder/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/fcardholder/attack_hand(mob/user as mob) + + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + src.add_fingerprint(user) + else + return ..() + return + +/obj/item/weapon/fcardholder/attackby(obj/item/weapon/P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/f_card)) + if (src.contents.len < 30) + user.drop_item() + P.loc = src + add_fingerprint(user) + src.add_fingerprint(user) + else + user << "\blue Not enough space!!!" + else + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "Holder Label:", text("[]", src.name), null) as text + if (user.equipped() != P) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("FPCase- '[]'", t) + else + src.name = "Finger Print Case" + else + return + src.update() + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/fcardholder/proc/update() + + var/i = 0 + for(var/obj/item/weapon/f_card/F in src) + i = 1 + break + //else + //Foreach goto(22) + src.icon_state = text("fcardholder[]", (i ? "1" : "0")) + return + +/obj/item/weapon/extinguisher/examine() + set src in usr + + usr << text("\icon[] [] contains [] units of water left!", src, src.name, src.waterleft) + ..() + return + +/obj/item/weapon/extinguisher/afterattack(target as mob|obj|turf|area, mob/user as mob, flag) + + if (src.icon_state == "fire_extinguisher1") + if (src.waterleft < 1) + return + if (world.time < src.last_use + 20) + return + src.last_use = world.time + if (istype(target, /area)) + return + var/cur_loc = get_turf(user) + var/tar_loc = (isturf(target) ? target : get_turf(target)) + if (get_dist(tar_loc, cur_loc) > 1) + var/list/close = list( ) + var/list/far = list( ) + for(var/T in oview(2, tar_loc)) + if (get_dist(T, tar_loc) <= 1) + close += T + else + far += T + //Foreach goto(147) + close += tar_loc + var/t = null + t = 1 + while(t <= 14) + var/obj/effects/water/W = new /obj/effects/water( cur_loc ) + if (rand(1, 3) != 1) + walk_towards(W, pick(close), null) + else + walk_towards(W, pick(far), null) + sleep(1) + t++ + src.waterleft-- + src.last_use = world.time + else + if (cur_loc == tar_loc) + new /obj/effects/water( cur_loc ) + src.waterleft -= 0.25 + src.last_use = 1 + else + var/list/possible = list( ) + for(var/T in oview(1, tar_loc)) + possible += T + //Foreach goto(366) + possible += tar_loc + var/t = null + t = 1 + while(t <= 7) + var/obj/effects/water/W = new /obj/effects/water( cur_loc ) + walk_towards(W, pick(possible), null) + sleep(1) + t++ + src.waterleft -= 0.5 + src.last_use = world.time + else + return ..() + return + +/obj/item/weapon/extinguisher/attack_self(mob/user as mob) + + if (src.icon_state == "fire_extinguisher0") + src.icon_state = "fire_extinguisher1" + src.desc = "The safety is off." + else + src.icon_state = "fire_extinguisher0" + src.desc = "The safety is on." + return + +/obj/item/weapon/pen/sleepypen/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/pen/sleepypen/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 5 + var/datum/chemical/s_tox/C = new /datum/chemical/s_tox( null ) + C.moles = C.density * 5 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + ..() + return + +/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if (src.desc == "It's a normal black ink pen.") + return ..() + if (user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been stabbed with [] by [].", M, src, user), 1) + //Foreach goto(57) + var/amount = src.chem.transfer_mob(M, src.chem.maximum) + user.show_message(text("\red You inject [] units into the [].", amount, M)) + src.desc = "It's a normal black ink pen." + return + +/obj/item/weapon/paint/attack_self(mob/user as mob) + + var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white", "neutral" ) + if ((user.equipped() != src || user.stat || user.restrained())) + return + src.color = t1 + src.icon_state = text("paint_[]", t1) + add_fingerprint(user) + return + +/obj/item/weapon/paper/burn(fi_amount) + + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + //SN src = null + del(src) + return + return + return + return + +/obj/item/weapon/paper/photograph/New() + + ..() + src.pixel_y = 0 + src.pixel_x = 0 + return + +/obj/item/weapon/paper/photograph/attack_self(mob/user as mob) + + var/n_name = input(user, "What would you like to label the photo?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("photo[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/photograph/examine() + set src in view() + + ..() + return + +/obj/item/weapon/paper/flag/burn() + + return + return + +/obj/item/weapon/paper/flag/New() + + ..() + src.pixel_y = 0 + src.pixel_x = 0 + src.name = "flag- 'FLAG'" + return + +/obj/item/weapon/paper/flag/attack_hand() + + if ((ctf && ctf.immobile)) + return 0 + else + . = ..() + return + +/obj/item/weapon/paper/flag/attack_self(mob/user as mob) + + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("flag[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/flag/attackby(P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/pen)) + ..() + else + if (istype(P, /obj/item/weapon/paint)) + var/obj/item/weapon/paint/C = P + src.icon_state = text("flag_[]", C.color) + if (ctf) + ctf.check_win() + else + return + return + +/obj/item/weapon/paper/New() + + ..() + src.pixel_y = rand(1, 16) + src.pixel_x = rand(1, 16) + return + +/obj/item/weapon/paper/attack_self(mob/user as mob) + + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("paper[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/attackby(obj/item/weapon/P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "What text do you wish to add?", text("[]", src.name), null) as message + if ((get_dist(src, usr) > 1 && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P)) + return + t = html_encode(t) + t = dd_replacetext(t, "\n", "
") + t = dd_replacetext(t, "\[b\]", "") + t = dd_replacetext(t, "\[/b\]", "") + t = dd_replacetext(t, "\[i\]", "") + t = dd_replacetext(t, "\[/i\]", "") + t = dd_replacetext(t, "\[u\]", "") + t = dd_replacetext(t, "\[/u\]", "") + t = dd_replacetext(t, "\[sign\]", text("[]", user.rname)) + t = text("[]", t) + src.info += t + else + if (istype(P, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = P + if ((W.welding && W.weldfuel > 0)) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] burns [] with the welding tool!", user, src), 1, "\red You hear a small burning noise", 2) + //Foreach goto(323) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(P, /obj/item/weapon/igniter)) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] burns [] with the igniter!", user, src), 1, "\red You hear a small burning noise", 2) + //Foreach goto(406) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(P, /obj/item/weapon/wirecutters)) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] starts cutting []!", user, src), 1) + //Foreach goto(489) + sleep(50) + if (((src.loc == src || get_dist(src, user) <= 1) && (!( user.stat ) && !( user.restrained() )))) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] cuts [] to pieces!", user, src), 1) + //Foreach goto(580) + //SN src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/examine() + set src in view() + + ..() + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", src.name, stars(src.info)), text("window=[]", src.name)) + else + usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name)) + return + +/obj/item/weapon/f_card/examine() + set src in view(2) + + ..() + usr << text("\blue There are [] on the stack!", src.amount) + usr << browse(text("[][]", src.name, display()), text("window=[]", src.name)) + return + +/obj/item/weapon/f_card/proc/display() + + if (src.fingerprints) + var/dat = "Fingerprints on Card
" + var/L = params2list(src.fingerprints) + for(var/i in L) + dat += text("[]
", i) + //Foreach goto(41) + return dat + else + return "There are no fingerprints on this card." + return + +/obj/item/weapon/f_card/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/f_card/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/f_card)) + if ((src.fingerprints || W.fingerprints)) + return + if (src.amount == 10) + return + if (W:amount + src.amount > 10) + src.amount = 10 + W:amount = W:amount + src.amount - 10 + else + src.amount += W:amount + //W = null + del(W) + src.add_fingerprint(user) + if (W) + W.add_fingerprint(user) + else + if (istype(W, /obj/item/weapon/pen)) + var/t = input(user, "Card Label:", text("[]", src.name), null) as text + if (user.equipped() != W) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("FPrintC- '[]'", t) + else + src.name = "Finger Print Card" + W.add_fingerprint(user) + src.add_fingerprint(user) + return + +/obj/item/weapon/f_card/add_fingerprint() + + ..() + if (src.fingerprints) + if (src.amount > 1) + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( (ismob(src.loc) ? src.loc.loc : src.loc) ) + F.amount = --src.amount + src.amount = 1 + src.icon_state = "f_print_card1" + return + +/obj/item/weapon/f_print_scanner/attackby(obj/item/weapon/f_card/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/f_card)) + if (W.fingerprints) + return + if (src.amount == 20) + return + if (W.amount + src.amount > 20) + src.amount = 20 + W.amount = W.amount + src.amount - 20 + else + src.amount += W.amount + //W = null + del(W) + src.add_fingerprint(user) + if (W) + W.add_fingerprint(user) + return + +/obj/item/weapon/f_print_scanner/attack_self(mob/user as mob) + + src.printing = !( src.printing ) + src.icon_state = text("f_print_scanner[]", src.printing) + add_fingerprint(user) + return + +/obj/item/weapon/f_print_scanner/attack(mob/human/M as mob, mob/user as mob) + + if ((!( ismob(M) ) || !( istype(M.primary, /obj/dna) ) || !( istype(M, /mob/human) ) || M.gloves)) + user << text("\blue Unable to locate any fingerprints on []!", M) + return 0 + else + if ((src.amount < 1 && src.printing)) + user << text("\blue Fingerprints scanned on []. Need more cards to print.", M) + src.printing = 0 + src.icon_state = text("f_print_scanner[]", src.printing) + if (src.printing) + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.fingerprints = md5(M.primary.uni_identity) + F.icon_state = "f_print_card1" + F.name = text("FPrintC- '[]'", M.name) + user << "\blue Done printing." + user << text("\blue []'s Fingerprints: []", M, md5(M.primary.uni_identity)) + return + +/obj/item/weapon/f_print_scanner/afterattack(atom/A as mob|obj|turf|area, mob/user as mob) + + src.add_fingerprint(user) + if (!( A.fingerprints )) + user << "\blue Unable to locate any fingerprints!" + return 0 + else + if ((src.amount < 1 && src.printing)) + user << "\blue Fingerprints found. Need more cards to print." + src.printing = 0 + src.icon_state = text("f_print_scanner[]", src.printing) + if (src.printing) + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.fingerprints = A.fingerprints + F.icon_state = "f_print_card1" + user << "\blue Done printing." + var/list/L = params2list(A.fingerprints) + user << text("\blue Isolated [] fingerprints.", L.len) + for(var/i in L) + user << text("\blue \t []", i) + //Foreach goto(186) + return + +/obj/item/weapon/healthanalyzer/attack(mob/M as mob, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1) + //Foreach goto(67) + user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1) + user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.oxyloss, M.toxloss, M.fireloss, M.bruteloss), 1) + user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) + if (M.rejuv) + user.show_message(text("\blue Bloodstream Analysis located [] units of rejuvenation chemicals.", M.rejuv), 1) + src.add_fingerprint(user) + return + return + +/obj/item/weapon/analyzer/attack_self(mob/user as mob) + + if (user.stat) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + user.show_message("\blue Results:", 1) + var/t = "" + var/t1 = turf_total / 3600000.0 * 100 + if ((90 < t1 && t1 < 110)) + user.show_message(text("\blue Air Pressure: []%", t1), 1) + else + user.show_message(text("\blue Air Pressure:\red []%", t1), 1) + t1 = T.n2 / turf_total * 100 + t1 = round(t1, 0.0010) + if ((60 < t1 && t1 < 80)) + t += text("Nitrogen: [] ", t1) + else + t += text("Nitrogen: [] ", t1) + t1 = T.oxygen / turf_total * 100 + t1 = round(t1, 0.0010) + if ((20 < t1 && t1 < 24)) + t += text("Oxygen: [] ", t1) + else + t += text("Oxygen: [] ", t1) + t1 = T.poison / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 0.5) + t += text("Plasma: [] ", t1) + else + t += text("Plasma: [] ", t1) + t1 = T.co2 / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 1) + t += text("CO2: [] ", t1) + else + t += text("CO2: [] ", t1) + t1 = T.sl_gas / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 5) + t += text("NO2: []", t1) + else + t += text("NO2: []", t1) + user.show_message(t, 1) + user.show_message(text("\blue \t Temperature: [] C", T.heat / turf_total + -254.7), 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/proc/return_inv() + + var/list/L = list( ) + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + //Foreach goto(22) + return L + return + +/obj/item/weapon/storage/proc/show_to(mob/user as mob) + + user.client.screen -= src.boxes + user.client.screen -= src.closer + user.client.screen -= src.contents + user.client.screen += src.boxes + user.client.screen += src.closer + user.client.screen += src.contents + user.s_active = src + return + +/obj/item/weapon/storage/proc/hide_from(mob/user as mob) + + user.client.screen -= src.boxes + user.client.screen -= src.closer + user.client.screen -= src.contents + return + +/obj/item/weapon/storage/proc/close(mob/user as mob) + + src.hide_from(user) + user.s_active = null + return + +/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) + + var/cx = tx + var/cy = ty + src.boxes.screen_loc = text("[],[] to [],[]", tx, ty, mx, my) + for(var/obj/O in src.contents) + O.screen_loc = text("[],[]", cx, cy) + O.layer = 20 + cx++ + if (cx > mx) + cx = tx + cy-- + //Foreach goto(56) + src.closer.screen_loc = text("[],[]", mx, my) + return + +/obj/item/weapon/storage/proc/orient2hud(mob/user as mob) + + if (src == user.l_hand) + src.orient_objs(3, 11, 3, 4) + else + if (src == user.r_hand) + src.orient_objs(1, 11, 1, 4) + else + if (src == user.back) + src.orient_objs(4, 10, 4, 3) + else + src.orient_objs(7, 8, 10, 7) + return + +/obj/item/weapon/storage/lglo_kit/New() + + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + ..() + return + +/obj/item/weapon/storage/flashbang_kit/New() + + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + ..() + return + +/obj/item/weapon/storage/stma_kit/New() + + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + ..() + return + +/obj/item/weapon/storage/gl_kit/New() + + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + ..() + return + +/obj/item/weapon/storage/trackimp_kit/New() + + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implanter( src ) + new /obj/item/weapon/implantpad( src ) + new /obj/item/weapon/locator( src ) + ..() + return + +/obj/item/weapon/storage/fcard_kit/New() + + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + ..() + return + +/obj/item/weapon/storage/id_kit/New() + + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + ..() + return + +/obj/item/weapon/storage/handcuff_kit/New() + + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + ..() + return + +/obj/item/weapon/storage/disk_kit/disks/New() + + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + ..() + return + +/obj/item/weapon/storage/disk_kit/disks2/New() + + spawn( 2 ) + for(var/obj/item/weapon/card/data/D in src.loc) + D.loc = src + //Foreach goto(23) + return + ..() + return + +/obj/item/weapon/storage/backpack/New() + + new /obj/item/weapon/storage/box( src ) + ..() + return + +/obj/item/weapon/storage/backpack/MouseDrop(obj/over_object as obj) + + if (src.loc != usr) + return + if ((istype(usr, /mob/human) || (ticker && ticker.mode == "monkey"))) + var/mob/M = usr + if (!( istype(over_object, /obj/screen) )) + return ..() + if ((!( M.restrained() ) && !( M.stat ) && M.back == src)) + if (over_object.name == "r_hand") + if (!( M.r_hand )) + M.u_equip(src) + M.r_hand = src + else + if (over_object.name == "l_hand") + if (!( M.l_hand )) + M.u_equip(src) + M.l_hand = src + M.UpdateClothing() + src.add_fingerprint(usr) + return + +/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.contents.len >= 7) + return + if (W.w_class > 3) + return + var/t + for(var/obj/item/weapon/O in src) + t += O.w_class + //Foreach goto(46) + t += W.w_class + if (t > 20) + user << "You cannot fit the item inside. (Remove larger classed items)" + return + user.u_equip(W) + W.loc = src + if ((user.client && user.s_active != src)) + user.client.screen -= W + src.orient2hud(user) + W.dropped() + add_fingerprint(user) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\blue [] has added [] to []!", user, W, src), 1) + //Foreach goto(206) + return + +/obj/item/weapon/storage/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.contents.len >= 7) + return + if ((W.w_class >= 3 || istype(W, /obj/item/weapon/storage))) + return + user.u_equip(W) + W.loc = src + if ((user.client && user.s_active != src)) + user.client.screen -= W + src.orient2hud(user) + W.dropped() + add_fingerprint(user) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\blue [] has added [] to []!", user, W, src), 1) + //Foreach goto(139) + return + +/obj/item/weapon/storage/dropped(mob/user as mob) + + src.orient_objs(7, 8, 10, 7) + return + +/obj/item/weapon/storage/MouseDrop(over_object, src_location, over_location) + + ..() + if ((over_object == usr && (get_dist(src, usr) <= 1 || usr.contents.Find(src)))) + if (usr.s_active) + usr.s_active.close(usr) + src.show_to(usr) + return + +/obj/item/weapon/storage/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/storage/attack_hand(mob/user as mob) + + if (src.loc == user) + if (user.s_active) + user.s_active.close(user) + src.show_to(user) + else + ..() + for(var/mob/M in range(1, null)) + if (M.s_active == src) + src.close(M) + //Foreach goto(76) + src.orient2hud(user) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/New() + + src.boxes = new /obj/screen/storage( ) + src.boxes.name = "storage" + src.boxes.master = src + src.boxes.icon_state = "block" + src.boxes.screen_loc = "7,7 to 10,8" + src.boxes.layer = 19 + src.closer = new /obj/screen/close( ) + src.closer.master = src + src.closer.icon_state = "x" + src.closer.layer = 20 + spawn( 5 ) + src.orient_objs(7, 8, 10, 7) + return + return + +/obj/item/weapon/storage/toolbox/New() + + new /obj/item/weapon/screwdriver( src ) + new /obj/item/weapon/wrench( src ) + new /obj/item/weapon/weldingtool( src ) + new /obj/item/weapon/radio( src ) + new /obj/item/weapon/analyzer( src ) + new /obj/item/weapon/extinguisher( src ) + new /obj/item/weapon/wirecutters( src ) + ..() + return + +/obj/item/weapon/storage/toolbox/attack(mob/M as mob, mob/user as mob) + + ..() + if ((prob(30) && M.stat < 2)) + var/mob/H = M + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.stunned < time) + M.stunned = time + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall.", 2) + //Foreach goto(169) + M.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120)) + return + +/obj/item/weapon/storage/firstaid/fire/New() + + ..() + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/healthanalyzer( src ) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = C.density * 15 / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + return + +/obj/item/weapon/storage/firstaid/syringes/New() + + ..() + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + return + +/obj/item/weapon/storage/firstaid/regular/New() + + ..() + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/healthanalyzer( src ) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = C.density * 15 / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + return + +/obj/item/weapon/storage/firstaid/toxin/New() + + ..() + new /obj/item/weapon/pill_canister/antitoxin( src ) + new /obj/item/weapon/pill_canister/antitoxin( src ) + var/t = null + t = 1 + while(t <= 4) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/pl_coag/C = new /datum/chemical/pl_coag( null ) + C.moles = C.density * 15 / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + t++ + new /obj/item/weapon/healthanalyzer( src ) + return + +/obj/item/weapon/storage/firstaid/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.contents.len >= 7) + return + if ((W.w_class >= 2 || istype(W, /obj/item/weapon/storage))) + return + ..() + return + +/obj/item/weapon/tile/New() + + src.pixel_x = rand(1, 14) + src.pixel_y = rand(1, 14) + return + +/obj/item/weapon/tile/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/tile/F = new /obj/item/weapon/tile( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/tile/proc/build(turf/S as turf) + + var/area/A = S.loc + var/turf/station/floor/W = new /turf/station/floor( locate(S.x, S.y, S.z) ) + if (istype(A, /area)) + A.contents -= W + A.contents += W + W.oxygen = 0 + return + +/obj/item/weapon/tile/attack_self(mob/user as mob) + + if (usr.stat) + return + var/T = user.loc + if (!( istype(T, /turf) )) + user << "\blue You must be on the ground!" + return + else + var/S = T + if (!( istype(S, /turf/space) )) + user << "You cannot build on or repair this turf!" + return + else + src.build(S) + src.amount-- + if (src.amount < 1) + user.u_equip(src) + //SN src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/tile/attackby(obj/item/weapon/tile/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/tile) )) + return + if (W.amount == 10) + return + W.add_fingerprint(user) + if (W.amount + src.amount > 10) + src.amount = W.amount + src.amount - 10 + W.amount = 10 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/tile/examine() + set src in view(1) + + ..() + usr << text("There are [] tile\s left on the stack.", src.amount) + return + +/obj/item/weapon/igniter/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/radio/signaler) && !( src.status ))) + var/obj/item/weapon/radio/signaler/S = W + if (!( S.b_stat )) + return + var/obj/item/weapon/assembly/rad_ignite/R = new /obj/item/weapon/assembly/rad_ignite( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + + else if ((istype(W, /obj/item/weapon/prox_sensor) && !( src.status ))) + + var/obj/item/weapon/assembly/prox_ignite/R = new /obj/item/weapon/assembly/prox_ignite( user ) + W.loc = R + R.part1 = W + W.layer = initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + user.u_equip(W) + user.r_hand = R + else + user.u_equip(W) + user.l_hand = R + W.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The igniter is ready!") + else + user.show_message("\blue The igniter can now be attached!") + src.add_fingerprint(user) + return + +/obj/item/weapon/igniter/attack_self(mob/user as mob) + + src.add_fingerprint(user) + spawn( 5 ) + ignite() + return + return + +/obj/item/weapon/igniter/proc/ignite() + + if (src.status) + var/turf/T = src.loc + if (src.master) + T = src.master.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + if (!( istype(T, /turf) )) + return + if (T.firelevel < 900000.0) + T.firelevel = T.poison + return + +/obj/item/weapon/igniter/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.status) + usr.show_message("The igniter is ready!") + else + usr.show_message("The igniter can be attached!") + return + +/obj/item/weapon/radio/electropack/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.e_pads) + usr << "\blue The electric pads are exposed!" + return + +/obj/item/weapon/radio/electropack/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/radio/electropack/attack_hand(mob/user as mob) + + if (src == user.back) + user << "\blue You need help taking this off!" + return + else + ..() + return + +/obj/item/weapon/radio/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + src.e_pads = !( src.e_pads ) + if (src.e_pads) + user.show_message("\blue The electric pads have been exposed!") + else + user.show_message("\blue The electric pads have been reinserted!") + src.add_fingerprint(user) + else + if (istype(W, /obj/item/weapon/clothing/head/helmet)) + var/obj/item/weapon/assembly/shock_kit/A = new /obj/item/weapon/assembly/shock_kit( user ) + W.loc = A + A.part1 = W + W.layer = initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + user.u_equip(W) + user.r_hand = A + else + user.u_equip(W) + user.l_hand = A + W.master = A + src.master = A + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = A + A.part2 = src + A.layer = 20 + src.add_fingerprint(user) + A.add_fingerprint(user) + return + +/obj/item/weapon/radio/electropack/Topic(href, href_list) + + if (usr.stat) + return + if (((istype(usr, /mob/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["code"]) + src.code += text2num(href_list["code"]) + src.code = round(src.code) + src.code = min(100, src.code) + src.code = max(1, src.code) + else + if (href_list["power"]) + src.on = !( src.on ) + src.icon_state = text("electropack[]", src.on) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(308) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(384) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/electropack/accept_rad(obj/item/weapon/radio/signaler/R as obj, message) + + if ((istype(R, /obj/item/weapon/radio/signaler) && R.freq == src.freq && R.code == src.code)) + return 1 + else + return null + return + +/obj/item/weapon/radio/electropack/r_signal() + + if ((ismob(src.loc) && src.on)) + var/mob/M = src.loc + var/turf/T = M.loc + if ((istype(T, /turf) || istype(T, /obj/move))) + if (M.last_move) + step(M, M.last_move) + M.show_message("\red You feel a sharp shock!") + if (M.weakened < 10) + M.weakened = 10 + if ((src.master && src.wires & 1)) + src.master:r_signal(1) + return + +/obj/item/weapon/radio/electropack/attack_self(mob/user as mob, flag1) + + if (!( istype(user, /mob/human) )) + return + user.machine = src + var/dat = text("[]
\nFrequency/Code for electropack:
\nFrequency: -- [] ++
\nCode: -- [] ++
\n
", src, (src.on ? "Turn Off" : "Turn On"), src, src, src.freq, src, src, src, src, src.code, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/proc/accept_rad(obj/item/weapon/radio/R as obj, message) + + if ((R.freq == src.freq && message)) + return 1 + else + return null + return + +/obj/item/weapon/radio/proc/r_signal() + + return + +/obj/item/weapon/radio/proc/send_crackle() + + if ((src.listening && src.wires & 2)) + return hearers(3, src.loc) + return + +/obj/item/weapon/radio/proc/sendm(msg) + + if ((src.listening && src.wires & 2)) + return hearers(1, src.loc) + return + +/obj/item/weapon/radio/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.b_stat) + usr.show_message("\blue The radio can be attached and modified!") + else + usr.show_message("\blue The radio can not be modified or attached!") + return + +/obj/item/weapon/radio/attackby(obj/item/weapon/W as obj, mob/user as mob) + + user.machine = src + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.b_stat = !( src.b_stat ) + if (src.b_stat) + user.show_message("\blue The radio can now be attached and modified!") + else + user.show_message("\blue The radio can no longer be modified or attached!") + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(83) + src.add_fingerprint(user) + return + +/obj/item/weapon/radio/beacon/hear_talk() + + return + return + +/obj/item/weapon/radio/beacon/sendm() + + return null + return + +/obj/item/weapon/radio/beacon/send_crackle() + + return null + return + +/obj/item/weapon/radio/beacon/verb/alter_signal(t as text) + set src in usr + + if ((usr.canmove && !( usr.restrained() ))) + src.code = t + if (!( src.code )) + src.code = "beacon" + src.add_fingerprint(usr) + return + +/obj/item/weapon/radio/signaler/accept_rad(obj/item/weapon/radio/signaler/R as obj, message) + + if ((istype(R, /obj/item/weapon/radio/signaler) && R.freq == src.freq && R.code == src.code)) + return 1 + else + return null + return + +/obj/item/weapon/radio/signaler/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.b_stat) + usr.show_message("\blue The signaler can be attached and modified!") + else + usr.show_message("\blue The signaler can not be modified or attached!") + return + +/obj/item/weapon/radio/signaler/attack_self(mob/user as mob, flag1) + + user.machine = src + var/t1 + if ((src.b_stat && !( flag1 ))) + t1 = text("-------
\nGreen Wire: []
\nRed Wire: []
\nBlue Wire: []
\n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + else + t1 = "-------" + var/dat = text("Speaker: []
\nSend Signal
\nFrequency/Code for signaler:
\nFrequency: -- [] ++
\nCode: -- [] ++
\n[]
", (src.listening ? text("Engaged", src) : text("Disengaged", src)), src, src, src, src.freq, src, src, src, src, src.code, src, src, t1) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/signaler/hear_talk() + + return + return + +/obj/item/weapon/radio/signaler/sendm() + + return + return + +/obj/item/weapon/radio/signaler/send_crackle() + + return + return + +/obj/item/weapon/radio/signaler/r_signal(signal) + + + + if (!( src.wires & 2 )) + return + if ((src.master && src.wires & 1)) + + + src.master:r_signal(signal) + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(64) + return + +/obj/item/weapon/radio/signaler/proc/s_signal(signal) + + + if (signal == null) + signal = 1 + if (!( src.wires & 4 )) + return + for(var/obj/item/weapon/radio/R in world) + + if (R.accept_rad(src)) + spawn( 0 ) + + if (R) + R.r_signal(signal) + return + //Foreach goto(48) + return + +/obj/item/weapon/radio/signaler/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["code"]) + src.code += text2num(href_list["code"]) + src.code = round(src.code) + src.code = min(100, src.code) + src.code = max(1, src.code) + else + if (href_list["send"]) + var/t1 = round(text2num(href_list["send"])) + spawn( 0 ) + src.s_signal(t1) + return + else + if (href_list["listen"]) + src.listening = text2num(href_list["listen"]) + else + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if ((!( src.b_stat ) && !( src.master ))) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + src.add_fingerprint(usr) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(501) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(577) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/intercom/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/item/weapon/radio/intercom/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/radio/intercom/send_crackle() + + if (src.listening) + return list( ) + return + +/obj/item/weapon/radio/intercom/sendm(msg) + + if (src.listening) + return hearers(7, src.loc) + return + +/obj/item/weapon/radio/attack_self(mob/user as mob) + + user.machine = src + var/t1 + if (src.b_stat) + t1 = text("-------
\nGreen Wire: []
\nRed Wire: []
\nBlue Wire: []
\n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + else + t1 = "-------" + var/dat = text("Microphone: []
\nSpeaker: []
\nFrequency: -- [] ++
\n[]
", (src.broadcasting ? text("Engaged", src) : text("Disengaged", src)), (src.listening ? text("Engaged", src) : text("Disengaged", src)), src, src, src.freq, src, src, t1) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["talk"]) + src.broadcasting = text2num(href_list["talk"]) + else + if (href_list["listen"]) + src.listening = text2num(href_list["listen"]) + else + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(390) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(466) + src.add_fingerprint(usr) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/talk_into(mob/M as mob, msg) + + if (!( src.wires & 4 )) + return + var/list/receive = list( ) + var/list/crackle = list( ) + for(var/obj/item/weapon/radio/R in world) + if (((src.freq == 0 || R.accept_rad(src, msg)) && src.freq != 5)) + for(var/i in R.sendm(msg)) + receive -= i + receive += i + //Foreach goto(118) + for(var/i in R.send_crackle()) + crackle -= i + crackle += i + //Foreach goto(162) + //Foreach goto(43) + for(var/i in receive) + crackle -= i + //Foreach goto(203) + for(var/mob/O in crackle) + O.show_message(text("\icon[] Crackle,Crackle", src), 2) + //Foreach goto(233) + if (istype(M, /mob/human)) + for(var/mob/O in receive) + if (istype(O, /mob/human)) + O.show_message(text("[]-\icon[]\[[]\]-broadcasts: []", M.rname, src, src.freq, msg), 2) + else + O.show_message(text("[]-\icon[]\[[]\]-broadcasts: []", M.rname, src, src.freq, stars(msg)), 2) + //Foreach goto(284) + if (src.freq == 5) + for(var/mob/O in receive) + if (istype(O, /mob/human)) + O.show_message(text("[]-\icon[]\[[]\]-broadcasts (over PA): []", M.rname, src, src.freq, msg), 2) + else + O.show_message(text("[]-\icon[]\[[]\]-broadcasts (over PA): []", M.rname, src, src.freq, stars(msg)), 2) + //Foreach goto(393) + else + for(var/mob/O in receive) + if (istype(O, M)) + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts: []", src, src.freq, msg), 2) + else + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts: chimpering", src, src.freq), 2) + //Foreach goto(492) + if (src.freq == 5) + for(var/mob/O in receive) + if (istype(O, M)) + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts (over PA): []", src, src.freq, msg), 2) + else + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts (over PA): chimpering", src, src.freq), 2) + //Foreach goto(585) + return + +/obj/item/weapon/radio/hear_talk(mob/M as mob, msg) + + if (src.broadcasting) + talk_into(M, msg) + return + +/obj/item/weapon/shard/Bump() + + spawn( 0 ) + if (prob(20)) + src.force = 15 + else + src.force = 4 + ..() + return + return + +/obj/item/weapon/shard/New() + + + src.icon_state = pick("large", "medium", "small") + switch(src.icon_state) + if("small") + src.pixel_x = rand(1, 18) + src.pixel_y = rand(1, 18) + if("medium") + src.pixel_x = rand(1, 16) + src.pixel_y = rand(1, 16) + if("large") + src.pixel_x = rand(1, 10) + src.pixel_y = rand(1, 5) + else + return + +/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob) + + ..() + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + new /obj/item/weapon/sheet/glass( user.loc ) + //SN src = null + del(src) + return + return + +/obj/item/weapon/Bump(mob/M as mob) + + spawn( 0 ) + ..() + if (src.throwing) + src.throwing = 0 + src.density = 0 + if (istype(M, /obj)) + var/obj/O = M + for(var/mob/B in viewers(M, null)) + B.show_message(text("\red [] has been hit by [].", M, src), 1) + //Foreach goto(71) + O.hitby(src) + if (!( istype(M, /mob) )) + return + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been hit by [].", M, src), 1) + //Foreach goto(143) + if (M.health > -100.0) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/dam_zone = pick("chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(src.throwforce, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + M.bruteloss += src.throwforce + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + return + return + +/obj/item/weapon/wrench/New() + + if (prob(75)) + src.pixel_x = rand(0, 16) + return + +/obj/item/weapon/screwdriver/New() + + if (prob(75)) + src.pixel_y = rand(0, 16) + return + +/obj/item/weapon/dropper/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/dropper/attack_hand() + + ..() + src.update_is() + return + +/obj/item/weapon/dropper/proc/update_is() + + var/t1 = round(src.chem.volume()) + if (istype(src.loc, /mob)) + if (src.mode == "inject") + src.icon_state = text("dropper_[]_I", t1) + else + src.icon_state = text("dropper_[]_d", t1) + else + src.icon_state = text("dropper_[]", t1) + src.s_istate = "dropper" + return + +/obj/item/weapon/dropper/dropped() + + ..() + src.update_is() + return + +/obj/item/weapon/dropper/attack_self() + + if (src.mode == "inject") + src.mode = "draw" + else + src.mode = "inject" + src.update_is() + return + +/obj/item/weapon/dropper/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 5 + ..() + return + +/obj/item/weapon/dropper/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been eyedropped with [] by [].", M, src, user), 1) + //Foreach goto(89) + var/amount = src.chem.dropper_mob(M, 1) + src.update_is() + user.show_message(text("\red You drop [] units into []'s eyes. The dropper contains [] millimeters.", amount, M, src.chem.volume())) + src.add_fingerprint(user) + return + +/obj/item/weapon/implantcase/proc/update() + + if (src.imp) + src.icon_state = text("implantcase-[]", src.imp.color) + else + src.icon_state = "implantcase-0" + return + +/obj/item/weapon/implantcase/attackby(obj/item/weapon/I as obj, mob/user as mob) + + if (istype(I, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != I) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("Glass Case- '[]'", t) + else + src.name = "Glass Case" + else + if (!( istype(I, /obj/item/weapon/implanter) )) + return + if (I:imp) + if ((src.imp || I:imp.implanted)) + return + I:imp.loc = src + src.imp = I:imp + I:imp = null + src.update() + I:update() + else + if (src.imp) + if (I:imp) + return + src.imp.loc = I + I:imp = src.imp + src.imp = null + update() + I:update() + return + +/obj/item/weapon/implantcase/tracking/New() + + src.imp = new /obj/item/weapon/implant/tracking( src ) + ..() + return + +/obj/item/weapon/implantpad/proc/update() + + if (src.case) + src.icon_state = "implantpad-1" + else + src.icon_state = "implantpad-0" + return + +/obj/item/weapon/implantpad/attack_hand(mob/user as mob) + + if ((src.case && (user.l_hand == src || user.r_hand == src))) + if (user.hand) + user.l_hand = src.case + else + user.r_hand = src.case + src.case.loc = user + src.case.layer = 20 + src.case.add_fingerprint(user) + src.case = null + user.UpdateClothing() + src.add_fingerprint(user) + update() + else + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + else + return ..() + return + +/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob) + + if (istype(C, /obj/item/weapon/implantcase)) + if (!( src.case )) + user.drop_item() + C.loc = src + src.case = C + else + return + src.update() + return + +/obj/item/weapon/implantpad/attack_self(mob/user as mob) + + user.machine = src + var/dat = "Implant Mini-Computer:
" + if (src.case) + if (src.case.imp) + if (istype(src.case.imp, /obj/item/weapon/implant/tracking)) + var/obj/item/weapon/implant/tracking/T = src.case.imp + dat += text("Implant Specifications:
\nName: Tracking Beacon
\nZone: Spinal Column> 2-5 vertebrae
\nPower Source: Nervous System Ion Withdrawl Gradient
\nLife: 10 minutes after death of host
\nImportant Notes: None
\n
\nImplant Details:
\nFunction: Continuously transmits low power signal on frequency- Useful for tracking.
\nRange: 35-40 meters
\nSpecial Features:
\nNeuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if\na malfunction occurs thereby securing safety of subject. The implant will melt and\ndisintegrate into bio-safe elements.
\nIntegrity: Gradient creates slight risk of being overcharged and frying the\ncircuitry. As a result neurotoxins can cause massive damage.
\nImplant Specifics:\nFrequency (144.1-148.9): -- [] ++
\nID (1-100): -- [] ++
", src, src, T.freq, src, src, src, src, T.id, src, src) + else + if (istype(src.case.imp, /obj/item/weapon/implant/freedom)) + dat += "Implant Specifications:
\nName: Freedom Beacon
\nZone: Right Hand> Near wrist
\nPower Source: Lithium Ion Battery
\nLife: optimum 5 uses
\nImportant Notes: Illegal
\n
\nImplant Details:
\nFunction: Transmits a specialized cluster of signals to override handcuff locking\nmechanisms
\nSpecial Features:
\nNeuro-Scan- Analyzes certain shadow signals in the nervous system along the dark\njoy sectors which respond mainly to chuckling
\nIntegrity: The battery is extremely weak and commonly after injection its\nlife can drive down to only 1 use.
\nNo Implant Specifics" + else + dat += "Implant ID not in database" + else + dat += "The implant casing is empty." + else + dat += "Please insert an implant casing!" + user << browse(dat, "window=implantpad") + return + +/obj/item/weapon/implantpad/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["freq"]) + if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking))) + var/obj/item/weapon/implant/tracking/T = src.case.imp + T.freq += text2num(href_list["freq"]) + if (T.freq * 10 % 2 == 0) + T.freq += 0.1 + T.freq = min(148.9, T.freq) + T.freq = max(144.1, T.freq) + if (href_list["id"]) + if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking))) + var/obj/item/weapon/implant/tracking/T = src.case.imp + T.id += text2num(href_list["id"]) + T.id = min(100, T.id) + T.id = max(1, T.id) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(290) + src.add_fingerprint(usr) + else + usr << browse(null, "window=implantpad") + return + return + +/obj/item/weapon/implant/proc/trigger(emote, source as mob) + + return + +/obj/item/weapon/implant/freedom/New() + + src.uses = rand(1, 5) + ..() + return + +/obj/item/weapon/implant/freedom/trigger(emote, mob/source as mob) + + if (src.uses < 1) + return 0 + if (emote == "chuckle") + src.uses-- + if (source.handcuffed) + var/obj/item/weapon/W = source.handcuffed + source.handcuffed = null + if (source.client) + source.client.screen -= W + if (W) + W.loc = source.loc + dropped(source) + if (W) + W.layer = initial(W.layer) + return + +/obj/item/weapon/implanter/proc/update() + + if (src.imp) + src.icon_state = "implanter1" + else + src.icon_state = "implanter0" + return + +/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if ((user && src.imp)) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been implanted by [].", M, user), 1) + //Foreach goto(48) + src.imp.loc = M + src.imp.implanted = 1 + src.imp = null + user.show_message(text("\red You implanted the implant into the [].", M)) + src.icon_state = "implanter0" + return + +/obj/item/weapon/syringe/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/syringe/attack_hand() + + ..() + src.update_is() + return + +/obj/item/weapon/syringe/proc/update_is() + + var/t1 = round(src.chem.volume(), 5) + if (istype(src.loc, /mob)) + if (src.mode == "inject") + src.icon_state = text("syringe_[]_I", t1) + else + src.icon_state = text("syringe_[]_d", t1) + else + src.icon_state = text("syringe_[]", t1) + src.s_istate = text("syringe_[]", t1) + return + +/obj/item/weapon/syringe/proc/inject(mob/M as mob) + + var/amount = 5 + var/volume = src.chem.volume() + if (volume < 0.01) + return + else + if (volume < 5.01) + amount = volume - 0.01 + amount = src.chem.transfer_mob(M, amount) + src.update_is() + return amount + return + +/obj/item/weapon/syringe/dropped() + + ..() + src.update_is() + return + +/obj/item/weapon/syringe/attack_self() + + if (src.mode == "inject") + src.mode = "draw" + else + src.mode = "inject" + src.update_is() + return + +/obj/item/weapon/syringe/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 15 + ..() + return + +/obj/item/weapon/syringe/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + if (istype(M, /mob/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = src + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "syringe" + M.requests += O + spawn( 0 ) + O.process() + return + else + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been injected with [] by [].", M, src, user), 1) + //Foreach goto(192) + var/amount = src.chem.transfer_mob(M, 5) + src.update_is() + user.show_message(text("\red You inject [] units into the []. The syringe contains [] millimeters.", amount, M, src.chem.volume())) + return + +/obj/item/weapon/brutepack/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/brutepack/F = new /obj/item/weapon/brutepack( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/brutepack/attack(mob/M as mob, mob/user as mob) + + if (M.health < 0) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been applied with [] by []", M, src, user), 1) + //Foreach goto(89) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/obj/item/weapon/organ/external/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + var/mob/human/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + if (H.organs[text("[]", t)]) + affecting = H.organs[text("[]", t)] + else + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting:burn_dam <= 0)) + affecting = H.organs["head"] + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting:burn_dam <= 0)) + affecting = H.organs["diaper"] + if (affecting.heal_damage(60, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + src.amount-- + return + +/obj/item/weapon/brutepack/examine() + set src in view(1) + + ..() + usr << text("\blue there are [] bruise pack\s left on the stack!", src.amount) + if (src.amount <= 0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/brutepack/attackby(obj/item/weapon/brutepack/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/brutepack) )) + return + if (src.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = 5 + W.amount = W.amount + src.amount - 5 + else + src.amount += W.amount + //W = null + del(W) + return + +/obj/item/weapon/hand_tele/attack_self(mob/user as mob) + + var/list/L = list( ) + for(var/obj/machinery/teleport/hub/R in world) + var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z)) + if (istype(com, /obj/machinery/computer/teleporter)) + L[text("[][]", com.id, (src.icon_state == "tele1" ? " (Active)" : " (Inactive)"))] = com.locked + //Foreach goto(22) + var/t1 = input(user, "Please select a location to lock in.", "Locking Computer", null) in L + if ((user.equipped() != src || user.stat || user.restrained())) + return + var/T = L[t1] + for(var/mob/O in hearers(user, null)) + O.show_message("\blue Locked In", 2) + //Foreach goto(192) + var/obj/portal/P = new /obj/portal( get_turf(src) ) + P.target = T + src.add_fingerprint(user) + return + +/obj/item/weapon/ointment/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/ointment/F = new /obj/item/weapon/ointment( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/ointment/attack(mob/M as mob, mob/user as mob) + + if (M.health < 0) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been applied with [] by []", M, src, user), 1) + //Foreach goto(89) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/obj/item/weapon/organ/external/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + var/mob/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + if (H.organs[text("[]", t)]) + affecting = H.organs[text("[]", t)] + else + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["head"] + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["diaper"] + if (affecting.heal_damage(0, 40)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + src.amount-- + if (src.amount <= 0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/ointment/examine() + set src in view(1) + + usr << text("\blue there are [] ointment pack\s left on the stack!", src.amount) + return + +/obj/item/weapon/ointment/attackby(obj/item/weapon/ointment/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/ointment) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/bottle/examine() + set src in usr + + usr << text("\blue The bottle \icon[] contains [] millimeters of chemicals", src, round(src.chem.volume(), 0.1)) + return + +/obj/item/weapon/bottle/New() + + src.chem = new /obj/substance/chemical( ) + ..() + return + +/obj/item/weapon/bottle/attackby(obj/item/weapon/B as obj, mob/user as mob) + + if (istype(B, /obj/item/weapon/bottle)) + var/t1 = src.chem.maximum + var/volume = src.chem.volume() + if (volume < 0.1) + return + else + t1 = volume - 0.1 + t1 = src.chem.transfer_from(B:chem, t1) + if (t1) + user.show_message(text("\blue You pour [] unit\s into the bottle. The bottle now contains [] millimeters.", round(t1, 0.1), round(src.chem.volume(), 0.1))) + if (istype(B, /obj/item/weapon/syringe)) + if (B:mode == "inject") + var/t1 = 5 + var/volume = src.chem.volume() + if (volume < 0.01) + return + else + if (volume < 5.01) + t1 = volume - 0.01 + t1 = src.chem.transfer_from(B:chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You inject [] unit\s into the bottle. The syringe contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + else + var/t1 = 5 + var/volume = src.chem.volume() + if (volume < 0.05) + return + else + if (volume < 5.05) + t1 = volume - 0.05 + t1 = B:chem.transfer_from(src.chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You draw [] unit\s from the bottle. The syringe contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + src.add_fingerprint(user) + else + if (istype(B, /obj/item/weapon/dropper)) + if (B:mode == "inject") + var/t1 = 1 + var/volume = src.chem.volume() + if (volume < 0.0050) + return + else + if (volume < 1.005) + t1 = volume - 0.0050 + t1 = src.chem.transfer_from(B:chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You deposit [] unit\s into the bottle. The dropper contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + else + var/t1 = 1 + var/volume = src.chem.volume() + if (volume < 0.0050) + return + else + if (volume < 1.005) + t1 = volume - 0.0050 + t1 = B:chem.transfer_from(src.chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You extract [] unit\s from the bottle. The dropper contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + return + +/obj/item/weapon/bottle/toxins/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/l_plas/C = new /datum/chemical/l_plas( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/antitoxins/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/pl_coag/C = new /datum/chemical/pl_coag( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/r_epil/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/epil/C = new /datum/chemical/epil( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/r_ch_cough/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/ch_cou/C = new /datum/chemical/ch_cou( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/rejuvenators/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/s_tox/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/s_tox/C = new /datum/chemical/s_tox( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/New() + + ..() + src.pixel_y = rand(-8.0, 8) + src.pixel_x = rand(-8.0, 8) + return + +/obj/item/weapon/weldingtool/examine() + set src in usr + + usr << text("\icon[] [] contains [] units of fuel left!", src, src.name, src.weldfuel) + return + +/obj/item/weapon/weldingtool/afterattack(O as obj, mob/user as mob) + + if (src.welding) + src.weldfuel-- + if (src.weldfuel <= 0) + usr << "\blue Need more fuel!" + src.welding = 0 + src.force = 3 + src.damtype = "brute" + src.icon_state = "welder" + var/turf/location = user.loc + if (!( istype(location, /turf) )) + return + location.firelevel = location.poison + 1 + return + +/obj/item/weapon/weldingtool/attack_self(mob/user as mob) + + src.welding = !( src.welding ) + if (src.welding) + if (src.weldfuel <= 0) + user << "\blue Need more fuel!" + src.welding = 0 + return 0 + user << "\blue You will now weld when you attack." + src.force = 15 + src.damtype = "fire" + src.icon_state = "welder1" + else + user << "\blue Not welding anymore." + src.force = 3 + src.damtype = "brute" + src.icon_state = "welder" + return + +/obj/manifest/New() + + src.invisibility = 100 + return + +/obj/manifest/proc/manifest() + + var/dat = "Crew Manifest:
" + for(var/mob/human/M in world) + if (M.start) + dat += text(" [] - []
", M.name, (istype(M.wear_id, /obj/item/weapon/card/id) ? text("[]", M.wear_id.assignment) : "Unknown Position")) + //Foreach goto(23) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = dat + P.name = "paper- 'Crew Manifest'" + //SN src = null + del(src) + return + return + +/obj/screen/close/DblClick() + + if (src.master) + src.master:close(usr) + return + +/obj/screen/storage/attackby(W, mob/user as mob) + + src.master.attackby(W, user) + return + +/obj/bedsheetbin/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/bedsheet)) + //W = null + del(W) + src.amount++ + return + +/obj/bedsheetbin/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/bedsheetbin/attack_hand(mob/user as mob) + + if (src.amount >= 1) + src.amount-- + new /obj/item/weapon/bedsheet( src.loc ) + add_fingerprint(user) + return + +/obj/bedsheetbin/examine() + set src in oview(1) + + src.amount = round(src.amount) + if (src.amount <= 0) + src.amount = 0 + usr << "There are no bed sheets in the bin." + else + if (src.amount == 1) + usr << "There is one bed sheet in the bin." + else + usr << text("There are [] bed sheets in the bin.", src.amount) + return + +/obj/table/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + src.density = 0 + else + return + +/obj/table/hand_p(mob/user as mob) + + return src.attack_paw(user) + return + +/obj/table/attack_paw(mob/user as mob) + + if (!( locate(/obj/table, user.loc) )) + step(user, get_dir(user, src)) + if (user.loc == src.loc) + user.layer = TURF_LAYER + for(var/mob/M in viewers(user, null)) + M.show_message("The monkey hides under the table!", 1) + //Foreach goto(69) + return + +/obj/table/CheckPass(atom/movable/O as mob|obj, target as turf) + + if ((O.flags & 2 || istype(O, /obj/meteor))) + return 1 + else + return 0 + return + +/obj/table/MouseDrop_T(obj/O as obj, mob/user as mob) + + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + +/obj/table/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/table_parts( src.loc ) + //SN src = null + del(src) + return + return + user.drop_item() + if (W.loc != src.loc) + step(W, get_dir(W, src)) + return + +/obj/rack/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + src.icon_state = "rackbroken" + src.density = 0 + else + return + +/obj/rack/CheckPass(atom/movable/O as mob|obj, target as turf) + + if (O.flags & 2) + return 1 + else + return 0 + return + +/obj/rack/MouseDrop_T(obj/O as obj, mob/user as mob) + + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + +/obj/rack/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/rack_parts( src.loc ) + //SN src = null + del(src) + return + return + user.drop_item() + if (W.loc != src.loc) + step(W, get_dir(W, src)) + return + +/obj/rack/meteorhit(obj/O as obj) + + if (O.icon_state == "flaming") + src.icon_state = "rackbroken" + src.density = 0 + return + +/obj/weldfueltank/attackby(obj/item/weapon/weldingtool/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + W.weldfuel = 20 + W.suffix = text("[][]", (W == src ? "equipped " : ""), W.weldfuel) + user << "\blue Welder refueled" + return + +/obj/weldfueltank/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/watertank/attackby(obj/item/weapon/extinguisher/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/extinguisher) )) + return + W.waterleft = 20 + W.suffix = text("[][]", (user.equipped() == src ? "equipped " : ""), W.waterleft) + user << "\blue Extinguisher refueled" + return + +/obj/watertank/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/d_girders/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/sheet/metal)) + if (W:amount < 1) + //W = null + del(W) + return + new /obj/machinery/door/false_wall( src.loc ) + W:amount-- + if (W:amount < 1) + //W = null + del(W) + user << "\blue Keep in mind when you open it that it MAY be difficult to sldie at first so keep trying." + //SN src = null + del(src) + return + else + if (istype(W, /obj/item/weapon/screwdriver)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + +/obj/barrier/New() + + var/t = 1800 + if (ctf) + t = round(ctf.barriertime * 600) + spawn( t ) + //SN src = null + del(src) + return + return + return + +/obj/portal/Bumped(mob/M as mob|obj) + + spawn( 0 ) + src.teleport(M) + return + return + +/obj/portal/HasEntered(AM as mob|obj) + + spawn( 0 ) + src.teleport(AM) + return + return + +/obj/portal/New() + + spawn( 300 ) + //SN src = null + del(src) + return + return + return + +/obj/portal/proc/teleport(atom/movable/M as mob|obj) + + if (M.anchored) + return + if (src.icon_state == "portal1") + return + if (!( src.target )) + //SN src = null + del(src) + return + var/obj/effects/sparks/O = new /obj/effects/sparks( src.target ) + O.dir = pick(1, 2, 4, 8) + spawn( 0 ) + O.Life() + return + if (istype(M, /atom/movable)) + var/tx = src.target.x + rand(-5.0, 5) + var/ty = src.y + rand(-5.0, 5) + if (prob(10)) + src.icon_state = "portal1" + if (ismob(M)) + M.ex_act(2) + else + M.ex_act(1) + if (rand(1, 1000) <= 10) + M << "\red You see a fainting blue light." + M.loc = null + else + M.loc = locate(tx, ty, src.target.z) + return + +/obj/effects/water/New() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + spawn( 70 ) + //SN src = null + del(src) + return + + return + +/obj/effects/water/Del() + + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + ..() + return + +/obj/effects/water/Move() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + if (--src.life < 1) + //SN src = null + del(src) + return + return + +/mob/attackby(obj/item/weapon/W as obj, mob/user as mob) + + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(22) + if (locate(/obj/item/weapon/grab, src)) + var/mob/safe = null + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.l_hand + if ((G.state == 3 && get_dir(src, user) == src.dir)) + safe = G.affecting + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.r_hand + if ((G.state == 3 && get_dir(src, user) == src.dir)) + safe = G.affecting + if (safe) + return safe.attackby(W, user) + if ((!( shielded ) || !( W.flags ) & 32)) + spawn( 0 ) + W.attack(src, user) + return + return + +/atom/proc/MouseDrop_T() + + return + +/atom/proc/attack_hand(mob/user as mob) + + return + +/atom/proc/attack_paw(mob/user as mob) + + return + +/atom/proc/hand_h(mob/user as mob) + + return + +/atom/proc/hand_p(mob/user as mob) + + return + +/atom/proc/hitby(obj/item/weapon/W as obj) + + return + +/atom/proc/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/f_print_scanner)) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been scanned by [] with the []", src, user, W) + //Foreach goto(31) + else + if (!( istype(W, /obj/item/weapon/grab) )) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been hit by [] with []", src, user, W) + //Foreach goto(102) + return + +/atom/proc/add_fingerprint(mob/human/M as mob) + + if ((!( istype(M, /mob/human) ) || !( istype(M.primary, /obj/dna) ))) + return 0 + if (!( src.flags ) & 256) + return + if (M.gloves) + return 0 + if (!( src.fingerprints )) + src.fingerprints = text("[]", md5(M.primary.uni_identity)) + else + var/list/L = params2list(src.fingerprints) + L -= md5(M.primary.uni_identity) + while(L.len >= 3) + L -= L[1] + L += md5(M.primary.uni_identity) + src.fingerprints = list2params(L) + return + +/atom/MouseDrop(atom/over_object as mob|obj|turf|area) + + spawn( 0 ) + if (istype(over_object, /atom)) + over_object.MouseDrop_T(src, usr) + return + ..() + return + +/atom/DblClick() + + ..() + var/obj/item/weapon/W = usr.equipped() + if ((W == src && usr.stat == 0)) + spawn( 0 ) + W.attack_self(usr) + return + return + if ((!( usr.canmove ) || usr.stat != 0)) + return + + + if ((!( usr.contents.Find(src) ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) + return + var/t5 = (get_dist(src, usr) <= 1 || src.loc == usr) + if ((istype(src, /obj/item/weapon/organ) && usr.contents.Find(src))) + var/mob/human/H = usr + usr << "Betchya think your really smart trying to remove your own body parts aren't ya!" + if (istype(H, /mob/human)) + if (!( (src == H.l_store || src == H.r_store) )) + return + else + return + + if (((t5 || (W && (W.flags & 16))) && !( istype(src, /obj/screen) ))) + if (usr.next_move < world.time) + usr.next_move = world.time + 10 + else + return + if ((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) + var/direct = get_dir(usr, src) + var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc ) + var/ok = 0 + if ( (direct - 1) & direct) + var/turf/T + switch(direct) + if(5.0) + T = get_step(usr, NORTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, EAST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(6.0) + T = get_step(usr, SOUTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, EAST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(9.0) + T = get_step(usr, NORTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, WEST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(10.0) + T = get_step(usr, SOUTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, WEST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + else + if (src.loc.Enter(D, src)) + ok = 1 + else + if ((src.flags & 512 && get_dir(src, usr) & src.dir)) + ok = 1 + if (usr.loc != src.loc) + for(var/atom/A as mob|obj|turf|area in usr.loc) + if ((!( A.CheckExit(usr, src.loc) ) && A != usr)) + ok = 0 + //Foreach goto(1111) + //D = null + del(D) + if (!( ok )) + return 0 + + if (!( usr.restrained() )) + if (W) + if (t5) + src.attackby(W, usr) + if (W) + W.afterattack(src, usr, (t5 ? 1 : 0)) + else + if (istype(usr, /mob/human)) + src.attack_hand(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.attack_paw(usr, usr.hand) + else + if (istype(usr, /mob/human)) + src.hand_h(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.hand_p(usr, usr.hand) + else + if (istype(src, /obj/screen)) + if (usr.next_move < world.time) + usr.next_move = world.time + 10 + else + return + if (!( usr.restrained() )) + if ((W && !( istype(src, /obj/screen) ))) + src.attackby(W, usr) + + if (W) + W.afterattack(src, usr) + else + if (istype(usr, /mob/human)) + src.attack_hand(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.attack_paw(usr, usr.hand) + else + if (istype(usr, /mob/human)) + src.hand_h(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.hand_p(usr, usr.hand) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/main.dmp b/ss13-40.93.2-base/ss13-40.93.2-base/main.dmp new file mode 100644 index 0000000..e5450ca --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/main.dmp @@ -0,0 +1,2432 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/item/weapon/tank/oxygentank,/turf/space,/area) +"ac" = (/turf/station/wall,/area/engine_access) +"ad" = (/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/engine_access) +"ae" = (/turf/station/r_wall,/area/engine) +"af" = (/obj/move/airtunnel/connector/wall,/turf/space,/area/airtunnel1) +"ag" = (/obj/machinery/camera{dir = 4; c_tag = "Northern Airlock"},/obj/machinery/at_indicator{pixel_x = -32; pixel_y = 0},/turf/station/floor,/area/engine_access) +"ah" = (/turf/station/floor,/area/engine_access) +"ai" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/floor,/area/engine_access) +"aj" = (/obj/move/airtunnel/connector,/obj/machinery/alarm/indicator,/turf/space,/area/airtunnel1) +"ak" = (/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"al" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine_access) +"am" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine_access) +"an" = (/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"ao" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/floor,/area/engine_access) +"ap" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine) +"aq" = (/obj/machinery/door/airlock{r_access = 2},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"ar" = (/obj/move/airtunnel/connector,/turf/space,/area/airtunnel1) +"as" = (/obj/machinery/door/airlock,/turf/station/floor,/area/engine_access) +"at" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine_access) +"au" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine_access) +"av" = (/obj/grille,/turf/station/floor,/area) +"aw" = (/turf/station/floor,/area/engine) +"ax" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/engine_access) +"ay" = (/turf/station/r_wall,/area/airtunnel1) +"az" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airtunnel1) +"aA" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airtunnel1) +"aB" = (/turf/station/wall,/area) +"aC" = (/obj/machinery/door/false_wall,/turf/station/floor,/area) +"aD" = (/turf/station/wall,/area/airtunnel1) +"aE" = (/turf/station/r_wall,/area) +"aF" = (/turf/station/floor,/area) +"aG" = (/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area) +"aH" = (/turf/station/wall,/area/control_room) +"aI" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine_access) +"aJ" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine) +"aK" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/firealarm,/turf/station/floor,/area/engine) +"aL" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area/engine) +"aM" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area) +"aN" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area) +"aO" = (/obj/item/weapon/gun/revolver,/turf/station/floor,/area) +"aP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aR" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/tank/jetpack,/turf/station/floor,/area/control_room) +"aS" = (/obj/machinery/door/airlock{r_access = 2},/turf/station/floor,/area/engine) +"aT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"aU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"aV" = (/obj/machinery/camera{dir = 8; c_tag = "Plasma Storage"},/turf/station/floor,/area/engine) +"aW" = (/turf/station/r_wall,/area/testlab4) +"aX" = (/turf/station/r_wall,/area/control_room) +"aY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"aZ" = (/turf/station/floor,/area/control_room) +"ba" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine_access) +"bc" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/engine) +"bd" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"be" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/engine/floor,/area/testlab4) +"bf" = (/turf/station/engine/floor,/area/testlab4) +"bg" = (/obj/machinery/door/window,/turf/station/engine/floor,/area/testlab4) +"bh" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 5000},/area/testlab4) +"bi" = (/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bj" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine) +"bk" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 3; r_access = 2; r_lab = 0},/turf/station/floor,/area/engine) +"bl" = (/obj/window{dir = 10},/turf/station/engine/floor,/area/testlab4) +"bm" = (/obj/window,/turf/station/engine/floor,/area/testlab4) +"bn" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bo" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bp" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 2; r_lab = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bq" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area/control_room) +"br" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine_access) +"bs" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine_access) +"bt" = (/turf/station/wall,/area/engine) +"bu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/engine) +"bv" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine) +"bw" = (/obj/machinery/computer/engine,/turf/station/floor,/area/engine) +"bx" = (/obj/closet/emcloset,/turf/station/floor,/area/engine) +"by" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/engine) +"bz" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/engine) +"bA" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bB" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bC" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/engine) +"bD" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/engine/floor,/area/testlab4) +"bE" = (/turf/station/floor,/area/testlab4) +"bF" = (/obj/machinery/camera{dir = 4; c_tag = "CR- Prep Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"bG" = (/obj/machinery/door,/turf/station/floor,/area/engine) +"bH" = (/obj/window{dir = 8},/turf/station/floor,/area/testlab4) +"bI" = (/obj/machinery/firealarm{pixel_x = -32},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bJ" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bK" = (/obj/machinery/door,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine_access) +"bL" = (/obj/landmark{name = "CTF-base-Engine"},/turf/station/floor,/area/engine) +"bM" = (/obj/machinery/door/window,/turf/station/floor,/area/engine) +"bN" = (/obj/item/weapon/radio,/turf/station/floor,/area/engine) +"bO" = (/obj/window{dir = 4},/turf/station/engine/floor,/area/testlab4) +"bP" = (/obj/machinery/door/firedoor,/turf/station/engine/floor,/area/testlab4) +"bQ" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/testlab4) +"bR" = (/obj/window,/turf/station/floor,/area/control_room) +"bS" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/control_room) +"bT" = (/obj/window{dir = 4},/turf/station/wall,/area) +"bU" = (/obj/window{dir = 8},/obj/window{dir = 4},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"bV" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"bW" = (/obj/machinery/door/airlock{r_engine = 3; r_access = 2; r_lab = 0},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/testlab4) +"bX" = (/obj/window{dir = 1},/turf/station/floor,/area/testlab4) +"bY" = (/obj/window{dir = 10},/turf/station/floor,/area/testlab4) +"bZ" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/testlab4) +"ca" = (/obj/grille,/turf/station/floor,/area/testlab4) +"cb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"cc" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"cd" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/control_room) +"ce" = (/obj/machinery/computer/card,/turf/station/floor,/area/control_room) +"cf" = (/obj/table,/obj/item/weapon/paper/Map,/obj/item/weapon/radio/intercom,/turf/station/floor,/area/control_room) +"cg" = (/obj/machinery/computer/communications,/turf/station/floor,/area/control_room) +"ch" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/obj/machinery/camera{c_tag = "Control Room"},/turf/station/floor,/area/control_room) +"ci" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/control_room) +"cj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/control_room) +"ck" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/floor,/area/control_room) +"cl" = (/obj/table{icon_state = "corners"; dir = 5},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"cm" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"cn" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/engine) +"co" = (/obj/watertank,/turf/station/floor,/area/engine) +"cp" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cr" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"cs" = (/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"ct" = (/obj/weldfueltank,/turf/station/floor,/area/engine) +"cu" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"cx" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/testlab4) +"cy" = (/obj/machinery/door/window,/turf/station/floor,/area/testlab4) +"cz" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/testlab4) +"cA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"cB" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"cC" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/control_room) +"cD" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/control_room) +"cE" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/obj/item/weapon/pen,/turf/station/floor,/area/control_room) +"cF" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"cG" = (/obj/landmark{name = "CTF-supply-Engine"},/turf/station/floor,/area/engine) +"cH" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/engine) +"cI" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/testlab4) +"cJ" = (/obj/window{dir = 4},/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab4) +"cK" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/testlab4) +"cL" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/control_room) +"cM" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/control_room) +"cN" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Research"},/turf/station/floor,/area/control_room) +"cO" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"cP" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 2; r_access = 2},/turf/station/floor,/area/engine) +"cQ" = (/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine) +"cR" = (/obj/machinery/injector{dir = 8},/turf/station/wall,/area/engine) +"cS" = (/turf/station/engine/floor{poison = 5000},/area/engine) +"cT" = (/obj/machinery/firealarm{pixel_y = -32},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/testlab4) +"cU" = (/obj/weldfueltank,/turf/station/floor,/area/testlab4) +"cV" = (/obj/machinery/door/window,/turf/station/floor,/area/control_room) +"cW" = (/obj/landmark{name = "CTF-base-CR"},/turf/station/floor,/area/control_room) +"cX" = (/obj/table,/obj/item/weapon/paper/jobs,/obj/item/weapon/storage/id_kit,/turf/station/floor,/area/control_room) +"cY" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/control_room) +"cZ" = (/obj/table,/turf/station/floor,/area/control_room) +"da" = (/obj/stool/chair{dir = 4},/obj/start{name = "Captain"},/turf/station/floor,/area/control_room) +"db" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"dc" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/engine) +"dd" = (/obj/start{name = "Engineer"},/turf/station/floor,/area/engine) +"de" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"df" = (/turf/station/r_wall,/area/medicalstorage) +"dg" = (/obj/watertank,/turf/station/floor,/area/control_room) +"dh" = (/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"di" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Personnel"},/turf/station/floor,/area/control_room) +"dj" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/engine) +"dk" = (/obj/machinery/camera{dir = 4; c_tag = "Engine Hallway"},/turf/station/floor,/area/engine) +"dl" = (/obj/window{dir = 4},/turf/station/floor,/area/engine) +"dm" = (/turf/station/wall,/area/medicalstorage) +"dn" = (/obj/closet/emcloset,/turf/station/floor,/area/medicalstorage) +"do" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/medicalstorage) +"dp" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/medicalstorage) +"dq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/medicalstorage) +"dr" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/medicalstorage) +"ds" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/medicalstorage) +"dt" = (/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"du" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/sop,/obj/item/weapon/paper/Internal,/obj/item/weapon/infra,/turf/station/floor,/area/control_room) +"dv" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Internal,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/control_room) +"dw" = (/obj/stool/chair,/turf/station/floor,/area/control_room) +"dx" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/syringe,/turf/station/floor,/area/control_room) +"dy" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/s_tox,/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"dz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/weldfueltank,/turf/station/floor,/area/engine) +"dA" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/engine) +"dB" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine) +"dC" = (/obj/machinery/dispenser,/turf/station/floor,/area/engine) +"dD" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"dE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{dir = 4; c_tag = "Technician Office"},/turf/station/floor,/area/medicalstorage) +"dF" = (/obj/start{name = "Station Technician"},/turf/station/floor,/area/medicalstorage) +"dG" = (/turf/station/floor,/area/medicalstorage) +"dH" = (/obj/stool,/turf/station/floor,/area/medicalstorage) +"dI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/medicalstorage) +"dJ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/control_room) +"dK" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/Map,/obj/item/weapon/timer,/turf/station/floor,/area/control_room) +"dL" = (/obj/landmark{name = "CTF-supply-CR"},/turf/station/floor,/area/control_room) +"dM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/jobs,/obj/manifest,/turf/station/floor,/area/control_room) +"dN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/card/id,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"dO" = (/obj/machinery/computer/airtunnel,/turf/station/floor,/area/control_room) +"dP" = (/obj/machinery/computer/engine,/turf/station/floor,/area/control_room) +"dQ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/recharger,/turf/station/floor,/area/control_room) +"dR" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"dS" = (/turf/station/wall,/area/escapezone) +"dT" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/engine) +"dU" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/engine) +"dV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"dW" = (/obj/machinery/alarm{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_y = -32},/turf/station/floor,/area/engine) +"dX" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"dY" = (/obj/item/weapon/radio,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine) +"dZ" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/engine) +"ea" = (/obj/machinery/door{r_engine = 3; r_access = 2},/obj/window,/obj/machinery/firealarm,/obj/window{dir = 8},/turf/station/floor,/area/engine) +"eb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medicalstorage) +"ec" = (/obj/start{name = "Technical Assistant"},/turf/station/floor,/area/medicalstorage) +"ed" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medicalstorage) +"ee" = (/obj/weldfueltank,/turf/station/floor,/area/medicalstorage) +"ef" = (/turf/station/wall,/area/controlaccess) +"eg" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/controlaccess) +"eh" = (/turf/station/r_wall,/area/controlaccess) +"ei" = (/turf/station/r_wall,/area/testlab2) +"ej" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/testlab2) +"ek" = (/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"el" = (/obj/machinery/door/poddoor,/turf/station/engine/floor,/area/escapezone) +"em" = (/obj/machinery/mass_driver,/obj/item/weapon/tank/oxygentank,/turf/station/engine/floor,/area/escapezone) +"en" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/engine/floor,/area/escapezone) +"eo" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/escapezone) +"ep" = (/obj/machinery/computer/pod{name = "Mass Driver"},/turf/station/floor,/area/escapezone) +"eq" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/engine/floor,/area/engine) +"er" = (/obj/window{dir = 10},/turf/station/floor,/area/engine) +"es" = (/obj/machinery/injector,/turf/station/wall,/area/engine) +"et" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"eu" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 5000},/area/engine) +"ev" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/medicalstorage) +"ew" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/medicalstorage) +"ex" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/controlaccess) +"ey" = (/turf/station/floor,/area/controlaccess) +"ez" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"eA" = (/turf/station/floor,/area/escapezone) +"eB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/escapezone) +"eC" = (/obj/grille,/turf/station/engine/floor,/area/engine) +"eD" = (/obj/machinery/alarm,/turf/station/floor,/area/controlaccess) +"eE" = (/obj/machinery/door/window,/turf/station/floor,/area/controlaccess) +"eF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/security,/turf/station/floor,/area/testlab2) +"eG" = (/turf/station/floor,/area/testlab2) +"eH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/testlab2) +"eI" = (/obj/item/weapon/ammo/a357,/turf/station/floor,/area) +"eJ" = (/obj/machinery/door/poddoor{id = 2},/turf/station/engine/floor,/area/escapezone) +"eK" = (/obj/machinery/mass_driver{dir = 8; id = 2},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"eL" = (/obj/machinery/computer/pod{id = 2},/turf/station/floor,/area/escapezone) +"eM" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"eN" = (/obj/machinery/computer/engine,/turf/station/floor,/area) +"eO" = (/obj/machinery/computer/communications,/turf/station/floor,/area) +"eP" = (/obj/item/weapon/hand_tele,/turf/station/engine/floor,/area/engine) +"eQ" = (/turf/station/engine/floor,/area/engine) +"eR" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/engine/floor,/area/engine) +"eS" = (/obj/machinery/door{r_engine = 3; r_access = 2},/turf/station/floor,/area/engine) +"eT" = (/turf/station/wall,/area/hallways/labaccess) +"eU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/controlaccess) +"eV" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab2) +"eW" = (/obj/secloset/highsec,/turf/station/floor,/area/testlab2) +"eX" = (/obj/machinery/camera{dir = 4; c_tag = "Escape Pod Bay"},/turf/station/floor,/area/escapezone) +"eY" = (/obj/machinery/door/window,/turf/station/floor,/area/escapezone) +"eZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"fa" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"fb" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"fc" = (/obj/watertank,/turf/station/floor,/area/hallways/labaccess) +"fd" = (/turf/station/floor,/area/hallways/labaccess) +"fe" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/labaccess) +"ff" = (/obj/machinery/camera{dir = 4; c_tag = "Emergency Room"},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab2) +"fg" = (/obj/landmark{name = "Nuclear-Disk"},/turf/station/floor,/area/testlab2) +"fh" = (/obj/machinery/door/poddoor{id = 3},/turf/station/engine/floor,/area/escapezone) +"fi" = (/obj/machinery/mass_driver{dir = 8; id = 3},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"fj" = (/obj/machinery/computer/pod{id = 3},/turf/station/floor,/area/escapezone) +"fk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area) +"fl" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/engine/floor,/area/engine) +"fm" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/labaccess) +"fn" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/hallways/labaccess) +"fo" = (/obj/weldfueltank,/turf/station/floor,/area/toolstorage) +"fp" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/backpack,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/toolstorage) +"fq" = (/obj/item/weapon/infra,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fr" = (/turf/station/wall,/area/toolstorage) +"fs" = (/obj/table{icon_state = "sides"; dir = 2},/obj/bedsheetbin,/turf/station/floor,/area/toolstorage) +"ft" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper_bin{amount = 50},/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/toolstorage) +"fu" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/turf/station/floor,/area/toolstorage) +"fv" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/toolstorage) +"fw" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/toolstorage) +"fx" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/testlab2) +"fy" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/testlab2) +"fz" = (/obj/machinery/door/poddoor{id = 4},/turf/station/engine/floor,/area/escapezone) +"fA" = (/obj/machinery/mass_driver{dir = 8; id = 4},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"fB" = (/obj/machinery/computer/pod{id = 4},/turf/station/floor,/area/escapezone) +"fC" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"fD" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/engine) +"fE" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/toolstorage) +"fF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fG" = (/obj/item/weapon/timer,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fH" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{c_tag = "Supply Room"},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toolstorage) +"fI" = (/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fJ" = (/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fK" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fM" = (/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fO" = (/obj/item/weapon/igniter,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/infra,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"fR" = (/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"fS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"fT" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/labaccess) +"fU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toolstorage) +"fV" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fW" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/igniter,/obj/item/weapon/storage/backpack,/turf/station/floor,/area/toolstorage) +"fX" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fY" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fZ" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"ga" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/timer,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gb" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toolstorage) +"gc" = (/turf/station/wall,/area/oxygen_storage) +"gd" = (/turf/station/wall,/area/hallways/eastairlock) +"ge" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"gf" = (/obj/stool/chair,/turf/station/floor,/area/hallways/eastairlock) +"gg" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/eastairlock) +"gh" = (/turf/station/floor,/area/hallways/eastairlock) +"gi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/eastairlock) +"gj" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"gk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"gl" = (/obj/grille,/turf/station/floor{oxygen = 0},/area) +"gm" = (/turf/station/wall,/area/medical) +"gn" = (/obj/window{dir = 1},/obj/window,/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"go" = (/turf/station/wall,/area/toxinlab) +"gp" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"gq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall) +"gr" = (/turf/station/floor,/area/hallways/centralhall) +"gs" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/centralhall) +"gt" = (/turf/station/wall,/area/hallways/centralhall) +"gu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall) +"gv" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/hallways/eastairlock) +"gw" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/hallways/eastairlock) +"gx" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/hallways/eastairlock) +"gy" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/medical) +"gz" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/medical) +"gA" = (/obj/window{dir = 4},/obj/closet/wardrobe/white,/turf/station/floor,/area/medical) +"gB" = (/obj/secloset/medical1,/turf/station/floor,/area/medical) +"gC" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/medical) +"gD" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/pen,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/medical) +"gE" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/clipboard,/turf/station/floor,/area/medical) +"gF" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/machinery/camera{c_tag = "Medical Bay"},/turf/station/floor,/area/medical) +"gG" = (/obj/table{icon_state = "alone"},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/medical) +"gH" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/medical) +"gI" = (/obj/table{icon_state = "sides"},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/medical) +"gJ" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/medical) +"gK" = (/obj/machinery/alarm{pixel_y = 32},/obj/closet/wardrobe/white,/turf/station/floor,/area/toxinlab) +"gL" = (/obj/closet/l3closet,/turf/station/floor,/area/toxinlab) +"gM" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/toxinlab) +"gN" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/toxinlab) +"gO" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/toxinlab) +"gP" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/toxinlab) +"gQ" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/machinery/camera{c_tag = "Medical Lab"},/turf/station/floor,/area/toxinlab) +"gR" = (/obj/secloset/medical1,/turf/station/floor,/area/toxinlab) +"gS" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/pen,/obj/item/weapon/clipboard,/turf/station/floor,/area/toxinlab) +"gT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/dropper,/turf/station/floor,/area/toxinlab) +"gU" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/toxinlab) +"gV" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/toxinlab) +"gW" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toxinlab) +"gX" = (/obj/machinery/alarm,/turf/station/floor,/area/hallways/labaccess) +"gY" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/labaccess) +"gZ" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/centralhall) +"ha" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/eastairlock) +"hb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"hc" = (/obj/morgue,/turf/station/floor,/area) +"hd" = (/obj/machinery/freezer,/turf/station/floor,/area/medical) +"he" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/medical) +"hf" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/medical) +"hg" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hh" = (/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/medical) +"hi" = (/turf/station/floor,/area/medical) +"hj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medical) +"hk" = (/obj/stool/chair,/turf/station/floor,/area/medical) +"hl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"hm" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/toxinlab) +"hn" = (/turf/station/floor,/area/toxinlab) +"ho" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toxinlab) +"hp" = (/obj/stool/chair,/turf/station/floor,/area/toxinlab) +"hq" = (/obj/machinery/camera{dir = 4; c_tag = "Central Hallway"},/turf/station/floor,/area/hallways/labaccess) +"hr" = (/turf/station/r_wall,/area/hallways/centralhall) +"hs" = (/turf/station/r_wall,/area/hallways/eastairlock) +"ht" = (/obj/machinery/camera{dir = 8; c_tag = "Assembly Room"},/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/hallways/eastairlock) +"hu" = (/obj/window{dir = 4},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hv" = (/obj/item/weapon/radio,/turf/station/floor,/area/medical) +"hw" = (/obj/item/weapon/ointment,/turf/station/floor,/area/medical) +"hx" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hy" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/centralhall) +"hz" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"hA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/oxygen_storage) +"hB" = (/obj/machinery/dispenser,/turf/station/floor,/area/oxygen_storage) +"hC" = (/obj/machinery/dispenser,/obj/machinery/camera{c_tag = "Toxin Gas Storage"},/turf/station/floor,/area/oxygen_storage) +"hD" = (/turf/station/floor,/area/oxygen_storage) +"hE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/oxygen_storage) +"hF" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/oxygen_storage) +"hG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"hH" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"hI" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"hJ" = (/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"hK" = (/obj/machinery/sleeper,/turf/station/floor,/area/medical) +"hL" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/medical) +"hM" = (/obj/start{name = "Medical Doctor"},/turf/station/floor,/area/medical) +"hN" = (/obj/item/weapon/brutepack,/turf/station/floor,/area/medical) +"hO" = (/obj/machinery/firealarm{pixel_x = 32},/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hP" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"hQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"hR" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"hS" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toxinlab) +"hT" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/toxinlab) +"hU" = (/obj/window,/obj/secloset/medical2,/turf/station/floor,/area/toxinlab) +"hV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window,/turf/station/floor,/area/toxinlab) +"hW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/toxinlab) +"hX" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/toxinlab) +"hY" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"hZ" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"ia" = (/obj/stool/chair{dir = 1},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"ib" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"ic" = (/obj/landmark{name = "CTF-supply-Medical"},/turf/station/floor,/area/medical) +"id" = (/obj/machinery/door/window,/turf/station/floor,/area/medical) +"ie" = (/obj/landmark{name = "CTF-base-Medical"},/turf/station/floor,/area/medical) +"if" = (/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"ig" = (/obj/window{dir = 4},/obj/secloset/animal,/turf/station/floor,/area/toxinlab) +"ih" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/machinery/dna_scanner,/turf/station/floor,/area/toxinlab) +"ii" = (/obj/window{dir = 1},/obj/machinery/scan_console,/turf/station/floor,/area/toxinlab) +"ij" = (/obj/window{dir = 1},/obj/machinery/computer/dna,/turf/station/floor,/area/toxinlab) +"ik" = (/obj/window{dir = 1},/obj/machinery/restruct,/turf/station/floor,/area/toxinlab) +"il" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"im" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"in" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"io" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"ip" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"iq" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/window{dir = 4},/turf/station/floor,/area/medical) +"ir" = (/obj/start{name = "Medical Assistant"},/turf/station/floor,/area/medical) +"is" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/medical) +"it" = (/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/medical) +"iu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/toxinlab) +"iv" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/toxinlab) +"iw" = (/obj/window,/turf/station/floor,/area/toxinlab) +"ix" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area/toxinlab) +"iy" = (/obj/start{name = "Medical Researcher"},/obj/window,/turf/station/floor,/area/toxinlab) +"iz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window,/turf/station/floor,/area/toxinlab) +"iA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"iB" = (/obj/machinery/door/window,/turf/station/floor,/area/toxinlab) +"iC" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/toxinlab) +"iD" = (/obj/machinery/firealarm{pixel_x = 32},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"iE" = (/obj/watertank,/turf/station/floor,/area/oxygen_storage) +"iF" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/eastairlock) +"iG" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"iH" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"iI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/medical) +"iJ" = (/obj/machinery/alarm{pixel_y = -32},/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/medical) +"iK" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/medical) +"iL" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/toxinlab) +"iM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area/toxinlab) +"iN" = (/obj/window{dir = 8},/obj/window{dir = 1},/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/toxinlab) +"iO" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"iP" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/toxinlab) +"iQ" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/centralhall) +"iR" = (/obj/start{name = "Research Technician"},/turf/station/floor,/area/hallways/centralhall) +"iS" = (/obj/machinery/door/airlock,/turf/station/floor,/area) +"iT" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/eastairlock) +"iU" = (/obj/closet,/turf/station/floor,/area/hallways/eastairlock) +"iV" = (/obj/landmark{name = "CTF-wardrobe-Medical"},/turf/station/floor,/area/medical) +"iW" = (/obj/window{dir = 4},/turf/station/floor,/area/medical) +"iX" = (/obj/stool/bed,/turf/station/floor,/area/medical) +"iY" = (/obj/stool/bed,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/medical) +"iZ" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/medical) +"ja" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/medical) +"jb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "gooddoggytreat"; desc = "Monkey in Med. Lab."; special = 3},/turf/station/floor,/area/toxinlab) +"jc" = (/obj/window{dir = 8},/obj/machinery/firealarm{pixel_y = -32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/toxinlab) +"jd" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/toxinlab) +"je" = (/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/toxinlab) +"jf" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/toxinlab) +"jg" = (/obj/start{name = "Research Assistant"},/turf/station/floor,/area/hallways/centralhall) +"jh" = (/turf/station/wall,/area/testlab1) +"ji" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/l3closet,/turf/station/floor,/area/testlab1) +"jj" = (/turf/station/floor,/area/testlab1) +"jk" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/testlab1) +"jl" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/pen,/turf/station/floor,/area/testlab1) +"jm" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/testlab1) +"jn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/heater,/turf/station/floor,/area/testlab1) +"jo" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area) +"jp" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"jq" = (/obj/machinery/door/window{dir = 8},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"jr" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/toxinlab) +"js" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/toxinlab) +"jt" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/toxinlab) +"ju" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/toxinlab) +"jv" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/toxinlab) +"jw" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/toxinlab) +"jx" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/centralhall) +"jy" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/centralhall) +"jz" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/testlab1) +"jA" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/testlab1) +"jB" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"jC" = (/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jD" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jE" = (/obj/machinery/alarm{pixel_y = 32},/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jF" = (/obj/machinery/computer/card,/turf/station/floor,/area/hallways/loungehall) +"jG" = (/turf/station/floor,/area/hallways/loungehall) +"jH" = (/obj/closet/emcloset,/turf/station/floor,/area/hallways/loungehall) +"jI" = (/turf/station/wall,/area/hallways/loungehall) +"jJ" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/hallways/loungehall) +"jK" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"jL" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/testlab1) +"jM" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/testlab1) +"jN" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/eastairlock) +"jO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/crew_quarters) +"jP" = (/turf/station/floor,/area/crew_quarters) +"jQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/crew_quarters) +"jR" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/crew_quarters) +"jS" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/loungehall) +"jT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/loungehall) +"jU" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/hallways/loungehall) +"jV" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"jW" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/hallways/loungehall) +"jX" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/hallways/loungehall) +"jY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/loungehall) +"jZ" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"ka" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/loungehall) +"kb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/testlab1) +"kc" = (/obj/start{name = "Toxin Researcher"},/turf/station/floor,/area/testlab1) +"kd" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/eastairlock) +"ke" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/crew_quarters) +"kf" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/hallways/loungehall) +"kg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/loungehall) +"kh" = (/obj/machinery/camera{dir = 8; c_tag = "Toxin Research Lab"},/turf/station/floor,/area/testlab1) +"ki" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/eastairlock) +"kj" = (/turf/station/wall,/area/crew_quarters) +"kk" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/crew_quarters) +"kl" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/loungehall) +"km" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/labaccess) +"kn" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/watertank,/turf/station/floor,/area/testlab1) +"ko" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/crew_quarters) +"kp" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/hallways/loungehall) +"kq" = (/turf/station/r_wall,/area/hallways/labaccess) +"kr" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/security) +"ks" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab1) +"kt" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/testlab1) +"ku" = (/turf/station/r_wall,/area/testlab1) +"kv" = (/obj/table{icon_state = "alone"},/turf/station/floor,/area/crew_quarters) +"kw" = (/obj/rack,/obj/item/weapon/clothing/under/blue,/obj/item/weapon/radio/headset,/turf/station/floor,/area/crew_quarters) +"kx" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"ky" = (/turf/station/floor,/area/lounge) +"kz" = (/obj/watertank,/turf/station/floor,/area/lounge) +"kA" = (/obj/secloset/security1,/turf/station/floor,/area/security) +"kB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clipboard,/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/security) +"kC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/machinery/recharger,/obj/item/weapon/clothing/glasses/thermal,/turf/station/floor,/area/security) +"kD" = (/obj/secloset/security2,/turf/station/floor,/area/security) +"kE" = (/obj/window{dir = 4},/turf/station/floor,/area/security) +"kF" = (/turf/station/floor,/area/security) +"kG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"kH" = (/obj/machinery/firealarm{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"kI" = (/turf/station/r_wall,/area/security) +"kJ" = (/obj/machinery/injector{dir = 1},/turf/station/wall,/area/testlab1) +"kK" = (/obj/grille,/obj/window{dir = 8},/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/testlab1) +"kL" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/testlab1) +"kM" = (/obj/closet/emcloset,/turf/station/floor,/area/shuttle_airlock) +"kN" = (/turf/station/floor,/area/shuttle_airlock) +"kO" = (/obj/landmark{name = "Nuclear-Closet"},/turf/station/floor,/area/shuttle_airlock) +"kP" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/floor,/area/shuttle_airlock) +"kQ" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/crew_quarters) +"kR" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/crew_quarters) +"kS" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/lounge) +"kT" = (/obj/stool,/turf/station/floor,/area/lounge) +"kU" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/lounge) +"kV" = (/obj/landmark{name = "CTF-wardrobe-Lounge"},/turf/station/floor,/area/lounge) +"kW" = (/turf/station/wall,/area/aircontrol) +"kX" = (/obj/machinery/door/airlock{r_air = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/aircontrol) +"kY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/security1,/turf/station/floor,/area/security) +"kZ" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/security) +"la" = (/obj/start{name = "Forensic Technician"},/turf/station/floor,/area/security) +"lb" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"lc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"ld" = (/obj/table,/obj/item/weapon/game_kit,/turf/station/floor,/area/security) +"le" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"lf" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 2},/turf/station/floor,/area/testlab1) +"lg" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"lh" = (/obj/machinery/alarm{pixel_x = 32},/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"li" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"lj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/shuttle_airlock) +"lk" = (/obj/closet/wardrobe,/turf/station/floor,/area/crew_quarters) +"ll" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/mixed,/turf/station/floor,/area/crew_quarters) +"lm" = (/obj/closet/wardrobe/mixed,/turf/station/floor,/area/crew_quarters) +"ln" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "alone"},/obj/bedsheetbin,/turf/station/floor,/area/crew_quarters) +"lo" = (/obj/closet,/turf/station/floor,/area/crew_quarters) +"lp" = (/obj/machinery/firealarm{pixel_x = 32},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/crew_quarters) +"lq" = (/obj/machinery/camera{dir = 4; c_tag = "Lounge/Meeting Area"},/turf/station/floor,/area/lounge) +"lr" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/wirecutters,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/lounge) +"ls" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/pen,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/lounge) +"lt" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airintake) +"lu" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"lv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lx" = (/turf/station/floor,/area/aircontrol) +"ly" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/aircontrol) +"lz" = (/turf/station/r_wall,/area/aircontrol) +"lA" = (/obj/start{name = "Security Officer"},/turf/station/floor,/area/security) +"lB" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lD" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/security) +"lE" = (/obj/item/weapon/bedsheet,/turf/station/floor,/area/security) +"lF" = (/obj/stool/bed,/turf/station/floor,/area/security) +"lG" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/testlab1) +"lH" = (/obj/machinery/door/airlock,/turf/station/floor,/area/testlab1) +"lI" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"lJ" = (/obj/landmark{name = "CTF-rogue"},/turf/station/floor,/area/shuttle_airlock) +"lK" = (/obj/landmark{name = "Nuclear-Bomb"},/turf/station/floor,/area/shuttle_airlock) +"lL" = (/obj/machinery/camera{dir = 4; c_tag = "Crew Sleeping Area"},/turf/station/floor,/area/sleep_area) +"lM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/sleep_area) +"lN" = (/turf/station/floor,/area/sleep_area) +"lO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/sleep_area) +"lP" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/sleep_area) +"lQ" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/lounge) +"lR" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/Map,/obj/item/weapon/paper/jobs,/obj/item/weapon/paper/sop,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/lounge) +"lS" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/paper/Map,/obj/item/weapon/paper/sop,/obj/item/weapon/radio/signaler,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/lounge) +"lT" = (/turf/station/floor{oxygen = 0},/area/airintake) +"lU" = (/obj/window{dir = 4},/turf/station/floor{oxygen = 0},/area/airintake) +"lV" = (/obj/machinery/door/airlock{r_air = 1},/turf/station/floor,/area/aircontrol) +"lW" = (/obj/start{name = "Staff Assistant"},/turf/station/floor,/area/security) +"lX" = (/obj/window{dir = 1},/turf/station/floor,/area/security) +"lY" = (/obj/machinery/camera{dir = 4; c_tag = "Prison"},/turf/station/floor,/area/security) +"lZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/bed,/turf/station/floor,/area/security) +"ma" = (/obj/machinery/camera{dir = 4; c_tag = "Shuttle Bay"},/turf/station/floor,/area/shuttle_airlock) +"mb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"mc" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area) +"md" = (/obj/landmark{name = "CTF-supply-Lounge"},/turf/station/floor,/area/lounge) +"me" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/manifest,/turf/station/floor,/area/lounge) +"mf" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/game_kit,/turf/station/floor,/area/lounge) +"mg" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/lounge) +"mh" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airintake) +"mi" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mj" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/aircontrol) +"mk" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/security) +"ml" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/security) +"mm" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/security) +"mn" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/security) +"mo" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/security) +"mp" = (/obj/machinery/sec_lock{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"mq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/testlab1) +"mr" = (/obj/grille,/turf/station/floor,/area/testlab1) +"ms" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab1) +"mt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mu" = (/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mv" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/lounge) +"mw" = (/turf/station/floor,/area/airintake) +"mx" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"my" = (/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"mz" = (/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mA" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/clipboard,/turf/station/floor,/area/security) +"mB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/turf/station/floor,/area/security) +"mC" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/security) +"mD" = (/obj/machinery/computer/security,/turf/station/floor,/area/security) +"mE" = (/obj/machinery/computer/card,/turf/station/floor,/area/security) +"mF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/red,/turf/station/floor,/area/security) +"mG" = (/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"mH" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"mI" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"mJ" = (/obj/grille,/obj/item/weapon/wirecutters,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/turf/station/floor,/area) +"mK" = (/obj/window{dir = 10},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"mL" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"mM" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"mN" = (/obj/machinery/door/window,/turf/station/floor,/area) +"mO" = (/obj/landmark{name = "CTF-base-Lounge"},/turf/station/floor,/area/lounge) +"mP" = (/obj/grille,/turf/station/floor{oxygen = 0},/area/airintake) +"mQ" = (/obj/window{dir = 4},/obj/grille,/turf/station/floor{oxygen = 0},/area/airintake) +"mR" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/aircontrol) +"mS" = (/obj/window{dir = 4},/turf/station/floor,/area) +"mT" = (/obj/machinery/door/firedoor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"mU" = (/obj/window{dir = 8},/turf/station/floor,/area) +"mV" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"mW" = (/obj/window,/turf/station/floor{oxygen = 0},/area/airintake) +"mX" = (/obj/window{dir = 4},/obj/window,/turf/station/floor{oxygen = 0},/area/airintake) +"mY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"mZ" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"na" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"nb" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aircontrol) +"nc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"nd" = (/obj/window{dir = 10},/turf/station/floor,/area/shuttle_airlock) +"ne" = (/obj/machinery/door/airlock,/turf/station/floor,/area/shuttle_airlock) +"nf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"ng" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"nh" = (/obj/machinery/camera{dir = 8; c_tag = "Atmo. Gas Storage"},/turf/station/floor,/area/aircontrol) +"ni" = (/turf/space,/area/shuttle) +"nj" = (/obj/machinery/camera{dir = 4; c_tag = "Disaster Response Center"},/turf/station/floor,/area) +"nk" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/aircontrol) +"nl" = (/obj/landmark{name = "CTF-base-Atmo"},/turf/station/floor,/area/aircontrol) +"nm" = (/obj/landmark{name = "CTF-supply-Atmo"},/turf/station/floor,/area/aircontrol) +"nn" = (/obj/machinery/door/airlock,/turf/station/floor,/area/aircontrol) +"no" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/aircontrol) +"np" = (/obj/machinery/camera{dir = 4; c_tag = "Atmospheric Control Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/aircontrol) +"nq" = (/obj/start{name = "Atmospheric Technician"},/turf/station/floor,/area/aircontrol) +"nr" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/watertank,/turf/station/floor,/area/aircontrol) +"ns" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nt" = (/obj/window{dir = 1},/obj/item/weapon/clothing/mask/gasmask,/turf/station/floor,/area/aircontrol) +"nu" = (/obj/window{dir = 1},/obj/machinery/dispenser,/turf/station/floor,/area/aircontrol) +"nv" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aircontrol) +"nw" = (/obj/machinery/camera{dir = 8; c_tag = "Food Preparation Area"},/turf/station/floor,/area) +"nx" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"ny" = (/obj/window{dir = 1},/turf/station/floor,/area/aircontrol) +"nz" = (/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"nA" = (/obj/window{dir = 4},/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"nB" = (/obj/window{dir = 8},/turf/station/floor,/area/aircontrol) +"nC" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/shoes/orange,/turf/station/floor,/area/aircontrol) +"nD" = (/obj/machinery/door/airlock{r_air = 1; r_engine = 1; r_access = 1},/turf/station/floor,/area) +"nE" = (/obj/machinery/door/window,/turf/station/floor,/area/aircontrol) +"nF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/paper_bin,/turf/station/floor,/area/aircontrol) +"nG" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/aircontrol) +"nH" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/aircontrol) +"nI" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/aircontrol) +"nJ" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area) +"nK" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nL" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"nM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"nN" = (/obj/window{dir = 8},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/aircontrol) +"nO" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/aircontrol) +"nP" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/aircontrol) +"nQ" = (/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"nR" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/turf/station/floor,/area/aircontrol) +"nS" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/turf/station/floor,/area/aircontrol) +"nT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"nU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/aircontrol) +"nV" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area) +"nW" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area) +"nX" = (/obj/machinery/dispenser{o2tanks = 20; pltanks = 0},/turf/station/floor,/area) +"nY" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area) +"nZ" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area) +"oa" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area) +"ob" = (/obj/grille,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"oc" = (/obj/grille,/obj/item/weapon/tank/oxygentank,/turf/station/floor,/area) +"od" = (/obj/machinery/dispenser,/turf/station/floor,/area) +"oe" = (/obj/closet/emcloset,/turf/station/floor,/area) +"of" = (/turf/station/floor{oxygen = 0},/area) +"og" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area) +"oh" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"oi" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area) +"oj" = (/obj/machinery/dna_scanner,/turf/station/floor,/area) +"ok" = (/obj/machinery/scan_console,/turf/station/floor,/area) +"ol" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/animal,/turf/station/floor,/area) +"om" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"on" = (/obj/item/weapon/game_kit,/turf/station/floor,/area) +"oo" = (/obj/machinery/computer/pod{name = "Mass Driver"; dir = 4; id = 5},/turf/station/floor{oxygen = 0},/area) +"op" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area) +"oq" = (/obj/machinery/computer/dna,/turf/station/floor,/area) +"or" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area) +"os" = (/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/turf/station/floor,/area) +"ot" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"ou" = (/obj/machinery/mass_driver{dir = 4; id = 5},/obj/closet,/turf/station/floor{oxygen = 0},/area) +"ov" = (/mob/monkey,/turf/station/floor,/area) +"ow" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) +"ox" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area) +"oy" = (/obj/machinery/restruct,/turf/station/floor,/area) +"oz" = (/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"oA" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area) +"oB" = (/obj/machinery/sleeper,/turf/station/floor,/area) +"oC" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area) +"oD" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/card/id{name = "Zach Licton's ID Card (1>1-0-0)"; access_level = 1; lab_access = 1; engine_access = 0; air_access = 0; registered = "Zach Licton"; assignment = "DNA Researcher"},/obj/item/weapon/pen,/turf/station/floor,/area) +"oE" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"oF" = (/obj/machinery/freezer,/turf/station/floor,/area) +"oG" = (/obj/machinery/pipes/flexipipe,/obj/item/weapon/tank/anesthetic,/turf/station/floor,/area) +"oH" = (/obj/machinery/cryo_cell,/turf/station/floor,/area) +"oI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/under/white,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/shoes/white,/turf/station/floor,/area) +"oJ" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"oK" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area) +"oL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area) +"oM" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"oN" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/r_epil,/turf/station/floor,/area) +"oO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/mob/monkey,/turf/station/floor,/area) +"oP" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/clothing/glasses/regular,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"oQ" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"oR" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"oS" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"oT" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"oU" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"oV" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"oW" = (/obj/sp_start{name = "zjm7891"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"oX" = (/obj/item/weapon/radio/beacon,/obj/sp_start{name = "phoenixman"; desc = "Researcher on Med. Sat."},/turf/station/floor,/area) +"oY" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"oZ" = (/obj/sp_start{name = "exadv1"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pa" = (/obj/sp_start{name = "ryanfs"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pb" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"pc" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area) +"pd" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area) +"pe" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/turf/station/floor,/area) +"pf" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"pg" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area) +"ph" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"pi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/stool/bed,/turf/station/floor,/area) +"pj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/bedsheetbin,/turf/station/floor,/area) +"pk" = (/obj/secloset/personal,/obj/window{dir = 8},/turf/station/floor,/area) +"pl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/secloset/security1{allowed = "Prison Security,Prison Warden,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"pm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/highsec{allowed = "Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"pn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/l3closet,/turf/station/floor,/area) +"po" = (/obj/closet/l3closet,/turf/station/floor,/area) +"pp" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"pq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"pr" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"ps" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"pt" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"pu" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"pv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/locator,/turf/station/floor,/area) +"pw" = (/obj/stool/bed,/turf/station/floor,/area) +"px" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"py" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window{dir = 8},/turf/station/floor,/area) +"pz" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"pA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"pB" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area) +"pC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/dna,/turf/station/floor,/area) +"pD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/obj/window,/turf/station/floor,/area) +"pE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"pF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/obj/window,/turf/station/floor,/area) +"pG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"pH" = (/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"pI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"pJ" = (/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"pK" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"pL" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"pM" = (/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"pN" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"pO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"pP" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"pQ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"pR" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/epilepsy,/obj/item/weapon/pill_canister/cough,/turf/station/floor,/area) +"pS" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/m_pill/superpill,/turf/station/floor,/area) +"pT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/Tourette,/turf/station/floor,/area) +"pU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/syndicate_uplink,/turf/station/floor,/area) +"pV" = (/obj/machinery/recharger,/turf/station/floor,/area) +"pW" = (/obj/closet/wardrobe/white,/turf/station/floor,/area) +"pX" = (/obj/secloset/animal,/turf/station/floor,/area) +"pY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/sleeper,/turf/station/floor,/area) +"pZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"qa" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/floor,/area) +"qb" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area) +"qc" = (/obj/item/weapon/sheet/r_metal,/obj/item/weapon/sheet/r_metal,/turf/station/floor,/area) +"qd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/suit/firesuit,/turf/station/floor,/area) +"qe" = (/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/floor,/area) +"qf" = (/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"qg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"qh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area) +"qi" = (/obj/item/weapon/extinguisher,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"qj" = (/obj/item/weapon/brutepack,/turf/station/floor,/area) +"qk" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/under/orange,/turf/station/floor,/area) +"ql" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area) +"qm" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area) +"qn" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/sleeper,/turf/station/floor,/area) +"qo" = (/obj/item/weapon/card/id{name = "Secret Base Locker Access"; access_level = 0; lab_access = 0; engine_access = 0; air_access = 0; registered = "Secret Base Use Only"; assignment = "Secret Base"},/turf/station/floor,/area) +"qp" = (/obj/secloset/security2{allowed = "Prison Security,Prison Warden,Forensic Technician,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"qq" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"qr" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"qs" = (/obj/item/weapon/ointment,/turf/station/floor,/area) +"qt" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/med_data,/turf/station/floor,/area) +"qu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "exadv1"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qv" = (/obj/sp_start{name = "soraku"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"qx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/brutepack,/turf/station/floor,/area) +"qy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"qz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/cryo_cell,/turf/station/floor,/area) +"qA" = (/obj/item/weapon/disk/nuclear,/turf/station/floor,/area) +"qB" = (/obj/machinery/nuclearbomb{icon_state = "nuclearbomb1"; anchored = 1; extended = 1},/turf/station/floor,/area) +"qC" = (/obj/sp_start{name = "epox"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qD" = (/obj/item/weapon/radio/beacon,/turf/station/floor,/area) +"qE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"qF" = (/obj/item/weapon/storage/firstaid/syringes,/turf/station/floor,/area) +"qG" = (/obj/machinery/computer/security,/turf/station/floor,/area) +"qH" = (/obj/sp_start{name = "thiefjack"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qI" = (/obj/sp_start{name = "expertadvisor"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qJ" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area) +"qK" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area) +"qL" = (/obj/machinery/teleport/station,/turf/station/floor,/area) +"qM" = (/obj/machinery/teleport/hub,/turf/station/floor,/area) +"qN" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area) +"qO" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area) +"qP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"qQ" = (/obj/item/weapon/radio,/turf/station/floor,/area) +"qR" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/ointment,/turf/station/floor,/area) +"qS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"qT" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/bottle/rejuvenators,/turf/station/floor,/area) +"qU" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"qV" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area) +"qW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area) +"qX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/turf/station/floor,/area) +"qY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area) +"qZ" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area) +"ra" = (/obj/watertank,/turf/station/floor,/area) +"rb" = (/obj/weldfueltank,/turf/station/floor,/area) +"rc" = (/obj/secloset/medical1{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"rd" = (/obj/secloset/medical2{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"re" = (/obj/table,/obj/item/weapon/healthanalyzer,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"rf" = (/obj/window,/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"rg" = (/obj/window,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"rh" = (/obj/machinery/computer/pod{id = "sb1"},/turf/station/floor,/area) +"ri" = (/obj/machinery/mass_driver{dir = 4; id = "sb1"},/obj/machinery/pod{dir = 4},/turf/station/engine/floor,/area) +"rj" = (/obj/machinery/door/poddoor{id = "sb1"},/turf/station/engine/floor,/area) +"rk" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/turf/station/floor,/area) +"rl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/turf/station/floor,/area) +"rm" = (/obj/machinery/computer/pod{id = "sb2"},/turf/station/floor,/area) +"rn" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"ro" = (/obj/machinery/mass_driver{dir = 4; id = "sb2"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rp" = (/obj/machinery/door/poddoor{id = "sb2"},/turf/station/engine/floor,/area) +"rq" = (/obj/machinery/computer/pod{id = "sb3"},/turf/station/floor,/area) +"rr" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"rs" = (/obj/machinery/mass_driver{dir = 4; id = "sb3"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rt" = (/obj/machinery/door/poddoor{id = "sb3"},/turf/station/engine/floor,/area) +"ru" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"rv" = (/obj/machinery/computer/pod{id = "sb4"},/turf/station/floor,/area) +"rw" = (/obj/machinery/mass_driver{dir = 4; id = "sb4"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rx" = (/obj/machinery/door/poddoor{id = "sb4"},/turf/station/engine/floor,/area) +"ry" = (/obj/item/weapon/radio/beacon,/turf/space,/area) +"rz" = (/obj/machinery/computer/pod{id = "sb5"},/turf/station/floor,/area) +"rA" = (/obj/machinery/mass_driver{dir = 4; id = "sb5"},/turf/station/engine/floor,/area) +"rB" = (/obj/machinery/door/poddoor{id = "sb5"},/turf/station/engine/floor,/area) +"rC" = (/turf/station/command/wall,/area/supply_station) +"rD" = (/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rE" = (/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rF" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rG" = (/turf/station/command/floor,/area/supply_station) +"rH" = (/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rI" = (/obj/item/weapon/storage/backpack,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rJ" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/command/floor,/area/supply_station) +"rK" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/command/floor,/area/supply_station) +"rL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"rM" = (/obj/grille,/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"rN" = (/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area) +"rO" = (/obj/grille,/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) +"rP" = (/obj/bedsheetbin,/turf/station/command/floor,/area/supply_station) +"rQ" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor,/area/supply_station) +"rR" = (/obj/item/weapon/paper_bin,/obj/item/weapon/game_kit,/turf/station/command/floor,/area/supply_station) +"rS" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/command/floor,/area/supply_station) +"rT" = (/obj/watertank,/turf/station/command/floor,/area/supply_station) +"rU" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rV" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"rW" = (/obj/closet/l3closet,/turf/station/command/floor,/area/supply_station) +"rX" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/command/floor,/area/supply_station) +"rY" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/backpack,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor,/area/supply_station) +"rZ" = (/obj/item/weapon/tile,/obj/item/weapon/rods,/turf/station/command/floor,/area/supply_station) +"sa" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"sb" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/command/floor,/area/supply_station) +"sc" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor,/area/supply_station) +"sd" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/command/floor,/area/supply_station) +"se" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sf" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sg" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sh" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"si" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/command/floor,/area/supply_station) +"sj" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/turf/station/command/floor,/area/supply_station) +"sk" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/station/command/floor,/area/supply_station) +"sl" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/disk_kit,/obj/item/weapon/storage/id_kit,/turf/station/command/floor,/area/supply_station) +"sm" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/obj/item/weapon/storage/lglo_kit,/obj/item/weapon/storage/stma_kit,/turf/station/command/floor,/area/supply_station) +"sn" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"so" = (/obj/machinery/dispenser,/turf/station/command/floor,/area/supply_station) +"sp" = (/obj/weldfueltank,/turf/station/command/floor,/area/supply_station) +"sq" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area/supply_station) +"sr" = (/obj/table,/obj/item/weapon/storage/firstaid/syringes,/obj/item/weapon/bottle/toxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/dropper,/turf/station/command/floor,/area/supply_station) +"ss" = (/obj/item/weapon/camera,/turf/station/command/floor,/area/supply_station) +"st" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"su" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor,/area/supply_station) +"sv" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor,/area/supply_station) +"sw" = (/obj/move/wall,/turf/space,/area/vehicles/shuttle1) +"sx" = (/obj/move/floor,/obj/window,/obj/window{dir = 1},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"sy" = (/obj/closet/emcloset,/turf/station/command/floor,/area/supply_station) +"sz" = (/obj/move/floor,/obj/window{dir = 1},/turf/space,/area/vehicles/shuttle1) +"sA" = (/obj/machinery/door/window,/turf/station/command/floor,/area/supply_station) +"sB" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"sC" = (/obj/move/floor,/obj/window{dir = 8},/turf/space,/area/vehicles/shuttle1) +"sD" = (/obj/move/floor,/turf/space,/area/vehicles/shuttle1) +"sE" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/vehicles/shuttle1) +"sF" = (/obj/move/floor,/obj/window{dir = 4},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"sG" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/turf/station/command/floor,/area/supply_station) +"sH" = (/turf/station/command/wall{icon_state = "CCWall2"},/area/supply_station) +"sI" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/vehicles/shuttle1) +"sJ" = (/obj/machinery/door/airlock,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sK" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sL" = (/obj/machinery/computer/teleporter,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sM" = (/obj/machinery/teleport/station,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sN" = (/obj/machinery/teleport/hub,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sO" = (/obj/item/weapon/hand_tele,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sP" = (/obj/move/floor,/obj/machinery/connector{dir = 4},/obj/window{dir = 4},/obj/window,/obj/machinery/atmoalter/canister/oxygencanister,/turf/space,/area/vehicles/shuttle1) +"sQ" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/shuttle/engine/heater,/turf/space,/area/vehicles/shuttle1) +"sR" = (/obj/move/floor,/obj/machinery/connector{dir = 8},/obj/window{dir = 8},/obj/window,/obj/machinery/atmoalter/canister/poisoncanister,/turf/space,/area/vehicles/shuttle1) +"sS" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "6"; dir = 6; p_dir = 6},/turf/space,/area/vehicles/shuttle1) +"sT" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/shuttle/engine/router,/turf/space,/area/vehicles/shuttle1) +"sU" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "10"; dir = 10; p_dir = 10},/turf/space,/area/vehicles/shuttle1) +"sV" = (/obj/machinery/computer/pod{name = "Mass Driver"; id = 50},/turf/station/command/floor,/area/supply_station) +"sW" = (/obj/machinery/mass_driver{dir = 4; id = 50},/obj/machinery/recon{dir = 4},/turf/station/command/floor,/area/supply_station) +"sX" = (/obj/machinery/door/poddoor{id = 50},/turf/station/command/floor,/area/supply_station) +"sY" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 5},/obj/machinery/shuttle/engine/propulsion/burst/left,/turf/space,/area/vehicles/shuttle1) +"sZ" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 1},/obj/machinery/shuttle/engine/propulsion,/turf/space,/area/vehicles/shuttle1) +"ta" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 9},/obj/machinery/shuttle/engine/propulsion/burst/right,/turf/space,/area/vehicles/shuttle1) +"tb" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tc" = (/turf/station/command/wall{icon_state = "CCWall2"},/area) +"td" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor{density = 1},/area) +"te" = (/obj/begin,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tf" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tg" = (/obj/machinery/hologram_proj,/turf/station/command/floor{icon_state = "Floor2"},/area) +"th" = (/turf/station/command/floor{icon_state = "Floor2"},/area) +"ti" = (/turf/station/command/floor{icon_state = "Floor2"},/area/start) +"tj" = (/obj/machinery/computer/hologram_comp,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tk" = (/obj/machinery/door/airlock,/turf/station/command/floor,/area/supply_station) +"tl" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor,/area/supply_station) +"tm" = (/obj/move/wall,/turf/space,/area/shuttle) +"tn" = (/obj/move/floor,/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle) +"to" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle) +"tp" = (/obj/move/floor,/obj/machinery/sleeper,/turf/space,/area/shuttle) +"tq" = (/obj/move/floor,/obj/machinery/computer/sleep_console,/turf/space,/area/shuttle) +"tr" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"ts" = (/obj/move/floor,/obj/move/wall,/turf/space,/area/shuttle) +"tt" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tu" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/space,/area/shuttle) +"tv" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tw" = (/obj/move/floor,/turf/space,/area/shuttle) +"tx" = (/obj/move/floor,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"ty" = (/obj/move/floor,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle) +"tz" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle) +"tA" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tB" = (/obj/move/floor,/obj/machinery/door/window,/turf/space,/area/shuttle) +"tC" = (/obj/move/floor,/obj/stool/chair{dir = 4},/turf/space,/area/shuttle) +"tD" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/turf/space,/area/shuttle) +"tE" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle) +"tF" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tG" = (/obj/move/floor,/obj/machinery/computer/shuttle,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tH" = (/obj/move/floor,/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle) +"tI" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/turf/space,/area/shuttle) +"tJ" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"tK" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tL" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tM" = (/turf/station/shuttle/wall,/area) +"tN" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/shuttle/floor,/area) +"tO" = (/obj/move/floor,/obj/shuttle/door,/turf/station/shuttle/floor,/area) +"tP" = (/obj/machinery/sleeper,/turf/station/shuttle/floor,/area) +"tQ" = (/obj/machinery/computer/sleep_console,/turf/station/shuttle/floor,/area) +"tR" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"tS" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"tT" = (/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/station/shuttle/floor,/area) +"tU" = (/turf/station/shuttle/floor,/area) +"tV" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"tW" = (/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/shuttle/floor,/area) +"tX" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/station/shuttle/floor,/area) +"tY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"tZ" = (/obj/machinery/door/window,/turf/station/shuttle/floor,/area) +"ua" = (/obj/stool/chair{dir = 4},/turf/station/shuttle/floor,/area) +"ub" = (/obj/table,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/rejuvenators,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uc" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/shuttle/floor,/area) +"ud" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/shuttle/floor,/area) +"ue" = (/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uf" = (/obj/window{dir = 4},/obj/item/weapon/a_gift,/turf/station/shuttle/floor,/area) +"ug" = (/obj/machinery/door/window{dir = 1},/turf/station/shuttle/floor,/area) +"uh" = (/obj/table,/obj/item/weapon/radio,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"ui" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"uj" = (/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"uk" = (/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"ul" = (/turf/station/command/wall/other,/area) +"um" = (/obj/secloset/medical1,/turf/station/command/floor/other,/area) +"un" = (/obj/secloset/medical2,/turf/station/command/floor/other,/area) +"uo" = (/obj/secloset/animal,/turf/station/command/floor,/area) +"up" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area) +"uq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area) +"ur" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area) +"us" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor/other,/area) +"ut" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/healthanalyzer,/obj/item/weapon/dropper,/turf/station/command/floor/other,/area) +"uu" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/command/floor/other,/area) +"uv" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/syringes,/turf/station/command/floor/other,/area) +"uw" = (/turf/station/command/floor/other,/area) +"ux" = (/turf/station/command/floor,/area) +"uy" = (/obj/stool/chair,/turf/station/command/floor/other,/area) +"uz" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/command/floor/other,/area) +"uA" = (/obj/morgue,/turf/station/command/floor/other,/area) +"uB" = (/obj/machinery/sleeper,/turf/station/command/floor,/area) +"uC" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor{icon_state = "Floor2"},/area) +"uD" = (/obj/stool/chair{dir = 4},/turf/station/command/floor/other,/area) +"uE" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"uF" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Infirmary"},/turf/station/command/floor,/area) +"uG" = (/obj/start{name = "Prison Doctor"},/turf/station/command/floor{icon_state = "Floor2"},/area) +"uH" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"uI" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor,/area) +"uJ" = (/obj/table{icon_state = "sides"; dir = 8},/turf/station/command/floor/other,/area) +"uK" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/command/floor/other,/area) +"uL" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/command/floor/other,/area) +"uM" = (/obj/stool/chair{dir = 8},/turf/station/command/floor/other,/area) +"uN" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/stma_kit,/turf/station/command/floor/other,/area) +"uO" = (/obj/table{icon_state = "corners"; dir = 10},/turf/station/command/floor/other,/area) +"uP" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area) +"uQ" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area) +"uR" = (/obj/closet/wardrobe/white,/turf/station/command/floor,/area) +"uS" = (/obj/closet/wardrobe/white,/turf/station/command/floor/other,/area) +"uT" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor/other,/area) +"uU" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/lglo_kit,/turf/station/command/floor/other,/area) +"uV" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Recreation Area (West)"},/turf/station/command/floor/other,/area) +"uW" = (/obj/stool/chair{dir = 1},/turf/station/command/floor/other,/area) +"uX" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Recreation Area (East)"},/turf/station/command/floor/other,/area) +"uY" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"uZ" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor/other,/area) +"va" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/command/floor/other,/area) +"vb" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor/other,/area) +"vc" = (/obj/machinery/door/window{dir = 8},/turf/station/command/floor/other,/area) +"vd" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"ve" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"vf" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/command/floor/other,/area) +"vg" = (/obj/secloset/security1,/turf/station/command/floor/other,/area) +"vh" = (/obj/machinery/computer/security{name = "security- PS13"; network = "PS13"},/turf/station/command/floor/other,/area) +"vi" = (/obj/secloset/security2,/obj/machinery/camera{network = "PS13"; c_tag = "Security Office"},/turf/station/command/floor/other,/area) +"vj" = (/obj/secloset/security2,/turf/station/command/floor/other,/area) +"vk" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area) +"vl" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor/other,/area) +"vm" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area) +"vn" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vo" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"vp" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/command/floor/other,/area) +"vq" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/turf/station/command/floor/other,/area) +"vr" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"vs" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 1; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"vt" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"vu" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor/other,/area) +"vv" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area) +"vw" = (/obj/start{name = "Prison Security"},/turf/station/command/floor/other,/area) +"vx" = (/obj/table{icon_state = "alone"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area) +"vy" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area) +"vz" = (/obj/table{icon_state = "sides"; dir = 1},/turf/station/command/floor/other,/area) +"vA" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vB" = (/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"vC" = (/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/command/floor/other,/area) +"vD" = (/obj/secloset/animal,/turf/station/command/floor/other,/area) +"vE" = (/obj/bedsheetbin,/turf/station/command/floor/other,/area) +"vF" = (/obj/secloset/personal,/turf/station/command/floor/other,/area) +"vG" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vH" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor/other,/area) +"vI" = (/obj/closet,/turf/station/command/floor/other,/area) +"vJ" = (/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area) +"vK" = (/obj/stool/bed,/turf/station/command/floor/other,/area) +"vL" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"vM" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vN" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 2},/turf/station/command/floor/other,/area) +"vO" = (/obj/machinery/sec_lock{pixel_x = 32},/turf/station/command/floor/other,/area) +"vP" = (/obj/closet/wardrobe/orange,/turf/station/command/floor/other,/area) +"vQ" = (/obj/table{icon_state = "sides"; dir = 4},/turf/station/command/floor/other,/area) +"vR" = (/obj/table{icon_state = "alone"},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area) +"vS" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 1},/turf/station/command/floor/other,/area) +"vT" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/command/floor/other,/area) +"vU" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Solitary Cells"},/turf/station/command/floor/other,/area) +"vV" = (/obj/grille,/turf/space,/area) +"vW" = (/obj/machinery/computer/data/weapon/log,/turf/station/floor,/area) +"vX" = (/turf/station/floor/grid,/area) +"vY" = (/obj/machinery/computer/data/weapon/info,/turf/station/floor,/area) +"vZ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"wa" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"wb" = (/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wc" = (/obj/closet/wardrobe,/turf/station/command/floor/other,/area) +"wd" = (/obj/closet/wardrobe/mixed,/turf/station/command/floor/other,/area) +"we" = (/obj/table{icon_state = "sides"; dir = 2},/turf/station/command/floor/other,/area) +"wf" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio{suffix = "\[2]"; freq = 144.9},/turf/station/command/floor/other,/area) +"wg" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Courtroom"},/turf/station/command/floor/other,/area) +"wh" = (/obj/window{dir = 10},/turf/station/command/floor/other,/area) +"wi" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"wj" = (/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"wk" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"wl" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"wm" = (/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area) +"wn" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"wo" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wp" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper,/turf/station/command/floor/other,/area) +"wq" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Witness Prep Area"},/turf/station/command/floor/other,/area) +"wr" = (/obj/start{name = "Prison Warden"},/turf/station/command/floor/other,/area) +"ws" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"wt" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/sop,/turf/station/command/floor/other,/area) +"wu" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Warden's Office"},/turf/station/command/floor/other,/area) +"wv" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/command/floor/other,/area) +"ww" = (/obj/table,/obj/machinery/recharger,/turf/station/command/floor/other,/area) +"wx" = (/obj/rack,/obj/item/weapon/clothing/under/green,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/head/helmet,/turf/station/command/floor/other,/area) +"wy" = (/obj/machinery/door/airlock,/turf/station/command/floor/other,/area) +"wz" = (/obj/move/wall{icon_state = "wall2"},/turf/space,/area/shuttle_prison) +"wA" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle_prison) +"wB" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"wC" = (/turf/space,/area/shuttle_prison) +"wD" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"wE" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair,/turf/space,/area/shuttle_prison) +"wF" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/grille,/turf/space,/area/shuttle_prison) +"wG" = (/obj/move/floor{icon_state = "floor2"},/turf/space,/area/shuttle_prison) +"wH" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wI" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wJ" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wK" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle_prison) +"wL" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle_prison) +"wM" = (/obj/move/floor{icon_state = "floor2"},/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"wN" = (/obj/move/floor{icon_state = "floor2"},/obj/grille,/turf/space,/area/shuttle_prison) +"wO" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair{dir = 4},/turf/space,/area/shuttle_prison) +"wP" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window,/turf/space,/area/shuttle_prison) +"wQ" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/bottle/s_tox,/turf/space,/area/shuttle_prison) +"wR" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle_prison) +"wS" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/turf/space,/area/shuttle_prison) +"wT" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/computer/prison_shuttle,/turf/space,/area/shuttle_prison) +"wU" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle_prison) +"wV" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/obj/item/weapon/gun/energy/taser_gun,/turf/space,/area/shuttle_prison) +"wW" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wX" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wY" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/orange,/turf/space,/area/shuttle_prison) +"wZ" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafacagahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalamahanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeapaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasatacauasacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafacacacaxahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayazaAazaAazaAayaBaCaBaBaBaBaDazaAazaAazaAacacacacasacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaEaFaFaFaFaGaFaHaHaHaHaHaHaHacacacaIahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaJaJaJaJaJaJaJaJaJaKaJaJaJaJaJaJaJaJaJaJaJaJaLaeaEaMaNaFaOaNaMaHaPaQaRaRaRaRacacacacahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaSaeawaTawaUawawaTawawawawaTawawaUawawaTawawawaTaVaeaWaWaWaWaWaWaWaXaYaZaZaZbaaZacalbbacahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebcaeawaJaJaJaJaJaJaJbdaJaJaJaJaJaJaJbdaJaJaJaJaJawaeaWbebfbfbfbgbhaXbiaZaZaZaYaZacahahacahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjaebkaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebjaeaWbebfbfbfblbmaXbnbnbnbobpbqacahbracbsacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaebjbtbtbtbuawbvbtbwbxbxbxaTbybybzbtbAbAbBbBaebCaeaWbDbfbfbgbEbEaXbFaZaZaZbaaHacahahahahacavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaSaeawawaUbjawawawbtawawawawawawawawbtawawawawaebGaeaWbDbfbfbfbHbEaXbIaZaZaZaYbJbKahahalatacavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeawawawbjawbLawbMawawawawawawawawbtbNawawaTawawaeaWbDbfbObPbHbQaXbRbSbRbRbRaHacacacacacacaBaBbTbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawbVawawawbjawawaTbtawawawawawawawawbMawawawawawawbVbWbXbXbYbZbYcaaXcbaZaZaZaZcccdcecfcgchcicjckclcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebtcnbtbtbjbjbjbtaUcocpcqcpawcrcsbtctcucucvawcwaeaWcxbEcybEbHczaXcAaZaZaZaZcBaZcCcCcCcCcCcCcDcEcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecFawawbMawawcGbtbtbtbtbtbtcHcHcHbtbtcHcHcHcHaeaeaWbEcIcJczbHcKaXbRcLbRbRbRcMaZaZbaaZaZaZaYcNcOcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecFawbBbtawawawcPawawcQawcRcScScScScScScScScSaeaaaWcTcUbYbXbYbXaXaZaZaZaZaZcVaZaZcWcXcYcZaZdadbcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecFawbBbtdcawawbtbCawddaJdecScScScScScScScScSaedfdfdfdfdfdfdfdfaXdgbaaZaYaZdhaZaZaYaZaZaZbadidbcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebtdjbtbtdkaUawbtbCawawaJdlcScScScScScScScScSaedmdndndodpdqdrdsaHdtaZaZaZaZdhdudvaZdwdwdwdwdxdycmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedzdAdBbtawawawbtbCawawdCdDcScScScScScScScScSaedmdEdFdGdHdHdHdIaHaHaHbJaHbacBdJdKdLdMdNdOdPdQdRcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSdSdSdSaedTdUdVbtawawaTbtdWdXdYdZeacScScScScScScScScSaedmebdGecdGdGedeeefefefegefefefeheiejeieieiaBaBaBekaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelemeneoepdSaeaeaeaeaebjbtbtbtbtbtbtbteqeqeresetesbteueueuaedmdmevdmewewewewefexeyeyeyezefeheiejeieieiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSeAeBdSaBaBaBaBaedjbtbtbtbtbtbtbteCbtbtawawawaeaeaeaeaeefeDeyeyeyeyeyeyeEeyeyeyeyeyefeheFeGeGeHeiaBeIaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeJeKeneoeLdSeMeNeOaBaeawbtePeQeQeQeReQeQeCeSawawawaeeTeTeTeTeTeUeyeyeyeyeyeyefeyeyeyeyeyefeheVeGeGeWeiaBeIaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSeXeAeYeZaFfafbbVawbteQeQeQeQeQeQeQbtbtawawaUaeeTfcfdfdfeeyeyeyeyeyeyezefeUeyeyeyeyefehffeGfgeWeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhfieneBfjdSfkaFfaaBaeawbtflflflflflflflbtbwawawawaeeTfdfdfdeTefefegefefefefefefefefefefefeheVeGeGeWeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSeAeodSfaaFeZaBaeawbtbtbtbtbtbtbtbtbtawawawbNaeeTfmfdfneTfofpfqfrfsftfufvfwfwfwfwfreGeifxeGeGfyeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafzfAeneBfBdSfaeZfCaBaeawawaUaTawawawawbjcPawawaTfDaeeTfdfdfdeTfEfFfGfHfIfJfKfLfMfNfOfPfreGeifQfRfRfSeiaBaFaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSdSdSdSdSdSaBaBaBaBaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeeTfTfTfTeTfEfUfVfWfXfpfYfZgafwfwfwfreGeieieieieieiaBaBaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaaaaaaaaaBaaaFaaaaaFaaaaaFaaaaaFaaaaaFaaaaeTfdfdfdeTfrfrgbeTgcgcgcgcgcgcgcgcgcgcgdgegfggghgigjgkaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagmgngngngngmgmgmgmgmgmgmgmgmgmgogogogogogogogogogogogogogoeTeTgpfdfdeTgqgrgrgsgtgqgrgrgrgrgrgrgugrgdgvgwgxgfghgjgjaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBgmgygzgzgzgAgBgCgDgEgFgGgHgIgJgogKgLgMgNgOgPgQgRgSgTgUgVgWeTgXfdfdfdgYgrgrgrgrgZgugrgrgrgrgrgrgqgrhaggghgighgggjhbaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcfagmgyhdhehfhghhhihjhihihkhihlhihmhnhnhohnhnhnhohnhnhohnhphpeThqfdfdfdeTgugrgrgrhrhrhrhrhrhrhrhrhrhrhsghghghghghghhtaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhceZhihihihjhihuhihihihihihvhihwhxhmhnhnhnhnhnhnhnhnhnhnhnhnhoeTfdfdfdfdeTgtgtgthyhrhzhAhBhBhChDhDhEhFhshGhHgghIgehJggaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcaFgmhKhLhihihuhihihihihMhwhNhihOhmhPhQhnhnhRhShThUhVhnhnhWhXeTfmfdfdgpeTgsgrgrgrhrhYhDhDhDhDhDhFhZhFhsiaibghibibhJghaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcfahihihiichiidhihiiehihihihihihxgogogoifififhnhnigihiiijikileTeTfTfTeTeTgugrgrgrhrhYimhZhZhDhDhFinhFhsggghgighggioipaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcaFgmhKhLhihiiqhihihlirhihihjhwisitiuiviwixiyiziAiBhnhnhohniCeTfmfdfdiDeTgqgrgrgrhriEhFhFhFhDhDhFhZhFhsgdiFiGgdgdgdgdaBglaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhcfahihihihjhiiHiIhlhjhlhihihiiJiKgmiLgoiAhoiAiMiNiOiAhnhniAiPeTfdfdfdfdgtiQiRgrgrhrhrhraEaEiSaEaEaEaEhshsiTiTgdiUiUiUaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhceZgmhKhLiViViWiXiXiYiZaBjajaaBaBaBaBgoiMiAiMjbjcjdhnhnhnjejfeTfdfdfdfdgtgrgrjggrgrgqhrjhjijjjjjkjljmjnhsghghghghghghaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBjojojpjqjojoaBaBgogogogogogojrjsjtjujvjweTfdfdfdfdjxgrgrgrgrgrgrjyjzjjjjjjjAjjjjjjhsjBghghgighghaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjCjCjCjCjCjDjCjCjEjCaBjFjGjGjGjHjHjIjJjKjIjIjIjIjIeTeTeTeTeTeTeTfdfdfdfdgtgrgrgrgugrgrhrjhjLjjjjjjjjjMjhhsgdggghghjNjNaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjOjPjPjQjPjPjPjPjOjRaBjGjSjGjTjGjUjIjTjGjGjVjWjXjIjYjTjZjGjSkafdgpfdfdfmgtgugrgrgrgrgqhrjhkbjjjjkcjjjjjzkdiTghghggjNjNaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjQjPjPjOjPjPjPjPjQjPkejGjGjGjGjGkfjIjGjGjGjGjSjIjIkgjGjGjGjGkafdfdfdfdfdaBaBaBaBaBaBaBaBjhjjjjjjjjjjkhjhhsgdgighghkikiaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPkjkjkjkkkjkjkjkkaBjGjGjTjGjSjGkljSjGjGjTjGkajGjSjGjGjGjTkafdfdfmkmfdaBavavavavavavaEjhjzjhjjjjjjjjknhsgdiTgdghkikiaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPkjkojOjQkjkojOjQaBkpkpkpkpkpkpaBjGjGjGjGjGkajGjGjGjGkqkqkqkqkqkqkrkqaEaEaBaBaBaBaBaEjhjjjhjjksjjktkuhsgdiFgdgdgdgdaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPkjkvjCkwkjkvjCkwaBkxkxkxkykykzaBjSjGjGjGjTkajGjTjGjSkqkAkBkCkDkEkFkGkHkIkIkIkIaEaBaEjhjjjhkJkKkLkLaEkMkMkNkNkOkNkPaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkQkRkjkjkjkjkjkjkjkjaBkykSkTkTkUkVkWjIjIjIjIjIjIjIkWkXkWkqkYkZkGlalblckFkEkIldkFleaEavaEjhlfjhjjlglglhaElikNkNkNkNkNljaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjPjPlklllmlmlnlololpaBlqkTlrlskTkVkWltltltltlulvlwkWlxlylzkAkFlAkFlBkFkGlClDkGlElFaEavaElGkblHjjjjjjjjaElIkNkNlJkNlKkNaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBlLlMlNlNlOlNlNlNlMlPaBlQkTlRlSkTkykWlTlTlTlTlUlxlxkWlVkWlzkAkFkFlWkGlXlXlXkIlYlElZaEavaEjhjhjhjLjjjjjjaEmambkNkNkNkNmbaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBmclNmcmclNmcmclNlNlNaBmdkTmemfkTmgkWmhmhmhmhmilxlxkWlxmjlzmkmlmmmnkFmokFmplDkFlElFaEavaEjhmqmrjjmsmsmsaEkNkNkNmtmumumuaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBmclNmcmclNmcmclNlNlNaBkykUkTkTmvmgkWmwmxmwmymzlxlxkWlVkWlzmAmBmCmDmEmFmGmHmIlckFlcaEmJaEkukukukukukukuaEmKmLmKmMmMmMmMaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBmclOmcmclMmcmclNlOlNmNkykymOkykSmgkWmPmPmPmPmQlxlxkWmRkWlzkIkIkIkIkIkIkIkIkIkIkIkIaEavaEaaaBaFaFaBaFaFaBmSmTmUaFaFaFaFaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBmVaBaBaBaBaBaBaBaBaBaBaBaBmVaBaBkWmWmWmWmWmXlxlxlxlxlxmYmZnamZlzmYnbnbnbnbnbnbncaEavaEaaaBaaaaaBaaaaaBndnendaaaaaaaaaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnfaFaFeZaFaFfaaBaFeZaFaFfaaFaFeZaFkWngnbmjnbmjlxmYlxlxlxlxlxlxlxlzlxlxlxlxlxlxlxnhaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnjaFaFaFaFaFaFaBaFaFaFaFaFaFaFaFaFkWnklxlxlxmYlxnllxnmnclxlxlxlxnnlxnonononononolxaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFaFaFaFaFaFaBaFaFaFaFaFaFaFaFaFkWnplxnclxnqlxlxlxnrnsntntnunulzncnvnvnvnvnvnvmYaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeZaFaFfaaFaFeZaBaFfaaFaFeZaFaFfanwkWnxnynznAlxlxlxlxnBlxlxnClxnclzlzlzlzlzlzlzlzlzaEavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBnDaBaBaBaBaBaBaBaBaBaBiSaBaBaBkWlxlxlxnElxlxlxnElxlxnFnGmYnHnElxlxnInInInInInIaBavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfCaFaFaFaFaFaFaFnJaBaFaFaFaFaFaFkWnvnvnvnKnLnMnLmYnNnOnPnQnRnSkWlxlxnInInInInInIaBavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfCaFeZaFaFfaaFaFnTaBaFfaaFaFeZaFkWkWkWkWkWkWkWkWkWkWkWkWkWkWkWkWlxlxnUnUnUnUnUnUaBavaBaanininininininininininininininiavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnVnVnWnVnWnXnYnZoaaBaFaFaFaFaFaFaBaaaaaakWaaaaaakWaaaaaaaaaaaakWlxlxnUnUnUnUnUnUaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBobavavavavavocavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,2) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,3) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,4) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,5) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,6) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,7) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,8) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,9) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBododoeaFaFiSfaiSofofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBogeZaBohoiojokolojokaBaFaFaFfaaFaBaBaBofofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFaBomeZaFaFfaaFaFaBfaaFaFaFeZaFonaBooofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeZogopoqaFaFaFaFeZaForaFeZaFaFaFosotaBouofofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBovaFowoqaFaFfaaFoxoyaBaFaFaFfaaFaFozaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfaeZoraFaFaFaFaFaFoAaBoBoCaFoDoEaFoFoGoHoIaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFoJoKfaaFeZaFaFoLaBfaaFaFoMoNaFaFfaaFeZaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoOfaaBoPoQoRoSoToUoVaBoBoCaFoWaFoXeZoFoYoHaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBeZaFoZaFpaaFaFaFaFfaaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoBoCnYpbpbpcpcpdpdpeaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,10) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapfpgpgphaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaopfCaFopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaopfaeZopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaopaFaFopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfaeZaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEfaeZaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEpipjpkplpmpnpoaEaFaFaEpppqprpsptpuaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpvpwpxpyaFaFpzpAaEmVpBaEfaoiaFeZoxoApCaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpDpEpFmUpGpHpIpJaBaFfaaBeZaFaFfaaFaFeZpKaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaEaEaEaEpLeZpMaFpNpOpPpPaBaFaFaBojokoKoyaFaFaFpQaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaEpRpSpTaEpUaFfapVaBaBaBaBaBaFaFaBaBaBaBaBpWaFaFpXaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEpYoCpZfamNeZaFaFeZaBqaqbqcfaaFaFqdqeqfqgaBqhaFfaqiaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaFaFqjaFaBfaaFfaaFmNaFaFaFaFaFaFaFaFqkqkaBqlaFeZqmaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqnoCfaeZaBodqhqoqpaBaFaFaFaFaFaFaFaFaFaFaBaFaFaFqqaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqraFqsaFaBaBaBaCaBaBqtaFaFquaFqvfaaFaFeZmNeZqqqweMaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqxoFqyqzaBqAaFaFqBaBeOaFaFqCqDaFaBaBaBaBaBfaqqqEeMaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqFaFaFfCaBaBaBaCaBaBqGaFaFqHaFqIqJqKqLqMaBqNqNqOqOaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqPqQfaqRaBodqhqoqpaBeZaFaFfaaFaFqJqSaFfaaBqNqNqOqOaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqTaFaFaFaBfaaFfaaFmNaFaFaFaFaFaFqUqVqVaFaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqWaFqXfamNeZaFaFeZaBqYqZrarbfaeZmNfaaFeZaEaaaEaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaErcrdreaEpUaFfapVaBaBaBaBaBaFaFaEaEaEmVaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaEaEaEaErfpErgaFpNpOpPpPaBaFaFaEaaaEfaeZqJrhaFmNrirjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaErkeZrlmUpGpHpIpJaBeZfaaEaaaEaFaFqJeZfaaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpvpwpxpyaFaFpzpAaBmVpBaEaEaEaFaFqJrmaFrnrorpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEpipjpkplpmpnpoaEaFaFaEaaaEeZfaqJfaaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEfaeZaEaaaEaFaFqUrqeZrrrsrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaEaEaFaFmNfaaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaEfaeZrurvaFrnrwrxaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFryaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaEaEaEaEeZfaaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaErzaFmNrArBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfaeZaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrDrErFrFrFrFrFrCrGrGrGrGrGrGrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEeZfaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrHrHrIrIrIrIrIrCrCrCrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaFaFqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrHrHrHrHrHrHrHrCrGrGrJrJrJrJrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaFaFqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrHrHrHrHrHrHrHrCrKrGrJrJrJrJrCaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJfarLqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrCrCrCrCrCrCrCrHrHrCrGrGrJrJrJrJrCrCrCrCrCrCrCrCrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarMrNrNrOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrPrQrRrSrGrTrCrUrVrCrWrGrGrGrXrXrCrYrGrGrZrZrZrZrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrGrGrGrGrGsarCrHrHrCrWrGsbsbrXrXrCrYrGrGrGrGrGscrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCsdsesfsgrGshrCrGrGrCsirGsbsbrXrXrCrYrGrGrGsjsjsjrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCsdskslsmrGsnrCrGrGrCsirGsbsbrXrXrCrYrGrGrGsjsjsjrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCsdrGrGrGrGsnrCrGrGrCsirGsbsbrXrXrCsorGrGrGsjsjsjrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCspsqrGsrssstrCrGrGrCsirGsbsbrXrXrCsorGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrCrCsvrCrCrCrCrGrGrCrCsvrCrCrCrCrCsorGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsxswaaaaaarCrGrGrGrGrGrGrGrGrGrGsysysysyrCrGrGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswswszswswrCrCrCrKrGrGrGrGrGrGrGrGrGrGrGrGrGsArGrGsususususurCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasBsCsDsEsFaaaarCrGrGrGrGrGrGrGrGrGrGrGrGrGrGrCrGrGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsDsDsDswsHsHsHrGrGrGrGsHsHsHsHsHsHsHsHsHsHrCsorGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasBsCsDsDsIsJrHsJrGrGrGrGsKsLsMsNrHrHsLsMsNsOrCsorGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsDsDsDswsHsHsHrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCsorGsGsGsGsGsGrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsPsQsRswaaaarCrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCrCrCrCrCrCrCrCrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaswsSsTsUswrCrCrCrGrGrGrGsKsLsMsNrHrHsLsMsNrHrCrGrSsVrGrGrGsWsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasYsZsZsZtaaaaarCrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarCrGrGrGrGsKrHrHrHrHrHrHrHrHtbrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctctctctctctdtdtdtdtdtdtdtdtcrCrCrCrGrGrGrGsKrHrHrHrHrHrHrHrHrHrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctctctctctctctetetetetetetetetetetetetetcrCrGrGrGrGrGrGsHsHsHtfsHsHsHsHsHsHrCrGrGrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctgthtgthtgtctitititititititititititititcrCrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrCrCrCrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctjthtjthtjtctitititititititititititititcrCrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGtkrGtkrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatcthththththtctitititititititititititititcrCrKrGrGrGrGrGrGrGrGrGrGrGrGrGrGrGrCrCrCrGrGrGrGrGsXaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatcththththththtitititititititititititititcrCrGrGrGrGrGrGrGrGrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCrCaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatcthththththtctitititititititititititititcrCrGrGrGrGrGrGrGrGrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatctctctctctctctctctctctctdtdtdtdtdtdtdtdtcsHsJsHtltltltltltlrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasHrHsHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasHsJsHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtmtmtmtmtntmtmtotmtmtmtntmniaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtptqtrtstttutvtwtxtmtytztmtmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtAtwtAtotwtrtwtAtBtAtrtCtDtEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtptqtwtEtCtwtwtwtFtCtwtCtGtEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtAtwtAtEtCtAtwtrtHtrtAtCtItEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtptqtrtEtJtwtwtwtKtmtrtLtmtmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatmtmtmtmtmtntmtmtmtntmtmtntmniaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtMtMtMtMtNtMtMtOtMtMtMtNtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtPtQtRtMtStTtTtUtVtMtWtXtMtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtYtUtUtOtUtUtUtUtZtUtUuaubucaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtPtQtUuduatUtUtUueuatUuaufucaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtYtUtUuduatUtUtUugtUtUuauhucaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtPtQtRuduitUtUtUujtMtRuktMtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatMtMtMtMtMtNtMtMtMtNtMtMtNtMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,11) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,12) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulumunuoupuqurusutuuuvululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuxththuxuyuyuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluxuxuxththuxuxuxuwuwuzuAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululululululululuBuCthththththuxuDuEuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwuwuwuwuwuwuwuluFthththuGththuxuwuHuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuyuyuwuwuwuyuyuwuwuluBuIuxththuxuxuxuwuJuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDuKuLuMuwuDuKuLuMuwuluwuwuxththuxuwuwuwuNuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDuOuPuMuwuDuOuPuMuwuluQuQuxuxuxuRuSuTuTuUuluAuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluVuwuWuWuwuwuwuWuWuwuXuYuZvavbvcvdulululululululululululululaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulveuwuwuwuwuwuwuwuwuwuwvfuwuwuwuwuwuYvgvgvgvgvhvivjvkvlvlvmulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvnuwuwuwuwuwuwuyuyuwuwvouwuwuwuwuwuYuwuwuwuwuwuwuwuwvpvpvqulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvruwuwuwuwuwuDuKuLuMuwvsuwuwuwuwuwvfuwuwuwuwuwuwuwuwuwvtvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvvuwuwuwuwuwuDuOuPuMuwuzuwuwuwuwuwvouwuwuwvwuwuwuwuwuwvtvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvxvyvzvAveuwuwuWuWuwuwuYuwuwuwuwuwuzuwuwuwuwuwuwuwvBuwvCvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululululululvfuwuwuwuwuwuYvDvDvEvFvFvFvFvGuwvCvuulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwululuwuwuwuwuwululululululululuwuwuwululaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuyuyuwvHvHuwuwuwuwuwuwuYvIvJvKuluwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDvLvMuMuwuYvNuwuwuwuwvOuYuwvJvKulvPvPvPvPvPvPvPulaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuDuJvQuMuwuYuwuwuwuwuwvHvHuwuwvRulululululululululaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvJvKulvJvKulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuluwuwulvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvTululvTululululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwuwuwuwuwuwuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvUuwuwuwuwuwuwuwuwuwuwuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwuwuwuwuwuwuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvTululvTululululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuluwuwulvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvJvKulvJvKulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvVvVvVvVvVvVvVvVvVvVvVvVvVvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaBaBaBaBaBaBaBaBaBaBaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvWaFaFvXaFvXvXvXvXqKqLqMaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJvIuYuwuwuwuwuwuwuYvIvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaFvXaFvXvXvXvXaFaFaFaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvKvJuwuYvSuwuwuwuwvOuYuwvJvKulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFiSfaiSaFaFaFaFqDaFaFaFaFaFaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulvRuwvHvHuwuwuwuwuwvHvHuwuwvRulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaFvXvXvXvXvXvXvXvXvXaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululuwuwuwuwuwuwulululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvYaFaFvXvXvXvXvXvXvXvXvXaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululululululululuZvavZwavduZululululululululululululaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaBaBaBaBaBaBaBaBaBaBaBvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluLuyuwuwuwuMuMululuwuwuwuwuwuwulwbvPwcwdulvFvFvFvFvFulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBvVvVvVvVvVvVvVvVvVvVvVvVvVvVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwewewfuyuwuMuMululuwuwuwuwuwuwuJuwuwuwuwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluyuwuwuwuwuMuMululuwuwuwuwuwuwuJuwuwuwuwuwuwvFvFvFvFulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwguwuwuwuwuwuwvTuwuwuwuwuwuwuwwhuwuwuwwiuluwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluKuLuwuKuLwjuwululuwuwuwuwuwuwvouwuwuwwkulvFvFvFvFvFulaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluWuWuwuWuWwjuwululuZvavZwavduZululvculululululululululaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwwlvzuluwuwuwuwuwuwuwuYuwuwuwuwuwuwuwwmulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululvTulululululuwuwuwuwuwuwuwuYuwuwuwuDuwwnwouwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuyuyuyuyuluwuwuwuwuwuwuwvfuwuwuwuDuwwpuMuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwquwuwuwuwuluwuwuwuwuwuwuwvouwwruwuDuwwswtwuulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwuwuwuwuwvTuwuwuwuwuwuwuwuzuwuwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulululululululuwuwuwuwuwuwuwuYuwuwuwuwuwuwuwuwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwvuwuwuwuwuwuwuYvhuwvgvgvgvgwwwxulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaululululwyulululululululululululululaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauluwulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaulwyulaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwzwzwzwzwAwzwzwBwzwzwzwAwzwCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwDwEwFwGwHwGwIwGwJwzwKwLwzwzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwMwNwNwDwOwDwOwDwPwDwIwOwQwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwGwDwGwGwOwGwOwGwSwOwGwOwTwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwMwNwNwDwOwDwOwDwUwDwIwOwVwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwDwEwFwGwWwGwIwGwXwzwYwZwzwzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwzwzwzwzwAwzwzwzwAwzwzwAwzwCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/mob.dm b/ss13-40.93.2-base/ss13-40.93.2-base/mob.dm new file mode 100644 index 0000000..c94914c --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/mob.dm @@ -0,0 +1,6724 @@ + +/proc/hsl2rgb(h, s, l) + + return + +/proc/ran_zone(zone, probability) + + if (probability == null) + probability = 75 + if (probability == 100) + return zone + switch(zone) + if("chest") + if (prob(probability)) + return "chest" + else + var/t = rand(1, 15) + if (t < 3) + return "head" + else if (t < 6) + return "l_arm" + else if (t < 9) + return "r_arm" + else if (t < 13) + return "diaper" + else if (t < 14) + return "l_hand" + else if (t < 15) + return "r_hand" + else + return null + + if("diaper") + if (prob(probability * 0.9)) + return "diaper" + else + var/t = rand(1, 8) + if (t < 4) + return "chest" + else if (t < 5) + return "r_leg" + else if (t < 6) + return "l_leg" + else if (t < 7) + return "l_hand" + else if (t < 8) + return "r_hand" + else + return null + if("head") + if (prob(probability * 0.75)) + return "head" + else + if (prob(60)) + return "chest" + else + return null + if("l_arm") + if (prob(probability * 0.75)) + return "l_arm" + else + if (prob(60)) + return "chest" + else + return null + if("r_arm") + if (prob(probability * 0.75)) + return "r_arm" + else + if (prob(60)) + return "chest" + else + return null + if("r_leg") + if (prob(probability * 0.75)) + return "r_leg" + else + if (prob(60)) + return "diaper" + else + return null + if("l_leg") + if (prob(probability * 0.75)) + return "l_leg" + else + if (prob(60)) + return "diaper" + else + return null + if("l_hand") + if (prob(probability * 0.5)) + return "l_hand" + else + var/t = rand(1, 8) + if (t < 2) + return "l_arm" + else if (t < 3) + return "chest" + else if (t < 4) + return "diaper" + else if (t < 6) + return "l_leg" + else + return null + + if("r_hand") + if (prob(probability * 0.5)) + return "r_hand" + else + var/t = rand(1, 8) + if (t < 2) + return "r_arm" + else if (t < 3) + return "chest" + else if (t < 4) + return "diaper" + else if (t < 6) + return "r_leg" + else + return null + + if("l_foot") + if (prob(probability * 0.25)) + return "l_foot" + else + var/t = rand(1, 5) + if (t < 2) + return "r_leg" + else + if (t < 3) + return "l_foot" + else + return null + if("r_foot") + if (prob(probability * 0.25)) + return "r_foot" + else + var/t = rand(1, 5) + if (t < 2) + return "r_leg" + else + if (t < 3) + return "l_foot" + else + return null + else + return + +/proc/stars(n, pr) + + if (pr == null) + pr = 25 + if (pr <= 0) + return null + else + if (pr >= 100) + return n + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + while(p <= n) + if ((copytext(te, p, p + 1) == " " || prob(pr))) + t = text("[][]", t, copytext(te, p, p + 1)) + else + t = text("[]*", t) + p++ + return t + return + +/proc/stutter(n) + + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + while(p <= n) + var/n_letter = copytext(te, p, p + 1) + if (prob(80)) + if (prob(10)) + n_letter = text("[][][][]", n_letter, n_letter, n_letter, n_letter) + else + if (prob(20)) + n_letter = text("[][][]", n_letter, n_letter, n_letter) + else + if (prob(5)) + n_letter = null + else + n_letter = text("[][]", n_letter, n_letter) + t = text("[][]", t, n_letter) + p++ + return t + return + +/proc/findname(msg) + + for(var/mob/M in world) + if (M.rname == text("[]", msg)) + return 1 + //Foreach goto(15) + return 0 + return + +/obj/proc/alter_health() + + return 1 + return + +/obj/proc/relaymove() + + return + +/obj/item/weapon/grab/proc/throw() + + src.affecting.density = 1 + step(src.affecting, src.assailant.dir) + if (prob(75)) + step(src.affecting, src.assailant.dir) + //SN src = null + del(src) + return + return + +/obj/item/weapon/grab/proc/synch() + + if (src.assailant.r_hand == src) + src.hud1.screen_loc = "1,4" + else + src.hud1.screen_loc = "3,4" + return + +/obj/item/weapon/grab/proc/process() + + if ((!( isturf(src.assailant.loc) ) || (!( isturf(src.affecting.loc) ) || (src.assailant.loc != src.affecting.loc && get_dist(src.assailant, src.affecting) > 1)))) + //SN src = null + del(src) + return + if (src.assailant.client) + src.assailant.client.screen -= src.hud1 + src.assailant.client.screen += src.hud1 + if (src.assailant.pulling == src.affecting) + src.assailant.pulling = null + if (src.state <= 2) + src.allow_upgrade = 1 + if ((src.assailant.l_hand && src.assailant.l_hand != src && istype(src.assailant.l_hand, /obj/item/weapon/grab))) + var/obj/item/weapon/grab/G = src.assailant.l_hand + if (G.affecting != src.affecting) + src.allow_upgrade = 0 + if ((src.assailant.r_hand && src.assailant.r_hand != src && istype(src.assailant.r_hand, /obj/item/weapon/grab))) + var/obj/item/weapon/grab/G = src.assailant.r_hand + if (G.affecting != src.affecting) + src.allow_upgrade = 0 + if (src.state == 2) + var/h = src.affecting.hand + src.affecting.hand = 0 + src.affecting.drop_item() + src.affecting.hand = 1 + src.affecting.drop_item() + src.affecting.hand = h + for(var/obj/item/weapon/grab/G in src.affecting.grabbed_by) + if (G.state == 2) + src.allow_upgrade = 0 + //Foreach goto(341) + if (src.allow_upgrade) + src.hud1.icon_state = "reinforce" + else + src.hud1.icon_state = "!reinforce" + else + if (!( src.affecting.buckled )) + src.affecting.loc = src.assailant.loc + if ((src.killing && src.state == 3)) + src.affecting.stunned = max(5, src.affecting.stunned) + src.affecting.paralysis = max(3, src.affecting.paralysis) + src.affecting.losebreath = min(src.affecting.losebreath + 2, 3) + return + +/obj/item/weapon/grab/proc/s_click(obj/screen/S as obj) + + if (src.assailant.next_move > world.time) + return + if ((!( src.assailant.canmove ) || src.assailant.lying)) + //SN src = null + del(src) + return + switch(S.id) + if(1.0) + if (src.state >= 3) + if (!( src.killing )) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has temporarily tightened his grip on []!", src.assailant, src.affecting), 1) + //Foreach goto(97) + src.assailant.next_move = world.time + 10 + src.affecting.stunned = max(2, src.affecting.stunned) + src.affecting.paralysis = max(1, src.affecting.paralysis) + src.affecting.losebreath = min(src.affecting.losebreath + 1, 3) + src.last_suffocate = world.time + flick("disarm/killf", S) + else + return + +/obj/item/weapon/grab/proc/s_dbclick(obj/screen/S as obj) + + if ((src.assailant.next_move > world.time && !( src.last_suffocate < world.time + 2 ))) + return + if ((!( src.assailant.canmove ) || src.assailant.lying)) + //SN src = null + del(src) + return + switch(S.id) + if(1.0) + if (src.state < 2) + if (!( src.allow_upgrade )) + return + if (prob(75)) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has grabbed [] aggressively (now hands)!", src.assailant, src.affecting), 1) + //Foreach goto(121) + src.state = 2 + src.icon_state = "grabbed1" + else + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has failed to grab [] aggressively!", src.assailant, src.affecting), 1) + //Foreach goto(186) + //SN src = null + del(src) + return + else + if (src.state < 3) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has reinforced his grip on [] (now neck)!", src.assailant, src.affecting), 1) + //Foreach goto(257) + src.state = 3 + src.icon_state = "grabbed+1" + if (!( src.affecting.buckled )) + src.affecting.loc = src.assailant.loc + src.hud1.icon_state = "disarm/kill" + src.hud1.name = "disarm/kill" + else + if (src.state >= 3) + src.killing = !( src.killing ) + if (src.killing) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has tightened his grip on []'s neck!", src.assailant, src.affecting), 1) + //Foreach goto(392) + src.assailant.next_move = world.time + 10 + src.affecting.stunned = max(2, src.affecting.stunned) + src.affecting.paralysis = max(1, src.affecting.paralysis) + src.affecting.losebreath += 1 + src.hud1.icon_state = "disarm/kill1" + else + src.hud1.icon_state = "disarm/kill" + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has loosened the grip on []'s neck!", src.assailant, src.affecting), 1) + //Foreach goto(517) + else + return + +/obj/item/weapon/grab/New() + + ..() + src.hud1 = new /obj/screen/grab( src ) + src.hud1.icon_state = "reinforce" + src.hud1.name = "Reinforce Grab" + src.hud1.id = 1 + src.hud1.master = src + return + +/obj/item/weapon/grab/attack(mob/M as mob, user as mob) + + if (M == src.affecting) + if (src.state < 3) + s_dbclick(src.hud1) + else + s_click(src.hud1) + return 0 + return + +/obj/item/weapon/grab/dropped() + + //SN src = null + del(src) + return + return + +/obj/item/weapon/grab/Del() + + //src.hud1 = null + del(src.hud1) + ..() + return + +/obj/screen/zone_sel/MouseDown(location, control,params) //(location, icon_x, icon_y) + // Changes because of 4.0 + var/list/PL = params2list(params) + var/icon_x = text2num(PL["icon-x"]) + var/icon_y = text2num(PL["icon-y"]) + + if (icon_y < 6) + if ((icon_x > 10 && icon_x < 22)) + if (icon_x < 16) + src.selecting = "r_foot" + else + src.selecting = "l_foot" + else + if (icon_y < 13) + if ((icon_x > 11 && icon_x < 21)) + if (icon_x < 16) + src.selecting = "r_leg" + else + src.selecting = "l_leg" + else + if (icon_y < 16) + if ((icon_x > 9 && icon_x < 23)) + if (icon_x < 12) + src.selecting = "r_hand" + else + if (icon_x < 20) + src.selecting = "diaper" + else + src.selecting = "l_hand" + else + if (icon_y < 23) + if ((icon_x > 9 && icon_x < 23)) + if (icon_x < 12) + src.selecting = "r_arm" + else + if (icon_x < 20) + src.selecting = "chest" + else + src.selecting = "l_arm" + else + if (icon_y < 25) + if ((icon_x > 13 && icon_x < 18)) + src.selecting = "neck" + else + if (icon_y < 30) + if ((icon_x > 11 && icon_x < 20)) + if (icon_y == 28) + src.selecting = "eyes" + else + if (icon_y == 29) + src.selecting = "hair" + else + if (icon_y == 26) + src.selecting = "mouth" + else + src.selecting = "head" + return + +/obj/screen/grab/Click() + + src.master:s_click(src) + return + +/obj/screen/grab/DblClick() + + src.master:s_dbclick(src) + return + +/obj/screen/grab/attack_hand() + + return + +/obj/screen/grab/attackby() + + return + +/obj/screen/Click() + + + switch(src.name) + + if("other") + usr.other = !( usr.other ) + if("intent") + if (!( usr.intent )) + switch(usr.a_intent) + if("help") + usr.intent = "12,15" + if("disarm") + usr.intent = "13,15" + if("hurt") + usr.intent = "14,15" + if("grab") + usr.intent = "11,15" + else + else + usr.intent = null + if("m_intent") + if (!( usr.m_int )) + switch(usr.m_intent) + if("run") + usr.m_int = "12,14" + if("walk") + usr.m_int = "13,14" + if("face") + usr.m_int = "14,14" + else + else + usr.m_int = null + if("walk") + usr.m_intent = "walk" + usr.m_int = "13,14" + if("face") + usr.m_intent = "face" + usr.m_int = "14,14" + if("run") + usr.m_intent = "run" + usr.m_int = "12,14" + if("hurt") + usr.a_intent = "hurt" + usr.intent = "14,15" + if("grab") + usr.a_intent = "grab" + usr.intent = "11,15" + if("disarm") + if (istype(usr, /mob/human)) + var/mob/M = usr + M.a_intent = "disarm" + M.intent = "13,15" + if("help") + usr.a_intent = "help" + usr.intent = "12,15" + if("Reset Machine") + usr.machine = null + if("internal") + if ((!( usr.stat ) && usr.canmove && !( usr.restrained() ))) + usr.internal = null + if("pull") + usr.pulling = null + if("sleep") + usr.sleeping = !( usr.sleeping ) + if("rest") + usr.resting = !( usr.resting ) + if("throw") + if ((!( usr.stat ) && usr.canmove && isturf(usr.loc) && !( usr.restrained() ))) + usr.throw_item_v() + if("drop") + usr.drop_item_v() + if("swap") + usr.swap_hand() + if("resist") + if (usr.next_move < world.time) + return + usr.next_move = world.time + 20 + if ((!( usr.stat ) && usr.canmove && !( usr.restrained() ))) + for(var/obj/O in usr.requests) + //O = null + del(O) + //Foreach goto(557) + for(var/obj/item/weapon/grab/G in usr.grabbed_by) + if (G.state == 1) + //G = null + del(G) + else + if (G.state == 2) + if (prob(25)) + for(var/mob/O in viewers(usr, null)) + O.show_message(text("\red [] has broken free of []'s grip!", usr, G.assailant), 1) + //Foreach goto(681) + //G = null + del(G) + else + if (G.state == 2) + if (prob(5)) + for(var/mob/O in viewers(usr, null)) + O.show_message(text("\red [] has broken free of []'s headlock!", usr, G.assailant), 1) + //Foreach goto(762) + //G = null + del(G) + //Foreach goto(602) + for(var/mob/O in viewers(usr, null)) + O.show_message(text("\red [] resists!", usr), 1) + //Foreach goto(824) + return + +/obj/screen/attack_hand(mob/user as mob, using) + + user.db_click(src.name, using) + return + +/obj/screen/attack_paw(mob/user as mob, using) + + user.db_click(src.name, using) + return + +/obj/point/point() + set src in oview() + + return + +/obj/dna/proc/cleanup() + + var/e1 = (length(src.struc_enzyme) > 3 ? copytext(src.struc_enzyme, 1, 4) : null) + if ((e1 == "AEC" && length(src.spec_identity) > src.n_chromo)) + src.r_spec_identity = src.spec_identity + else + if (e1 == "14A") + var/t1 = rand(1, 3) + var/t = null + while(t < t1) + var/t2 = rand(1, length(src.use_enzyme) + 1) + src.use_enzyme = text("[]0[]", copytext(1, t2, null), copytext(t2 + 1, length(src.use_enzyme) + 1, null)) + t++ + else + if (e1 == "CDE") + if (length(src.spec_identity) == length(src.r_spec_identity)) + src.spec_identity = src.r_spec_identity + else + src.r_spec_identity = src.spec_identity + else + src.spec_identity = src.r_spec_identity + src.n_chromo = length(src.r_spec_identity) + return + +/obj/hud/New() + + src.instantiate() + ..() + return + +/obj/hud/proc/instantiate() + + src.adding = list( ) + src.other = list( ) + src.intents = list( ) + src.mon_blo = list( ) + src.m_ints = list( ) + src.mov_int = list( ) + src.vimpaired = list( ) + src.g_dither = new src.h_type( src ) + src.g_dither.screen_loc = "1,1 to 15,15" + src.g_dither.name = "Mask" + src.g_dither.icon_state = "dither12g" + src.g_dither.layer = 18 + src.blurry = new src.h_type( src ) + src.blurry.screen_loc = "1,1 to 15,15" + src.blurry.name = "Blurry" + src.blurry.icon_state = "blurry" + src.blurry.layer = 17 + var/obj/hud/using = new src.h_type( src ) + using.name = "vitals" + using.dir = SOUTH + using.screen_loc = "15,2 to 15,15" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "actions" + using.dir = EAST + using.screen_loc = "4,1 to 14,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTHWEST + using.screen_loc = "15,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = WEST + using.screen_loc = "1,3 to 2,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTHEAST + using.screen_loc = "3,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTH + using.screen_loc = "3,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = SOUTHEAST + using.screen_loc = "3,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = SOUTHWEST + using.screen_loc = "1,1 to 2,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "drop" + using.icon_state = "act_drop" + using.screen_loc = "7,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "throw" + using.icon_state = "act_throw" + using.screen_loc = "9,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "swap" + using.icon_state = "act_hand" + using.screen_loc = "11,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "i_clothing" + using.dir = SOUTH + using.icon_state = "center" + using.screen_loc = "2,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "o_clothing" + using.dir = SOUTH + using.icon_state = "equip" + using.screen_loc = "2,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "headset" + using.dir = SOUTHEAST + using.icon_state = "equip" + using.screen_loc = "3,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "r_hand" + using.dir = WEST + using.icon_state = "equip" + using.screen_loc = "1,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "l_hand" + using.dir = EAST + using.icon_state = "equip" + using.screen_loc = "3,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "id" + using.dir = SOUTHWEST + using.icon_state = "equip" + using.screen_loc = "1,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "mask" + using.dir = NORTH + using.icon_state = "equip" + using.screen_loc = "2,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "back" + using.dir = NORTHEAST + using.icon_state = "equip" + using.screen_loc = "3,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "storage1" + using.icon_state = "block" + using.screen_loc = "4,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "storage2" + using.icon_state = "block" + using.screen_loc = "5,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "resist" + using.icon_state = "act_resist" + using.screen_loc = "13,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "other" + using.icon_state = "other" + using.screen_loc = "4,2" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "intent" + using.icon_state = "intent" + using.screen_loc = "14,15" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "m_intent" + using.icon_state = "move" + using.screen_loc = "14,14" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "gloves" + using.icon_state = "gloves" + using.screen_loc = "4,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "eyes" + using.icon_state = "glasses" + using.screen_loc = "6,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "ears" + using.icon_state = "ears" + using.screen_loc = "9,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "head" + using.icon_state = "hair" + using.screen_loc = "7,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "shoes" + using.icon_state = "shoes" + using.screen_loc = "5,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "belt" + using.icon_state = "belt" + using.screen_loc = "8,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "grab" + using.icon_state = "grab" + using.screen_loc = "11,15" + using.layer = 19 + src.intents += using + using = new src.h_type( src ) + using.name = "hurt" + using.icon_state = "harm" + using.screen_loc = "14,15" + using.layer = 19 + src.intents += using + src.m_ints += using + using = new src.h_type( src ) + using.name = "disarm" + using.icon_state = "disarm" + using.screen_loc = "13,15" + using.layer = 19 + src.intents += using + using = new src.h_type( src ) + using.name = "help" + using.icon_state = "help" + using.screen_loc = "12,15" + using.layer = 19 + src.intents += using + src.m_ints += using + using = new src.h_type( src ) + using.name = "face" + using.icon_state = "facing" + using.screen_loc = "14,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "walk" + using.icon_state = "walking" + using.screen_loc = "13,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "run" + using.icon_state = "running" + using.screen_loc = "12,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "2,2" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "1,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "2,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "3,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "4,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "5,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "1,1 to 5,15" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "5,1 to 10,5" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "6,11 to 10,15" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "11,1 to 15,15" + using.layer = 17 + src.vimpaired += using + return + +/obj/equip_e/proc/process() + + return + +/obj/equip_e/proc/done() + + return + +/obj/equip_e/New() + + if (!( ticker )) + //SN src = null + del(src) + return + spawn( 100 ) + //SN src = null + del(src) + return + return + ..() + return + +/obj/equip_e/monkey/process() + + if (src.item) + src.item.add_fingerprint(src.source) + if (!( src.item )) + switch(src.place) + if("head") + if (!( src.target.wear_mask )) + //SN src = null + del(src) + return + if("l_hand") + if (!( src.target.l_hand )) + //SN src = null + del(src) + return + if("r_hand") + if (!( src.target.r_hand )) + //SN src = null + del(src) + return + if("back") + if (!( src.target.back )) + //SN src = null + del(src) + return + if("handcuff") + if (!( src.target.handcuffed )) + //SN src = null + del(src) + return + if("internal") + if ((!( (istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.target.back, /obj/item/weapon/tank) && !( src.target.internal )) ) && !( src.target.internal ))) + //SN src = null + del(src) + return + + if (src.item) + for(var/mob/O in viewers(src.target, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] is trying to put a [] on []", src.source, src.item, src.target), 1) + //Foreach goto(251) + else + var/message = null + switch(src.place) + if("l_hand") + message = text("\red [] is trying to take off a [] from []'s left hand!", src.source, src.target.l_hand, src.target) + if("r_hand") + message = text("\red [] is trying to take off a [] from []'s right hand!", src.source, src.target.r_hand, src.target) + if("back") + message = text("\red [] is trying to take off a [] from []'s back!", src.source, src.target.back, src.target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", src.source, src.target) + if("internal") + if (src.target.internal) + message = text("\red [] is trying to remove []'s internals", src.source, src.target) + else + message = text("\red [] is trying to set on []'s internals.", src.source, src.target) + else + for(var/mob/M in viewers(src.target, null)) + M.show_message(message, 1) + //Foreach goto(469) + spawn( 30 ) + src.done() + return + return + +/obj/equip_e/monkey/done() + + if ((!( src.source ) || !( src.target ))) + return + if (src.source.loc != src.s_loc) + return + if (src.target.loc != src.t_loc) + return + if ((src.item && src.source.equipped() != src.item)) + return + if ((src.source.restrained() || src.source.stat)) + return + switch(src.place) + if("mask") + if (src.target.wear_mask) + var/obj/item/weapon/W = src.target.wear_mask + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/mask)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_mask = src.item + src.item.loc = src.target + if("l_hand") + if (src.target.l_hand) + var/obj/item/weapon/W = src.target.l_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.l_hand = src.item + src.item.loc = src.target + if("r_hand") + if (src.target.r_hand) + var/obj/item/weapon/W = src.target.r_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.r_hand = src.item + src.item.loc = src.target + if("back") + if (src.target.back) + var/obj/item/weapon/W = src.target.back + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon) && src.item.flags & 1)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.back = src.item + src.item.loc = src.target + if("handcuff") + if (src.target.handcuffed) + var/obj/item/weapon/W = src.target.handcuffed + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/handcuffs)) + src.source.drop_item() + src.target.handcuffed = src.item + src.item.loc = src.target + if("internal") + if (src.target.internal) + src.target.internal.add_fingerprint(src.source) + src.target.internal = null + else + if (src.target.internal) + src.target.internal = null + if (!( istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) )) + return + else + if (istype(src.target.back, /obj/item/weapon/tank)) + src.target.internal = src.target.back + src.target.internal.add_fingerprint(src.source) + for(var/mob/M in viewers(src.target, 1)) + if ((M.client && !( M.blinded ))) + M.show_message(text("[] is now running on internals.", src.target), 1) + //Foreach goto(1097) + else + src.source.UpdateClothing() + src.target.UpdateClothing() + //SN src = null + del(src) + return + return + +/obj/equip_e/human/process() + + if (src.item) + src.item.add_fingerprint(src.source) + if (!( src.item )) + switch(src.place) + if("mask") + if (!( src.target.wear_mask )) + //SN src = null + del(src) + return + if("headset") + if (!( src.target.w_radio )) + //SN src = null + del(src) + return + if("l_hand") + if (!( src.target.l_hand )) + //SN src = null + del(src) + return + if("r_hand") + if (!( src.target.r_hand )) + //SN src = null + del(src) + return + if("suit") + if (!( src.target.wear_suit )) + //SN src = null + del(src) + return + if("uniform") + if (!( src.target.w_uniform )) + //SN src = null + del(src) + return + if("back") + if (!( src.target.back )) + //SN src = null + del(src) + return + if("syringe") + return + if("pill") + return + if("handcuff") + if (!( src.target.handcuffed )) + //SN src = null + del(src) + return + if("id") + if ((!( src.target.wear_id ) || !( src.target.w_uniform ))) + //SN src = null + del(src) + return + if("internal") + if ((!( (istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.target.back, /obj/item/weapon/tank) && !( src.target.internal )) ) && !( src.target.internal ))) + //SN src = null + del(src) + return + + var/list/L = list( "syringe", "pill" ) + if ((src.item && !( L.Find(src.place) ))) + for(var/mob/O in viewers(src.target, null)) + O.show_message(text("\red [] is trying to put a [] on []", src.source, src.item, src.target), 1) + //Foreach goto(401) + else + if (src.place == "syringe") + for(var/mob/O in viewers(src.target, null)) + O.show_message(text("\red [] is trying to inject []!", src.source, src.target), 1) + //Foreach goto(466) + else + if (src.place == "pill") + for(var/mob/O in viewers(src.target, null)) + O.show_message(text("\red [] is trying to force [] to swallow []!", src.source, src.target, src.item), 1) + //Foreach goto(527) + else + var/message = null + switch(src.place) + if("mask") + message = text("\red [] is trying to take off a [] from []'s head!", src.source, src.target.wear_mask, src.target) + if("headset") + message = text("\red [] is trying to take off a [] from []'s face!", src.source, src.target.w_radio, src.target) + if("l_hand") + message = text("\red [] is trying to take off a [] from []'s left hand!", src.source, src.target.l_hand, src.target) + if("r_hand") + message = text("\red [] is trying to take off a [] from []'s right hand!", src.source, src.target.r_hand, src.target) + if("gloves") + message = text("\red [] is trying to take off the [] from []'s hands!", src.source, src.target.gloves, src.target) + if("eyes") + message = text("\red [] is trying to take off the [] from []'s eyes!", src.source, src.target.glasses, src.target) + if("ears") + message = text("\red [] is trying to take off the [] from []'s ears!", src.source, src.target.ears, src.target) + if("head") + message = text("\red [] is trying to take off the [] from []'s head!", src.source, src.target.head, src.target) + if("shoes") + message = text("\red [] is trying to take off the [] from []'s feet!", src.source, src.target.shoes, src.target) + if("belt") + message = text("\red [] is trying to take off the [] from []'s belt!", src.source, src.target.belt, src.target) + if("suit") + message = text("\red [] is trying to take off a [] from []'s body!", src.source, src.target.wear_suit, src.target) + if("back") + message = text("\red [] is trying to take off a [] from []'s back!", src.source, src.target.back, src.target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", src.source, src.target) + if("uniform") + message = text("\red [] is trying to take off a [] from []'s body!", src.source, src.target.w_uniform, src.target) + if("pockets") + message = text("\red [] is trying to empty []'s pockets!!", src.source, src.target) + if("CPR") + if (src.target.cpr_time >= world.time + 3) + //SN src = null + del(src) + return + message = text("\red [] is trying perform CPR on []!", src.source, src.target) + if("id") + message = text("\red [] is trying to take off [] from []'s uniform!", src.source, src.target.wear_id, src.target) + if("internal") + if (src.target.internal) + message = text("\red [] is trying to remove []'s internals", src.source, src.target) + else + message = text("\red [] is trying to set on []'s internals.", src.source, src.target) + else + for(var/mob/M in viewers(src.target, null)) + M.show_message(message, 1) + //Foreach goto(1069) + spawn( 30 ) + src.done() + return + return + +/obj/equip_e/human/done() + + if ((!( src.source ) || !( src.target ))) + return + if (src.source.loc != src.s_loc) + return + if (src.target.loc != src.t_loc) + return + if ((src.item && src.source.equipped() != src.item)) + return + if ((src.source.restrained() || src.source.stat)) + return + switch(src.place) + if("mask") + if (src.target.wear_mask) + var/obj/item/weapon/W = src.target.wear_mask + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/mask)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_mask = src.item + src.item.loc = src.target + if("headset") + if (src.target.w_radio) + var/obj/item/weapon/W = src.target.w_radio + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + else + if (istype(src.item, /obj/item/weapon/radio/headset)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.w_radio = src.item + src.item.loc = src.target + if("gloves") + if (src.target.gloves) + var/obj/item/weapon/W = src.target.gloves + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/gloves)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.gloves = src.item + src.item.loc = src.target + if("eyes") + if (src.target.glasses) + var/obj/item/weapon/W = src.target.glasses + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/glasses)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.glasses = src.item + src.item.loc = src.target + if("belt") + if (src.target.belt) + var/obj/item/weapon/W = src.target.belt + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj) && src.item.flags & 128 && src.target.w_uniform)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.belt = src.item + src.item.loc = src.target + if("head") + if (src.target.head) + var/obj/item/weapon/W = src.target.head + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/head)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.head = src.item + src.item.loc = src.target + if("ears") + if (src.target.ears) + var/obj/item/weapon/W = src.target.ears + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/ears)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.ears = src.item + src.item.loc = src.target + if("shoes") + if (src.target.shoes) + var/obj/item/weapon/W = src.target.shoes + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/shoes)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.shoes = src.item + src.item.loc = src.target + if("l_hand") + if (istype(src.target, /obj/item/weapon/clothing/suit/straight_jacket)) + //SN src = null + del(src) + return + if (src.target.l_hand) + var/obj/item/weapon/W = src.target.l_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.l_hand = src.item + src.item.loc = src.target + src.item.add_fingerprint(src.target) + if("r_hand") + if (istype(src.target, /obj/item/weapon/clothing/suit/straight_jacket)) + //SN src = null + del(src) + return + if (src.target.r_hand) + var/obj/item/weapon/W = src.target.r_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.r_hand = src.item + src.item.loc = src.target + src.item.add_fingerprint(src.target) + if("uniform") + if (src.target.w_uniform) + var/obj/item/weapon/W = src.target.w_uniform + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + W = src.target.l_store + if (W) + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W = src.target.r_store + if (W) + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W = src.target.wear_id + if (W) + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + else + if (istype(src.item, /obj/item/weapon/clothing/under)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.w_uniform = src.item + src.item.loc = src.target + if("suit") + if (src.target.wear_suit) + var/obj/item/weapon/W = src.target.wear_suit + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/suit)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_suit = src.item + src.item.loc = src.target + if("id") + if (src.target.wear_id) + var/obj/item/weapon/W = src.target.wear_id + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon/card/id) && src.target.w_uniform)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_id = src.item + src.item.loc = src.target + if("back") + if (src.target.back) + var/obj/item/weapon/W = src.target.back + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon) && src.item.flags & 1)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.back = src.item + src.item.loc = src.target + if("handcuff") + if (src.target.handcuffed) + var/obj/item/weapon/W = src.target.handcuffed + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/handcuffs)) + src.source.drop_item() + src.target.handcuffed = src.item + src.item.loc = src.target + if("CPR") + if (src.target.cpr_time >= world.time + 30) + //SN src = null + del(src) + return + if ((src.target.health >= -75.0 && src.target.health < 0)) + src.target.cpr_time = world.time + if (src.target.health >= -40.0) + var/suff = min(src.target.oxyloss, 5) + src.target.oxyloss -= suff + src.target.health = 100 - src.target.oxyloss - src.target.toxloss - src.target.fireloss - src.target.bruteloss + src.target.rejuv += 10 + for(var/mob/O in viewers(src.source, null)) + O.show_message(text("\red [] performs CPR on []!", src.source, src.target), 1) + //Foreach goto(3251) + src.source << "\red Repeat every 7 seconds AT LEAST." + if("syringe") + var/obj/item/weapon/syringe/S = src.item + src.item.add_fingerprint(src.source) + if (!( istype(S, /obj/item/weapon/syringe) )) + //SN src = null + del(src) + return + if (S.s_time >= world.time + 30) + //SN src = null + del(src) + return + S.s_time = world.time + var/a = S.inject(src.target) + for(var/mob/O in viewers(src.source, null)) + O.show_message(text("\red [] injects [] with the syringe!", src.source, src.target), 1) + //Foreach goto(3407) + src.source << text("\red You inject [] units into []. The syringe contains [] units.", a, src.target, S.chem.volume()) + if("pill") + var/obj/item/weapon/m_pill/S = src.item + if (!( istype(S, /obj/item/weapon/m_pill) )) + //SN src = null + del(src) + return + if (S.s_time >= world.time + 30) + //SN src = null + del(src) + return + S.s_time = world.time + var/a = S.name + S.ingest(src.target) + for(var/mob/O in viewers(src.source, null)) + O.show_message(text("\red [] forces [] to swallow []!", src.source, src.target, a), 1) + //Foreach goto(3568) + if("pockets") + if (src.target.l_store) + var/obj/item/weapon/W = src.target.l_store + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + if (src.target.r_store) + var/obj/item/weapon/W = src.target.r_store + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + if("internal") + if (src.target.internal) + src.target.internal.add_fingerprint(src.source) + src.target.internal = null + else + if (src.target.internal) + src.target.internal = null + if (!( istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) )) + return + else + if (istype(src.target.back, /obj/item/weapon/tank)) + src.target.internal = src.target.back + for(var/mob/M in viewers(src.target, 1)) + M.show_message(text("[] is now running on internals.", src.target), 1) + //Foreach goto(3913) + src.target.internal.add_fingerprint(src.source) + else + src.source.UpdateClothing() + src.target.UpdateClothing() + //SN src = null + del(src) + return + return + +/mob/human/proc/TakeDamage(zone, brute, burn) + + var/obj/item/weapon/organ/external/E = src.organs[text("[]", zone)] + if (istype(E, /obj/item/weapon/organ/external)) + if (E.take_damage(brute, burn)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + else + return 0 + return + +/mob/human/proc/HealDamage(zone, brute, burn) + + var/obj/item/weapon/organ/external/E = src.organs[text("[]", zone)] + if (istype(E, /obj/item/weapon/organ/external)) + if (E.heal_damage(brute, burn)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + else + return 0 + return + +/mob/human/proc/UpdateDamage() + + var/list/L = list( ) + for(var/t in src.organs) + if (istype(src.organs[text("[]", t)], /obj/item/weapon/organ/external)) + L += src.organs[text("[]", t)] + //Foreach goto(24) + src.bruteloss = 0 + src.fireloss = 0 + for(var/obj/item/weapon/organ/external/O in L) + src.bruteloss += O.brute_dam + src.fireloss += O.burn_dam + //Foreach goto(94) + return + +/mob/human/proc/UpdateDamageIcon() + + var/list/L = list( ) + for(var/t in src.organs) + if (istype(src.organs[text("[]", t)], /obj/item/weapon/organ/external)) + L += src.organs[text("[]", t)] + //Foreach goto(24) + //src.body_standing = null + del(src.body_standing) + src.body_standing = list( ) + //src.body_lying = null + del(src.body_lying) + src.body_lying = list( ) + src.bruteloss = 0 + src.fireloss = 0 + for(var/obj/item/weapon/organ/external/O in L) + src.bruteloss += O.brute_dam + src.fireloss += O.burn_dam + src.body_standing += new /icon( 'dam_zones.dmi', text("[]", O.d_i_state) ) + src.body_lying += new /icon( 'dam_zones.dmi', text("[]2", O.d_i_state) ) + //Foreach goto(122) + return + +/mob/human/proc/aircheck(obj/substance/gas/G as obj) + + src.t_oxygen = 0 + src.t_plasma = 0 + if (G) + var/a_oxygen = G.oxygen * 0.7 + var/a_plasma = G.plasma + var/a_sl_gas = G.sl_gas * 0.7 + G.oxygen -= a_oxygen + G.plasma -= a_plasma + G.sl_gas -= a_sl_gas + if (a_oxygen < 67.032) + src.t_oxygen = round( (67.032 - a_oxygen) / 5) + 1 + if (G.co2 > 5) + var/t = round((G.co2 - 5) / 5) + 1 + if (G.co2 > 25) + src.paralysis = max(src.paralysis, 3) + if (G.co2 > 50) + t = 50 + src.t_oxygen = max(src.t_oxygen, t) + if (a_plasma > 5) + src.t_plasma = round(a_plasma / 10) + 1 + if ((src.wear_mask && src.wear_mask.a_filter >= 4)) + src.t_plasma = max(src.t_plasma - 40, 0) + if (a_sl_gas > 10) + src.weakened = max(src.weakened, 3) + if (a_sl_gas > 40) + src.paralysis = max(src.paralysis, 3) + G.co2 += a_oxygen * 0.6 + return + +/mob/human/proc/monkeyize() + + if (src.monkeyizing) + return + for(var/obj/item/weapon/W in src) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + //Foreach goto(25) + src.UpdateClothing() + src.monkeyizing = 1 + src.canmove = 0 + src.icon = null + src.invisibility = 100 + for(var/t in src.organs) + //src.organs[text("[]", t)] = null + del(src.organs[text("[]", t)]) + //Foreach goto(154) + var/atom/movable/overlay/animation = new /atom/movable/overlay( src.loc ) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + //animation = null + del(animation) + src.primary.spec_identity = "2B6696D2B127E5A4" + var/mob/monkey/O = new /mob/monkey( src.loc ) + O.start = 1 + O.primary = src.primary + src.primary = null + if (src.client) + src.client.mob = O + O.loc = src.loc + O << "You are now a monkey." + O << "Don't be angry at the source as now you are just like him so deal with it." + O << "Follow your objective." + //SN src = null + del(src) + return + return + +/mob/human/proc/emote(act as text) + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + var/muzzled = istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) + var/m_type = 1 + for(var/obj/item/weapon/implant/I in src) + if (I.implanted) + I.trigger(act, src) + //Foreach goto(114) + var/message + switch(act) + if("blink") + message = text("[] blinks.", src) + m_type = 1 + if("blink_r") + message = text("[] blinks rapidly.", src) + m_type = 1 + if("bow") + if (!( src.buckled )) + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(384) + if (!( M )) + param = null + message = text("[] bows[]", src, (param ? text(" to [].", param) : ".")) + m_type = 1 + if("salute") + if (!( src.buckled )) + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(505) + if (!( M )) + param = null + message = text("[] salutes[]", src, (param ? text(" to [].", param) : ".")) + m_type = 1 + if("choke") + if (!( muzzled )) + message = text("[] chokes!", src) + m_type = 2 + else + message = text("[] makes a strong noise.", src) + m_type = 2 + if("clap") + if (!( src.restrained() )) + message = text("[] claps.", src) + m_type = 2 + if("drool") + message = text("[] drools.", src) + m_type = 1 + if("eyebrow") + message = text("[] raises an eyebrow.", src) + m_type = 1 + if("chuckle") + if (!( muzzled )) + message = text("[] chuckles.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("twitch") + message = text("[] twitches violently.", src) + m_type = 1 + if("twitch_s") + message = text("[] twitches.", src) + m_type = 1 + if("faint") + message = text("[] faints.", src) + src.sleeping = 1 + m_type = 1 + if("cough") + if (!( muzzled )) + message = text("[] coughs!", src) + m_type = 2 + else + message = text("[] makes a strong noise.", src) + m_type = 2 + if("frown") + message = text("[] frowns.", src) + m_type = 1 + if("nod") + message = text("[] nods.", src) + m_type = 1 + if("blush") + message = text("[] blushes.", src) + m_type = 1 + if("gasp") + if (!( muzzled )) + message = text("[] gasps!", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("giggle") + if (!( muzzled )) + message = text("[] giggles.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("glare") + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1042) + if (!( M )) + param = null + message = text("[] glares[]", src, (param ? text(" at [].", param) : ".")) + if("stare") + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1146) + if (!( M )) + param = null + message = text("[] stares[]", src, (param ? text(" at [].", param) : ".")) + if("look") + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1250) + if (!( M )) + param = null + message = text("[] looks[]", src, (param ? text(" at [].", param) : ".")) + m_type = 1 + if("grin") + message = text("[] grins.", src) + m_type = 1 + if("cry") + if (!( muzzled )) + message = text("[] cries.", src) + m_type = 2 + else + message = text("[] makes a weak noise. [] frowns.", src, src) + m_type = 2 + if("sigh") + if (!( muzzled )) + message = text("[] sighs.", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("laugh") + if (!( muzzled )) + message = text("[] laughs.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("mumble") + message = text("[] mumbles!", src) + m_type = 2 + if("grumble") + if (!( muzzled )) + message = text("[] grumbles!", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("groan") + if (!( muzzled )) + message = text("[] groans!", src) + m_type = 2 + else + message = text("[] makes a loud noise.", src) + m_type = 2 + if("moan") + message = text("[] moans!", src) + m_type = 2 + if("point") + if (!( src.restrained() )) + var/mob/M = null + if (param) + for(var/atom/A as mob|obj|turf|area in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1667) + if (!( M )) + param = null + else + var/obj/point/P = new /obj/point( M.loc ) + spawn( 20 ) + //P = null + del(P) + return + message = text("[] points[]", src, (M ? text(" to [].", M) : ".")) + m_type = 1 + if("raise") + if (!( src.restrained() )) + message = text("[] raises a hand.", src) + m_type = 1 + if("shake") + message = text("[] shakes [] head.", src, (src.gender == "male" ? "his" : "her")) + m_type = 1 + if("shrug") + message = text("[] shrugs.", src) + m_type = 1 + if("signal") + var/t1 = round(text2num(param)) + if (!( isnum(t1) )) + return + if ((t1 > 5 && (src.r_hand || src.l_hand))) + return + else + if ((t1 <= 5 && src.r_hand && src.l_hand)) + return + else + if ((t1 > 10 || t1 < 1)) + return + if (!( src.restrained() )) + message = text("[] raises [] finger\s.", src, param) + m_type = 1 + if("smile") + message = text("[] smiles.", src) + m_type = 1 + if("shiver") + message = text("[] shivers.", src) + m_type = 1 + if("pale") + message = text("[] goes pale for a second.", src) + m_type = 1 + if("tremble") + message = text("[] trembles in fear!", src) + m_type = 1 + if("sneeze") + if (!( muzzled )) + message = text("[] sneezes.", src) + m_type = 2 + else + message = text("[] makes a strange noise.", src) + m_type = 2 + if("sniff") + message = text("[] sniffs.", src) + m_type = 2 + if("snore") + if (!( muzzled )) + message = text("[] snores.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("whimper") + if (!( muzzled )) + message = text("[] whimpers.", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("wink") + message = text("[] winks.", src) + m_type = 1 + if("yawn") + if (!( muzzled )) + message = text("[] yawns.", src) + m_type = 2 + if("hug") + m_type = 1 + if (!( src.restrained() )) + var/M = null + if (param) + for(var/mob/A in view(1, null)) + if (param == A.name) + M = A + //Foreach goto(2336) + if (M == src) + M = null + if (M) + message = text("[] hugs [].", src, M) + else + message = text("[] hugs [].", src, (src.gender == "male" ? "himself" : "herself")) + if("handshake") + m_type = 1 + if ((!( src.restrained() ) && !( src.r_hand ))) + var/mob/M = null + if (param) + for(var/mob/A in view(1, null)) + if (param == A.name) + M = A + //Foreach goto(2492) + if (M == src) + M = null + if (M) + if ((M.canmove && !( M.r_hand ) && !( M.restrained() ))) + message = text("[] shakes hands with [].", src, M) + else + message = text("[] holds out [] hand to [].", src, (src.gender == "male" ? "his" : "her"), M) + if("help") + src << "blink, blink_r, blush, bow-(none)/mob, choke, chuckle, clap, cough,\ncry, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,\ngrin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,\nsigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,\nwink, yawn" + else + src << text("\blue Unusable emote []. Say *help for a list.", act) + if (message) + if (m_type & 1) + for(var/mob/O in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(2673) + else + for(var/mob/O in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(2716) + return + +/mob/human/proc/update_body() + + //src.stand_icon = null + del(src.stand_icon) + //src.lying_icon = null + del(src.lying_icon) + src.stand_icon = new /icon( 'human.dmi', "blank" ) + src.lying_icon = new /icon( 'human.dmi', "blank" ) + for(var/t in list( "chest", "head", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot" )) + src.stand_icon.Blend(new /icon( 'human.dmi', text("[]", t) ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', text("[]2", t) ), 3) + //Foreach goto(95) + if (src.s_tone >= 0) + src.stand_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), 0) + src.lying_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), 0) + else + src.stand_icon.Blend(rgb( -src.s_tone, -src.s_tone, -src.s_tone), 1) + src.lying_icon.Blend(rgb( -src.s_tone, -src.s_tone, -src.s_tone), 1) + src.stand_icon.Blend(new /icon( 'human.dmi', "diaper" ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', "diaper2" ), 3) + if (src.gender == "female") + src.stand_icon.Blend(new /icon( 'human.dmi', "f_add" ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', "f_add2" ), 3) + + + return + +/mob/human/proc/update_face() + + //src.face = null + del(src.face) + //src.face2 = null + del(src.face2) + var/icon/I = new/icon("icon" = 'mob.dmi', "icon_state" = "eyes") + var/icon/I2 = new/icon("icon" = 'mob.dmi', "icon_state" = "eyes2") + var/icon/F = new/icon("icon" = 'mob.dmi', "icon_state" = text("[]", src.h_style_r)) + var/icon/F2 = new/icon("icon" = 'mob.dmi', "icon_state" = text("[]2", src.h_style_r)) + F.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), 0) + F2.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), 0) + I.Blend(rgb(src.r_eyes, src.g_eyes, src.b_eyes), 0) + I2.Blend(rgb(src.r_eyes, src.g_eyes, src.b_eyes), 0) + I.Blend(F, 3) + I2.Blend(F2, 3) + F = new/icon("icon" = 'human.dmi', "icon_state" = "mouth") + F2 = new/icon("icon" = 'human.dmi', "icon_state" = "mouth2") + I.Blend(F, 3) + I2.Blend(F2, 3) + //F = null + del(F) + //F2 = null + del(F2) + src.face = new /image( ) + src.face2 = new /image( ) + src.face.icon = I + src.face2.icon = I2 + //I = null + del(I) + //I2 = null + del(I2) + return + +/mob/human/restrained() + + if (src.handcuffed) + return 1 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + return 1 + return 0 + return + +/mob/human/ex_act(severity) + + flick("flash", src.flash) + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(32) + var/b_loss = null + var/f_loss = null + switch(severity) + if(1.0) + if (src.stat != 2) + b_loss += 100 + f_loss += 100 + if(2.0) + if (src.stat != 2) + if (!( shielded )) + b_loss += 60 + f_loss += 60 + if (!( istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + src.ear_damage += 30 + src.ear_deaf += 120 + if(3.0) + if (src.stat != 2) + b_loss += 30 + if ((prob(50) && !( shielded ))) + src.paralysis += 10 + if (!( istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + src.ear_damage += 15 + src.ear_deaf += 60 + else + for(var/organ in src.organs) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", organ)] + if (istype(temp, /obj/item/weapon/organ/external)) + switch(temp.name) + if("head") + temp.take_damage(b_loss * 0.2, f_loss * 0.2) + if("chest") + temp.take_damage(b_loss * 0.4, f_loss * 0.4) + if("diaper") + temp.take_damage(b_loss * 0.1, f_loss * 0.1) + if("l_arm") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("r_arm") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("l_hand") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("r_hand") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("l_leg") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("r_leg") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("l_foot") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("r_foot") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + + //Foreach goto(282) + src.UpdateDamageIcon() + return + +/mob/human/u_equip(obj/item/weapon/W as obj) + + if (W == src.wear_suit) + src.wear_suit = null + else + if (W == src.w_uniform) + W = src.r_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.l_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.wear_id + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.belt + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + src.w_uniform = null + else + if (W == src.gloves) + src.gloves = null + else + if (W == src.glasses) + src.glasses = null + else + if (W == src.head) + src.head = null + else + if (W == src.ears) + src.ears = null + else + if (W == src.shoes) + src.shoes = null + else + if (W == src.belt) + src.belt = null + else + if (W == src.wear_mask) + src.wear_mask = null + else + if (W == src.w_radio) + src.w_radio = null + else + if (W == src.wear_id) + src.wear_id = null + else + if (W == src.r_store) + src.r_store = null + else + if (W == src.l_store) + src.l_store = null + else + if (W == src.back) + src.back = null + else + if (W == src.handcuffed) + src.handcuffed = null + else + if (W == src.r_hand) + src.r_hand = null + else + if (W == src.l_hand) + src.l_hand = null + return + +/mob/human/db_click(text, t1) + + var/obj/item/weapon/W = src.equipped() + if (!( istype(W, /obj/item/weapon) )) + return + switch(text) + if("mask") + if (src.wear_mask) + return + if (!( istype(W, /obj/item/weapon/clothing/mask) )) + return + src.u_equip(W) + src.wear_mask = W + if("back") + if ((src.back || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 1 )) + return + src.u_equip(W) + src.back = W + if("headset") + if (src.w_radio) + return + if (!( istype(W, /obj/item/weapon/radio/headset) )) + return + src.u_equip(W) + src.w_radio = W + if("o_clothing") + if (src.wear_suit) + return + if (!( istype(W, /obj/item/weapon/clothing/suit) )) + return + src.u_equip(W) + src.wear_suit = W + if("gloves") + if (src.gloves) + return + if (!( istype(W, /obj/item/weapon/clothing/gloves) )) + return + src.u_equip(W) + src.gloves = W + if("shoes") + if (src.shoes) + return + if (!( istype(W, /obj/item/weapon/clothing/shoes) )) + return + src.u_equip(W) + src.shoes = W + if("belt") + if ((src.belt || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 128 )) + return + src.u_equip(W) + src.belt = W + if("eyes") + if (src.glasses) + return + if (!( istype(W, /obj/item/weapon/clothing/glasses) )) + return + src.u_equip(W) + src.glasses = W + if("head") + if (src.head) + return + if (!( istype(W, /obj/item/weapon/clothing/head) )) + return + src.u_equip(W) + src.head = W + if("ears") + if (src.ears) + return + if (!( istype(W, /obj/item/weapon/clothing/ears) )) + return + src.u_equip(W) + src.ears = W + if("i_clothing") + if (src.w_uniform) + return + if (!( istype(W, /obj/item/weapon/clothing/under) )) + return + src.u_equip(W) + src.w_uniform = W + if("id") + if ((src.wear_id || !( src.w_uniform ))) + return + if (!( istype(W, /obj/item/weapon/card/id) )) + return + src.u_equip(W) + src.wear_id = W + if("storage1") + if (src.l_store) + return + if ((!( istype(W, /obj/item/weapon) ) || W.w_class >= 3 || !( src.w_uniform ))) + return + src.u_equip(W) + src.l_store = W + if("storage2") + if (src.r_store) + return + if ((!( istype(W, /obj/item/weapon) ) || W.w_class >= 3 || !( src.w_uniform ))) + return + src.u_equip(W) + src.r_store = W + else + return + +/mob/human/meteorhit(O as obj) + + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message(text("\red [] has been hit with by []", src, O), 1) + //Foreach goto(19) + if (src.health > 0) + var/dam_zone = pick("chest", "chest", "chest", "head", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", dam_zone)] + temp.take_damage((istype(O, /obj/meteor/small) ? 15 : 30), 20) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(30)) + var/t = pick(1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 3, 5, 6) + src.sdisabilities |= t + if (t & 1) + src.show_message("\red You go blind!") + if (t & 2) + src.show_message("\red You go mute!") + if (t & 4) + src.show_message("\red You go deaf!") + return + + +/mob/human/Move(a, b, flag) + + if (src.buckled) + return + if (src.restrained()) + src.pulling = null + var/t7 = 1 + if (src.restrained()) + for(var/mob/M in range(src, 1)) + if ((M.pulling == src && M.stat == 0 && !( M.restrained() ))) + t7 = null + //Foreach goto(62) + if ((t7 && (src.pulling && ((get_dist(src, src.pulling) <= 1 || src.pulling.loc == src.loc) && (src.client && src.client.moving))))) + var/turf/T = src.loc + . = ..() + if (!( isturf(src.pulling.loc) )) + src.pulling = null + return + if (!( src.restrained() )) + var/diag = get_dir(src, src.pulling) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(src, src.pulling) > 1 || diag)) + if (ismob(src.pulling)) + var/mob/M = src.pulling + var/ok = 1 + if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + if (prob(75)) + var/obj/item/weapon/grab/G = pick(M.grabbed_by) + if (istype(G, /obj/item/weapon/grab)) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1) + //Foreach goto(354) + //G = null + del(G) + else + ok = 0 + if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + ok = 0 + if (ok) + var/t = M.pulling + M.pulling = null + step(src.pulling, get_dir(src.pulling.loc, T)) + M.pulling = t + else + step(src.pulling, get_dir(src.pulling.loc, T)) + else + src.pulling = null + . = ..() + if ((src.s_active && !( src.contents.Find(src.s_active) ))) + src.s_active.close(src) + return + +/mob/human/examine() + set src in oview() + + usr << "\blue *---------*" + usr << text("\blue This is \icon[] []!", src, src.name) + if (src.w_uniform) + usr << text("\blue \t[] is wearing \icon[] [].", src.name, src.w_uniform, src.w_uniform.name) + if (src.handcuffed) + usr << text("\blue \t[] is handcuffed! \icon[]", src.name, src.handcuffed) + if (src.wear_suit) + usr << text("\blue \t[] has a \icon[] [] on!", src.name, src.wear_suit, src.wear_suit.name) + if (src.w_radio) + usr << text("\blue \t[] has a \icon[] [] by \his[] mouth!", src.name, src.w_radio, src.w_radio.name, src) + if (src.wear_mask) + usr << text("\blue \t[] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + if (src.l_hand) + usr << text("\blue \t[] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + if (src.r_hand) + usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + if (src.back) + usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) + if (src.wear_id) + if ((src.wear_id.registered != src.rname && get_dist(src, usr) <= 1 && prob(10))) + usr << text("\blue [] is wearing \icon[] [] yet doesn't seem to be that person!!!", src.name, src.wear_id, src.wear_id.name) + else + usr << text("\blue [] is wearing \icon[] []!", src.name, src.wear_id, src.wear_id.name) + if (src.bruteloss) + if (src.bruteloss < 30) + usr << text("\red [] looks slightly bruised!", src.name) + else + usr << text("\red [] looks severely bruised!", src.name) + if (src.fireloss) + if (src.fireloss < 30) + usr << text("\red [] looks slightly burnt!", src.name) + else + usr << text("\red [] looks severely burnt!", src.name) + usr << "\blue *---------*" + return + +/mob/human/Logout() + + if (!( src.start )) + //SN src = null + del(src) + return + else + ..() + return + +/mob/human/New() + + spawn( 1 ) + if (world.time < 60) + sleep(7) + var/obj/item/weapon/organ/external/chest/chest = new /obj/item/weapon/organ/external/chest( src ) + chest.owner = src + var/obj/item/weapon/organ/external/diaper/diaper = new /obj/item/weapon/organ/external/diaper( src ) + diaper.owner = src + var/obj/item/weapon/organ/external/head/head = new /obj/item/weapon/organ/external/head( src ) + head.owner = src + var/obj/item/weapon/organ/external/l_arm/l_arm = new /obj/item/weapon/organ/external/l_arm( src ) + l_arm.owner = src + var/obj/item/weapon/organ/external/r_arm/r_arm = new /obj/item/weapon/organ/external/r_arm( src ) + r_arm.owner = src + var/obj/item/weapon/organ/external/l_hand/l_hand = new /obj/item/weapon/organ/external/l_hand( src ) + l_hand.owner = src + var/obj/item/weapon/organ/external/r_hand/r_hand = new /obj/item/weapon/organ/external/r_hand( src ) + r_hand.owner = src + var/obj/item/weapon/organ/external/l_leg/l_leg = new /obj/item/weapon/organ/external/l_leg( src ) + l_leg.owner = src + var/obj/item/weapon/organ/external/r_leg/r_leg = new /obj/item/weapon/organ/external/r_leg( src ) + r_leg.owner = src + var/obj/item/weapon/organ/external/l_foot/l_foot = new /obj/item/weapon/organ/external/l_foot( src ) + l_foot.owner = src + var/obj/item/weapon/organ/external/r_foot/r_foot = new /obj/item/weapon/organ/external/r_foot( src ) + r_foot.owner = src + src.organs["chest"] = chest + src.organs["diaper"] = diaper + src.organs["head"] = head + src.organs["l_arm"] = l_arm + src.organs["r_arm"] = r_arm + src.organs["l_hand"] = l_hand + src.organs["r_hand"] = r_hand + src.organs["l_leg"] = l_leg + src.organs["r_leg"] = r_leg + src.organs["l_foot"] = l_foot + src.organs["r_foot"] = r_foot + if ((src.gender != "male" && src.gender != "female")) + src.gender = "male" + src.stand_icon = new /icon( 'human.dmi', text("[]", src.gender) ) + src.lying_icon = new /icon( 'human.dmi', text("[]-d", src.gender) ) + src.icon = src.stand_icon + src << "\blue Your icons have been generated!" + UpdateClothing() + return + return + +/mob/human/Login() + + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + world.update_stat() + if (!( src.hud_used )) + src.hud_used = main_hud + src.next_move = 1 + if (!( src.rname )) + src.rname = src.key + src.oxygen = new /obj/screen( null ) + src.i_select = new /obj/screen( null ) + src.m_select = new /obj/screen( null ) + src.toxin = new /obj/screen( null ) + src.internals = new /obj/screen( null ) + src.mach = new /obj/screen( null ) + src.fire = new /obj/screen( null ) + src.healths = new /obj/screen( null ) + src.pullin = new /obj/screen( null ) + src.blind = new /obj/screen( null ) + src.flash = new /obj/screen( null ) + src.hands = new /obj/screen( null ) + src.sleep = new /obj/screen( null ) + src.rest = new /obj/screen( null ) + src.zone_sel = new /obj/screen/zone_sel( null ) + ..() + UpdateClothing() + if (nuke_code) + if ((src.ckey in list( "exadv1", "epox", "soraku" ))) + if (!( findtext(src.memory, "Secret Base Nuke Code", 1, null) )) + src.memory += text("Secret Base Nuke Code: []
", nuke_code) + src.oxygen.icon_state = "oxy0" + src.i_select.icon_state = "selector" + src.m_select.icon_state = "selector" + src.toxin.icon_state = "toxin0" + src.internals.icon_state = "internal0" + src.mach.icon_state = null + src.fire.icon_state = "fire0" + src.healths.icon_state = "health0" + src.pullin.icon_state = "pull0" + src.blind.icon_state = "black" + src.hands.icon_state = "hand" + src.flash.icon_state = "blank" + src.sleep.icon_state = "sleep0" + src.rest.icon_state = "rest0" + src.hands.dir = NORTH + src.oxygen.name = "oxygen" + src.i_select.name = "intent" + src.m_select.name = "moving" + src.toxin.name = "toxin" + src.internals.name = "internal" + src.mach.name = "Reset Machine" + src.fire.name = "fire" + src.healths.name = "health" + src.pullin.name = "pull" + src.blind.name = " " + src.hands.name = "hand" + src.flash.name = "flash" + src.sleep.name = "sleep" + src.rest.name = "rest" + src.oxygen.screen_loc = "15,12" + src.i_select.screen_loc = "14,15" + src.m_select.screen_loc = "14,14" + src.toxin.screen_loc = "15,10" + src.internals.screen_loc = "15,14" + src.mach.screen_loc = "14,1" + src.fire.screen_loc = "15,8" + src.healths.screen_loc = "15,5" + src.sleep.screen_loc = "15,3" + src.rest.screen_loc = "15,2" + src.pullin.screen_loc = "15,1" + src.hands.screen_loc = "1,3" + src.blind.screen_loc = "1,1 to 15,15" + src.flash.screen_loc = "1,1 to 15,15" + src.blind.layer = 0 + src.flash.layer = 17 + src.client.screen.len = null + src.client.screen -= list( src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen += list( src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + src << browse('help.htm', "window=help") + if (((src.key in list( "Exadv1", "Expert Advisor" )) || world.address == src.client.address || !( src.client.address ))) + src << text("\blue The game ip is byond://[]:[] !", world.address, world.port) + src.verbs += /mob/proc/mute + src.verbs += /mob/proc/changemessage + src.verbs += /mob/proc/boot + src.verbs += /mob/proc/changemode + src.verbs += /mob/proc/restart + src.verbs += /mob/proc/who + src.verbs += /mob/proc/change_name + src.verbs += /mob/proc/show_help + src.verbs += /mob/proc/toggle_ooc + src.verbs += /mob/proc/toggle_abandon + src.verbs += /mob/proc/toggle_enter + src.verbs += /mob/proc/toggle_shuttle + src.verbs += /mob/proc/delay_start + src.verbs += /mob/proc/make_gift + src.verbs += /mob/proc/make_flag + src.verbs += /mob/proc/make_pill + src.verbs += /mob/proc/show_ctf + src.verbs += /mob/proc/ban + src.verbs += /mob/proc/unban + src.verbs += /mob/proc/secrets + src.verbs += /mob/proc/carboncopy + src.verbs += /mob/proc/toggle_alter + src.verbs += /mob/proc/list_dna + src << text("\blue []", world_message) + src << browse(text("
[]
", changes), "window=changes") + if (!( isturf(src.loc) )) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + if (!( src.start )) + ShowChoices() + var/area/A = locate(/area/start) + var/list/L = list( ) + for(var/turf/T in A) + L += T + //Foreach goto(1251) + src.loc = pick(L) + return + +/mob/human/Bump(atom/movable/AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || src.now_pushing)) + return + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( src.now_pushing )) + src.now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + step(AM, t) + src.now_pushing = null + return + return + +/mob/human/death() + + src.healths.icon_state = "health5" + src.stat = 2 + src.canmove = 0 + src.blind.layer = 0 + src.lying = 1 + src.icon_state = "dead" + var/cancel + for(var/mob/M in world) + if ((M.client && !( M.stat ))) + cancel = 1 + //Foreach goto(67) + if (!( cancel )) + world << "Everyone is dead! Resetting in 30 seconds!" + if ((ticker && ticker.timing)) + ticker.check_win() + else + spawn( 300 ) + world.Reboot() + return + return ..() + + +/mob/human/m_delay() + + var/tally = 0 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + tally += 15 + if (istype(src.shoes, /obj/item/weapon/clothing/shoes)) + if (src.shoes.chained) + tally += 15 + else + tally += -1.0 + return tally + + +/mob/human/burn(fi_amount) + + var/ok = 0 + var/obj/item/weapon/organ/external/temp + if (src.r_hand) + src.r_hand.burn(fi_amount) + if (src.l_hand) + src.l_hand.burn(fi_amount) + if (src.back) + src.back.burn(fi_amount) + if (src.belt) + src.belt.burn(fi_amount) + var/still_burning = 127 + if (src.wear_suit) + if (src.wear_suit.burn(fi_amount)) + still_burning &= ~src.wear_suit.fire_protect + if (still_burning & 46) + if (src.w_uniform) + if (src.w_uniform.burn(fi_amount)) + still_burning &= ~src.w_uniform.fire_protect + if (still_burning & 16) + if (src.gloves) + if (src.gloves.burn(fi_amount)) + still_burning &= ~src.gloves.fire_protect + if (still_burning & 64) + if (src.shoes) + if (src.shoes.burn(fi_amount)) + still_burning &= ~src.shoes.fire_protect + if (still_burning & 1) + if (src.head) + if (src.head.burn(fi_amount)) + still_burning &= ~src.head.fire_protect + if (still_burning & 1) + if (src.wear_mask) + if (src.wear_mask.burn(fi_amount)) + still_burning &= ~src.wear_mask.fire_protect + if (still_burning) + if ((src.fire && src.stat != 2)) + flick("fire1", src.fire) + if (still_burning & 1) + if (src.glasses) + src.glasses.burn(fi_amount) + if (src.ears) + src.ears.burn(fi_amount) + if (src.w_radio) + src.w_radio.burn(fi_amount) + temp = null + if (src.organs["head"]) + temp = src.organs["head"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 2) + if (src.wear_id) + src.wear_id.burn(fi_amount) + temp = null + if (src.organs["chest"]) + temp = src.organs["chest"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 4) + temp = null + if (src.organs["diaper"]) + temp = src.organs["diaper"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 8) + temp = null + if (src.organs["l_arm"]) + temp = src.organs["l_arm"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_arm"]) + temp = src.organs["r_arm"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 32) + temp = null + if (src.organs["l_leg"]) + temp = src.organs["l_leg"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_leg"]) + temp = src.organs["r_leg"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 64) + temp = null + if (src.organs["l_foot"]) + temp = src.organs["l_foot"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_foot"]) + temp = src.organs["r_foot"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 16) + temp = null + if (src.organs["l_hand"]) + temp = src.organs["l_hand"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_hand"]) + temp = src.organs["r_hand"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (ok) + src.UpdateDamageIcon() + else + src.UpdateDamage() + return + +/mob/human/Life() + set background = 1 + var/turf/T = src.loc + var/oxcheck + var/plcheck + + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.monkeyizing) + return + + + if (src.stat != 2) + if (!( src.m_flag )) + src.last_move = null + src.m_flag = null + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = null + if (src.disabilities & 2) + if ((prob(1) && src.paralysis < 10 && src.r_epil < 1)) + src << "\red You have a seizure!" + src.paralysis = max(10, src.paralysis) + if (src.disabilities & 4) + if ((prob(5) && src.paralysis <= 1 && src.r_ch_cou < 1)) + src.drop_item() + spawn( 0 ) + emote("cough") + return + if (src.disabilities & 8) + if ((prob(10) && src.paralysis <= 1 && src.r_Tourette < 1)) + src.stunned = max(10, src.stunned) + spawn( 0 ) + emote("twitch") + return + if (src.disabilities & 16) + if (prob(10)) + src.stuttering = max(10, src.stuttering) + if ((src.internal && !( src.contents.Find(src.internal) ))) + src.internal = null + if ((!( src.wear_mask ) || !( src.wear_mask.flags | 8 ))) + src.internal = null + if (src.losebreath > 0) + src.losebreath-- + if (prob(7)) + spawn( 0 ) + emote("gasp") + return + oxcheck = 7 + plcheck = 0 + else + if (isobj(T)) + var/obj/O = T + T = O.alter_health(src) + if (isturf(T)) + var/t = 1.4E-4 + if (src.health < -75.0) + t = 5.0E-5 + else + if (src.health < -50.0) + t = 1.0E-4 + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.oxygen + T.poison + T.sl_gas + T.co2 + T.n2 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.maximum = 10000 + if (src.internal) + src.internal.process(src, G) + if (src.internals) + src.internals.icon_state = "internal1" + + + if (( src.wear_mask.flags & 4 && (!( istype(src.head, /obj/item/weapon/clothing/head) ) || !( src.head.flags & 2 )))) + G.turf_add(T, G.tot_gas() * 0.5) + G.turf_take(T, t / 2 * turf_total - G.tot_gas()) + else + if (src.internals) + src.internals.icon_state = "internal0" + G.turf_take(T, t * turf_total) + if (G.tot_gas() > 650) + G.turf_add(T, G.tot_gas() - 650) + src.aircheck(G) + plcheck = src.t_plasma + oxcheck = src.t_oxygen + G.turf_add(T, G.tot_gas()) + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + var/layers = 20 + if (((istype(src.head, /obj/item/weapon/clothing/head) && src.head.flags & 4) || (istype(src.wear_mask, /obj/item/weapon/clothing/mask) && (!( src.wear_mask.flags & 4 ) && src.flags & 8)))) + layers -= 5 + if (istype(src.w_uniform, /obj/item/weapon/clothing/under)) + layers -= 5 + if ((istype(src.wear_suit, /obj/item/weapon/clothing/suit) && src.wear_suit.flags & 8)) + layers -= 10 + if (layers > oxcheck) + oxcheck = layers + if ((plcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.toxloss += plcheck + else + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((oxcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.oxyloss += oxcheck + else + src.oxyloss += oxcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + if (src.health >= 0) + if (src.oxyloss >= 10) + var/amount = max(0.15, 1) + src.oxyloss -= amount + else + src.oxyloss = 0 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health <= -100.0) + death() + else + if ((src.sleeping || src.health < 0)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + else + spawn( 0 ) + emote("snore") + return + if (src.health < 0) + if (src.rejuv <= 0) + src.oxyloss++ + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + src.stat = 1 + if (src.paralysis < 5) + src.paralysis = 5 + else + if (src.resting) + if (src.weakened < 5) + src.weakened = 5 + else + if (src.health < 20) + if (prob(5)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + src.stat = 1 + if (src.paralysis < 2) + src.paralysis = 2 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.rejuv > 0) + src.rejuv-- + if (src.r_epil > 0) + src.r_epil-- + if (src.antitoxs > 0) + src.r_epil -= 4 + if (src.r_ch_cou > 0) + src.r_ch_cou-- + if (src.antitoxs > 0) + src.r_ch_cou -= 4 + if (src.r_Tourette > 0) + src.r_Tourette-- + if (src.antitoxs > 0) + src.r_Tourette -= 4 + if (src.antitoxs > 0) + src.antitoxs-- + if (src.plasma > 0) + src.antitoxs -= 4 + if (src.plasma > 0) + src.plasma-- + src.blinded = null + if (src.drowsyness > 0) + src.drowsyness-- + if (src.paralysis > 1) + src.drowsyness -= 0.5 + else + if (src.weakened > 1) + src.drowsyness -= 0.25 + src.eye_blurry = max(2, src.eye_blurry) + if (prob(5)) + src.sleeping = 1 + src.paralysis = 5 + if ((src.health > -10.0 && src.drowsyness > 1200)) + if (src.antitoxs < 1) + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + var/mental_danger = 0 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (((src.r_epil > 0 && !( src.disabilities & 2 )) || (src.r_Tourette > 0 && !( src.disabilities & 8 )))) + src.stuttering = max(2, src.drowsyness) + mental_danger = 1 + src.drowsyness = max(2, src.drowsyness) + if (!( src.paralysis )) + if (prob(5)) + src << "\red You have a seizure!" + src.paralysis = 10 + else + if (prob(5)) + spawn( 0 ) + emote("twitch") + return + src.stunned = 10 + else + if (prob(30)) + spawn( 0 ) + emote("drool") + return + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health > -10.0) + var/threshold = 60 + if (mental_danger) + threshold = 30 + if (src.r_ch_cou > 3600) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_epil > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_Tourette > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.antitoxs > 7200) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("drool") + return + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health > -50.0) + if (src.plasma > 0) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("moan") + return + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.stat != 2) + if (src.paralysis + src.stunned + src.weakened > 0) + if (src.stunned > 0) + src.stunned-- + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.lying = 1 + src.stat = 0 + if (src.paralysis > 0) + src.paralysis-- + src.blinded = 1 + src.lying = 1 + src.stat = 1 + src.canmove = 0 + var/h = src.hand + src.hand = 0 + drop_item() + src.hand = 1 + drop_item() + src.hand = h + else + src.canmove = 1 + src.lying = 0 + src.stat = 0 + else + src.lying = 1 + src.blinded = 1 + src.stat = 2 + src.canmove = 0 + if (src.stuttering > 0) + src.stuttering-- + if (src.eye_blind > 0) + src.eye_blind-- + src.blinded = 1 + if (src.ear_deaf > 0) + src.ear_deaf-- + else + if (src.ear_damage < 25) + src.ear_damage -= 0.05 + if (istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs)) + src.ear_damage -= 0.15 + src.ear_damage = max(src.ear_damage, 0) + if (src.buckled) + src.lying = 0 + src.density = !( src.lying ) + src.pixel_y = 0 + src.pixel_x = 0 + var/add_weight = 0 + if (istype(src.l_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (istype(src.r_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (locate(/obj/item/weapon/grab, src.grabbed_by)) + var/a_grabs = 0 + for(var/obj/item/weapon/grab/G in src.grabbed_by) + G.process() + if (G) + if (G.state > 1) + a_grabs++ + if ((G.state > 2 && src.loc == G.assailant.loc)) + src.density = 0 + src.lying = 0 + switch(G.assailant.dir) + if(1.0) + src.pixel_y = 8 + if(2.0) + src.pixel_y = -8.0 + if(4.0) + src.pixel_x = 8 + if(8.0) + src.pixel_x = -8.0 + + //Foreach goto(2918) + src.weight = ((src.grabbed_by.len - a_grabs) / 2 + 1) * 1250000.0 + (a_grabs * 2500000.0) + else + if (src.lying) + src.weight = add_weight + 2500000.0 + else + src.weight = add_weight + 1250000.0 + if ((src.sdisabilities & 1 || istype(src.glasses, /obj/item/weapon/clothing/glasses/blindfold))) + src.blinded = 1 + if ((src.sdisabilities & 4 || istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs))) + src.ear_deaf = 1 + if (src.eye_blurry > 0) + src.eye_blurry-- + src.eye_blurry = max(0, src.eye_blurry) + if (src.client) + src.client.screen -= main_hud.g_dither + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/gasmask)) + src.client.screen += main_hud.g_dither + if (istype(src.glasses, /obj/item/weapon/clothing/glasses/meson)) + src.sight |= SEE_TURFS + src.see_invisible = 0 + else + if (istype(src.glasses, /obj/item/weapon/clothing/glasses/thermal)) + src.sight |= SEE_TURFS + src.sight |= SEE_MOBS + src.see_invisible = 2 + else + src.sight &= 65519 + src.sight &= 65531 + src.see_invisible = 0 + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = "blank" + if (src.sleep) + src.sleep.icon_state = text("sleep[]", src.sleeping) + if (src.rest) + src.rest.icon_state = text("rest[]", src.resting) + if (src.healths) + if (src.stat < 2) + if (src.health >= 100) + src.healths.icon_state = "health0" + else + if (src.health >= 75) + src.healths.icon_state = "health1" + else + if (src.health >= 50) + src.healths.icon_state = "health2" + else + if (src.health > 20) + src.healths.icon_state = "health3" + else + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + if (src.pullin) + if (src.pulling) + src.pullin.icon_state = "pull1" + else + src.pullin.icon_state = "pull0" + if (src.toxin) + if (plcheck) + src.toxin.icon_state = "toxin1" + else + src.toxin.icon_state = "toxin0" + if (src.oxygen) + if (oxcheck) + src.oxygen.icon_state = "oxy1" + else + src.oxygen.icon_state = "oxy0" + src.client.screen -= src.hud_used.blurry + src.client.screen -= src.hud_used.vimpaired + if ((src.blind && src.stat != 2)) + if (src.blinded) + src.blind.layer = 18 + else + src.blind.layer = 0 + if ((src.disabilities & 1 && !( istype(src.glasses, /obj/item/weapon/clothing/glasses/regular) ))) + src.client.screen -= src.hud_used.vimpaired + src.client.screen += src.hud_used.vimpaired + else + src.client.screen -= src.hud_used.vimpaired + if (src.eye_blurry) + src.client.screen -= src.hud_used.blurry + src.client.screen += src.hud_used.blurry + else + src.client.screen -= src.hud_used.blurry + if (src.stat != 2) + if (src.machine) + if (!( src.machine.check_eye(src) )) + src.reset_view(null) + else + reset_view(null) + if (src.primary) + src.primary.cleanup() + src.UpdateClothing() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + return + +/mob/human/Stat() + + ..() + statpanel("Status") + stat(null, text("Intent: []", src.a_intent)) + stat(null, text("Move Mode: []", src.m_intent)) + + if (src.client.statpanel == "Status") + if (ticker) + var/timel = ticker.timeleft + stat(null, text("ETA-[]:[][]", timel / 600 % 60, timel / 100 % 6, timel / 10 % 10)) + if (src.internal) + if (!( src.internal.gas )) + //src.internal = null + del(src.internal) + else + stat(null, text("Internal Atmosphere: []", src.internal)) + stat(null, text("Internal Oxygen: []", src.internal.gas.oxygen)) + stat(null, text("Internal Plasma: []", src.internal.gas.plasma)) + + + return + +/mob/human/las_act(flag, A as obj) + + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + if (flag == "bullet") + return + shielded = 1 + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(22) + for(var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 1 + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(99) + if ((shielded && flag != "bullet")) + if (!( flag )) + src << "\blue Ohhh that shield isn't going to help here!" + src.paralysis = 120 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (locate(/obj/item/weapon/grab, src)) + var/mob/safe = null + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.l_hand + if ((G.state == 3 && get_dir(src, A) == src.dir)) + safe = G.affecting + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon.grab/G = src.r_hand + if ((G.state == 3 && get_dir(src, A) == src.dir)) + safe = G.affecting + if (safe) + return safe.las_act(flag, A) + if (flag == "bullet") + var/d = 51 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(70)) + show_message("\red Your armor absorbs the hit!", 4) + return + else + if (prob(40)) + show_message("\red Your armor only softens the hit!", 4) + if (prob(20)) + d = d / 2 + d = d / 4 + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(90)) + show_message("\red Your armor absorbs the blow!", 4) + return + else + if (prob(90)) + show_message("\red Your armor only softens the blow!", 4) + if (prob(60)) + d = d / 2 + d = d / 5 + if (src.stat != 2) + if (istype(src.organs["chest"], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs["chest"] + temp.take_damage(d, 0) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(50)) + src.weakened = 5 + return + else + if (flag) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(5)) + show_message("\red Your armor absorbs the hit!", 4) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(70)) + show_message("\red Your armor absorbs the hit!", 4) + return + if (prob(75)) + src.stunned = 10 + else + src.weakened = 10 + if (src.stuttering < 10) + src.stuttering = 10 + else + var/d = 20 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(40)) + show_message("\red Your armor absorbs the hit!", 4) + return + else + if (prob(40)) + show_message("\red Your armor only softens the hit!", 4) + if (prob(20)) + d = d / 2 + d = d / 2 + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(70)) + show_message("\red Your armor absorbs the blow!", 4) + return + else + if (prob(90)) + show_message("\red Your armor only softens the blow!", 4) + if (prob(60)) + d = d / 2 + d = d / 2 + if (src.stat != 2) + if (istype(src.organs["chest"], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs["chest"] + temp.take_damage(d, 0) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(25)) + src.stunned = 1 + return + +/mob/human/say(message as text) + + var/alt_name + if (src.muted) + return + if ((src.name != src.rname && src.wear_id)) + alt_name = text(" (as [])", src.wear_id.registered) + if (src.stat == 2) + for(var/mob/M in world) + if (M.stat == 2) + M << text("[][] []: []", src.rname, alt_name, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(69) + return + if ((copytext(message, 1, 2) == "*" && !( src.stat ))) + src.emote(copytext(message, 2, length(message) + 1)) + return + message = copytext(message, 1, 256) + if (src.sdisabilities & 2) + return + if (src.stat >= 1) + return + if ((!( message ) || istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle))) + return + if (src.stat < 2) + var/list/L = list( ) + var/pre = copytext(message, 1, 4) + var/italics = 0 + var/obj_range = null + if (pre == "\[r\]") + message = copytext(message, 4, length(message) + 1) + if (src.r_hand) + src.r_hand.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[h\]") + message = copytext(message, 4, length(message) + 1) + if (src.w_radio) + src.w_radio.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[l\]") + message = copytext(message, 4, length(message) + 1) + if (src.l_hand) + src.l_hand.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[w\]") + message = copytext(message, 4, length(message) + 1) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[i\]") + message = copytext(message, 4, length(message) + 1) + for(var/obj/item/weapon/radio/intercom/I in view(1, null)) + I.talk_into(usr, message) + //Foreach goto(626) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + L += hearers(null, null) + pre = null + L -= src + L += src + var/turf/T = src.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + message = html_encode(message) + if (src.stuttering) + message = stutter(message) + if (italics) + message = text("[]", message) + if (((src.oxygen && src.oxygen.icon_state == "oxy0") || (!( (istype(T, /turf) || istype(T, /obj/move)) ) || T.oxygen > 0))) + for(var/mob/M in L) + if (istype(M, src.type)) + M.show_message(text("[][]: []", src.rname, alt_name, message), 2) + else + M.show_message(text("The human: []", stars(message)), 2) + //Foreach goto(864) + for(var/obj/O in view(obj_range, null)) + spawn( 0 ) + if (O) + O.hear_talk(usr, message) + return + //Foreach goto(948) + for(var/mob/M in world) + if (M.stat > 1) + M << text("[][] []: []", src.rname, alt_name, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(1005) + return + +/mob/human/UpdateClothing() + + ..() + if (src.monkeyizing) + return + if (!( src.w_uniform )) + var/obj/item/weapon/W = src.r_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.l_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.wear_id + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.belt + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + //for(var/i in src.overlays) + // src.overlays -= i + src.overlays = null + //Foreach goto(351) + //for(var/i in src.zone_sel.overlays) + // src.zone_sel.overlays -= i + //Foreach goto(385) + if(src.zone_sel) + src.zone_sel.overlays = src.body_standing + src.zone_sel.overlays += image("icon" = 'zone_sel.dmi', "icon_state" = text("[]", src.zone_sel.selecting)) + + if (src.lying) + src.icon = src.lying_icon + if (src.face2) + src.overlays += src.face2 + src.overlays += src.body_lying + else + src.icon = src.stand_icon + if (src.face) + src.overlays += src.face + src.overlays += src.body_standing + if (src.w_uniform) + if (istype(src.w_uniform, /obj/item/weapon/clothing/under)) + + + var/t1 = src.w_uniform.color + + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'uniforms.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + + + src.w_uniform.screen_loc = "2,2" + if (src.wear_id) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("id[]", (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + if (src.client) + src.client.screen -= src.hud_used.other + src.client.screen -= src.hud_used.intents + src.client.screen -= src.hud_used.mov_int + if ((src.client && src.other)) + src.client.screen += src.hud_used.other + if (src.gloves) + var/t1 = src.gloves.s_istate + if (!( t1 )) + t1 = src.gloves.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.gloves.screen_loc = "4,2" + if (src.glasses) + var/t1 = src.glasses.s_istate + if (!( t1 )) + t1 = src.glasses.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.glasses.screen_loc = "6,2" + if (src.ears) + var/t1 = src.ears.s_istate + if (!( t1 )) + t1 = src.ears.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.ears.screen_loc = "9,2" + if (src.shoes) + var/t1 = src.shoes.s_istate + if (!( t1 )) + t1 = src.shoes.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.shoes.screen_loc = "5,2" + else + if (src.gloves) + var/t1 = src.gloves.s_istate + if (!( t1 )) + t1 = src.gloves.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.gloves.screen_loc = null + if (src.glasses) + var/t1 = src.glasses.s_istate + if (!( t1 )) + t1 = src.glasses.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.glasses.screen_loc = null + if (src.ears) + var/t1 = src.ears.s_istate + if (!( t1 )) + t1 = src.ears.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.ears.screen_loc = null + if (src.shoes) + var/t1 = src.shoes.s_istate + if (!( t1 )) + t1 = src.shoes.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.shoes.screen_loc = null + if (src.w_radio) + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "headset", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "headset2", "layer" = MOB_LAYER) + src.w_radio.screen_loc = "3,1" + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.wear_mask.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.wear_mask.screen_loc = "2,3" + if (src.client) + if (src.i_select) + if (src.intent) + src.client.screen += src.hud_used.intents + src.i_select.screen_loc = src.intent + else + src.i_select.screen_loc = null + if (src.m_select) + if (src.m_int) + src.client.screen += src.hud_used.mov_int + src.m_select.screen_loc = src.m_int + else + src.m_select.screen_loc = null + if (src.wear_suit) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit)) + var/t1 = src.wear_suit.s_istate + if (!( t1 )) + t1 = src.wear_suit.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.wear_suit.screen_loc = "2,1" + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + if (src.handcuffed) + src.handcuffed.loc = src.loc + src.handcuffed.layer = initial(src.handcuffed.layer) + src.handcuffed = null + if ((src.l_hand || src.r_hand)) + var/h = src.hand + src.hand = 1 + drop_item() + src.hand = 0 + drop_item() + src.hand = h + if ((src.client && src.other)) + if (src.head) + var/t1 = src.head.s_istate + if (!( t1 )) + t1 = src.head.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.head.screen_loc = "7,2" + if (src.belt) + var/t1 = src.belt.s_istate + if (!( t1 )) + t1 = src.belt.icon_state + src.overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.belt.screen_loc = "8,2" + else + if (src.head) + var/t1 = src.head.s_istate + if (!( t1 )) + t1 = src.head.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.head.screen_loc = null + if (src.belt) + var/t1 = src.belt.s_istate + if (!( t1 )) + t1 = src.belt.icon_state + src.overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.belt.screen_loc = null + if (src.wear_id) + if (((src.wear_mask && !( src.wear_mask.see_face )) || (src.head && !( src.head.see_face )))) + src.name = (src.wear_id.registered ? src.wear_id.registered : "Unknown") + else + if (src.wear_id.registered != src.rname) + src.name = text("[] (as [])", src.rname, src.wear_id.registered) + else + src.name = text("[]", src.rname) + src.wear_id.screen_loc = "1,1" + else + src.name = text("[]", src.rname) + if (src.l_store) + src.l_store.screen_loc = "4,1" + if (src.r_store) + src.r_store.screen_loc = "5,1" + if (src.r_hand) + + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.r_hand.icon_state + src.overlays += image("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = MOB_LAYER) + + + + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.l_hand.icon_state + src.overlays += image("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = MOB_LAYER) + + + + src.l_hand.screen_loc = "3,2" + if (src.back) + if (istype(src.back, /obj/item/weapon/radio/electropack)) + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "backe", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "backe2", "layer" = MOB_LAYER) + else + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "back", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "back2", "layer" = MOB_LAYER) + src.back.screen_loc = "3,3" + if (src.handcuffed) + src.pulling = null + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff1", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff2", "layer" = MOB_LAYER) + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(2917) + for(var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 2 + else + //Foreach continue //goto(2969) + if (shielded == 2) + src.invisibility = 2 + else + src.invisibility = 0 + if (shielded) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "shield", "layer" = MOB_LAYER) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.show_inv(M) + return + //Foreach goto(3088) + src.last_b_state = src.stat + + return + +/mob/human/hand_p(mob/M as mob) + + if (M.a_intent == "hurt") + if (istype(M.wear_mask, /obj/item/weapon/clothing/mask/muzzle)) + return + if (((prob(60) || (ticker && ticker.mode == "monkey")) && src.health > 0)) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/sp_suit)) + if (prob(95)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(101) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/bio_suit)) + if (prob(90)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(167) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(60)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(233) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(99)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(299) + return + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(344) + var/damage = rand(1, 3) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", dam_zone)] + if (temp.take_damage(damage, 0)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((ticker && ticker.mode == "monkey")) + src.monkeyize() + else + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(580) + return + +/mob/human/attack_paw(mob/M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\blue The monkey shakes [] trying to wake him up!", src), 1) + //Foreach goto(47) + else + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle)) + return + if (((prob(60) || (ticker && ticker.mode == "monkey")) && src.health > 0)) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/sp_suit)) + if (prob(95)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(159) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/bio_suit)) + if (prob(90)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(225) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(60)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(291) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(99)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(357) + return + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(402) + var/damage = rand(1, 3) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", dam_zone)] + if (temp.take_damage(damage, 0)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((ticker && ticker.mode == "monkey")) + src.monkeyize() + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(623) + return + +/mob/human/attack_hand(mob/human/M as mob) + + if (M.a_intent == "help") + if (src.health > 0) + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\blue [] shakes [] trying to wake [] up!", M, src, src), 1) + //Foreach goto(80) + else + if (M.health >= -75.0) + if (((M.head && M.head.flags & 4) || ((M.wear_mask && !( M.wear_mask.flags & 32 )) || ((src.head && src.head.flags & 4) || (src.wear_mask && !( src.wear_mask.flags & 32 )))))) + M << "\blue Remove that mask!" + return + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = M + O.target = src + O.s_loc = M.loc + O.t_loc = src.loc + O.place = "CPR" + src.requests += O + spawn( 0 ) + O.process() + return + else + if (M.a_intent == "grab") + if (M == src) + return + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M ) + G.assailant = M + if (M.hand) + M.l_hand = G + else + M.r_hand = G + G.layer = 20 + G.affecting = src + src.grabbed_by += G + G.synch() + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) + //Foreach goto(441) + else + if (M.a_intent == "hurt") + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/damage = rand(1, 9) + var/obj/item/weapon/organ/external/affecting = src.organs["chest"] + var/t = M.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + var/def_zone = ran_zone(t) + if (src.organs[text("[]", def_zone)]) + affecting = src.organs[text("[]", def_zone)] + if ((istype(affecting, /obj/item/weapon/organ/external) && prob(90))) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has punched []!", M, src), 1) + //Foreach goto(646) + if (def_zone == "head") + if ((((src.head && src.head.brute_protect & 1) || (src.wear_mask && src.wear_mask.brute_protect & 1)) && prob(99))) + if (prob(20)) + affecting.take_damage(damage, 0) + else + src.show_message("\red You have been protected from a hit to the head.") + return + if (damage > 4.9) + if (src.weakened < 10) + src.weakened = rand(10, 15) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has weakened []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(820) + affecting.take_damage(damage) + else + if (def_zone == "chest") + if ((((src.wear_suit && src.wear_suit.brute_protect & 2) || (src.w_uniform && src.w_uniform.brute_protect & 2)) && prob(85))) + src.show_message("\red You have been protected from a hit to the cheast.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 5) + src.weakened = 5 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has knocked down []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(993) + else + if (src.stunned < 5) + src.stunned = 5 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has stunned []!", M, src), 1) + //Foreach goto(1063) + src.stat = 1 + affecting.take_damage(damage) + else + if (def_zone == "diaper") + if ((((src.wear_suit && src.wear_suit.brute_protect & 4) || (src.w_uniform && src.w_uniform.brute_protect & 4)) && prob(75))) + src.show_message("\red You have been protected from a hit to the lower chest/diaper.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 3) + src.weakened = 3 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has knocked down []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(1239) + else + if (src.stunned < 3) + src.stunned = 3 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has stunned []!", M, src), 1) + //Foreach goto(1309) + src.stat = 1 + affecting.take_damage(damage) + else + affecting.take_damage(damage) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has attempted to punch []!", M, src), 1) + //Foreach goto(1419) + return + else + if (!( src.lying )) + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/randn = rand(1, 100) + if (randn <= 25) + src.weakened = 2 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has pushed down []!", M, src), 1) + //Foreach goto(1529) + else + if (randn <= 60) + src.drop_item() + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has disarmed []!", M, src), 1) + //Foreach goto(1596) + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has attempted to disarm []!", M, src), 1) + //Foreach goto(1643) + return + +/mob/human/Topic(href, href_list) + + if ((src == usr && !( src.start ))) + if (findtext(href, "occ", 1, null)) + if (findtext(href, "cancel", 1, null)) + usr << browse(null, text("window=\ref[]occupation", src)) + return + if (!( findtext(href, "job", 1, null) )) + src.SetChoices(text2num(href_list["occ"])) + else + src.SetJob(arglist(list("occ" = text2num(href_list["occ"]), "job" = href_list["job"]))) + else + if (findtext(href, "rname", 1, null)) + var/t1 = href_list["rname"] + if (t1 == "input") + t1 = input("Please select a name:", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + if (length(t1) >= 26) + t1 = copytext(t1, 1, 26) + t1 = dd_replacetext(t1, ">", "'") + src.rname = t1 + else + if (findtext(href, "age", 1, null)) + var/t1 = href_list["age"] + if (t1 == "input") + t1 = input("Please select type in age: 20-45", "Character Generation", null, null) as num + if ((!( src.start ) && t1)) + src.age = max(min(round(text2num(t1)), 45), 20) + else + if (findtext(href, "b_type", 1, null)) + var/t1 = href_list["b_type"] + if (t1 == "input") + t1 = input("Please select a blood type:", "Character Generation", null, null) as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) + if ((!( src.start ) && t1)) + src.b_type = t1 + else + if (findtext(href, "nr_hair", 1, null)) + var/t1 = href_list["nr_hair"] + if (t1 == "input") + t1 = input("Please select red hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.nr_hair = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "ng_hair", 1, null)) + var/t1 = href_list["ng_hair"] + if (t1 == "input") + t1 = input("Please select green hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.ng_hair = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "nb_hair", 1, null)) + var/t1 = href_list["nb_hair"] + if (t1 == "input") + t1 = input("Please select blue hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.nb_hair = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "r_eyes", 1, null)) + var/t1 = href_list["r_eyes"] + if (t1 == "input") + t1 = input("Please select red eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.r_eyes = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "ns_tone", 1, null)) + var/t1 = href_list["ns_tone"] + if (t1 == "input") + t1 = input("Please select skin tone level: 1-220 (1=albino,35=caucasian, 150=black220='very' black)", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.ns_tone = max(min(round(text2num(t1)), 220), 1) + src.ns_tone = -src.ns_tone + 35 + else + if (findtext(href, "g_eyes", 1, null)) + var/t1 = href_list["g_eyes"] + if (t1 == "input") + t1 = input("Please select green eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.g_eyes = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "b_eyes", 1, null)) + var/t1 = href_list["b_eyes"] + if (t1 == "input") + t1 = input("Please select blue eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.b_eyes = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "h_style", 1, null)) + var/t1 = href_list["h_style"] + if (t1 == "input") + t1 = input("Please select hair style", "Character Generation", null, null) as null|anything in list( "Cut Hair", "Short Hair (M)", "Long Hair (F)", "Bald" ) + if ((!( src.start ) && t1)) + src.h_style = t1 + switch(t1) + if("Short Hair (M)") + src.h_style_r = "hair_a" + if("Long Hair (F)") + src.h_style_r = "hair_b" + if("Cut Hair") + src.h_style_r = "hair_c" + else + src.h_style_r = "bald" + else + if (findtext(href, "gender", 1, null)) + if (src.gender == "male") + src.gender = "female" + else + src.gender = "male" + src.stand_icon = new /icon( 'human.dmi', text("[]", src.gender) ) + src.lying_icon = new /icon( 'human.dmi', text("[]-d", src.gender) ) + else + if (findtext(href, "n_gl", 1, null)) + src.need_gl = !( src.need_gl ) + else + if (findtext(href, "b_ep", 1, null)) + src.be_epil = !( src.be_epil ) + else + if (findtext(href, "b_tur", 1, null)) + src.be_tur = !( src.be_tur ) + else + if (findtext(href, "b_co", 1, null)) + src.be_cough = !( src.be_cough ) + else + if (findtext(href, "b_stut", 1, null)) + src.be_stut = !( src.be_stut ) + else + if (findtext(href, "save", 1, null)) + var/savefile/F = new /savefile( text("players/[].sav", src.ckey) ) + F["version"] << savefile_ver + F["rname"] << src.rname + F["gender"] << src.gender + F["age"] << src.age + F["occupation1"] << src.occupation1 + F["occupation2"] << src.occupation2 + F["occupation3"] << src.occupation3 + F["nr_hair"] << src.nr_hair + F["ng_hair"] << src.ng_hair + F["nb_hair"] << src.nb_hair + F["ns_tone"] << src.ns_tone + F["h_style"] << src.h_style + F["h_style_r"] << src.h_style_r + F["r_eyes"] << src.r_eyes + F["g_eyes"] << src.g_eyes + F["b_eyes"] << src.b_eyes + F["b_type"] << src.b_type + F["need_gl"] << src.need_gl + F["be_epil"] << src.be_epil + F["be_tur"] << src.be_tur + F["be_cough"] << src.be_cough + F["be_stut"] << src.be_stut + else + if (findtext(href, "load", 1, null)) + if (fexists(text("players/[].sav", src.ckey))) + var/savefile/F = new /savefile( text("players/[].sav", src.ckey) ) + var/test = null + F["version"] >> test + if (test != savefile_ver) + fdel(text("players/[].sav", src.ckey)) + alert("Your savefile was incompatible with this version and was deleted.", null, null, null, null, null) + return + F["rname"] >> src.rname + F["gender"] >> src.gender + F["age"] >> src.age + F["occupation1"] >> src.occupation1 + F["occupation2"] >> src.occupation2 + F["occupation3"] >> src.occupation3 + F["nr_hair"] >> src.nr_hair + F["ng_hair"] >> src.ng_hair + F["nb_hair"] >> src.nb_hair + F["ns_tone"] >> src.ns_tone + F["h_style"] >> src.h_style + F["h_style_r"] >> src.h_style_r + F["r_eyes"] >> src.r_eyes + F["g_eyes"] >> src.g_eyes + F["b_eyes"] >> src.b_eyes + F["b_type"] >> src.b_type + F["need_gl"] >> src.need_gl + F["be_epil"] >> src.be_epil + F["be_tur"] >> src.be_tur + F["be_cough"] >> src.be_cough + F["be_stut"] >> src.be_stut + else + alert("You do not have a savefile.", null, null, null, null, null) + src.ShowChoices() + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + if ((href_list["item"] && !( usr.stat ) && usr.canmove && !( usr.restrained() ) && get_dist(src, usr) <= 1)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = usr + O.target = src + O.item = usr.equipped() + O.s_loc = usr.loc + O.t_loc = src.loc + O.place = href_list["item"] + src.requests += O + spawn( 0 ) + O.process() + return + ..() + return + +/mob/human/show_inv(mob/user as mob) + + user.machine = src + var/dat = text("
\n[]\n\tHead(Mask): []\n\t\tHeadset: []\n\tLeft Hand: []\n\tRight Hand: []\n\tGloves: []\n\tEyes: []\n\tEars: []\n\tHead: []\n\tShoes: []\n\tBelt: []\n\tUniform: []\n\t(Exo)Suit: []\n\tBack: [] []\n\tID: []\n\t[]\n\t[]\n\tEmpty Pockets\nClose\n
", src.name, src, (src.wear_mask ? text("[]", src.wear_mask) : "Nothing"), src, (src.w_radio ? text("[]", src.w_radio) : "Nothing"), src, (src.l_hand ? text("[]", src.l_hand) : "Nothing"), src, (src.r_hand ? text("[]", src.r_hand) : "Nothing"), src, (src.gloves ? text("[]", src.gloves) : "Nothing"), src, (src.glasses ? text("[]", src.glasses) : "Nothing"), src, (src.ears ? text("[]", src.ears) : "Nothing"), src, (src.head ? text("[]", src.head) : "Nothing"), src, (src.shoes ? text("[]", src.shoes) : "Nothing"), src, (src.belt ? text("[]", src.belt) : "Nothing"), src, (src.w_uniform ? text("[]", src.w_uniform) : "Nothing"), src, (src.wear_suit ? text("[]", src.wear_suit) : "Nothing"), src, (src.back ? text("[]", src.back) : "Nothing"), ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.back, /obj/item/weapon/tank) && !( src.internal )) ? text(" Set Internal", src) : ""), src, (src.wear_id ? text("[]", src.wear_id) : "Nothing"), (src.handcuffed ? text("Handcuffed", src) : text("Not Handcuffed", src)), (src.internal ? text("Remove Internal", src) : ""), src, user, src.name) + user << browse(dat, text("window=mob[];size=300x600", src.name)) + return + +/mob/proc/show_message(msg, type, alt, alt_type) + + if (type) + if ((type & 1 && (src.sdisabilities & 1 || (src.blinded || src.paralysis)))) + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & 2 && (src.sdisabilities & 4 || src.ear_deaf))) + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & 1 && src.sdisabilities & 1)) + return + src << msg + return + +/mob/proc/findname(msg) + + for(var/mob/M in world) + if (M.rname == text("[]", msg)) + return 1 + //Foreach goto(15) + return 0 + return + +/mob/proc/m_delay() + + return + +/mob/proc/Life() + + return + +/mob/proc/UpdateClothing() + + return + +/mob/proc/death() + + src.timeofdeath = world.time + return ..() + return + +/mob/proc/restrained() + + if (src.handcuffed) + return 1 + return + +/mob/proc/db_click(text, t1) + + var/obj/item/weapon/W = src.equipped() + switch(text) + if("mask") + if (src.wear_mask) + return + if (!( istype(W, /obj/item/weapon/clothing/mask) )) + return + src.u_equip(W) + src.wear_mask = W + if("back") + if ((src.back || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 1 )) + return + src.u_equip(W) + src.back = W + else + return + +/mob/proc/throw_item() + + var/obj/item/weapon/W = src.equipped() + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (usr.stat) + return + W.loc = src.loc + if (istype(W, /obj/item/weapon/grab)) + W:throw() + else + W.dropped(src) + if (W) + W.layer = initial(W.layer) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has thrown [].", src, W), 1) + //Foreach goto(133) + W.density = 1 + W.throwing = 1 + W.throwspeed = initial(W.throwspeed) + spawn( 0 ) + W.throwing(src.dir) + return + return + +/mob/proc/swap_hand() + + src.hand = !( src.hand ) + if (!( src.hand )) + src.hands.dir = NORTH + else + src.hands.dir = SOUTH + return + +/mob/proc/drop_item_v() + + if (src.stat == 0) + drop_item() + return + +/mob/proc/throw_item_v() + + if (src.stat == 0) + throw_item() + return + +/mob/proc/drop_item() + + var/obj/item/weapon/W = src.equipped() + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + if (W) + W.layer = initial(W.layer) + return + +/mob/proc/reset_view(atom/A as mob|obj) + + if (src.client) + if (istype(A, /atom/movable)) + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = A + else + if (isturf(src.loc)) + src.client.eye = src.client.mob + src.client.perspective = MOB_PERSPECTIVE + else + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = src.loc + return + +/mob/proc/who() + set category = "Admin" + + var/total = 0 + usr << "Current Players:" + for(var/mob/M in world) + if (M.client) + total++ + usr << text("\t [] ([])", M, M.client) + //Foreach goto(32) + usr << text("Total Players: []", total) + return + +/mob/proc/list_dna() + set category = "Admin" + + usr << "Registered DNA sequences:" + for(var/M in reg_dna) + usr << text("\t [] = []", M, reg_dna[text("[]", M)]) + //Foreach goto(26) + return + +/mob/proc/equipped() + + if (src.hand) + return src.l_hand + else + return src.r_hand + return + +/mob/proc/show_inv(mob/user as mob) + + user.machine = src + var/dat = text("\n[]
\n\tHead(Mask): []
\n\tLeft Hand: []
\n\tRight Hand: []
\n\tBack: []
\n\t[]
\n\t[]
\n\t[]
\n\tEmpty Pockets
\nClose
\n
", src.name, src, (src.wear_mask ? text("[]", src.wear_mask) : "Nothing"), src, (src.l_hand ? text("[]", src.l_hand) : "Nothing"), src, (src.r_hand ? text("[]", src.r_hand) : "Nothing"), src, (src.back ? text("[]", src.back) : "Nothing"), ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.back, /obj/item/weapon/tank) && !( src.internal )) ? text(" Set Internal", src) : ""), (src.internal ? text("Remove Internal", src) : ""), (src.handcuffed ? text("Handcuffed", src) : text("Not Handcuffed", src)), src, user, src.name) + user << browse(dat, text("window=mob[]", src.name)) + return + +/mob/proc/u_equip(W as obj) + + if (W == src.r_hand) + src.r_hand = null + else + if (W == src.l_hand) + src.l_hand = null + else + if (W == src.handcuffed) + src.handcuffed = null + else + if (W == src.back) + src.back = null + else + if (W == src.wear_mask) + src.wear_mask = null + return + +/mob/proc/toggle_ooc() + set category = "Admin" + + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + return + +/mob/proc/toggle_abandon() + set category = "Admin" + + abandon_allowed = !( abandon_allowed ) + if (abandon_allowed) + world << "You may now abandon mob." + else + world << "Live or Die Mode Activated" + world.update_stat() + return + +/mob/proc/toggle_enter() + set category = "Admin" + + enter_allowed = !( enter_allowed ) + if (enter_allowed) + world << "You may enter the game." + else + world << "You may no longer enter the game." + world.update_stat() + return + +/mob/proc/toggle_shuttle() + set category = "Admin" + + shuttle_frozen = !( shuttle_frozen ) + if (shuttle_frozen) + world << "The shuttle count is now FROZEN!" + else + world << "The shuttle has been thawed." + return + +/mob/proc/show_ctf() + set category = "Admin" + + if (ticker) + usr << "Too late... The game has already started!" + return + else + if (!( ctf )) + ctf = new /obj/ctf_assist( ) + ctf.show_screen(usr) + return + +/mob/proc/delay_start() + set category = "Admin" + + if (ticker) + usr << "Too late... The game has already started!" + return + else + if (alert(usr, "Would you like to delay game start?", "Delay Start", "Yes", "No", null) == "Yes") + going = null + world << text("The game start has been delayed by [] (Administrator to SS13)", usr.key) + usr << alert("Don't forgot to revoke the delay by selecting No!", null, null, null, null, null) + else + world << text("The game will now start thanks to [] (Administrator to SS13)", usr.key) + going = 1 + return + +/mob/proc/mute(mob/M as mob in world) + set category = "Admin" + + M.muted = !( M.muted ) + usr << text("[]'s chat status is now [].", M, (M.muted ? "muted" : "voiced")) + return + +/mob/proc/change_name(mob/M as mob in world, t as text) + set category = "Admin" + + usr << text("[]'s default name is now [] !", M, t) + M.rname = t + return + +/mob/proc/show_help(mob/M as mob in world) + set category = "Admin" + + M << browse('help.htm', "window=help") + return + +/mob/proc/changemessage(txt as text) + set category = "Admin" + + world_message = text("[]: []", src.key, txt) + world << text("\blue []", world_message) + return + +/mob/proc/changemode() + set category = "Admin" + + if (ticker) + return + var/temp = input("Please select a mode", "Game Mode", null, null) in list( "secret", "traitor", "nuclear", "meteor", "extended", "monkey" ) + master_mode = temp + return + +/mob/proc/boot(mob/M as mob in world, txt as text) + set category = "Admin" + + if ((M && M.client && txt)) + //M.client = null + del(M.client) + return + +/mob/proc/ban(mob/M as mob in world, txt as text) + set category = "Admin" + + if ((M && M.client && txt)) + banned += M.ckey + //M.client = null + del(M.client) + return + +/mob/proc/unban() + set category = "Admin" + + var/t = input(usr, "Unban who?", null, null) as null|anything in banned + banned -= t + return + +/mob/proc/make_gift() + set category = "Admin" + + new /obj/item/weapon/a_gift( src.loc ) + return + +/mob/proc/make_pill() + set category = "Admin" + + new /obj/item/weapon/m_pill/superpill( src.loc ) + return + +/mob/proc/make_flag() + set category = "Admin" + + var/color = input("Please select a color", null, null, null) in list( "red", "blue", "green", "yellow", "black", "white", "neutral" ) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( src.loc ) + F.icon_state = text("flag_[]", color) + return + +/mob/proc/restart() + set category = "Admin" + + world << "\green Restarting world!" + sleep(50) + world.Reboot() + return + +/mob/proc/monkey(mob/M as mob in world) + set category = "Admin" + set hidden = 1 + + for(var/obj/O in M) + //O = null + del(O) + //Foreach goto(20) + var/mob/monkey/O = new /mob/monkey( M.loc ) + M.client.mob = O + O.loc = M.loc + //M = null + del(M) + return + +/mob/proc/toggle_alter() + set category = "Admin" + + if (src.verbs.Find(/mob/proc/carboncopy)) + src.verbs -= /mob/proc/carboncopy + else + src.verbs -= /mob/proc/carboncopy + src.verbs += /mob/proc/carboncopy + return + +/mob/proc/carboncopy(atom/movable/O as mob|obj in world) + + var/M = O + if ((istype(M, /mob) && M:key)) + usr << "You can't duplicate PCs' mobs." + return + var/mob/new_O = new O.type( usr.loc ) + for(var/V in O.vars) + if (issaved(O.vars[V])) + new_O.vars[V] = O.vars[V] + //Foreach goto(72) + return + +/mob/proc/secrets(pass as text) + set category = "Admin" + + switch(pass) + if("sec_clothes") + for(var/obj/item/weapon/clothing/under/O in world) + //O = null + del(O) + //Foreach goto(52) + if("sec_all_clothes") + for(var/obj/item/weapon/clothing/O in world) + //O = null + del(O) + //Foreach goto(97) + if("sec_classic1") + for(var/obj/item/weapon/clothing/suit/firesuit/O in world) + //O = null + del(O) + //Foreach goto(142) + for(var/obj/grille/O in world) + //O = null + del(O) + //Foreach goto(185) + for(var/obj/machinery/pod/O in world) + //O = null + del(O) + //Foreach goto(228) + if("clear_bombs") + for(var/obj/item/weapon/assembly/r_i_ptank/O in world) + //O = null + del(O) + //Foreach goto(273) + if("dissimulate_aspect") + usr.invisibility = !( usr.invisibility ) + usr.sight |= SEE_SELF + world << text("\red [] manipulates the visible plane.", usr) + if("teleport") + var/mob/M = input("Who do you wish to goto?", null, null, null) as null|mob in world + if (!( ismob(M) )) + return + else + src.loc = M.loc + world << text("\red [] teleports to []!", usr, M) + if("summon") + var/mob/M = input("Who do you wish to summon?", null, null, null) as null|mob in world + if (!( ismob(M) )) + return + else + M.loc = src.loc + world << text("\red [] summons []!", usr, M) + if("list_bombers") + usr << "\blue Don't be insane about this list Get the facts." + for(var/l in bombers) + usr << text("[] 'made' a bomb.", l) + //Foreach goto(476) + if("check_antagonist") + if (ticker) + if (ticker.killer) + if (ticker.killer.ckey) + usr << text("The traitor's key is [].", ticker.killer.ckey) + else + usr << "It seems like the traitor logged out..." + else + usr << "There is no traitor." + else + usr << "The game has not started yet." + else + return + +/mob/proc/ret_grab(obj/list_container/mobl/L as obj, flag) + + if ((!( istype(src.l_hand, /obj/item/weapon/grab) ) && !( istype(src.r_hand, /obj/item/weapon/grab) ))) + if (!( L )) + return null + else + return L.container + else + if (!( L )) + L = new /obj/list_container/mobl( null ) + L.container += src + L.master = src + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.l_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + G.affecting.ret_grab(L, 1) + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.r_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + G.affecting.ret_grab(L, 1) + if (!( flag )) + if (L.master == src) + var/list/temp = list( ) + temp += L.container + //L = null + del(L) + return temp + else + return L.container + return + +/mob/verb/mode() + set src = usr + + var/obj/item/weapon/W = src.equipped() + if (W) + W.attack_self(src) + return + +/mob/verb/dump_source() + + var/master = "
"
+	for(var/t in typesof(/area))
+		master += text("[]\n", t)
+		//Foreach goto(26)
+	src << browse(master)
+	return
+
+/mob/verb/memory()
+
+	src << browse(text("Memory::
[]", src.memory), "window=memory") + return + +/mob/verb/add_memory(msg as message) + + src.memory += text("[]
", msg) + src << browse(text("Memory::
[]", src.memory), "window=memory") + return + +/mob/verb/help() + + src << browse('help.htm', "window=help") + return + +/mob/verb/abandon_mob() + + if (!( abandon_allowed )) + return + if ((src.stat != 2 || !( ticker ))) + usr << "\blue You must be dead to use this!" + return + usr << "\blue Please roleplay correctly!" + for(var/obj/screen/t in usr.client.screen) + if (t.loc == null) + //t = null + del(t) + //Foreach goto(66) + var/mob/human/M = new /mob/human( ) + M.key = src.client.key + return + +/mob/verb/changes() + + src << browse(text("
[]
", changes), "window=changes") + return + +/mob/verb/succumb() + set hidden = 1 + + if ((src.health < 0 && src.health > -95.0)) + src.oxyloss += src.health + 99 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + usr << "\blue You have given up life and succumbed to death." + return + +/mob/verb/say() + + return + +/mob/verb/observe() + + if (src.stat != 2) + usr << "\blue You must be dead to use this!" + return + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = input("Please, select a player!", "Watch", null, null) as mob in world + return + +/mob/verb/listen_ooc() + + if (src.client) + src.client.listen_ooc = !( src.client.listen_ooc ) + if (src.client.listen_ooc) + src << "\blue You are now listening to messages on the OOC channel. Don't abuse this!" + else + src << "\blue You are no longer listening to messages on the OOC channel." + return + +/mob/verb/ooc(msg as text) + + msg = html_encode(copytext(msg, 1, 128)) + if (!( msg )) + return + if ((ooc_allowed && !( src.muted ))) + for(var/mob/M in world) + if ((M.client && M.client.listen_ooc)) + M << text("OOC: []: []", src.key, msg) + //Foreach goto(54) + return + +/mob/verb/switch_hud() + + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + if (src.hud_used == main_hud) + src.hud_used = main_hud2 + src.oxygen.icon = 'screen.dmi' + src.toxin.icon = 'screen.dmi' + src.internals.icon = 'screen.dmi' + src.mach.icon = 'screen.dmi' + src.fire.icon = 'screen.dmi' + src.healths.icon = 'screen.dmi' + src.pullin.icon = 'screen.dmi' + src.blind.icon = 'screen.dmi' + src.hands.icon = 'screen.dmi' + src.flash.icon = 'screen.dmi' + src.sleep.icon = 'screen.dmi' + src.rest.icon = 'screen.dmi' + else + src.hud_used = main_hud + src.oxygen.icon = 'screen1.dmi' + src.toxin.icon = 'screen1.dmi' + src.internals.icon = 'screen1.dmi' + src.mach.icon = 'screen1.dmi' + src.fire.icon = 'screen1.dmi' + src.healths.icon = 'screen1.dmi' + src.pullin.icon = 'screen1.dmi' + src.blind.icon = 'screen1.dmi' + src.hands.icon = 'screen1.dmi' + src.flash.icon = 'screen1.dmi' + src.sleep.icon = 'screen1.dmi' + src.rest.icon = 'screen1.dmi' + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + return + +/mob/Login() + + src.sight |= SEE_SELF + ..() + return + +/mob/CheckPass(mob/M as mob) + + if ((src.other_mobs && ismob(M) && M.other_mobs)) + return 1 + else + return (!( M.density ) || !( src.density ) || src.lying) + return + +/mob/burn(fi_amount) + + for(var/atom/movable/A as mob|obj in src) + A.burn(fi_amount) + //Foreach goto(15) + return + +/mob/Topic(href, href_list) + + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + ..() + return + +/mob/MouseDrop(mob/M as mob) + + ..() + if ((M != usr || usr == src || get_dist(usr, src) > 1)) + return + src.show_inv(usr) + return + +/mob/las_act(flag) + + if (flag == "bullet") + if (src.stat != 2) + if (istype(src, /mob/human)) + var/mob/human/H = src + var/dam_zone = pick("chest", "chest", "chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(51, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + src.bruteloss += 51 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(80)) + src.weakened = 2 + if (flag) + if (prob(75)) + src.stunned = 10 + else + src.weakened = 10 + else + if (src.stat != 2) + if (istype(src, /mob/human)) + var/mob/human/H = src + var/dam_zone = pick("chest", "chest", "chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(20, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + src.bruteloss += 20 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(25)) + src.stunned = 2 + return + +/mob/ghost/proc/infest() + + return + +/mob/ghost/Move() + + if (src.stunned) + return + . = ..() + return + +/mob/ghost/show_inv() + + return + return + +/mob/ghost/Bump() + + return + return + +/mob/ghost/UpdateClothing() + + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(17) + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'ghost.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = src.layer) + src.wear_mask.screen_loc = "2,3" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.l_hand.screen_loc = "3,2" + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + return + +/mob/ghost/Life() + + if (src.stat == 2) + death() + return + src.canmove = 1 + src.lying = 1 + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.icon_state = "ghost" + else + src.icon_state = "blank" + if (src.stunned > 0) + src.stunned-- + src.canmove = 0 + for(var/obj/item/O in src) + O.loc = src.loc + O.layer = initial(O.layer) + src.u_equip(O) + //Foreach goto(109) + if (src.health < 0) + src.stat = 2 + return + return + +/mob/ghost/db_click() + + return + return + +/mob/ghost/equipped() + + return null + return + +/mob/ghost/m_delay() + + return -100.0 + return + +/mob/ghost/reset_view() + + if (src.client) + src.client.eye = src + else + return ..() + return + +/mob/ghost/las_act() + + return + return + +/mob/ghost/ex_act() + + return + return + +/mob/ghost/attack_hand(mob/M as mob) + + src.infest(M) + return + +/mob/ghost/attack_paw(mob/M as mob) + + src.infest(M) + return + +/mob/ghost/death() + + src.stunned = 1 + ..() + return + +/mob/ghost/meteorhit() + + return + return + +/mob/ghost/restrained() + + return 0 + return + +/mob/ghost/attackby(nothing, mob/M as mob) + + src.infest(M) + return 0 + return + +/mob/ghost/say(msg as text) + + if (!( msg )) + return + msg = stutter(msg) + if (prob(25)) + msg = stars(msg) + for(var/mob/M in hearers(null, null)) + M.show_message(msg, 2) + //Foreach goto(58) + return + +/mob/monkey/New() + + spawn( 50 ) + if (!( src.primary )) + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + src.primary = new /obj/dna( null ) + src.primary.uni_identity = text("[]", dna_ident) + while(length(src.primary.uni_identity) < 4) + src.primary.uni_identity = text("0[]", src.primary.uni_identity) + var/t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = (src.gender == "male" ? text("[]", rand(1, 124)) : text("[]", rand(127, 250))) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + src.primary.spec_identity = "2B6696D2B127E5A4" + src.primary.struc_enzyme = "CDEAF5B90AADBC6BA8033DB0A7FD613FA" + src.primary.use_enzyme = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61" + src.primary.n_chromo = 16 + src.name = text("monkey ([])", copytext(md5(src.primary.uni_identity), 2, 6)) + return + ..() + return + +/mob/monkey/Bump(atom/movable/AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || src.now_pushing)) + return + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( src.now_pushing )) + src.now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + step(AM, t) + src.now_pushing = null + return + return + +/mob/monkey/Topic(href, href_list) + + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + if ((href_list["item"] && !( usr.stat ) && !( usr.restrained() ) && get_dist(src, usr) <= 1)) + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = usr + O.target = src + O.item = usr.equipped() + O.s_loc = usr.loc + O.t_loc = src.loc + O.place = href_list["item"] + src.requests += O + spawn( 0 ) + O.process() + return + ..() + return + +/mob/monkey/meteorhit(obj/O as obj) + + for(var/mob/M in viewers(src, null)) + M.show_message(text("\red [] has been hit with by []", src, O), 1) + //Foreach goto(19) + if (src.health > 0) + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(79) + src.bruteloss += 30 + if ((O.icon_state == "flaming" && !( shielded ))) + src.fireloss += 40 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + return + +/mob/monkey/las_act(flag) + + if (flag == "bullet") + if (src.stat != 2) + src.bruteloss += 60 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + src.weakened = 10 + if (flag) + if (prob(75)) + src.stunned = 15 + else + src.weakened = 15 + else + if (src.stat != 2) + src.bruteloss += 20 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(25)) + src.stunned = 1 + return + +/mob/monkey/hand_p(mob/M as mob) + + if ((M.a_intent == "hurt" && !( istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) ))) + if ((prob(75) && src.health > 0)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(63) + var/damage = rand(1, 5) + src.bruteloss += damage + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(144) + return + +/mob/monkey/attack_paw(mob/M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + O.show_message("\blue The monkey shakes the monkey trying to wake him up!", 1) + //Foreach goto(47) + else + if ((M.a_intent == "hurt" && !( istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) ))) + if ((prob(75) && src.health > 0)) + for(var/mob/O in viewers(src, null)) + O.show_message("\red The monkey has bit the monkey!", 1) + //Foreach goto(130) + var/damage = rand(1, 5) + src.bruteloss += damage + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + O.show_message("\red The monkey has attempted to bite the monkey!", 1) + //Foreach goto(209) + return + +/mob/monkey/attack_hand(mob/M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\blue [] shakes the monkey trying to wake him up!", M), 1) + //Foreach goto(47) + else + if (M.a_intent == "hurt") + if ((prob(75) && src.health > 0)) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has punched the monkey!", M), 1) + //Foreach goto(135) + var/damage = rand(5, 10) + if (prob(40)) + damage = rand(10, 15) + if (src.paralysis < 5) + src.paralysis = rand(10, 15) + spawn( 0 ) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has knocked out the monkey!", M), 1) + //Foreach goto(248) + return + src.bruteloss += damage + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has attempted to punch the monkey!", M), 1) + //Foreach goto(336) + else + if (M.a_intent == "grab") + if (M == src) + return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M ) + G.assailant = M + if (M.hand) + M.l_hand = G + else + M.r_hand = G + G.layer = 20 + G.affecting = src + src.grabbed_by += G + G.synch() + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has grabbed the monkey passively!", M), 1) + //Foreach goto(502) + else + if (!( src.paralysis )) + if (prob(25)) + src.paralysis = 2 + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has pushed down the monkey!", M), 1) + //Foreach goto(571) + else + drop_item() + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has disarmed the monkey!", M), 1) + //Foreach goto(638) + return + +/mob/monkey/Stat() + + ..() + statpanel("Status") + stat(null, text("Intent: []", src.a_intent)) + stat(null, text("Move Mode: []", src.m_intent)) + return + +/mob/monkey/UpdateClothing() + + ..() + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(21) + if (!( src.lying )) + src.icon_state = "monkey1" + else + src.icon_state = "monkey0" + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.wear_mask.icon_state + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = src.layer) + src.wear_mask.screen_loc = "2,3" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.r_hand.icon_state + src.overlays += image("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.l_hand.icon_state + src.overlays += image("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.l_hand.screen_loc = "3,2" + if (src.back) + if (!( src.lying )) + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "back", "layer" = src.layer) + else + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "back2", "layer" = src.layer) + src.back.screen_loc = "3,3" + if (src.handcuffed) + src.pulling = null + if (!( src.lying )) + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "handcuff1", "layer" = src.layer) + else + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "handcuff2", "layer" = src.layer) + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + src.client.screen -= src.hud_used.m_ints + src.client.screen -= src.hud_used.mov_int + if (src.i_select) + if (src.intent) + src.client.screen += src.hud_used.m_ints + src.i_select.screen_loc = src.intent + else + src.i_select.screen_loc = null + if (src.m_select) + if (src.m_int) + src.client.screen += src.hud_used.mov_int + src.m_select.screen_loc = src.m_int + else + src.m_select.screen_loc = null + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.show_inv(M) + return + //Foreach goto(662) + return + +/mob/monkey/Login() + + if (banned.Find(src.ckey)) + //src.client = null + del(src.client) + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + if (!( src.hud_used )) + src.hud_used = main_hud + src.next_move = 1 + if (!( src.rname )) + src.rname = src.key + src.oxygen = new /obj/screen( null ) + src.i_select = new /obj/screen( null ) + src.m_select = new /obj/screen( null ) + src.toxin = new /obj/screen( null ) + src.internals = new /obj/screen( null ) + src.mach = new /obj/screen( null ) + src.fire = new /obj/screen( null ) + src.healths = new /obj/screen( null ) + src.pullin = new /obj/screen( null ) + src.blind = new /obj/screen( null ) + src.flash = new /obj/screen( null ) + src.hands = new /obj/screen( null ) + src.sleep = new /obj/screen( null ) + src.rest = new /obj/screen( null ) + ..() + UpdateClothing() + src.oxygen.icon_state = "oxy0" + src.i_select.icon_state = "selector" + src.m_select.icon_state = "selector" + src.toxin.icon_state = "toxin0" + src.internals.icon_state = "internal0" + src.mach.icon_state = null + src.fire.icon_state = "fire0" + src.healths.icon_state = "health0" + src.pullin.icon_state = "pull0" + src.blind.icon_state = "black" + src.hands.icon_state = "hand" + src.flash.icon_state = "blank" + src.sleep.icon_state = "sleep0" + src.rest.icon_state = "rest0" + src.hands.dir = NORTH + src.oxygen.name = "oxygen" + src.i_select.name = "intent" + src.m_select.name = "move" + src.toxin.name = "toxin" + src.internals.name = "internal" + src.mach.name = "Reset Machine" + src.fire.name = "fire" + src.healths.name = "health" + src.pullin.name = "pull" + src.blind.name = " " + src.hands.name = "hand" + src.flash.name = "flash" + src.sleep.name = "sleep" + src.rest.name = "rest" + src.oxygen.screen_loc = "15,12" + src.i_select.screen_loc = "14,15" + src.m_select.screen_loc = "14,14" + src.toxin.screen_loc = "15,10" + src.internals.screen_loc = "15,14" + src.mach.screen_loc = "14,1" + src.fire.screen_loc = "15,8" + src.healths.screen_loc = "15,5" + src.sleep.screen_loc = "15,3" + src.rest.screen_loc = "15,2" + src.pullin.screen_loc = "15,1" + src.hands.screen_loc = "1,3" + src.blind.screen_loc = "1,1 to 15,15" + src.flash.screen_loc = "1,1 to 15,15" + src.blind.layer = 0 + src.flash.layer = 17 + src.sleep.layer = 20 + src.rest.layer = 20 + src.client.screen.len = null + src.client.screen -= list( src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen += list( src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + src.client.screen -= src.hud_used.mon_blo + src.client.screen += src.hud_used.mon_blo + if (!( src.primary )) + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + src.primary = new /obj/dna( null ) + src.primary.uni_identity = text("[]", dna_ident) + while(length(src.primary.uni_identity) < 4) + src.primary.uni_identity = text("0[]", src.primary.uni_identity) + var/t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = (src.gender == "male" ? text("[]", rand(1, 124)) : text("[]", rand(127, 250))) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + src.primary.spec_identity = "2B6696D2B127E5A4" + src.primary.struc_enzyme = "CDEAF5B90AADBC6BA8033DB0A7FD613FA" + src.primary.use_enzyme = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61" + src.primary.n_chromo = 16 + if (!( src.start )) + if ((src.key in list( "Thief jack", "Link43130", "Hutchy2k1", "Easty", "Exadv1" ))) + src.start = 1 + src.loc = locate(36, 67, 10) + else + src.start = 1 + var/A = locate(/area/start) + var/list/L = list( ) + for(var/T in A) + L += T + //Foreach goto(1473) + src.loc = pick(L) + src << browse('help.htm', "window=help") + if (((src.key in list( "Exadv1", "Expert Advisor" )) || world.address == src.client.address || !( src.client.address ))) + src << text("\blue The game ip is byond://[]:[] !", world.address, world.port) + src.verbs += /mob/proc/mute + src.verbs += /mob/proc/changemessage + src.verbs += /mob/proc/boot + src.verbs += /mob/proc/changemode + src.verbs += /mob/proc/show_ctf + src.verbs += /mob/proc/restart + src.verbs += /mob/proc/who + src.verbs += /mob/proc/change_name + src.verbs += /mob/proc/show_help + src.verbs += /mob/proc/toggle_ooc + src.verbs += /mob/proc/toggle_abandon + src.verbs += /mob/proc/toggle_enter + src.verbs += /mob/proc/toggle_shuttle + src.verbs += /mob/proc/delay_start + src.verbs += /mob/proc/make_gift + src.verbs += /mob/proc/make_flag + src.verbs += /mob/proc/make_pill + src.verbs += /mob/proc/ban + src.verbs += /mob/proc/unban + src.verbs += /mob/proc/secrets + src.verbs += /mob/proc/toggle_alter + src.verbs += /mob/proc/carboncopy + src.verbs += /mob/proc/list_dna + src << text("\blue []", world_message) + if (!( isturf(src.loc) )) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + src.name = text("monkey ([])", copytext(md5(src.primary.uni_identity), 2, 6)) + return + +/mob/monkey/Move() + + if ((!( src.buckled ) || src.buckled.loc != src.loc)) + src.buckled = null + if (src.buckled) + return + if (src.restrained()) + src.pulling = null + var/t7 = 1 + if (src.restrained()) + for(var/mob/M in range(src, 1)) + if ((M.pulling == src && M.stat == 0 && !( M.restrained() ))) + return 0 + //Foreach goto(93) + if ((t7 && src.pulling && get_dist(src, src.pulling) <= 1)) + if (src.pulling.anchored) + src.pulling = null + var/T = src.loc + . = ..() + if (!( isturf(src.pulling.loc) )) + src.pulling = null + return + if (!( src.restrained() )) + var/diag = get_dir(src, src.pulling) + if ((diag - 1) & diag) + else + diag = null + if ((ismob(src.pulling) && (get_dist(src, src.pulling) > 1 || diag))) + if (istype(src.pulling, src.type)) + var/mob/M = src.pulling + var/mob/t = M.pulling + M.pulling = null + step(src.pulling, get_dir(src.pulling.loc, T)) + M.pulling = t + else + step(src.pulling, get_dir(src.pulling.loc, T)) + else + src.pulling = null + . = ..() + if ((src.s_active && !( src.contents.Find(src.s_active) ))) + src.s_active.close(src) + return + +/mob/monkey/death() + + var/cancel + if (src.healths) + src.healths.icon_state = "health5" + src.stat = 2 + src.canmove = 0 + if (src.blind) + src.blind.layer = 0 + src.lying = 1 + src.icon_state = "dead" + for(var/mob/M in world) + if ((M.client && !( M.stat ))) + cancel = 1 + //Foreach goto(79) + if (!( cancel )) + world << "Everyone is dead! Resetting in 30 seconds!" + if ((ticker && ticker.timing)) + ticker.check_win() + else + spawn( 300 ) + world.Reboot() + return + return ..() + return + +/mob/monkey/Life() + set background = 1 + var/plcheck + var/oxcheck + var/ficheck + + var/turf/T = src.loc + if (!( locate(/obj/table, src.loc) )) + src.layer = MOB_LAYER + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.stat != 2) + src.t_sl_gas = 0 + src.t_n2 = 0 + if (!( src.m_flag )) + src.last_move = null + src.m_flag = null + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = null + if ((src.internal && !( src.contents.Find(src.internal) ))) + src.internal = null + if ((!( src.wear_mask ) || !( src.wear_mask.flags | 8 ))) + src.internal = null + if (istype(T, /turf)) + var/t = 1.4E-4 + if (src.health < 20) + t = 5.0E-5 + else + if (src.health < 40) + t = 1.0E-4 + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.oxygen + T.poison + T.sl_gas + T.co2 + T.n2 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.maximum = 10000 + if (src.internal) + src.internal.process(src, G) + if (src.wear_mask.flags & 4) + G.turf_add(T, G.tot_gas() * 0.5) + G.turf_take(T, t / 2 * turf_total - G.tot_gas()) + else + G.turf_take(T, t * turf_total) + src.aircheck(G) + plcheck = src.t_plasma + oxcheck = src.t_oxygen + G.turf_add(T, G.tot_gas()) + ficheck = src.firecheck(T) + else + if (istype(T, /obj)) + var/obj/O = T + O.alter_health(src) + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + var/layers = 20 + if ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && !( src.wear_mask.flags & 4 ) && src.flags & 8)) + layers -= 5 + if (layers > oxcheck) + oxcheck = layers + if ((plcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((oxcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.oxyloss += oxcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + src.oxyloss += oxcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + if (src.health >= 0) + if (src.oxyloss >= 10) + var/amount = max(0.15, 1) + src.oxyloss -= amount + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + src.oxyloss = 0 + if (ficheck) + src.fireloss += ficheck * 10 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health <= -100.0) + death() + else + if ((src.sleeping || src.health < 0)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + else + spawn( 0 ) + emote("snore") + return + if (src.health < 0) + if (src.rejuv <= 0) + src.oxyloss++ + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + src.stat = 1 + if (src.paralysis < 5) + src.paralysis = 5 + else + if (src.resting) + if (src.weakened < 5) + src.weakened = 5 + else + if (src.health < 20) + if (prob(5)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + src.stat = 1 + if (src.paralysis < 2) + src.paralysis = 2 + if (src.rejuv > 0) + src.rejuv-- + if (src.r_epil > 0) + src.r_epil-- + if (src.r_ch_cou > 0) + src.r_ch_cou-- + if (src.r_Tourette > 0) + src.r_Tourette-- + if (src.antitoxs > 0) + src.antitoxs-- + if (src.plasma > 0) + src.antitoxs -= 4 + if (src.plasma > 0) + src.plasma-- + src.blinded = null + if (src.drowsyness > 0) + src.drowsyness-- + if (src.paralysis > 1) + src.drowsyness -= 0.5 + else + if (src.weakened > 1) + src.drowsyness -= 0.25 + src.eye_blurry = max(2, src.eye_blurry) + if (prob(5)) + src.sleeping = 1 + src.paralysis = 5 + if ((src.health > -10.0 && src.drowsyness > 1200)) + if (src.antitoxs < 1) + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + var/mental_danger = 0 + if (((src.r_epil > 0 && !( src.disabilities & 2 )) || (src.r_Tourette > 0 && !( src.disabilities & 8 )))) + src.stuttering = max(2, src.drowsyness) + mental_danger = 1 + src.drowsyness = max(2, src.drowsyness) + if (!( src.paralysis )) + if (prob(5)) + src << "\red You have a seizure!" + src.paralysis = 10 + else + if (prob(5)) + spawn( 0 ) + emote("twitch") + return + src.stunned = 10 + else + if (prob(30)) + spawn( 0 ) + emote("drool") + return + if (src.health > -10.0) + var/threshold = 45 + if (mental_danger) + threshold = 15 + if (src.r_ch_cou > 2700) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_epil > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_Tourette > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.antitoxs > 7200) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("drool") + return + if (src.health > -50.0) + if (src.plasma > 0) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("moan") + return + if (src.stat != 2) + if (src.paralysis + src.stunned + src.weakened > 0) + if (src.stunned > 0) + src.stunned-- + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.lying = 1 + src.stat = 0 + if (src.paralysis > 0) + src.paralysis-- + src.blinded = 1 + src.lying = 1 + src.stat = 1 + src.canmove = 0 + var/h = src.hand + src.hand = 0 + drop_item() + src.hand = 1 + drop_item() + src.hand = h + else + src.canmove = 1 + src.lying = 0 + src.stat = 0 + else + src.lying = 1 + src.blinded = 1 + src.stat = 2 + src.canmove = 0 + var/add_weight = 0 + if (istype(src.l_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (istype(src.r_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (locate(/obj/item/weapon/grab, src.grabbed_by)) + var/a_grabs = 0 + for(var/obj/item/weapon/grab/G in src.grabbed_by) + G.process() + if (G) + if (G.state > 1) + a_grabs++ + if ((G.state > 2 && src.loc == G.assailant.loc)) + src.density = 0 + src.lying = 0 + switch(G.assailant.dir) + if(1.0) + src.pixel_y = 8 + if(2.0) + src.pixel_y = -8.0 + if(4.0) + src.pixel_x = 8 + if(8.0) + src.pixel_x = -8.0 + + //Foreach goto(2333) + src.weight = ((src.grabbed_by.len - a_grabs) / 2 + 1) * 1250000.0 + (a_grabs * 2500000.0) + else + if (src.lying) + src.weight = add_weight + 2500000.0 + else + src.weight = add_weight + 1250000.0 + if (src.stuttering > 0) + src.stuttering-- + if (src.eye_blind > 0) + src.eye_blind-- + src.blinded = 1 + if (src.ear_deaf > 0) + src.ear_deaf-- + else + if (src.ear_damage < 25) + src.ear_damage -= 0.05 + src.ear_damage = max(src.ear_damage, 0) + if (src.buckled) + src.lying = 0 + src.density = !( src.lying ) + if (src.lying) + src.weight = 5000000.0 + else + src.weight = 2500000.0 + if (src.sdisabilities & 1) + src.blinded = 1 + if (src.eye_blurry > 0) + src.eye_blurry-- + src.eye_blurry = max(0, src.eye_blurry) + if (src.client) + src.client.screen -= main_hud.g_dither + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/gasmask)) + src.client.screen += main_hud.g_dither + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = "blank" + if (src.sleep) + src.sleep.icon_state = text("sleep[]", src.sleeping) + if (src.rest) + src.rest.icon_state = text("rest[]", src.resting) + if (src.healths) + if (src.stat < 2) + if (src.health >= 100) + src.healths.icon_state = "health0" + else + if (src.health >= 75) + src.healths.icon_state = "health1" + else + if (src.health >= 50) + src.healths.icon_state = "health2" + else + if (src.health > 20) + src.healths.icon_state = "health3" + else + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + if (src.pullin) + if (src.pulling) + src.pullin.icon_state = "pull1" + else + src.pullin.icon_state = "pull0" + if (src.fire) + if (ficheck) + src.fire.icon_state = "fire1" + else + src.fire.icon_state = "fire0" + if (src.toxin) + if (plcheck) + src.toxin.icon_state = "toxin1" + else + src.toxin.icon_state = "toxin0" + if (src.oxygen) + if (oxcheck) + src.oxygen.icon_state = "oxy1" + else + src.oxygen.icon_state = "oxy0" + src.client.screen -= src.hud_used.blurry + src.client.screen -= src.hud_used.vimpaired + if ((src.blind && src.stat != 2)) + if (src.blinded) + src.blind.layer = 18 + else + src.blind.layer = 0 + if (src.eye_blurry) + src.client.screen -= src.hud_used.blurry + src.client.screen += src.hud_used.blurry + else + src.client.screen -= src.hud_used.blurry + if (src.stat != 2) + if (src.machine) + if (!( src.machine.check_eye(src) )) + src.reset_view(null) + else + reset_view(null) + else + if ((src.canmove && prob(10) && isturf(src.loc))) + step(src, pick(NORTH, SOUTH, EAST, WEST)) + if (prob(10)) + src.emote(pick("drool", "chimper", "scratch", "tail", "sit", "jump")) + else + if (prob(10)) + var/mob/human/H = locate(/mob/human, oview(1, null)) + if (istype(H, /mob/human)) + src.a_intent = "hurt" + spawn( 0 ) + H.attack_paw(src) + return + if (src.primary) + src.primary.cleanup() + src.UpdateClothing() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + return + +/mob/monkey/verb/removeinternal() + + src.internal = null + return + +/mob/monkey/proc/aircheck(obj/substance/gas/G as obj) + + src.t_oxygen = 0 + src.t_plasma = 0 + if (G) + var/a_oxygen = G.oxygen * 0.7 + var/a_plasma = G.plasma + var/a_sl_gas = G.sl_gas * 0.7 + G.oxygen -= a_oxygen + G.plasma -= a_plasma + G.sl_gas -= a_sl_gas + if (a_oxygen < 67.032) + src.t_oxygen = round((67.032 - a_oxygen) / 5) + if (G.co2 > 5) + var/t = round((G.co2 - 5) / 5) + if (G.co2 > 25) + src.paralysis = max(src.paralysis, 3) + if (G.co2 > 50) + t = 50 + src.t_oxygen = max(src.t_oxygen, t) + if (a_plasma > 5) + src.t_plasma = round((src.t_plasma - 5) / 10) + 1 + if (a_sl_gas > 10) + src.weakened = max(src.weakened, 3) + if (G.co2 > 40) + src.paralysis = max(src.paralysis, 3) + G.co2 += a_oxygen * 0.6 + return + +/mob/monkey/proc/firecheck(turf/T as turf) + + if (T.firelevel < 900000.0) + return 0 + var/total = 0 + if (src.wear_mask) + if (T.firelevel > src.wear_mask.s_fire) + total += 0.25 + else + total += 0.25 + return total + return + +/mob/monkey/proc/emote(act) + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + var/muzzled = istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) + var/m_type = 1 + var/message + + switch(act) + if("sign") + if (!( src.restrained() )) + message = text("The monkey signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) + m_type = 1 + if("scratch") + if (!( src.restrained() )) + message = "The monkey scratches." + m_type = 1 + if("whimper") + if (!( muzzled )) + message = "The monkey whimpers." + m_type = 2 + if("roar") + if (!( muzzled )) + message = "The monkey roars." + m_type = 2 + if("tail") + message = "The monkey waves his tail." + m_type = 1 + if("gasp") + message = "The monkey gasps." + m_type = 2 + if("drool") + message = "The monkey drools." + m_type = 1 + if("paw") + if (!( src.restrained() )) + message = "The monkey flails his paw." + m_type = 1 + if("scretch") + if (!( muzzled )) + message = "The monkey scretches." + m_type = 2 + if("choke") + message = "The monkey chokes." + m_type = 2 + if("moan") + message = "The monkey moans!" + m_type = 2 + if("nod") + message = "The monkey nods his head." + m_type = 1 + if("sit") + message = "The monkey sits down." + m_type = 1 + if("sway") + message = "The monkey sways around dizzily." + m_type = 1 + if("sulk") + message = "The monkey sulks down sadly." + m_type = 1 + if("twitch") + message = "The monkey twitches violently." + m_type = 1 + if("dance") + if (!( src.restrained() )) + message = "The monkey dances around happily." + m_type = 1 + if("roll") + if (!( src.restrained() )) + message = "The monkey rolls." + m_type = 1 + if("shake") + message = "The monkey shakes his head." + m_type = 1 + if("gnarl") + if (!( muzzled )) + message = "The monkey gnarls and shows his teeth.." + m_type = 2 + if("jump") + message = "The monkey jumps!" + m_type = 1 + if("help") + src << "choke, dance, drool, gasp, gnarl, jump, paw, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper" + else + src << text("Invalid Emote: []", act) + if ((message && src.stat == 0)) + if (m_type & 1) + for(var/mob/O in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(703) + else + for(var/mob/O in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(746) + return + +/mob/monkey/say(message as text) + + if (src.muted) + return + message = copytext(message, 1, 128) + if (src.stat == 2) + for(var/mob/M in world) + if (M.stat == 2) + M << text("[] []: []", src, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(50) + return + if ((copytext(message, 1, 2) == "*" && !( src.stat ))) + src.emote(copytext(message, 2, length(message) + 1)) + return + if ((!( message ) || istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle))) + return + if (src.stat < 2) + var/list/L = list( ) + var/pre = copytext(message, 1, 4) + var/italics = 0 + var/obj_range = null + if (pre == "\[r\]") + message = copytext(message, 4, length(message) + 1) + if (src.r_hand) + src.r_hand.talk_into(usr, message) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + if (pre == "\[l\]") + message = copytext(message, 4, length(message) + 1) + if (src.l_hand) + src.l_hand.talk_into(usr, message) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + if (pre == "\[w\]") + message = copytext(message, 4, length(message) + 1) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + L += hearers(null, null) + pre = null + L -= src + L += src + if (italics) + message = text("[]", message) + for(var/mob/M in L) + if (istype(M, src.type)) + M.show_message(text("[]: []", src, message), 2) + else + M.show_message(text("[] chimpers.", src), 2) + //Foreach goto(503) + for(var/obj/O in view(obj_range, null)) + spawn( 0 ) + if (O) + O.hear_talk(usr, message) + return + //Foreach goto(580) + for(var/mob/M in world) + if (M.stat > 1) + M << text("[] []: []", src, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(637) + return + +/mob/monkey/examine() + set src in oview() + + usr << "\blue *---------*" + usr << text("\blue This is \icon[] []!", src, src.name) + if (src.handcuffed) + usr << text("\blue \t[] is handcuffed! \icon[]", src.name, src.handcuffed) + if (src.wear_mask) + usr << text("\blue \t[] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + if (src.l_hand) + usr << text("\blue \t[] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + if (src.r_hand) + usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + if (src.back) + usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) + if (src.bruteloss) + if (src.bruteloss < 30) + usr << text("\red [] looks slightly bruised!", src.name) + else + usr << text("\red [] looks severely bruised!", src.name) + if (src.fireloss) + if (src.fireloss < 30) + usr << text("\red [] looks slightly burnt!", src.name) + else + usr << text("\red [] looks severely burnt!", src.name) + return + +/mob/monkey/ex_act(severity) + + flick("flash", src.flash) + switch(severity) + if(1.0) + if (src.stat != 2) + src.bruteloss += 200 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if(2.0) + if (src.stat != 2) + src.bruteloss += 60 + src.fireloss += 60 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if(3.0) + if (src.stat != 2) + src.bruteloss += 30 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(50)) + src.paralysis += 10 + else + return + +/atom/movable/Move(NewLoc, direct) + + if (direct & direct - 1) + if (direct & 1) + if (direct & 4) + if (step(src, NORTH)) + step(src, EAST) + else + if (step(src, EAST)) + step(src, NORTH) + else + if (direct & 8) + if (step(src, NORTH)) + step(src, WEST) + else + if (step(src, WEST)) + step(src, NORTH) + else + if (direct & 2) + if (direct & 4) + if (step(src, SOUTH)) + step(src, EAST) + else + if (step(src, EAST)) + step(src, SOUTH) + else + if (direct & 8) + if (step(src, SOUTH)) + step(src, WEST) + else + if (step(src, WEST)) + step(src, SOUTH) + else + ..() + return + +/atom/movable/verb/pull() + set src in oview(1) + + if (!( usr )) + return + if (!( src.anchored )) + usr.pulling = src + return + +/atom/verb/examine() + set src in oview(1) + + if (!( usr )) + return + usr << src.desc + // *****RM + //usr << "[src.name]: Dn:[density] dir:[dir] cont:[contents] icon:[icon] is:[icon_state] loc:[loc]" + return + +/client/Northeast() + + src.mob.swap_hand() + return + +/client/Southeast() + + var/obj/item/weapon/W = src.mob.equipped() + if (W) + W.attack_self(src.mob) + return + +/client/Northwest() + + src.mob.drop_item_v() + return + +/client/Southwest() + + src.mob.throw_item_v() + return + +/client/Center() + + if (isobj(src.mob.loc)) + var/obj/O = src.mob.loc + if (src.mob.canmove) + return O.relaymove(src.mob, 16) + return + +/client/Move(n, direct) + + if (src.moving) + return 0 + if (world.time < src.move_delay) + return + if (!( src.mob )) + return + if (src.mob.stat == 2) + return + if (src.mob.monkeyizing) + return + var/is_monkey = istype(src.mob, /mob/monkey) + if (locate(/obj/item/weapon/grab, locate(/obj/item/weapon/grab, src.mob.grabbed_by.len))) + var/list/grabbing = list( ) + if (istype(src.mob.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.mob.l_hand + grabbing += G.affecting + if (istype(src.mob.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.mob.r_hand + grabbing += G.affecting + for(var/obj/item/weapon/grab/G in src.mob.grabbed_by) + if (G.state == 1) + if (!( grabbing.Find(G.assailant) )) + //G = null + del(G) + else + if (G.state == 2) + src.move_delay = world.time + 10 + if ((prob(25) && (!( is_monkey ) || prob(25)))) + for(var/mob/O in viewers(src.mob, null)) + O.show_message(text("\red [] has broken free of []'s grip!", src.mob, G.assailant), 1) + //Foreach goto(309) + //G = null + del(G) + else + return + else + if (G.state == 2) + src.move_delay = world.time + 10 + if ((prob(5) && !( is_monkey ) || prob(25))) + for(var/mob/O in viewers(src.mob, null)) + O.show_message(text("\red [] has broken free of []'s headlock!", src.mob, G.assailant), 1) + //Foreach goto(423) + //G = null + del(G) + else + return + //Foreach goto(189) + if (src.mob.canmove) + var/j_pack = 0 + if ((istype(src.mob.loc, /turf/space) && !( locate(/obj/move, src.mob.loc) ))) + if (!( src.mob.restrained() )) + if (!( (locate(/obj/grille, oview(1, src.mob)) || locate(/turf/station, oview(1, src.mob))) )) + if (istype(src.mob.back, /obj/item/weapon/tank/jetpack)) + var/obj/item/weapon/tank/jetpack/J = src.mob.back + j_pack = J.allow_thrust(100, src.mob) + var/obj/effects/sparks/ion_trails/I = new /obj/effects/sparks/ion_trails( src.mob.loc ) + flick("ion_fade", I) + I.icon_state = "blank" + spawn( 20 ) + //I = null + del(I) + return + if (!( j_pack )) + return 0 + else + return 0 + else + return 0 + + + if (isturf(src.mob.loc)) + src.move_delay = world.time + if ((j_pack && j_pack < 1)) + src.move_delay += 5 + switch(src.mob.m_intent) + if("run") + if (src.mob.drowsyness > 0) + src.move_delay += 6 + src.move_delay += 1 + if("face") + src.mob.dir = direct + return + if("walk") + src.move_delay += 7 + + + src.move_delay += src.mob.m_delay() + + src.move_delay += round((100 - src.mob.health) / 20) //*****RM fix + + if (src.mob.restrained()) + for(var/mob/M in range(src.mob, 1)) + if (((M.pulling == src.mob && (!( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, src.mob.grabbed_by.len))) + src << "\blue You're restrained! You can't move!" + return 0 + //Foreach goto(853) + src.moving = 1 + if (locate(/obj/item/weapon/grab, src.mob)) + src.move_delay = max(src.move_delay, world.time + 7) + var/list/L = src.mob.ret_grab() + if (istype(L, /list)) + if (L.len == 2) + L -= src.mob + var/mob/M = L[1] + if ((get_dist(src.mob, M) <= 1 || M.loc == src.mob.loc)) + var/turf/T = src.mob.loc + . = ..() + if (isturf(M.loc)) + var/diag = get_dir(src.mob, M) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(src.mob, M) > 1 || diag)) + step(M, get_dir(M.loc, T)) + else + for(var/mob/M in L) + M.other_mobs = 1 + if (src.mob != M) + M.animate_movement = 3 + //Foreach goto(1163) + for(var/mob/M in L) + spawn( 0 ) + step(M, direct) + return + spawn( 1 ) + M.other_mobs = null + M.animate_movement = 1 + return + //Foreach goto(1214) + else + . = ..() + src.moving = null + return . + else + if (isobj(src.mob.loc)) + var/obj/O = src.mob.loc + if (src.mob.canmove) + return O.relaymove(src.mob, direct) + else + return + return + +/client/proc/show_panel() + + if (src.holder) + src.holder.update() + return + +/client/New() + + if (banned.Find(src.ckey)) + //SN src = null + del(src) + return + world << text("[] has logged in!", src) + if (((world.address == src.address || !( src.address )) && !( host ))) + host = src.key + world.update_stat() + ..() + spawn( 50 ) + if (admins.Find(src.ckey)) + src.holder = new /obj/admins( src ) + src.holder.rank = admins[text("[]", src.ckey)] + switch(admins[text("[]", src.ckey)]) + if("Primary Administrator") + src.holder.level = 5 + if("Master Administrator") + src.holder.level = 4 + if("Administrator") + src.holder.level = 3 + if("Supervisor") + src.holder.level = 2 + if("Moderator") + src.holder.level = 1 + if("Game Master") + src.holder.level = 0 + if("Banned") + //SN src = null + del(src) + return + else + //src.holder = null + del(src.holder) + if (src.holder) + src.holder.owner = src + src.verbs += /client/proc/show_panel + return + return + +/client/Del() + + if (banned.Find(src.ckey)) + ..() + return + world << text("[] has logged out!", src) + ..() + //src.holder = null + del(src.holder) + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/s_html.sav b/ss13-40.93.2-base/ss13-40.93.2-base/s_html.sav new file mode 100644 index 0000000..dd93d4d Binary files /dev/null and b/ss13-40.93.2-base/ss13-40.93.2-base/s_html.sav differ diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/shuttle.dm b/ss13-40.93.2-base/ss13-40.93.2-base/shuttle.dm new file mode 100644 index 0000000..136c528 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/shuttle.dm @@ -0,0 +1,327 @@ + +/obj/machinery/computer/prison_shuttle/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/prison_shuttle/verb/take_off() + set src in oview(1) + + if ((usr.stat || usr.restrained())) + return + src.add_fingerprint(usr) + if (prison_entered) + var/A = locate(/area/shuttle) + for(var/turf/T in A) + if (T.z == 1) + for(var/atom/movable/AM as mob|obj in T) + AM.z = PRISON_SHUTTLE_Z + //Foreach goto(96) + var/turf/U = locate(T.x, T.y, PRISON_SHUTTLE_Z) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + //T = null + del(T) + //Foreach goto(62) + prison_entered = null + else + if (!( prison_entered )) + if (ticker.shuttle_location != 1) + var/A = locate(/area/shuttle_prison) + for(var/turf/T in A) + if (T.z == PRISON_SHUTTLE_Z) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 1 + //Foreach goto(346) + var/turf/U = locate(T.x, T.y, 1) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + //T = null + del(T) + //Foreach goto(312) + prison_entered = 1 + else + usr << "\blue There is an obstructing shuttle!" + return + return + +/obj/machinery/computer/prison_shuttle/verb/restabalize() + set src in oview(1) + + viewers(null, null) << "\red Restabalizing prison shuttle atmosphere!" + var/A = locate(/area/shuttle_prison) + for(var/obj/move/T in A) + T.firelevel = 0 + T.oxygen = 756000.0 + T.oldoxy = 756000.0 + T.tmpoxy = 756000.0 + T.poison = 0 + T.oldpoison = 0 + T.tmppoison = 0 + T.co2 = 0 + T.oldco2 = 0 + T.tmpco2 = 0 + T.sl_gas = 0 + T.osl_gas = 0 + T.tsl_gas = 0 + T.n2 = 2844000.0 + T.on2 = 2844000.0 + T.tn2 = 2844000.0 + T.heat = 9.8892006E8 + T.oheat = 9.8892006E8 + T.theat = 9.8892006E8 + //Foreach goto(40) + viewers(null, null) << "\red Prison shuttle Restabalized!" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/shuttle/verb/restabalize() + set src in oview(1) + + world << "\red Restabalizing shuttle atmosphere!" + var/A = locate(/area/shuttle) + for(var/obj/move/T in A) + T.firelevel = 0 + T.oxygen = 756000.0 + T.oldoxy = 756000.0 + T.tmpoxy = 756000.0 + T.poison = 0 + T.oldpoison = 0 + T.tmppoison = 0 + T.co2 = 0 + T.oldco2 = 0 + T.tmpco2 = 0 + T.sl_gas = 0 + T.osl_gas = 0 + T.tsl_gas = 0 + T.n2 = 2844000.0 + T.on2 = 2844000.0 + T.tn2 = 2844000.0 + T.heat = 9.8892006E8 + T.oheat = 9.8892006E8 + T.theat = 9.8892006E8 + //Foreach goto(35) + world << "\red Shuttle Restabalized!" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/verb/hijack() + set src in oview(1) + + if ((!( ticker ) || ticker.shuttle_location != SHUTTLE_Z)) + return + if (usr != ticker.killer) + return + world << "\blue Alert: The shuttle is has been hijacked prematurely by the traitor!" + ticker.timing = 0 + ticker.check_win() + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/attackby(var/obj/item/weapon/card/id/W as obj, var/mob/user as mob) + + if ((!( istype(W, /obj/item/weapon/card/id) ) || !( ticker ) || ticker.shuttle_location == SHUTTLE_Z || !( user ))) + return + if (W.access_level < 1) + user << text("The access level ([]) of [] card is not high enough. (It must be at least level 1.)", W.access_level, W.registered) + return + var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") + switch(choice) + if("Authorize") + src.authorized -= W.registered + src.authorized += W.registered + if (src.auth_need - src.authorized.len > 0) + world << text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len) + else + world << "\blue Alert: Shuttle launch time shortened to 10 seconds!" + ticker.timeleft = 100 + //src.authorized = null + del(src.authorized) + src.authorized = list( ) + if("Repeal") + src.authorized -= W.registered + world << text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len) + if("Abort") + world << "\blue All authorizations to shorting time for shuttle launch have been revoked!" + src.authorized.len = 0 + src.authorized = list( ) + else + return + +/obj/shut_controller/proc/rotate(direct) + + var/SE_X = 1 + var/SE_Y = 1 + var/SW_X = 1 + var/SW_Y = 1 + var/NE_X = 1 + var/NE_Y = 1 + var/NW_X = 1 + var/NW_Y = 1 + for(var/obj/move/M in src.parts) + if (M.x < SW_X) + SW_X = M.x + if (M.x > SE_X) + SE_X = M.x + if (M.y < SW_Y) + SW_Y = M.y + if (M.y > NW_Y) + NW_Y = M.y + if (M.y > NE_Y) + NE_Y = M.y + if (M.y < SE_Y) + SE_Y = M.y + if (M.x > NE_X) + NE_X = M.x + if (M.x < NW_X) + NW_X = M.y + //Foreach goto(75) + var/length = abs(NE_X - NW_X) + var/width = abs(NE_Y - SE_Y) + var/obj/random = pick(src.parts) + var/s_direct = null + switch(s_direct) + if(1.0) + switch(direct) + if(90.0) + var/tx = SE_X + var/ty = SE_Y + var/t_z = random.z + for(var/obj/move/M in src.parts) + M.ty = -M.x - tx + M.tx = -M.y - ty + var/T = locate(M.x, M.y, 11) + M.relocate(T) + M.ty = -M.ty + M.tx += length + //Foreach goto(374) + for(var/obj/move/M in src.parts) + M.tx += tx + M.ty += ty + var/T = locate(M.tx, M.ty, t_z) + M.relocate(T, 90) + //Foreach goto(468) + if(-90.0) + var/tx = SE_X + var/ty = SE_Y + var/t_z = random.z + for(var/obj/move/M in src.parts) + M.ty = M.x - tx + M.tx = M.y - ty + var/T = locate(M.x, M.y, 11) + M.relocate(T) + M.ty = -M.ty + M.ty += width + //Foreach goto(571) + for(var/obj/move/M in src.parts) + M.tx += tx + M.ty += ty + var/T = locate(M.tx, M.ty, t_z) + M.relocate(T, -90.0) + //Foreach goto(663) + else + else + return + +/obj/shuttle/door/verb/open() + set src in oview(1) + + src.add_fingerprint(usr) + if (src.operating) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + src.verbs -= /obj/shuttle/door/verb/open + src.verbs += /obj/shuttle/door/proc/close + src.operating = 0 + return + +/obj/shuttle/door/proc/close() + set src in oview(1) + + src.add_fingerprint(usr) + if (src.operating) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + if (src.visible) + src.opacity = 1 + sleep(15) + src.verbs += /obj/shuttle/door/verb/open + src.verbs -= /obj/shuttle/door/proc/close + src.operating = 0 + return + +/turf/station/shuttle/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/ss13_algorithm2.dm b/ss13-40.93.2-base/ss13-40.93.2-base/ss13_algorithm2.dm new file mode 100644 index 0000000..ad297d4 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/ss13_algorithm2.dm @@ -0,0 +1,558 @@ + +/proc/SetupOccupationsList() + + var/list/new_occupations = list( ) + for(var/occupation in occupations) + if (!( new_occupations.Find(occupation) )) + new_occupations[occupation] = 1 + else + new_occupations[occupation] += 1 + //Foreach goto(23) + occupations = new_occupations + return + +/proc/DivideOccupations() + + var/list/occupations1 = list( ) + var/list/occupations2 = list( ) + var/list/occupations3 = list( ) + var/list/final_occupations = list( ) + var/list/unassigned_mobs = list( ) + var/list/occupation_choices = occupations.Copy() + occupation_choices = shuffle(occupation_choices) + for(var/occupation in occupations + assistant_occupations) + occupations1[occupation] = list( ) + occupations2[occupation] = list( ) + occupations3[occupation] = list( ) + final_occupations[occupation] = list( ) + //Foreach goto(78) + occupations1["Captain"] = list( ) + occupations2["Captain"] = list( ) + occupations3["Captain"] = list( ) + final_occupations["Captain"] = list( ) + for(var/mob/human/M in world) + if ((!( M.client ) || !( M.start ) || M.already_placed)) + else + unassigned_mobs += M + if (M.occupation1 != "No Preference") + occupations1[M.occupation1] += M + if (M.occupation2 != "No Preference") + occupations2[M.occupation2] += M + if (M.occupation3 != "No Preference") + occupations3[M.occupation3] += M + //Foreach goto(187) + for(var/occupation in occupations) + occupations1[occupation] = shuffle(occupations1[occupation]) + occupations2[occupation] = shuffle(occupations2[occupation]) + occupations3[occupation] = shuffle(occupations3[occupation]) + //Foreach goto(339) + occupations1["Captain"] = shuffle(occupations1["Captain"]) + occupations2["Captain"] = shuffle(occupations2["Captain"]) + occupations3["Captain"] = shuffle(occupations3["Captain"]) + var/list/captain_choice = occupations1["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + captain_choice = occupations2["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + captain_choice = occupations3["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + var/list/contenders = list( ) + for(var/mob/human/M in world) + if (M.client) + contenders += M + //Foreach goto(691) + var/mob/human/M = pick(contenders) + final_occupations["Captain"] = M + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + occupations1[text("[]", M.occupation1)] -= M + occupations2[text("[]", M.occupation2)] -= M + occupations3[text("[]", M.occupation3)] -= M + for(var/mob/human/M in unassigned_mobs) + if (assistant_occupations.Find(M.occupation1)) + M.Assign_Rank(M.occupation1) + unassigned_mobs -= M + //Foreach goto(844) + for(var/occupation in occupation_choices) + var/list/L = occupations1[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + if ((!( occupation_choices.len ) || !( unassigned_mobs.len ))) + else + //Foreach continue //goto(913) + for(var/mob/human/M in unassigned_mobs) + if (assistant_occupations.Find(M.occupation2)) + M.Assign_Rank(M.occupation2) + unassigned_mobs -= M + //Foreach goto(1158) + for(var/occupation in occupation_choices) + var/list/L = occupations2[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + if (multiple) + var/list/X = final_occupations[occupation] + eligible -= X.len + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + if ((!( occupation_choices.len ) || !( unassigned_mobs.len ))) + else + //Foreach continue //goto(1227) + for(var/mob/human/M in unassigned_mobs) + if (assistant_occupations.Find(M.occupation3)) + M.Assign_Rank(M.occupation3) + unassigned_mobs -= M + //Foreach goto(1502) + for(var/occupation in occupation_choices) + var/list/L = occupations3[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + if (multiple) + var/list/X = final_occupations[occupation] + eligible -= X.len + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + //Foreach goto(1571) + if (unassigned_mobs.len) + unassigned_mobs = shuffle(unassigned_mobs) + for(var/mob/human/M in unassigned_mobs) + if (occupation_choices.len) + var/occupation = pick(occupation_choices) + final_occupations[occupation] = M + occupation_choices -= occupation + unassigned_mobs -= M + break //// + //Foreach goto(1846) + for(var/occupation in final_occupations) + var/mob/human/M = final_occupations[occupation] + if (ismob(M)) + M.Assign_Rank(occupation) + else + if (istype(M, /list)) + for(var/mob/human/E in final_occupations[occupation]) + E.Assign_Rank(occupation) + //Foreach goto(2003) + //Foreach goto(1931) + for(var/mob/human/M in unassigned_mobs) + M.Assign_Rank(pick("Research Assistant", "Technical Assistant", "Medical Assistant", "Staff Assistant")) + //Foreach goto(2051) + return + +/proc/shuffle(var/list/shufflelist) + + if (!( shufflelist )) + return + var/list/old_list = shufflelist.Copy() + var/list/new_list = list( ) + while(old_list.len) + var/item = old_list[rand(1, old_list.len)] + new_list += item + old_list -= item + return new_list + return + +/world/New() + + ..() + spawn( 0 ) + SetupOccupationsList() + return + return + +/mob/human/verb/char_setup() + + if (src.start) + return + src.ShowChoices() + return + +/mob/human/proc/ShowChoices() + + var/list/destructive = assistant_occupations.Copy() + var/dat = "" + dat += text("Name: []
", src, src.rname) + dat += text("Gender: []
", src, (src.gender == "male" ? "Male" : "Female")) + dat += text("Age - []
", src, src.age) + dat += "
Occupation Choices:
" + if (destructive.Find(src.occupation1)) + dat += text("\t[]
", src, src.occupation1) + else + if (src.occupation1 != "No Preference") + dat += text("\tFirst Choice: []
", src, src.occupation1) + if (destructive.Find(src.occupation2)) + dat += text("\tSecond Choice: []
", src, src.occupation2) + else + if (src.occupation2 != "No Preference") + dat += text("\tSecond Choice: []
", src, src.occupation2) + if (destructive.Find(src.occupation3)) + dat += text("\tLast Choice: []
", src, src.occupation3) + else + if (src.occupation3 != "No Preference") + dat += text("\tLast Choice: []
", src, src.occupation3) + else + dat += text("\tLast Choice: No Preference
", src) + else + dat += text("\tSecond Choice: No Preference
", src) + else + dat += text("\tNo Preference
", src) + dat += "
Body Data
" + dat += text("Blood Type: []
", src, src.b_type) + dat += text("Skin Tone: []/220
", src, -src.ns_tone + 35) + dat += text("Hair Color: test
", num2hex(src.nr_hair, 2), num2hex(src.ng_hair, 2), num2hex(src.nb_hair)) + dat += text(" Red - []", num2hex(src.nr_hair, 2), src, src.nr_hair) + dat += text(" Green - []", num2hex(src.ng_hair, 2), src, src.ng_hair) + dat += text(" Blue - []", num2hex(src.nb_hair, 2), src, src.nb_hair) + dat += text("
Style - []", src, src.h_style) + dat += text("
Eye Color: test
", num2hex(src.r_eyes, 2), num2hex(src.g_eyes, 2), num2hex(src.b_eyes, 2)) + dat += text(" Red - []", num2hex(src.r_eyes, 2), src, src.r_eyes) + dat += text(" Green - []", num2hex(src.g_eyes, 2), src, src.g_eyes) + dat += text(" Blue - []", num2hex(src.b_eyes, 2), src, src.b_eyes) + dat += "
Disabilities
" + dat += text("Need Glasses: []
", src, (src.need_gl ? "Yes" : "No")) + dat += text("Epileptic: []
", src, (src.be_epil ? "Yes" : "No")) + dat += text("Tourette Syndrome: []
", src, (src.be_tur ? "Yes" : "No")) + dat += text("Chronic Cough: []
", src, (src.be_cough ? "Yes" : "No")) + dat += text("Stutter: []
", src, (src.be_stut ? "Yes" : "No")) + dat += "
" + dat += text("Load Setup
", src) + dat += text("Save Setup
", src) + dat += "" + src << browse(dat, "window=mob_occupations;size=300x600") + return + +/mob/human/proc/SetChoices(occ) + + if (occ == null) + occ = 1 + var/HTML = "" + HTML += "
" + switch(occ) + if(1.0) + HTML += "Which occupation would you like most?

" + if(2.0) + HTML += "Which occupation would you like if you couldn't have your first?

" + if(3.0) + HTML += "Which occupation would you like if you couldn't have the others?

" + else + for(var/job in occupations + assistant_occupations) + HTML += text("[]
", src, occ, job, job) + //Foreach goto(105) + HTML += text("Captain
", src, occ) + HTML += "
" + HTML += text("\[No Preference\]
", src, occ) + HTML += text("\[Cancel\]", src, occ) + HTML += "
" + usr << browse(HTML, "window=mob_occupation;size=300x500") + return + +/mob/human/proc/SetJob(occ, job) + + if (occ == null) + occ = 1 + if (job == null) + job = "Captain" + if ((!( occupations.Find(job) ) && !( assistant_occupations.Find(job) ) && job != "Captain")) + return + switch(occ) + if(1.0) + if (job == src.occupation1) + usr << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + src.occupation1 = "No Preference" + else + if (job == src.occupation2) + job = src.occupation1 + src.occupation1 = src.occupation2 + src.occupation2 = job + else + if (job == src.occupation3) + job = src.occupation1 + src.occupation1 = src.occupation3 + src.occupation3 = job + else + src.occupation1 = job + if(2.0) + if (job == src.occupation2) + src << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + if (src.occupation3 != "No Preference") + src.occupation2 = src.occupation3 + src.occupation3 = "No Preference" + else + src.occupation2 = "No Preference" + else + if (job == src.occupation1) + if (src.occupation2 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation2 + src.occupation2 = src.occupation1 + src.occupation1 = job + else + if (job == src.occupation3) + job = src.occupation2 + src.occupation2 = src.occupation3 + src.occupation3 = job + else + src.occupation2 = job + if(3.0) + if (job == src.occupation3) + usr << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + src.occupation3 = "No Preference" + else + if (job == src.occupation1) + if (src.occupation3 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation3 + src.occupation3 = src.occupation1 + src.occupation1 = job + else + if (job == src.occupation2) + if (src.occupation3 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation3 + src.occupation3 = src.occupation2 + src.occupation2 = job + else + src.occupation3 = job + else + src.ShowChoices() + src << browse(null, "window=mob_occupation") + return + +/mob/human/proc/Assign_Rank(rank) + + if (rank == "Captain") + world << text("[] is the captain!", src) + if (!( src.w_radio )) + var/obj/item/weapon/radio/headset/H = new /obj/item/weapon/radio/headset( src ) + src.w_radio = H + H.layer = 20 + if (!( src.back )) + var/obj/item/weapon/storage/backpack/H = new /obj/item/weapon/storage/backpack( src ) + src.back = H + H.layer = 20 + if (!( src.glasses )) + if (src.disabilities & 1) + var/obj/item/weapon/clothing/glasses/regular/G = new /obj/item/weapon/clothing/glasses/regular( src ) + src.glasses = G + G.layer = 20 + if ((!( src.belt ) && src.w_uniform)) + var/obj/item/weapon/radio/signaler/S = new /obj/item/weapon/radio/signaler( src ) + src.belt = S + S.layer = 20 + if ((!( src.r_store ) && src.w_uniform)) + var/obj/item/weapon/pen/S = new /obj/item/weapon/pen( src ) + src.r_store = S + S.layer = 20 + if ((src.client && !( src.wear_id ) && src.w_uniform)) + var/obj/item/weapon/card/id/C = new /obj/item/weapon/card/id( src ) + src.wear_id = C + C.assignment = rank + C.layer = 20 + C.registered = src.rname + switch(C.assignment) + if("Research Assistant") + C.access_level = 1 + C.lab_access = 1 + C.engine_access = 0 + C.air_access = 0 + if("Technical Assistant") + C.access_level = 1 + C.lab_access = 0 + C.engine_access = 1 + C.air_access = 0 + if("Staff Assistant") + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Medical Assistant") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 1 + C.lab_access = 1 + C.engine_access = 0 + C.air_access = 0 + if("Engineer") + if (!( src.l_hand )) + var/obj/item/weapon/storage/toolbox/W = new /obj/item/weapon/storage/toolbox( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 1 + C.engine_access = 3 + C.air_access = 0 + if("Research Technician") + C.access_level = 2 + C.lab_access = 3 + C.engine_access = 0 + C.air_access = 0 + if("Forensic Technician") + C.access_level = 3 + C.lab_access = 2 + C.engine_access = 0 + C.air_access = 0 + if("Medical Doctor") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Prison Doctor") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Captain") + C.access_level = 5 + C.air_access = 5 + C.engine_access = 5 + C.lab_access = 5 + if("Security Officer") + if (!( src.l_hand )) + var/obj/item/weapon/handcuffs/W = new /obj/item/weapon/handcuffs( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Prison Security") + if (!( src.l_hand )) + var/obj/item/weapon/handcuffs/W = new /obj/item/weapon/handcuffs( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Medical Researcher") + C.access_level = 2 + C.lab_access = 5 + C.engine_access = 0 + C.air_access = 0 + if("Toxin Researcher") + C.access_level = 2 + C.lab_access = 5 + C.engine_access = 0 + C.air_access = 0 + if("Head of Research") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 5 + if("Head of Personnel") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 4 + if("Prison Warden") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 4 + if("Station Technician") + if (!( src.l_hand )) + var/obj/item/weapon/storage/toolbox/W = new /obj/item/weapon/storage/toolbox( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 2 + C.air_access = 3 + if("Atmospheric Technician") + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 4 + else + C.name = text("[]'s ID Card ([]>[]-[]-[])", C.registered, C.access_level, C.lab_access, C.engine_access, C.air_access) + src << text("You are the [].", C.assignment) + var/obj/S = locate(text("start*[]", C.assignment)) + if ((istype(S, /obj/start) && istype(S.loc, /turf) && !( ctf ))) + src << "\blue You have been teleported to your new starting location!" + src.loc = S.loc + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/weap_sat.dm b/ss13-40.93.2-base/ss13-40.93.2-base/weap_sat.dm new file mode 100644 index 0000000..d96e58d --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/weap_sat.dm @@ -0,0 +1,349 @@ + +/obj/machinery/computer/teleporter/New() + + src.id = text("[]", rand(1000, 9999)) + ..() + return + +/obj/machinery/computer/teleporter/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/teleporter/verb/lock_in(freq as num) + set src in oview(1) + set desc = "Frequency to check" + + var/list/L = list( ) + for(var/obj/item/weapon/radio/R in world) + if (R.freq != freq) + continue //goto(26) + var/turf/T = src.find_loc(R) + if (!( T )) + continue //goto(26) + var/t1 = text("-[],[],[]", T.x, T.y, T.z) + t1 = text("[][]", R.text, t1) + L[t1] = R + //Foreach goto(26) + var/t1 = input("Please select a location to lock in.", "Locking Computer", null, null) in L + var/R = L[t1] + if ((prob(30) || istype(R, /obj/item/weapon/radio/beacon) && prob(50))) + src.locked = src.find_loc(R) + else + if (L.len) + R = L[text("[]", pick(L))] + src.locked = src.find_loc(R) + else + src.locked = null + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Locked In", 2) + //Foreach goto(270) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/teleporter/verb/set_id(t as text) + set src in oview(1) + set desc = "ID Tag:" + + if (t) + src.id = t + return + +/obj/machinery/computer/teleporter/proc/find_loc(obj/R as obj) + + if (!( R )) + return null + var/turf/T = R.loc + while(!( istype(T, /turf) )) + T = T.loc + if (istype(T, /area)) + return null + return T + return + +/obj/machinery/computer/data/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/data/weapon/log/New() + + ..() + src.topics["Super-heater"] = "This turns a can of semi-liquid plasma into a super-heated ball of plasma." + src.topics["Amplifier"] = "This increases the intensity of a laser." + src.topics["Class 11 Laser"] = "This creates a very slow laser that is capable of penetrating most objects." + src.topics["Plasma Energizer"] = "This combines super-heated plasma with a laser beam." + src.topics["Generator"] = "This controls the entire power grid." + src.topics["Mirror"] = "this can reflect LOW power lasers. HIGH power goes through it!" + src.topics["Targetting Prism"] = "This focuses a laser coming from any direction forward." + return + +/obj/machinery/computer/data/weapon/log/display() + set src in oview(1) + + usr << "Research Log:" + ..() + return + +/obj/machinery/computer/data/weapon/info/New() + + ..() + src.topics["LOG(001)"] = "System: Deployment successful" + src.topics["LOG(002)"] = "System: Safe orbit at inclination .003 established" + src.topics["LOG(003)"] = "CenCom: Attempting test fire...ALERT(001)" + src.topics["ALERT(001)"] = "System: Cannot attempt test fire" + src.topics["LOG(004)"] = "System: Airlock accessed..." + src.topics["LOG(005)"] = "System: System successfully reset...Generator engaged" + src.topics["LOG(006)"] = "Physical: Super-heater (W005) added to power grid" + src.topics["LOG(007)"] = "Physical: Amplifier (W007) added to power grid" + src.topics["LOG(008)"] = "Physical: Plasma Energizer (W006) added to power grid" + src.topics["LOG(009)"] = "Physical: Laser (W004) added to power grid" + src.topics["LOG(010)"] = "Physical: Laser test firing" + src.topics["LOG(011)"] = "Physical: Plasma added to Super-heater" + src.topics["LOG(012)"] = "Physical: Orient N12.525,E22.124" + src.topics["LOG(013)"] = "System: Location N12.525,E22.124" + src.topics["LOG(014)"] = "Physical: Test fire...successful" + src.topics["LOG(015)"] = "Physical: Airlock accessed..." + src.topics["LOG(016)"] = "******: Disable locater systems" + src.topics["LOG(017)"] = "System: Locater Beacon-Disengaged,CenCom link-Cut...ALERT(002)" + src.topics["ALERT(002)"] = "System: Cannot seem to establish contact with Central Command" + src.topics["LOG(018)"] = "******: Shutting down all systems...ALERT(003)" + src.topics["ALERT(003)"] = "System: Power grid failure-Activating back-up power...ALERT(004)" + src.topics["ALERT(004)"] = "System: Engine failure...All systems deactivated." + return + +/obj/machinery/computer/data/weapon/info/display() + set src in oview(1) + + usr << "Research Information:" + ..() + return + +/obj/machinery/computer/data/verb/display() + set src in oview(1) + + for(var/x in src.topics) + usr << text("[], \...", x) + //Foreach goto(19) + usr << "" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/data/verb/read(topic as text) + set src in oview(1) + + if (src.topics[text("[]", topic)]) + usr << text("[]\n\t []", topic, src.topics[text("[]", topic)]) + else + usr << text("Unable to find- []", topic) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/hub/Bumped(M as mob|obj) + + spawn( 0 ) + if (src.icon_state == "tele1") + teleport(M) + return + return + +/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj) + + var/atom/l = src.loc + var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(l.x - 2, l.y, l.z)) + if (!( com )) + return + var/atom/target = com.locked + if (!( com.locked )) + for(var/mob/O in hearers(src, null)) + O.show_message("\red Failure: Cannot authenticate locked on coordinates. Please reinstantiat coordinate matrix.", 1, "\red Error!", 2) + //Foreach goto(80) + return + var/obj/effects/sparks/O = new /obj/effects/sparks( target ) + O.dir = pick(1, 2, 4, 8) + spawn( 0 ) + O.Life() + return + if (istype(M, /atom/movable)) + if (rand(1, 1000) == 7) + M << "\red You see a fainting blue light." + M.loc = null + else + var/tx = target.x + rand(-2.0, 2) + var/ty = target.y + rand(-2.0, 2) + tx = max(min(tx, world.maxx), 1) + ty = max(min(ty, world.maxy), 1) + M.loc = locate(tx, ty, target.z) + else + for(var/mob/B in hearers(src, null)) + B.show_message("\blue Test fire completed.", 2) + //Foreach goto(316) + return + +/obj/machinery/teleport/station/verb/engage() + set src in oview(1) + + var/atom/l = src.loc + var/atom/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + com.icon_state = "tele1" + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Teleporter engaged!", 2) + //Foreach goto(70) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/verb/disengage() + set src in oview(1) + + var/atom/l = src.loc + var/atom/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + com.icon_state = "tele0" + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Teleporter disengaged!", 2) + //Foreach goto(70) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/verb/testfire() + set src in oview(1) + + var/atom/l = src.loc + var/obj/machinery/teleport/hub/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Test firing!", 2) + //Foreach goto(60) + com.teleport() + src.add_fingerprint(usr) + return + +/obj/effects/smoke/proc/Life() + + if (src.amount > 1) + var/obj/effects/smoke/W = new src.type( src.loc ) + W.amount = src.amount - 1 + W.dir = src.dir + spawn( 0 ) + W.Life() + return + src.amount-- + if (src.amount <= 0) + sleep(50) + //SN src = null + del(src) + return + var/turf/T = get_step(src, turn(src.dir, pick(90, 0, 0, -90.0))) + if ((T && T.density)) + src.dir = turn(src.dir, pick(-90.0, 90)) + else + step_to(src, T, null) + T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + spawn( 3 ) + src.Life() + return + return + +/obj/effects/sparks/proc/Life() + + if (src.amount > 1) + var/obj/effects/sparks/W = new src.type( src.loc ) + W.amount = src.amount - 1 + W.dir = src.dir + spawn( 0 ) + W.Life() + return + src.amount-- + if (src.amount <= 0) + sleep(50) + //SN src = null + del(src) + return + var/turf/T = get_step(src, turn(src.dir, pick(90, 0, 0, -90.0))) + if ((T && T.density)) + src.dir = turn(src.dir, pick(-90.0, 90)) + else + step_to(src, T, null) + T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + spawn( 3 ) + src.Life() + return + return + +/obj/effects/sparks/New() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + return + +/obj/effects/sparks/Del() + + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + ..() + return + +/obj/effects/sparks/Move() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + return + +/obj/laser/Bump() + + src.range-- + return + +/obj/laser/Move() + + src.range-- + return + +/atom/proc/laserhit(L as obj) + + return 1 + return diff --git a/ss13-40.93.2-base/ss13-40.93.2-base/weapons.dm b/ss13-40.93.2-base/ss13-40.93.2-base/weapons.dm new file mode 100644 index 0000000..5069a23 --- /dev/null +++ b/ss13-40.93.2-base/ss13-40.93.2-base/weapons.dm @@ -0,0 +1,1364 @@ + +/obj/machinery/nuclearbomb/New() + + if (nuke_code) + src.r_code = text("[]", nuke_code) + ..() + return + +/obj/machinery/nuclearbomb/process() + + if (src.timing) + src.timeleft-- + if (src.timeleft <= 0) + explode() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(46) + return + +/obj/machinery/nuclearbomb/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/nuclearbomb/attack_hand(mob/user as mob) + + if (src.extended) + user.machine = src + var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) + if (src.auth) + if (src.yes_code) + dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) + else + dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + else + if (src.timing) + dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + else + dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + var/message = "AUTH" + if (src.auth) + message = text("[]", src.code) + if (src.yes_code) + message = "*****" + dat += text("
\n>[]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
", message, src, src, src, src, src, src, src, src, src, src, src, src) + user << browse(dat, "window=nuclearbomb;size=300x400") + else + src.anchored = 1 + flick("nuclearbombc", src) + src.icon_state = "nuclearbomb1" + src.extended = 1 + return + +/obj/machinery/nuclearbomb/Topic(href, href_list) + + if (usr.stat) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["auth"]) + if (src.auth) + src.auth.loc = src.loc + src.yes_code = 0 + src.auth = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/disk/nuclear)) + usr.drop_item() + I.loc = src + src.auth = I + if (src.auth) + if (href_list["type"]) + if (href_list["type"] == "E") + if (src.code == src.r_code) + src.yes_code = 1 + src.code = null + else + src.code = "ERROR" + else + if (href_list["type"] == "R") + src.yes_code = 0 + src.code = null + else + src.code += text("[]", href_list["type"]) + if (length(src.code) > 5) + src.code = "ERROR" + if (src.yes_code) + if (href_list["time"]) + var/time = text2num(href_list["time"]) + src.timeleft += time + src.timeleft = min(max(round(src.timeleft), 5), 600) + if (href_list["timer"]) + if (src.timing == -1.0) + return + src.timing = !( src.timing ) + if (src.timing) + src.icon_state = "nuclearbomb2" + else + src.icon_state = "nuclearbomb1" + if (href_list["safety"]) + src.safety = !( src.safety ) + if (href_list["anchor"]) + src.anchored = !( src.anchored ) + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(511) + else + usr << browse(null, "window=nuclearbomb") + return + return + +/obj/machinery/nuclearbomb/ex_act() + + if (src.timing == -1.0) + return + else + return ..() + return + +/obj/machinery/nuclearbomb/proc/explode() + + if (src.safety) + src.timing = 0 + return + src.timing = -1.0 + src.yes_code = 0 + src.icon_state = "nuclearbomb3" + sleep(20) + var/turf/T = src.loc + while(!( istype(T, /turf) )) + T = T.loc + var/min = 50 + var/med = 250 + var/max = 500 + var/sw = locate(1, 1, T.z) + var/ne = locate(world.maxx, world.maxy, T.z) + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= T.y + max && U.y >= T.y - max && U.x <= T.x + max && U.x >= T.x - max)) + zone = 3 + if ((U.y <= T.y + med && U.y >= T.y - med && U.x <= T.x + med && U.x >= T.x - med)) + zone = 2 + if ((U.y <= T.y + min && U.y >= T.y - min && U.x <= T.x + min && U.x >= T.x - min)) + zone = 1 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(404) + U.ex_act(zone) + //Foreach goto(148) + ticker.nuclear(src.z) + //SN src = null + del(src) + return + return + +/obj/item/weapon/infra_sensor/New() + + ..() + spawn( 0 ) + src.process() + return + return + +/obj/item/weapon/infra_sensor/proc/process() + + if (src.passive) + for(var/obj/beam/i_beam/I in range(2, src.loc)) + I.left = 2 + //Foreach goto(30) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/infra_sensor/proc/burst() + + for(var/obj/beam/i_beam/I in range(src.loc, null)) + I.left = 10 + //Foreach goto(22) + for(var/obj/item/weapon/infra/I in range(src.loc, null)) + I.visible = 1 + spawn( 0 ) + if ((I && I.first)) + I.first.vis_spread(1) + return + //Foreach goto(69) + for(var/obj/item/weapon/assembly/rad_infra/I in range(src.loc, null)) + I.part2.visible = 1 + spawn( 0 ) + if ((I.part2 && I.part2.first)) + I.part2.first.vis_spread(1) + return + //Foreach goto(145) + return + +/obj/item/weapon/infra_sensor/attack_self(mob/user as mob) + + user.machine = src + var/dat = text("Infrared Sensor
\nPassive Emitter: []
\nActive Emitter: Burst Fire\n
", (src.passive ? text("On", src) : text("Off", src)), src) + user << browse(dat, "window=infra_sensor") + return + +/obj/item/weapon/infra_sensor/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["passive"]) + src.passive = !( src.passive ) + if (href_list["active"]) + spawn( 0 ) + src.burst() + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(164) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(240) + src.add_fingerprint(usr) + else + usr << browse(null, "window=infra_sensor") + return + return + +/obj/item/weapon/prox_sensor/dropped() + + spawn( 0 ) + src.sense() + return + return + +/obj/item/weapon/prox_sensor/proc/sense() + + if (src.state) + if (src.master) + spawn( 0 ) + src.master:r_signal(1, src) + return + else + for(var/mob/O in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(58) + return + +/obj/item/weapon/prox_sensor/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + + src.sense() + return + +/obj/item/weapon/prox_sensor/attackby(obj/item/weapon/radio/signaler/S as obj, mob/user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_prox/R = new /obj/item/weapon/assembly/rad_prox( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + return + +/obj/item/weapon/prox_sensor/attack_self(mob/user as mob) + + user.machine = src + var/dat = text("Proximity Sensor\nStatus: []
\n[]\n
", (src.state ? text("On", src) : text("Off", src)), (src.state ? "\red Time On (30)" : text("Time On (30)", src))) + user << browse(dat, "window=prox") + return + + + + +/obj/item/weapon/prox_sensor/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || usr.contents.Find(src.master) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["state"]) + src.state = !( src.state ) + src.icon_state = text("motion[]", src.state) + if (src.master) + src.master:c_state(src.state, src) + if (href_list["time"]) + spawn( 100 ) + if (src.state == 0) + src.state = !( src.state ) + src.icon_state = text("motion[]", src.state) + if (src.master) + src.master:c_state(src.state, src) + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(234) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(310) + else + usr << browse(null, "window=prox") + return + return + +/obj/item/weapon/prox_sensor/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/prox_sensor/Move() + + ..() + src.sense() + return + +/obj/item/weapon/infra/proc/hit() + + if (src.master) + spawn( 0 ) + src.master:r_signal(1, src) + return + else + for(var/mob/O in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(51) + return + +/obj/item/weapon/infra/proc/process() + + + if ((!( src.first ) && (src.state && (istype(src.loc, /turf) || (src.master && istype(src.master.loc, /turf)))))) + + var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.master ? src.master.loc : src.loc) ) + I.master = src + I.density = 1 + I.dir = src.dir + step(I, I.dir) + if (I) + I.density = 0 + src.first = I + I.vis_spread(src.visible) + spawn( 0 ) + if (I) + I.limit = 20 + I.process() + return + if (!( src.state )) + //src.first = null + del(src.first) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/infra/attackby(obj/item/weapon/radio/signaler/S as obj, mob/user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_infra/R = new /obj/item/weapon/assembly/rad_infra( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + return + +/obj/item/weapon/infra/New() + + spawn( 0 ) + src.process() + return + ..() + return + +/obj/item/weapon/infra/attack_self(mob/user as mob) + + user.machine = src + var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n
", (src.state ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) + user << browse(dat, "window=infra") + return + +/obj/item/weapon/infra/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || usr.contents.Find(src.master) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["state"]) + src.state = !( src.state ) + src.icon_state = text("infrared[]", src.state) + if (src.master) + src.master:c_state(src.state, src) + if (href_list["visible"]) + src.visible = !( src.visible ) + spawn( 0 ) + if (src.first) + src.first.vis_spread(src.visible) + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(211) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(287) + else + usr << browse(null, "window=infra") + return + return + +/obj/item/weapon/infra/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/infra/attack_hand() + + //src.first = null + del(src.first) + ..() + return + +/obj/item/weapon/infra/Move() + + var/t = src.dir + ..() + src.dir = t + //src.first = null + del(src.first) + return + +/obj/item/weapon/infra/verb/rotate() + set src in usr + + src.dir = turn(src.dir, 90) + return + +/obj/item/weapon/timer/proc/time() + + if (src.master) + spawn( 0 ) + src.master:r_signal(1, src) + return + else + for(var/mob/O in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(51) + return + + +/obj/item/weapon/timer/proc/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + time() + src.time = 0 + src.timing = 0 + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(100) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(176) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/timer/attackby(obj/item/weapon/radio/signaler/S as obj, mob/user as mob) + + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_time/R = new /obj/item/weapon/assembly/rad_time( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + R.add_fingerprint(user) + return + +/obj/item/weapon/timer/New() + + spawn( 0 ) + src.process() + return + ..() + return + +/obj/item/weapon/timer/attack_self(mob/user as mob) + + user.machine = src + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (src.timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src) + user << browse(dat, "window=timer") + return + +/obj/item/weapon/timer/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || usr.contents.Find(src.master) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 600) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(192) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(268) + src.add_fingerprint(usr) + else + usr << browse(null, "window=timer") + return + return + +/obj/item/weapon/assembly/proc/r_signal(signal) + + return + +/obj/item/weapon/assembly/proc/c_state(n, O as obj) + + return + +/obj/item/weapon/assembly/shock_kit/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The shock pack is now secured!", 1) + else + user.show_message("\blue The shock pack is now unsecured!", 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/shock_kit/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/shock_kit/r_signal(n, source) + + if (istype(src.loc, /obj/stool/chair/e_chair)) + var/obj/stool/chair/e_chair/C = src.loc + C.shock() + return + + +/obj/item/weapon/assembly/rad_time/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_time/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The signaler is now secured!", 1) + else + user.show_message("\blue The signaler is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_time/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_time/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_prox/c_state(n) + + src.icon_state = text("motion[]", n) + return + +/obj/item/weapon/assembly/rad_prox/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_prox/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part2.sense() + return + +/obj/item/weapon/assembly/rad_prox/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The proximity sensor is now secured!", 1) + else + user.show_message("\blue The proximity sensor is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_prox/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_prox/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_prox/Move() + + ..() + src.part2.sense() + return + +/obj/item/weapon/assembly/rad_prox/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/assembly/rad_prox/dropped() + + spawn( 0 ) + src.part2.sense() + return + return + +/obj/item/weapon/assembly/rad_infra/c_state(n) + + src.icon_state = text("infrared[]", n) + return + +/obj/item/weapon/assembly/rad_infra/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_infra/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The infrared laser is now secured!", 1) + else + user.show_message("\blue The infrared laser is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_infra/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_infra/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_infra/verb/rotate() + set src in usr + + src.dir = turn(src.dir, 90) + src.part2.dir = src.dir + src.add_fingerprint(usr) + return + +/obj/item/weapon/assembly/rad_infra/Move() + + var/t = src.dir + ..() + src.dir = t + //src.part2.first = null + del(src.part2.first) + return + +/obj/item/weapon/assembly/rad_infra/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/assembly/rad_infra/attack_hand(M) + + //src.part2.first = null + del(src.part2.first) + ..() + return + +/obj/item/weapon/assembly/prox_ignite/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part1.sense() + return + +/obj/item/weapon/assembly/prox_ignite/dropped() + + spawn( 0 ) + src.part1.sense() + return + return + +/obj/item/weapon/assembly/prox_ignite/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/prox_ignite/c_state(n) + + src.icon_state = text("prox_igniter[]", n) + return + +/obj/item/weapon/assembly/prox_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The proximity sensor is now secured! The igniter now works!", 1) + else + user.show_message("\blue The proximity sensor is now unsecured! The igniter will not work.", 1) + src.part2.status = src.status + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/prox_ignite/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/prox_ignite/r_signal() + + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/rad_ignite/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The radio is now secured! The igniter now works!", 1) + else + user.show_message("\blue The radio is now unsecured! The igniter will not work.", 1) + src.part2.status = src.status + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_ignite/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_ignite/r_signal() + + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/m_i_ptank/c_state(n) + + src.icon_state = text("m_i_ptank[]", n) + return + +/obj/item/weapon/assembly/m_i_ptank/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part1.sense() + return + + +/obj/item/weapon/assembly/m_i_ptank/dropped() + + spawn( 0 ) + src.part1.sense() + return + return + +/obj/item/weapon/assembly/m_i_ptank/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + //src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/m_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/prox_ignite/R = new /obj/item/weapon/assembly/prox_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (user.l_hand == src) + user.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/turf/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + src.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/m_i_ptank/attack_self(mob/user as mob) + + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/m_i_ptank/r_signal() + for(var/mob/O in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + + if ((src.status && prob(90))) + src.part3.ignite() + return + +/obj/item/weapon/assembly/r_i_ptank/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + //src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/r_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/rad_ignite/R = new /obj/item/weapon/assembly/rad_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (user.l_hand == src) + user.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/turf/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + src.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/r_i_ptank/attack_self(mob/user as mob) + + if (src.part1) + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/r_i_ptank/r_signal() + for(var/mob/O in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + if ((src.status && prob(90))) + src.part3.ignite() + return + +/obj/bullet/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act("bullet", src) + //SN src = null + del(src) + return + return + return + +/obj/bullet/CheckPass(B as obj) + + if (istype(B, /obj/bullet)) + return prob(95) + else + return 1 + return + +/obj/bullet/proc/process() + + if ((!( src.current ) || src.loc == src.current)) + src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z) + if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) + //SN src = null + del(src) + return + step_towards(src, src.current) + spawn( 1 ) + process() + return + return + +/obj/beam/a_laser/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act(null, src) + //SN src = null + del(src) + return + return + return + +/obj/beam/a_laser/proc/process() + + if ((!( src.current ) || src.loc == src.current)) + src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z) + if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) + //SN src = null + del(src) + return + step_towards(src, src.current) + src.life-- + if (src.life <= 0) + //SN src = null + del(src) + return + spawn( 1 ) + src.process() + return + return + +/obj/beam/a_laser/s_laser/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act(1) + //SN src = null + del(src) + return + return + return + +/obj/beam/i_beam/proc/hit() + + if (src.master) + src.master.hit() + //SN src = null + del(src) + return + return + +/obj/beam/i_beam/proc/vis_spread(v) + src.visible = v + spawn( 0 ) + if (src.next) + src.next.vis_spread(v) + return + return + +/obj/beam/i_beam/proc/process() + + if ((src.loc.density || !( src.master ))) + //SN src = null + del(src) + return + + if (src.left > 0) + src.left-- + if (src.left < 1) + if (!( src.visible )) + src.invisibility = 100 + else + src.invisibility = 0 + else + src.invisibility = 0 + + var/obj/beam/i_beam/I = new /obj/beam/i_beam( src.loc ) + I.master = src.master + I.density = 1 + I.dir = src.dir + step(I, I.dir) + + if (I) + if (!( src.next )) + I.density = 0 + I.vis_spread(src.visible) + src.next = I + spawn( 0 ) + if ((I && src.limit > 0)) + I.limit = src.limit - 1 + I.process() + return + else + //I = null + del(I) + else + //src.next = null + del(src.next) + spawn( 10 ) + src.process() + return + return + +/obj/beam/i_beam/Bump() + + //SN src = null + + del(src) + return + +/obj/beam/i_beam/Bumped() + + src.hit() + return + +/obj/beam/i_beam/HasEntered(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + spawn( 0 ) + src.hit() + return + return + +/obj/beam/i_beam/Del() + + //src.next = null + del(src.next) + ..() + return + +/atom/proc/ex_act() + + return + +/atom/proc/las_act() + + return + +/turf/Entered(atom/A as mob|obj) + + ..() + if ((A && A.density && !( istype(A, /obj/beam) ))) + for(var/obj/beam/i_beam/I in src) + spawn( 0 ) + if (I) + I.hit() + return + //Foreach goto(44) + return diff --git a/ss13-40.93.2-decomp/README.md b/ss13-40.93.2-decomp/README.md new file mode 100644 index 0000000..e691ab6 --- /dev/null +++ b/ss13-40.93.2-decomp/README.md @@ -0,0 +1 @@ +The raw output of Hobnob's decompiler. This is as close as you can get to the original source of the 40.93.2 version that was played from 2006-2008. \ No newline at end of file diff --git a/ss13-40.93.2-decomp/spacestation13/Cryogenic2.dmi b/ss13-40.93.2-decomp/spacestation13/Cryogenic2.dmi new file mode 100644 index 0000000..2ead3b6 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/Cryogenic2.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/Door1.dmi b/ss13-40.93.2-decomp/spacestation13/Door1.dmi new file mode 100644 index 0000000..13206c3 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/Door1.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/Doorf.dmi b/ss13-40.93.2-decomp/spacestation13/Doorf.dmi new file mode 100644 index 0000000..7a5442d Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/Doorf.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/Icons.dmi b/ss13-40.93.2-decomp/spacestation13/Icons.dmi new file mode 100644 index 0000000..9ff68ed Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/Icons.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/Test.dm b/ss13-40.93.2-decomp/spacestation13/Test.dm new file mode 100644 index 0000000..cb4869c --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/Test.dm @@ -0,0 +1,23 @@ + +/proc/dd_run_tests() + + var/test_classes = typesof(/obj/test) + for(var/class in test_classes) + varclass/tester = new class( ) + for(var/test in tester.verbs) + call(tester, test)() + if (!( tester.success )) + else + //Foreach continue //goto(59) + if (!( tester.success )) + world << "Test failed." + return + //Foreach goto(26) + world << "All tests passed." + return + +/obj/test/proc/die(message) + + src.success = 0 + CRASH(message) + return diff --git a/ss13-40.93.2-decomp/spacestation13/TextHandling.dm b/ss13-40.93.2-decomp/spacestation13/TextHandling.dm new file mode 100644 index 0000000..713728b --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/TextHandling.dm @@ -0,0 +1,139 @@ + +/proc/dd_file2list(file_path, separator) + + if (separator == null) + separator = "\n" + if (isfile(file_path)) + var/file = file_path + else + file = new /file( file_path ) + return dd_text2list(file2text(file), separator) + return + +/proc/dd_replacetext(text, search_string, replacement_string) + + var/textList = dd_text2list(text, search_string) + return dd_list2text(textList, replacement_string) + return + +/proc/dd_replaceText(text, search_string, replacement_string) + + var/textList = dd_text2List(text, search_string) + return dd_list2text(textList, replacement_string) + return + +/proc/dd_hasprefix(text, prefix) + + var/start = 1 + var/end = length(prefix) + 1 + return findtext(text, prefix, start, end) + return + +/proc/dd_hasPrefix(text, prefix) + + var/start = 1 + var/end = length(prefix) + 1 + return findText(text, prefix, start, end) + return + +/proc/dd_hassuffix(text, suffix) + + var/start = length(text) - length(suffix) + if (start) + return findtext(text, suffix, start, null) + return + +/proc/dd_hasSuffix(text, suffix) + + var/start = length(text) - length(suffix) + if (start) + return findText(text, suffix, start, null) + return + +/proc/dd_text2list(text, separator) + + var/textlength = length(text) + var/separatorlength = length(separator) + var/textList = new (List:0)( ) + var/searchPosition = 1 + var/findPosition = 1 + while(1) + findPosition = findtext(text, separator, searchPosition, 0) + var/buggyText = copytext(text, searchPosition, findPosition) + textList += text("[]", buggyText) + searchPosition = findPosition + separatorlength + if (findPosition == 0) + return textList + else + if (searchPosition > textlength) + textList += "" + return textList + return + +/proc/dd_text2List(text, separator) + + var/textlength = length(text) + var/separatorlength = length(separator) + var/textList = new (List:0)( ) + var/searchPosition = 1 + var/findPosition = 1 + while(1) + findPosition = findText(text, separator, searchPosition, 0) + var/buggyText = copytext(text, searchPosition, findPosition) + textList += text("[]", buggyText) + searchPosition = findPosition + separatorlength + if (findPosition == 0) + return textList + else + if (searchPosition > textlength) + textList += "" + return textList + return + +/proc/dd_list2text(the_list, separator) + + var/total = the_list.len + if (total == 0) + return + var/newText = text("[]", the_list[1]) + var/count = 2 + while(count <= total) + if (separator) + newText += separator + newText += text("[]", the_list[count]) + count++ + return newText + return + +/proc/dd_centertext(message, length) + + var/new_message = message + var/size = length(message) + if (size == length) + return new_message + if (size > length) + return copytext(new_message, 1, length + 1) + var/delta = length - size + if (delta == 1) + return new_message + " " + if (delta % 2) + new_message = " " + new_message + delta-- + delta = delta / 2 + var/spaces = "" + var/count = null + count = 1 + while(count <= delta) + spaces += " " + count++ + return (spaces + new_message) + spaces + return + +/proc/dd_limittext(message, length) + + var/size = length(message) + if (size <= length) + return message + else + return copytext(message, 1, length + 1) + return diff --git a/ss13-40.93.2-decomp/spacestation13/aaaDefines.dm b/ss13-40.93.2-decomp/spacestation13/aaaDefines.dm new file mode 100644 index 0000000..f713a90 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/aaaDefines.dm @@ -0,0 +1,77 @@ + +/proc/add_zero(t, u) + + while(length(t) < u) + t = text("0[]", t) + return t + return + +/obj/bomb/New() + + ..() + var/obj/item/weapon/assembly/r_i_ptank/R = new /obj/item/weapon/assembly/r_i_ptank( src.loc ) + var/obj/item/weapon/tank/plasmatank/p3 = new /obj/item/weapon/tank/plasmatank( R ) + var/obj/item/weapon/radio/signaler/p1 = new /obj/item/weapon/radio/signaler( R ) + var/obj/item/weapon/igniter/p2 = new /obj/item/weapon/igniter( R ) + R.part1 = p1 + R.part2 = p2 + R.part3 = p3 + p1.master = R + p2.master = R + p3.master = R + R.status = 1 + p1.b_stat = 0 + p2.status = 1 + src = null + del(src) + return + return + +/obj/proc/throwing(t_dir, rs) + + if (src.throwspeed <= 1) + src.throwing = 0 + src.throwspeed-- + if (rs == 0) + rs = 1 + if (src.throwing) + if (rs == 1) + step(src, t_dir) + sleep(1) + spawn( 0 ) + src.throwing(t_dir, rs) + return + else + if (rs > 1) + var/t = null + while(t < rs) + step(src, t_dir) + t++ + sleep(10) + spawn( 0 ) + src.throwing(t_dir, rs) + return + else + step(src, t_dir) + sleep(10 / rs) + spawn( 0 ) + src.throwing(t_dir, rs) + return + else + src.density = 0 + return + +/atom/proc/burn(fi_amount) + + return + +/atom/movable/Move() + + var/A = src.loc + . = ..() + src.move_speed = world.time - src.l_move_time + src.l_move_time = world.time + src.m_flag = 1 + if ((A != src.loc && (A && A.z == src.z))) + src.last_move = get_dir(A, src.loc) + return diff --git a/ss13-40.93.2-decomp/spacestation13/aircontrol.dmi b/ss13-40.93.2-decomp/spacestation13/aircontrol.dmi new file mode 100644 index 0000000..11bea3f Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/aircontrol.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/airtunnel.dm b/ss13-40.93.2-decomp/spacestation13/airtunnel.dm new file mode 100644 index 0000000..35a359c --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/airtunnel.dm @@ -0,0 +1,659 @@ + +/obj/move/airtunnel/process() + + if (!( src.deployed )) + return null + else + ..() + return + +/obj/move/airtunnel/connector/create() + + src.current = src + src.next = new /obj/move/airtunnel( null ) + src.next.master = src.master + src.next.previous = src + spawn( 0 ) + src.next.create(36, src.y) + return + return + +/obj/move/airtunnel/connector/wall/create() + + src.current = src + src.next = new /obj/move/airtunnel/wall( null ) + src.next.master = src.master + src.next.previous = src + spawn( 0 ) + src.next.create(36, src.y) + return + return + +/obj/move/airtunnel/connector/wall/process() + + return + +/obj/move/airtunnel/wall/create(num, y_coord) + + if (((num < 7 || (num > 14 && num < 21)) && y_coord == 72)) + src.next = new /obj/move/airtunnel( null ) + else + src.next = new /obj/move/airtunnel/wall( null ) + src.next.master = src.master + src.next.previous = src + if (num > 1) + spawn( 0 ) + src.next.create(num - 1, y_coord) + return + return + +/obj/move/airtunnel/wall/move_right() + + flick("wall-m", src) + return ..() + return + +/obj/move/airtunnel/wall/move_left() + + flick("wall-m", src) + return ..() + return + +/obj/move/airtunnel/wall/process() + + return + +/obj/move/airtunnel/proc/move_left() + + src.relocate(get_step(src, WEST)) + if ((src.next && src.next.deployed)) + return src.next.move_left() + else + return src.next + return + +/obj/move/airtunnel/proc/move_right() + + src.relocate(get_step(src, EAST)) + if ((src.previous && src.previous.deployed)) + src.previous.move_right() + return src.previous + return + +/obj/move/airtunnel/proc/create(num, y_coord) + + if (y_coord == 72) + if ((num < 7 || (num > 14 && num < 21))) + src.next = new /obj/move/airtunnel( null ) + else + src.next = new /obj/move/airtunnel/wall( null ) + else + src.next = new /obj/move/airtunnel( null ) + src.next.master = src.master + src.next.previous = src + if (num > 1) + spawn( 0 ) + src.next.create(num - 1, y_coord) + return + return + +/obj/machinery/at_indicator/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "reader_broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "reader_broken" + else + return + +/obj/machinery/at_indicator/proc/update_icon() + + var/status = 0 + if (SS13_airtunnel.operating == 1) + status = "r" + else + if (SS13_airtunnel.operating == 2) + status = "e" + else + var/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + status = 0 + else + if (!( C.current.next )) + status = 2 + else + status = 1 + src.icon_state = text("reader[][]", (SS13_airtunnel.siphon_status == 2 ? "1" : "0"), status) + return + +/obj/machinery/at_indicator/process() + + src.update_icon() + return + +/obj/machinery/computer/airtunnel/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/airtunnel/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/airtunnel/attack_hand(user as mob) + + var/dat = "Air Tunnel Controls
" + user.machine = src + if (SS13_airtunnel.operating == 1) + dat += "Status: RETRACTING
" + else + if (SS13_airtunnel.operating == 2) + dat += "Status: EXPANDING
" + else + var/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + dat += "Status: Fully Retracted
" + else + if (!( C.current.next )) + dat += "Status: Fully Extended
" + else + dat += "Status: Stopped Midway
" + dat += text("Retract Stop Extend
", src, src, src) + dat += text("
Air Level: []
", (SS13_airtunnel.air_stat ? "Acceptable" : "DANGEROUS")) + dat += "Air System Status: " + switch(SS13_airtunnel.siphon_status) + if(0.0) + dat += "Stopped " + if(1.0) + dat += "Siphoning (Siphons only) " + if(2.0) + dat += "Regulating (BOTH) " + if(3.0) + dat += "RELEASING MAX (Siphons only) " + else + dat += text("(Refresh)
", src) + dat += text("RELEASE (Siphons only) Siphon (Siphons only) Stop Regulate
", src, src, src, src) + dat += text("

Close
", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/airtunnel/proc/update_icon() + + var/status = 0 + if (SS13_airtunnel.operating == 1) + status = "r" + else + if (SS13_airtunnel.operating == 2) + status = "e" + else + var/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + status = 0 + else + if (!( C.current.next )) + status = 2 + else + status = 1 + src.icon_state = text("console[][]", (SS13_airtunnel.siphon_status >= 2 ? "1" : "0"), status) + return + +/obj/machinery/computer/airtunnel/process() + + src.update_icon() + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(27) + return + +/obj/machinery/computer/airtunnel/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["retract"]) + SS13_airtunnel.retract() + else + if (href_list["stop"]) + SS13_airtunnel.operating = 0 + else + if (href_list["extend"]) + SS13_airtunnel.extend() + else + if (href_list["release"]) + SS13_airtunnel.siphon_status = 3 + siphons() + else + if (href_list["siphon"]) + SS13_airtunnel.siphon_status = 1 + siphons() + else + if (href_list["stop_siph"]) + SS13_airtunnel.siphon_status = 0 + siphons() + else + if (href_list["auto"]) + SS13_airtunnel.siphon_status = 2 + siphons() + else + if (href_list["refresh"]) + SS13_airtunnel.siphons() + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(346) + return + +/obj/machinery/camera/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.status = !( src.status ) + if (!( src.status )) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] has deactivated []!", user, src), 1) + //Foreach goto(49) + src.icon_state = "camera1" + else + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] has reactivated []!", user, src), 1) + //Foreach goto(106) + src.icon_state = "camera" + return + +/obj/machinery/sec_lock/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/sec_lock/attack_hand(user as mob) + + if (src.loc == user.loc) + var/dat = text("Security Pad:
\nKeycard: []
\nToggle Outer Door
\nToggle Inner Door
\n
\nEmergency Close
\nEmergency Open
", (src.scan ? text("[]", src, src.scan.name) : text("-----", src)), src, src, src, src) + user << browse(dat, "window=sec_lock") + return + +/obj/machinery/sec_lock/attackby(nothing, user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/sec_lock/New() + + ..() + spawn( 2 ) + if (src.a_type == 1) + src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y - 1, src.z)) + src.d1 = locate(/obj/machinery/door, get_step(src, SOUTHWEST)) + else + if (src.a_type == 2) + src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y + 1, src.z)) + src.d1 = locate(/obj/machinery/door, get_step(src, NORTHWEST)) + else + src.d1 = locate(/obj/machinery/door, get_step(src, SOUTH)) + src.d2 = locate(/obj/machinery/door, get_step(src, SOUTHEAST)) + return + return + +/obj/machinery/sec_lock/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((!( src.d1 ) || !( src.d2 ))) + usr << "\red Error: Cannot interface with door security!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["card"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + if (href_list["door1"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.access_level > 4))) + if (src.d1.density) + spawn( 0 ) + src.open() + return + else + spawn( 0 ) + src.close() + return + if (href_list["door2"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.access_level > 4))) + if (src.d2.density) + spawn( 0 ) + src.open() + return + else + spawn( 0 ) + src.close() + return + if (href_list["em_cl"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.access_level > 4))) + spawn( 0 ) + if (!( src.d1.density )) + src.close() + return + sleep(1) + spawn( 0 ) + if (!( src.d2.density )) + src.close() + return + if (href_list["em_op"]) + if (src.scan) + var/list/L = list( "Prison Security", "Prison Warden", "Security Officer", "Head of Personnel", "Captain" ) + if ((L.Find(src.scan.assignment) || (src.scan.lab_access > 4 && src.access_level > 4))) + spawn( 0 ) + if (src.d1.density) + src.open() + return + sleep(1) + spawn( 0 ) + if (src.d2.density) + src.open() + return + src.add_fingerprint(usr) + for(var/M as mob in src.loc) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.attack_hand(M) + return + //Foreach goto(737) + return + +/obj/machinery/autolathe/attackby(O as obj, user as mob) + + if (istype(O, /obj/item/weapon/sheet/metal)) + if (src.m_amount < 150000.0) + src.m_amount += ((O.height * O.width) * O.length) * 1000000.0 + O.amount-- + if (O.amount < 1) + O = null + del(O) + else + if (istype(O, /obj/item/weapon/sheet/glass)) + if (src.g_amount < 75000.0) + src.g_amount += ((O.height * O.width) * O.length) * 1000000.0 + O.amount-- + if (O.amount < 1) + O = null + del(O) + else + if (istype(O, /obj/item/weapon/screwdriver)) + if (!( src.operating )) + src.opened = !( src.opened ) + src.icon_state = text("autolathe[]", (src.opened ? "f" : null)) + else + user << "\red The machine is in use. You can not maintain it now." + else + spawn( 0 ) + src.attack_hand(user) + return + return + +/obj/machinery/autolathe/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/autolathe/attack_hand(user as mob) + + if (src.temp) + var/dat = text("[]

Clear Screen", src.temp, src) + else + dat = text("Metal Amount: [] cubic centimeters (MAX: 150,000)
\nGlass Amount: [] cubic centimeters (MAX: 75,000)
", src.m_amount, src.g_amount) + var/list/L = list( ) + L["screwdriver"] = "Make Screwdriver {40 cc}" + L["wirecutters"] = "Make Wirecutters {80 cc}" + L["wrench"] = "Make Wrench {150 cc}" + L["crowbar"] = "Make Crowbar {150 cc}" + L["screw"] = "Make Screw (1) {3 cc}" + L["5screws"] = "Make Screws (5) {14 cc}" + L["rod_t"] = "Make Rod (1x20) {20 cc}" + L["rod_l"] = "Make Rod (5x250) {1250 cc}" + L["grille_1"] = "Make Grille (250x250x1) {27345 cc}" + L["sheet_1"] = "Make Sheet (20x10x.01) {2 cc}" + L["sheet_2"] = "Make Sheet (30x10x.01) {3 cc}" + L["sheet_3"] = "Make Sheet (30x20x.01) {6 cc}" + L["sheet_4"] = "Make Sheet (30x30x.01) {9 cc}" + L["sheet_5"] = "Make Sheet (62.5x62.5x4) {15625 cc}" + for(var/t in L) + dat += text("[]
", src, t, L[text("[]", t)]) + //Foreach goto(230) + user << browse(text("Autolathe Control Panel[]", dat), "window=autolathe") + return + +/obj/machinery/autolathe/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(108) + return + +/obj/machinery/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(25)) + src = null + del(src) + return + else + return + +/obj/machinery/injector/attackby(W as obj, user as mob) + + var/ptank = W + if (!( istype(ptank, /obj/item/weapon/tank) )) + return + var/T = get_step(src.loc, get_dir(user, src)) + ptank.gas.turf_add(T, -1.0) + src.add_fingerprint(user) + return + +/obj/machinery/alarm/process() + + var/safe = 1 + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = (((T.co2 + T.oxygen) + T.poison) + T.sl_gas) + T.n2 + turf_total = max(turf_total, 1) + var/t1 = (turf_total / 3600000.0) * 100 + if (!( (90 < t1 && t1 < 110) )) + safe = 0 + t1 = (T.oxygen / turf_total) * 100 + if (!( (20 < t1 && t1 < 30) )) + safe = 0 + src.icon_state = text("alarm:[]", !( safe )) + return + +/obj/machinery/alarm/indicator/process() + + var/safe = 1 + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = (((T.co2 + T.oxygen) + T.poison) + T.sl_gas) + T.n2 + turf_total = max(turf_total, 1) + var/t1 = (turf_total / 3600000.0) * 100 + if (!( (90 < t1 && t1 < 110) )) + safe = 0 + t1 = (T.oxygen / turf_total) * 100 + if (!( (20 < t1 && t1 < 30) )) + safe = 0 + src.icon_state = text("indicator[]", safe) + SS13_airtunnel.air_stat = safe + return + +/datum/air_tunnel/air_tunnel1/New() + + ..() + for(var/obj/move/airtunnel/A as obj in locate(/area/airtunnel1)) + A.master = src + create() + src.connectors += A + //Foreach goto(21) + return + +/datum/air_tunnel/proc/siphons() + + switch(src.siphon_status) + if(0.0) + for(var/obj/machinery/atmoalter/siphs/S as obj in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(42) + if(1.0) + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S as obj in locate(/area/airtunnel1)) + S.t_status = 2 + S.t_per = 1000000.0 + //Foreach goto(86) + for(var/obj/machinery/atmoalter/siphs/scrubbers/S as obj in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(136) + if(2.0) + for(var/obj/machinery/atmoalter/siphs/S as obj in locate(/area/airtunnel1)) + S.t_status = 4 + //Foreach goto(180) + if(3.0) + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S as obj in locate(/area/airtunnel1)) + S.t_status = 1 + S.t_per = 1000000.0 + //Foreach goto(224) + for(var/obj/machinery/atmoalter/siphs/scrubbers/S as obj in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(274) + else + return + +/datum/air_tunnel/proc/stop() + + src.operating = 0 + return + +/datum/air_tunnel/proc/extend() + + if (src.operating) + return + src.operating = 2 + while(src.operating == 2) + var/ok = 1 + for(var/obj/move/airtunnel/connector/A as obj in src.connectors) + if (!( A.current.next )) + src.operating = 0 + return + if (!( A.move_left() )) + ok = 0 + //Foreach goto(56) + if (!( ok )) + src.operating = 0 + else + for(var/obj/move/airtunnel/connector/A as obj in src.connectors) + if (A.current) + A.current.next.loc = get_step(A.current.loc, EAST) + A.current = A.current.next + A.current.deployed = 1 + else + src.operating = 0 + //Foreach goto(150) + sleep(20) + return + +/datum/air_tunnel/proc/retract() + + if (src.operating) + return + src.operating = 1 + while(src.operating == 1) + var/ok = 1 + for(var/obj/move/airtunnel/connector/A as obj in src.connectors) + if (A.current == A) + src.operating = 0 + return + if (A.current) + A.current.loc = null + A.current.deployed = 0 + A.current = A.current.previous + else + ok = 0 + //Foreach goto(56) + if (!( ok )) + src.operating = 0 + else + for(var/obj/move/airtunnel/connector/A as obj in src.connectors) + if (!( A.current.move_right() )) + src.operating = 0 + //Foreach goto(188) + sleep(20) + return diff --git a/ss13-40.93.2-decomp/spacestation13/airtunnel.dmi b/ss13-40.93.2-decomp/spacestation13/airtunnel.dmi new file mode 100644 index 0000000..bb7e378 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/airtunnel.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/airtunnelcomputer.dmi b/ss13-40.93.2-decomp/spacestation13/airtunnelcomputer.dmi new file mode 100644 index 0000000..5c6d89b Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/airtunnelcomputer.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/alert.dmi b/ss13-40.93.2-decomp/spacestation13/alert.dmi new file mode 100644 index 0000000..83cbfde Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/alert.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/ammo.dmi b/ss13-40.93.2-decomp/spacestation13/ammo.dmi new file mode 100644 index 0000000..f8e70c8 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/ammo.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/assemblies.dmi b/ss13-40.93.2-decomp/spacestation13/assemblies.dmi new file mode 100644 index 0000000..eb3ce0f Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/assemblies.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/atmo_control.dm b/ss13-40.93.2-decomp/spacestation13/atmo_control.dm new file mode 100644 index 0000000..ed6fc3e --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/atmo_control.dm @@ -0,0 +1,663 @@ + +/obj/machinery/proc/process() + + return + +/obj/machinery/proc/receive_gas(gas as obj, machinery as obj) + + return + +/obj/machinery/proc/orient_pipe(source as obj) + + return + +/obj/machinery/proc/cut_pipes() + + return + +/obj/machinery/proc/disc_pipe(target as obj) + + return + +/obj/machinery/meter/New() + + ..() + src.target = locate(/obj/machinery/pipes, src.loc) + return + +/obj/machinery/meter/Click() + + if (get_dist(usr, src) <= 3) + if (src.target) + usr << text("\green [] / []", src.target.gas.tot_gas(), src.maximum) + else + usr << "\green Results: Connection Error!" + else + usr << "\green You are too far away." + return + +/obj/machinery/connector/receive_gas(t_gas as obj) + + var/C = locate(/obj/machinery/atmoalter/canister, src.loc) + if (C.destroyed) + var/T = src.loc + if (!( istype(T, /turf) )) + return + t_gas.turf_add(T, -1.0) + return + var/amount = C.gas.maximum - ((C.oxygen + C.co2) + C.plasma) + if (((t_gas.co2 + t_gas.plasma) + t_gas.oxygen) < amount) + amount = (t_gas.co2 + t_gas.plasma) + t_gas.oxygen + C.gas.transfer_from(t_gas, amount) + return + +/obj/machinery/mass_driver/proc/drive(amount) + + for(var/obj/O as obj in src.loc) + if (O.flags & 64) + O.throwing = 1 + O.throwspeed = 100 + spawn( 0 ) + O.throwing(src.dir, src.power) + return + //Foreach goto(17) + flick("mass_driver1", src) + return + +/obj/machinery/pipes/orient_pipe(P as obj) + + if (!( src.node1 )) + src.node1 = P + else + if (!( src.node2 )) + src.node2 = P + else + return 0 + return 1 + return + +/obj/machinery/pipes/proc/update() + + var/T = src.loc + if ((src.level == 1 && (isturf(src.loc) && T.intact))) + src.invisibility = 100 + else + src.invisibility = null + if ((src.node1 && src.node2)) + src.icon_state = text("[]", get_dir(src, src.node1) | get_dir(src, src.node2)) + else + var/con = 0 + var/dis = 0 + var/n1d = (src.node1 ? get_dir(src, src.node1) : null) + var/n2d = (src.node2 ? get_dir(src, src.node2) : null) + if (src.p_dir & 1) + if ((n1d == 1 || n2d == 1)) + con |= 1 + else + dis |= 1 + if (src.p_dir & 2) + if ((n1d == 2 || n2d == 2)) + con |= 2 + else + dis |= 2 + if (src.p_dir & 4) + if ((n1d == 4 || n2d == 4)) + con |= 4 + else + dis |= 4 + if (src.p_dir & 8) + if ((n1d == 8 || n2d == 8)) + con |= 8 + else + dis |= 8 + if (con == 0) + con = null + src.icon_state = text("[]-[]", con, dis) + return + +/obj/machinery/pipes/proc/explode() + + src.gas.turf_add(src.loc, -1.0) + return + +/obj/machinery/pipes/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.capacity + if (world.time > 100) + return + spawn( 50 ) + if (src.p_dir & 1) + if (!( var/b1 )) + b1 = 1 + else + if (!( var/b2 )) + b2 = 1 + if (src.p_dir & 2) + if (!( b1 )) + b1 = 2 + else + if (!( b2 )) + b2 = 2 + if (src.p_dir & 4) + if (!( b1 )) + b1 = 4 + else + if (!( b2 )) + b2 = 4 + if (src.p_dir & 8) + if (!( b1 )) + b1 = 8 + else + if (!( b2 )) + b2 = 8 + for(var/obj/machinery/M as obj in orange(src, 1)) + var/ob1 = null + var/ob2 = null + if (M.p_dir & 1) + if (!( ob1 )) + ob1 = 1 + else + if (!( ob2 )) + ob2 = 1 + if (M.p_dir & 2) + if (!( ob1 )) + ob1 = 2 + else + if (!( ob2 )) + ob2 = 2 + if (M.p_dir & 4) + if (!( ob1 )) + ob1 = 4 + else + if (!( ob2 )) + ob2 = 4 + if (M.p_dir & 8) + if (!( ob1 )) + ob1 = 8 + else + if (!( ob2 )) + ob2 = 8 + var/t1 = get_dir(src, M) + var/t2 = get_dir(M, src) + if ((M.level == src.level && ((b1 == t1 || b2 == t1) && (ob1 == t2 || ob2 == t2)))) + if (src.node1) + if (!( src.node2 )) + src.node2 = M + else + src.node1 = M + //Foreach goto(253) + src.update() + return + return + +/obj/machinery/pipes/receive_gas(t_gas as obj, from as obj) + + if (t_gas.tot_gas() > src.gas.maximum) + src.merge_into(t_gas) + src.explode() + return + spawn( 1 ) + if (from == src.node1) + spawn( 0 ) + src.node2.receive_gas(t_gas, src) + return + else + spawn( 0 ) + src.node1.receive_gas(t_gas, src) + return + return + return + return + +/obj/machinery/atmoalter/siphs/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/siphs/proc/releaseall() + + src.t_status = 1 + src.t_per = 1000000.0 + return + +/obj/machinery/atmoalter/siphs/proc/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/proc/release(amount, flag) + + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (!( amount )) + return + if (!( flag )) + amount = min(amount, 1000000.0) + src.gas.turf_add(T, amount) + return + +/obj/machinery/atmoalter/siphs/proc/siphon(amount, flag) + + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (!( amount )) + return + if (!( flag )) + amount = min(amount, 900000.0) + src.gas.turf_take(T, amount) + return + +/obj/machinery/atmoalter/siphs/proc/setstate() + + if (src.holding) + src.icon_state = "siphon:T" + else + if (src.t_status != 3) + src.icon_state = "siphon:1" + else + src.icon_state = "siphon:0" + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/New() + + ..() + src.gas.oxygen = 2.73E7 + src.gas.n2 = 1.027E8 + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/port/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/setstate() + + if (src.t_status == 4) + src.icon_state = "vent2" + else + if (src.t_status == 3) + src.icon_state = "vent0" + else + src.icon_state = "vent1" + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/reset(valve, auto) + + if (auto) + src.t_status = 4 + return + +/obj/machinery/atmoalter/siphs/scrubbers/process() + + if (src.t_status != 3) + var/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (T.firelevel < 900000.0) + T.oxygen += src.gas.oxygen + src.gas.oxygen = 0 + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (t > t2) + t = t2 + src.gas.turf_take(T, t) + if(4.0) + if (T) + if (T.firelevel > 900000.0) + src.f_time = world.time + 400 + else + if (world.time > src.f_time) + src.gas.extract_toxs(T) + var/contain = tot_gas() + if (contain > 1.3E8) + src.turf_add(T, 1.3E8 - contain) + else + if (src.c_status == 1) + var/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + else + C.c_status = 0 + src.setstate() + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(654) + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/setstate() + + if (src.t_status == 4) + src.icon_state = "vent2" + else + if (src.t_status == 3) + src.icon_state = "vent0" + else + src.icon_state = "vent1" + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/reset(valve, auto) + + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/scrubbers/port/setstate() + + if (src.holding) + src.icon_state = "scrubber:T" + else + if (src.t_status != 3) + src.icon_state = "scrubber:1" + else + src.icon_state = "scrubber:0" + return + +/obj/machinery/atmoalter/siphs/scrubbers/port/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/process() + + if (src.t_status != 3) + var/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (t > t2) + t = t2 + src.gas.turf_take(T, t) + if(4.0) + if (T) + if (T.firelevel > 900000.0) + src.f_time = world.time + 300 + else + if (world.time > src.f_time) + var/difference = 3600000.0 - (T.oxygen + T.n2) + if (difference > 0) + var/t1 = src.gas.tot_gas() + if (difference > t1) + difference = t1 + src.gas.turf_add(T, difference) + else + if (src.c_status == 1) + var/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + else + C.c_status = 0 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(632) + src.setstate() + return + +/obj/machinery/atmoalter/siphs/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/siphs/attack_hand(user as mob) + + user.machine = src + switch(src.t_status) + if(1.0) + var/tt = text("Releasing
Siphon Stop", src, src) + if(2.0) + tt = text("Release Siphoning Stop", src, src) + if(3.0) + tt = text("Release Siphon Stopped Automatic", src, src, src) + else + tt = "Automatic equalizers are on!" + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/at = null + if (src.t_status == 4) + at = text("Automatic On Stop", src) + var/dat = text("Canister Valves []
\n\tContains/Capacity [] / []
\n\tUpper Valve Status: [] []
\n\t\tM - - - - [] + + + + M
\n\tPipe Valve Status: []
\n\t\tM - - - - [] + + + + M
\n
\n\nClose
\n\t
", (!( src.alterable ) ? "Valves are locked. Unlock with wrench!" : "You can lock this interface with a wrench."), num2text(src.gas.tot_gas(), 10), num2text(src.maximum, 10), (src.t_status == 4 ? text("[]", at) : text("[]", tt)), (src.holding ? text("
(Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=siphon;size=600x300") + return + +/obj/machinery/atmoalter/siphs/Topic(href, href_list) + + if (usr.stat) + return + if (!( src.alterable )) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + src.t_status = 2 + if(3.0) + src.t_status = 3 + if(4.0) + src.t_status = 4 + src.f_time = 1 + else + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if (cp == 1) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(433) + src.add_fingerprint(usr) + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/siphs/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/tank)) + if (src.holding) + return + var/T = W + user.drop_item() + T.loc = src + src.holding = T + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + if (src.alterable) + user << "\blue You unlock the interface!" + else + user << "\blue You lock the interface!" + return diff --git a/ss13-40.93.2-decomp/spacestation13/b_items.dmi b/ss13-40.93.2-decomp/spacestation13/b_items.dmi new file mode 100644 index 0000000..e8756e2 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/b_items.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/belt.dmi b/ss13-40.93.2-decomp/spacestation13/belt.dmi new file mode 100644 index 0000000..f9b425a Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/belt.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/canister.dmi b/ss13-40.93.2-decomp/spacestation13/canister.dmi new file mode 100644 index 0000000..2346c2b Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/canister.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/cell_process.dm b/ss13-40.93.2-decomp/spacestation13/cell_process.dm new file mode 100644 index 0000000..2ef43cf --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/cell_process.dm @@ -0,0 +1,869 @@ + +/obj/move/CheckPass(O as mob|obj) + + return !( src.density ) + return + +/obj/move/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/move/attack_hand(user as mob) + + if ((!( user.canmove ) || (user.restrained() || !( user.pulling )))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(M.pulling, get_dir(user.pulling.loc, src)) + return + +/obj/move/proc/res_vars() + + src.oldoxy = src.oxygen + src.tmpoxy = src.oxygen + src.oldpoison = src.poison + src.tmppoison = src.poison + src.oldco2 = src.co2 + src.tmpco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + src.oheat = src.heat + src.theat = src.heat + return + +/obj/move/proc/relocate(T as turf, degree) + + if (degree) + for(var/atom/movable/A as mob|obj in src.loc) + A.dir = turn(A.dir, degree) + //Foreach goto(25) + else + for(var/atom/movable/A as mob|obj in src.loc) + A.loc = T + //Foreach goto(73) + return + +/obj/move/proc/unburn() + + src.icon_state = src.initial(src.icon_state) + return + +/obj/move/proc/Neighbors() + + var/list/L = list( NORTH, SOUTH, EAST, WEST ) + for(var/obj/machinery/door/window/D as obj in src.loc) + if (!( D.density )) + goto Label_98 + if (D.dir & 12) + L -= SOUTH + else + L -= EAST + Label_98: +//Foreach goto(36) + for(var/obj/window/D as obj in src.loc) + if (!( D.density )) + goto Label_182 + L -= D.dir + if (D.dir == SOUTHWEST) + L.len = null + return L + Label_182: +//Foreach goto(115) + return L + return + +/obj/move/proc/FindTurfs() + + var/list/L = list( ) + for(var/dir in src.Neighbors()) + var/T = get_step(src.loc, dir) + if (!( T )) + goto Label_299 + L += T + for(var/obj/machinery/door/window/D as obj in T) + if (!( D.density )) + goto Label_181 + var/direct = get_dir(src, T) + if ((D.dir & 12 && direct & 1)) + L -= T + goto Label_181 + else + if (direct & 8) + L -= T + goto Label_181 + Label_181: +Label_181: +Label_181: +//Foreach goto(81) + for(var/obj/window/D as obj in T) + if (!( D.density )) + goto Label_294 + var/direct = get_dir(T, src.loc) + if (D.dir == SOUTHWEST) + L -= T + goto Label_294 + else + if (direct == D.dir) + L -= T + goto Label_294 + Label_294: +Label_294: +Label_294: +//Foreach goto(199) + Label_299: + if ((locate(/obj/move, T) && L.Find(T))) + L -= T + var/O = locate(/obj/move, T) + if (O.updatecell) + L += O + else + if ((isturf(T) && !( T.updatecell ))) + L -= T + //Foreach goto(26) + return L + return + +/obj/move/proc/process() + + if (locate(/obj/shuttle/door, src.loc)) + var/D = locate(/obj/shuttle/door, src.loc) + src.updatecell = !( D.density ) + if (!( src.updatecell )) + return + src.checkfire = !( src.checkfire ) + if (src.checkfire) + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(158) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(561) + else + A.firelevel = 0 + if (A.icon_state == "burning") + unburn() + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(744) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(1153) + else + if (A.icon_state == "burning") + A.firelevel = 0 + unburn() + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + else + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = (((src.oxygen + src.n2) + src.poison) + src.co2) + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + adiff = ((src.oldoxy + src.oldco2) + src.on2) - ((T.oldoxy + T.oldco2) + T.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1356) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src.loc) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(1559) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = (((src.oxygen + src.poison) + src.n2) + src.co2) + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + adiff = ((src.tmpoxy + src.tmpco2) + src.tn2) - ((T.tmpoxy + T.tmpco2) + T.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1927) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src.loc) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(2130) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + if ((locate(/obj/effects/water, src.loc) || src.firelevel < 900000.0)) + src.firelevel = 0 + return + +/obj/move/wall/New() + + var/F = locate(/obj/move/floor, src.loc) + if (F) + F = null + del(F) + return + +/obj/move/wall/process() + + src.updatecell = 0 + return + return + +/obj/move/New() + + if ((src.x & 1) == (src.y & 1)) + src.checkfire = 0 + src.tmpoxy = src.oxygen + src.oldoxy = src.oxygen + src.tmppoison = src.poison + src.oldpoison = src.poison + src.tmpco2 = src.co2 + src.oldco2 = src.co2 + src.oheat = 9.8892006E8 + src.theat = 9.8892006E8 + ..() + return + +/turf/proc/res_vars() + + src.oldoxy = src.oxygen + src.tmpoxy = src.oxygen + src.oldpoison = src.poison + src.tmppoison = src.poison + src.oldco2 = src.co2 + src.tmpco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + src.oheat = src.heat + src.theat = src.heat + return + +/turf/proc/unburn() + + src.icon_state = src.initial(src.icon_state) + return + +/turf/proc/Neighbors() + + var/list/L = list( NORTH, SOUTH, EAST, WEST ) + for(var/obj/machinery/door/window/D as obj in src) + if (!( D.density )) + goto Label_96 + if (D.dir & 12) + L -= SOUTH + else + L -= EAST + Label_96: +//Foreach goto(34) + for(var/obj/window/D as obj in src) + if (!( D.density )) + goto Label_178 + L -= D.dir + if (D.dir == SOUTHWEST) + L.len = null + return L + Label_178: +//Foreach goto(111) + return L + return + +/turf/proc/FindTurfs() + + var/list/L = list( ) + if (locate(/obj/move, src)) + return list( ) + for(var/dir in src.Neighbors()) + var/T = get_step(src, dir) + if ((!( T ) || !( T.updatecell ))) + goto Label_317 + L += T + for(var/obj/machinery/door/window/D as obj in T) + if (!( D.density )) + goto Label_201 + var/direct = get_dir(src, T) + if ((D.dir & 12 && direct & 1)) + L -= T + goto Label_201 + else + if (direct & 8) + L -= T + goto Label_201 + Label_201: +Label_201: +Label_201: +//Foreach goto(101) + for(var/obj/window/D as obj in T) + if (!( D.density )) + goto Label_312 + var/direct = get_dir(T, src) + if (D.dir == SOUTHWEST) + L -= T + goto Label_312 + else + if (direct == D.dir) + L -= T + goto Label_312 + Label_312: +Label_312: +Label_312: +//Foreach goto(219) + Label_317: +//Foreach goto(40) + for(var/T as turf in L) + if (locate(/obj/move, T)) + L -= T + var/O = locate(/obj/move, T) + if (O.updatecell) + L += O + //Foreach goto(333) + return L + return + +/turf/New() + + if ((src.x & 1) == (src.y & 1)) + src.checkfire = 0 + src.tmpoxy = src.oxygen + src.oldoxy = src.oxygen + src.tmppoison = src.poison + src.oldpoison = src.poison + src.tmpco2 = src.co2 + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + src.oheat = src.heat + src.theat = src.heat + ..() + return + +/turf/updatecell() + + src.checkfire = !( src.checkfire ) + if (src.checkfire) + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(113) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(522) + else + A.firelevel = 0 + if (A.icon_state == "burning") + unburn() + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(705) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(1114) + else + if (A.icon_state == "burning") + A.firelevel = 0 + unburn() + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + else + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = (((src.oxygen + src.poison) + src.n2) + src.co2) + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + toheat += T.oheat + adiff = ((src.oldoxy + src.oldco2) + src.on2) - ((T.oldoxy + T.oldco2) + T.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1317) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(1518) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.theat = src.heat + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/toheat = src.heat + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/S in src.FindTurfs()) + var/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = (((src.oxygen + src.poison) + src.n2) + src.co2) + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + toheat += T.theat + adiff = ((src.tmpoxy + src.tmpco2) + src.tn2) - ((T.tmpoxy + T.tmpco2) + T.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1872) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(2073) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.heat = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.heat = toheat / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.oheat = src.heat + if ((locate(/obj/effects/water, src) || src.firelevel < 900000.0)) + src.firelevel = 0 + return diff --git a/ss13-40.93.2-decomp/spacestation13/cellautomata.dm b/ss13-40.93.2-decomp/spacestation13/cellautomata.dm new file mode 100644 index 0000000..145d878 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/cellautomata.dm @@ -0,0 +1,1637 @@ + +/obj/team/proc/process() + + if (src.base) + var/starting = locate(text("landmark*CTF-base-[]", src.base)) + while(locate(text("landmark*CTF-supply-[]", src.base))) + var/L = locate(text("landmark*CTF-supply-[]", src.base)) + var/obj/item/weapon/card/id/I = new /obj/item/weapon/card/id( L.loc ) + I.access_level = 5 + I.lab_access = 5 + I.engine_access = 5 + I.air_access = 5 + I.assignment = "Captain" + I.registered = text("[]", uppertext((src.color ? src.color : "rogue"))) + I.name = text("[]'s ID Card ([]>[]-[]-[])", I.registered, I.access_level, I.lab_access, I.engine_access, I.air_access) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( L.loc ) + if (src.color) + F.icon_state = text("flag_[]", src.color) + F.name = text("flag- '[] Team's Flag'", uppertext(src.color)) + else + F.name = "flag- 'NEUTRAL Team's Flag'" + F.icon_state = "flag_neutral" + F.info = text("This is an authentic [] flag!\nCapture the Flag", (src.color ? src.color : "neutral")) + if (src.master.paint_cans) + var/obj/item/weapon/paint/P = new /obj/item/weapon/paint( L.loc ) + if (src.color) + P.color = src.color + P.icon_state = text("paint_[]", src.color) + else + P.color = "neutral" + P.icon_state = text("paint_[]", src.color) + L = null + del(L) + while(locate(text("landmark*CTF-wardrobe-[]", src.base))) + var/L = locate(text("landmark*CTF-wardrobe-[]", src.base)) + switch(src.color) + if("blue") + new /obj/closet/wardrobe( L.loc ) + if("green") + new /obj/closet/wardrobe/green( L.loc ) + if("yellow") + new /obj/closet/wardrobe/yellow( L.loc ) + if("black") + new /obj/closet/wardrobe/black( L.loc ) + if("white") + new /obj/closet/wardrobe/white( L.loc ) + if("red") + new /obj/closet/wardrobe/red( L.loc ) + else + L = null + del(L) + if (starting) + for(var/mob/human/H as mob in src.members) + H.loc = starting.loc + if ((src.master.autodress && src.color)) + H.w_uniform = null + del(H.w_uniform) + H.shoes = null + del(H.shoes) + switch(src.color) + if("blue") + H.w_uniform = new /obj/item/weapon/clothing/under/blue( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + if("green") + H.w_uniform = new /obj/item/weapon/clothing/under/green( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + if("yellow") + H.w_uniform = new /obj/item/weapon/clothing/under/yellow( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + if("black") + H.w_uniform = new /obj/item/weapon/clothing/under/black( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + if("white") + H.w_uniform = new /obj/item/weapon/clothing/under/white( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + if("red") + H.w_uniform = new /obj/item/weapon/clothing/under/red( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + else + H.w_uniform = new /obj/item/weapon/clothing/under/orange( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + H.w_uniform.layer = 20 + H.shoes.layer = 20 + //Foreach goto(507) + return + +/obj/team/proc/show_screen(user as mob) + + var/dat = "

CTF Team


"
+	dat += text("\[disband\]\n", src)
+	dat += text("Max Players: []\n", src, src.max_players)
+	dat += text("Captain: []\n", src, (src.captain ? src.captain : "NONE"))
+	dat += "Members:\n"
+	for(var/M as mob in src.members)
+		dat += text("\t[] ([])\n", M.rname, M.key)
+		//Foreach goto(79)
+	dat += text("Base: \t[]\nColor: \t[]\n\nRefresh", src, src.base, src, src.color, src)
+	dat += "
" + user << browse(dat, "window=ctf_team") + return + +/obj/team/Topic(href, href_list) + + if (ticker) + return + if ((usr.CanAdmin() || usr == src.captain)) + if (href_list["color"]) + var/t = input(usr, "Please select a new color", null, null) as null|anything in src.master.avail_colors + if ((t && src.master.avail_colors.Find(t))) + src.master.avail_colors -= t + src.master.avail_colors += src.color + src.color = t + if (href_list["base"]) + var/t = input(usr, "Please select a new base", null, null) as null|anything in src.master.avail_bases + if ((t && src.master.avail_bases.Find(t))) + src.master.avail_bases -= t + src.master.avail_bases += src.base + src.base = t + if (usr.CanAdmin()) + if (href_list["disband"]) + src = null + del(src) + return + if (href_list["max_players"]) + src.max_players = input(usr, "What is the max number of players on this team?", null, null) as num + src.max_players = max(src.max_players, 1) + if (href_list["captain"]) + var/list/L = list( ) + for(var/H as mob in world) + if (H.client) + L += H + //Foreach goto(331) + for(var/obj/team/T as obj in world) + L -= T.members + L -= T.captain + //Foreach goto(370) + var/m = input(usr, "Please select a new captain", null, null) as null|anything in L + if (ismob(m)) + src.members -= src.captain + src.members += m + src.captain = m + else + src.members -= src.captain + src.captain = null + show_screen(src.captain) + src.show_screen(usr) + for(var/mob/human/H as mob in world) + if ((H.CanAdmin() || H == src.captain)) + src.master.show_screen(H) + //Foreach goto(510) + return + +/obj/ctf_assist/New() + + ..() + going = 0 + master_mode = "extended" + world << "Capture the Flag Mode activated!" + world << "The game start has been frozen to accomodate!" + for(var/obj/begin/B as obj in world) + if (!( locate(/obj/grille, B.loc) )) + new /obj/grille( B.loc ) + //Foreach goto(50) + for(var/mob/human/M as mob in world) + M.loc = locate(/area/start) + if (M.start) + M.primary = null + del(M.primary) + for(var/obj/item/weapon/I as obj in M) + M = null + del(M) + //Foreach goto(165) + M.start = 0 + //Foreach goto(106) + world << "All players have been pushed back!" + return + +/obj/ctf_assist/proc/next_pick() + + src.pickers_left -= src.picker + src.picker = null + if (src.players_left.len < 1) + world << "We are done picking! (No more people to be picked!)" + src.picker = 0 + return null + if (src.pickers_left.len < 1) + for(var/obj/team/T as obj in src) + if ((T.members.len < src.play_team && T.members.len < T.max_players)) + if (T.captain) + src.pickers_left += T.captain + else + src.pickers_left += T + //Foreach goto(78) + if (src.pickers_left.len < 1) + world << "We are done picking! (All teams are full!)" + src.picker = 0 + return null + else + src.picker = pick(src.pickers_left) + if (ismob(src.picker)) + src.show_pick(src.picker) + world << text("[] is picking!", src.picker) + else + if (istype(src.picker, /obj/team)) + var/H = pick(src.players_left) + var/T = src.picker + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + spawn( 0 ) + src.next_pick() + return + return src.picker + return + +/obj/ctf_assist/proc/show_pick(user as mob) + + var/dat = "

CTF Mode Pick


" + dat += text("Players (per Team): []
\n\"Please Pick a Player
", src.play_team) + for(var/mob/human/H as mob in src.players_left) + dat += text("[] ([])
", src, H, H.rname, H.key) + //Foreach goto(39) + user << browse(dat, "window=ctf_pick") + return + +/obj/ctf_assist/proc/get_team(captain as mob) + + for(var/obj/team/T as obj in src) + if (T.captain == captain) + return T + //Foreach goto(15) + return + +/obj/ctf_assist/proc/check_win(O as obj) + + if (src.wintype == "none") + return + var/F = locate(/obj/item/weapon/paper/flag) + var/winning = 1 + for(var/obj/item/weapon/paper/flag/L as obj in world) + if (F.icon_state != L.icon_state) + winning = 0 + else + else + if (src.wintype == "collect") + if (F.loc != O) + winning = 0 + //Foreach goto(45) + if (!( winning )) + return + var/winner = null + for(var/obj/team/T as obj in src) + if (text("flag_[]", T.color) == text("[]", F.icon_state)) + winner = T + else + //Foreach continue //goto(157) + if (winner) + world << "

The game has been won!!!

" + world << text("Team: [] Team led by [] in []", uppertext(winner.color), winner.captain, winner.base) + world << "Original Members:" + for(var/mob/human/H as mob in winner.members) + if (H.client) + world << text("\t [] ([])", H.rname, H.key) + //Foreach goto(266) + return + +/obj/ctf_assist/proc/show_screen(user as mob) + + var/dat = "

CTF Mode Helper


"
+	dat += text("Players (per Team): []\nBarrier Time: [] minutes\n\nTeams:\n", src, src.play_team, src, src.barriertime)
+	for(var/obj/team/O as obj in src)
+		if (ismob(O.captain))
+			if (O.color)
+				dat += text("\t[]'s Team ([])\n", src, O, O.captain, O.color)
+			else
+				dat += text("\t[]'s Team\n", src, O, O.captain)
+		else
+			if (O.color)
+				dat += text("\t[] Team\n", src, O, O.color)
+			else
+				dat += text("\tNo Captain\n", src, O)
+		//Foreach goto(43)
+	dat += text("\[Add Team\]\nCaptains Select Members\n\nStart the Game (and Set up Map)\n\nWin Options: []\nCollection - All flags same color on clipboard\nConversion - All flags same color\nNone\n\nOther Options:\nAuto-Dress (Teams): []\nRemove Engine Ejection: []\nPaint Cans: []\nImmobile flags (Territory): []\nAdd Neutral Flags to Unused Bases: []\n\nRefresh", src, src, src, src.wintype, src, src, src, src, (src.autodress ? "Yes" : "No"), src, (src.ejectengine ? "Yes" : "No"), src, (src.paint_cans ? "Yes" : "No"), src, (src.immobile ? "Yes" : "No"), src, (src.neutral_replace ? "Yes" : "No"), src)
+	dat += "
" + user << browse(dat, "window=ctf_assist") + return + +/obj/ctf_assist/Topic(href, href_list) + + if ((ticker || src.starting)) + return + if (href_list["pick"]) + if (src.picker == usr) + var/H = locate(href_list["pick"]) + if ((istype(H, /mob/human) && src.players_left.Find(H))) + var/T = get_team(src.picker) + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + next_pick() + return + else + usr << "It's not your turn!" + if (!( usr.CanAdmin() )) + return + if (href_list["team"]) + var/T = locate(href_list["team"]) + if (istype(T, /obj/team)) + T.show_screen(usr) + if (href_list["play_team"]) + src.play_team = input(usr, "What is the max number of players per team?", null, null) as num + src.play_team = max(src.play_team, 1) + if (href_list["barriertime"]) + src.barriertime = input(usr, "What is the barrier life time (in minutes- decimals allowed)?", null, null) as num + src.barriertime = max(src.barriertime, 0.1) + if (href_list["win"]) + if ((href_list["win"] in list( "collect", "convert", "none" ))) + src.wintype = href_list["win"] + if (href_list["autodress"]) + src.autodress = !( src.autodress ) + if (href_list["ejectengine"]) + src.ejectengine = !( src.ejectengine ) + if (href_list["paint_cans"]) + src.paint_cans = !( src.paint_cans ) + if (href_list["neutral_replace"]) + src.neutral_replace = !( src.neutral_replace ) + if (href_list["immobile"]) + src.immobile = !( src.immobile ) + if (href_list["add_team"]) + if (src.avail_bases.len > 0) + var/obj/team/T = new /obj/team( src ) + T.master = src + T.base = pick(src.avail_bases) + T.color = pick(src.avail_colors) + src.avail_bases -= T.base + src.avail_colors -= T.color + if (href_list["select_team"]) + if (!( src.picking )) + src.picking = 1 + for(var/mob/human/H as mob in world) + src.players_left += H + //Foreach goto(578) + for(var/obj/team/T as obj in src) + if (T.members.len < src.play_team) + if (T.captain) + src.pickers_left += T.captain + else + src.pickers_left += T + src.players_left -= T.members + //Foreach goto(618) + if ((!( src.players_left.len ) || !( src.pickers_left.len ))) + src.picking = 0 + src.players_left.len = 0 + src.pickers_left.len = 0 + usr << "Not enough players/teams!" + return + world << "Now Selecting Teams!!!" + src.picker = pick(src.pickers_left) + if (ismob(src.picker)) + show_pick(src.picker) + world << text("[] is picking!", src.picker) + else + if (istype(src.picker, /obj/team)) + var/H = pick(src.players_left) + var/T = src.picker + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + next_pick() + else + show_pick(src.picker) + world << text("[] is picking!", src.picker) + if (href_list["start"]) + src.starting = 1 + var/use_me = locate(/obj/begin) + for(var/mob/human/H as mob in world) + if (H.client) + H.start = 1 + H.occupation1 = pick("Staff Assistant", "Research Assistant", "Technical Assistant", "Medical Assistant") + use_me.get_dna_ready(H) + H.update_face() + //Foreach goto(923) + world << "STARTING!!!" + for(var/obj/landmark/alterations/A as obj in world) + switch(A.name) + if("prison shuttle") + new /obj/machinery/computer/prison_shuttle( A.loc ) + A = null + del(A) + if("id computer") + new /obj/machinery/computer/card( A.loc ) + A = null + del(A) + if("Experimental Technology") + new /obj/secloset/highsec( A.loc ) + A = null + del(A) + if("Security Locker") + new /obj/secloset/security1( A.loc ) + A = null + del(A) + if("recharger") + new /obj/machinery/recharger( A.loc ) + A = null + del(A) + if("barrier") + new /obj/barrier( A.loc ) + A = null + del(A) + else + //Foreach goto(1035) + for(var/obj/closet/wardrobe/W as obj in world) + W = null + del(W) + //Foreach goto(1238) + for(var/obj/item/weapon/clothing/under/T as obj in world) + T = null + del(T) + //Foreach goto(1281) + if (src.ejectengine) + for(var/obj/machinery/computer/engine/T as obj in world) + T = null + del(T) + //Foreach goto(1333) + for(var/obj/landmark/alterations/A as obj in world) + switch(A.name) + if("Prisoners Wardrobe") + new /obj/closet/wardrobe/orange( A.loc ) + A = null + del(A) + else + //Foreach goto(1376) + var/rogue = locate("landmark*CTF-rogue") + for(var/mob/human/H as mob in world) + H.loc = rogue.loc + H.w_uniform = new /obj/item/weapon/clothing/under/orange( H ) + H.w_uniform.layer = 20 + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + H.shoes.layer = 20 + //Foreach goto(1453) + for(var/obj/team/T as obj in src) + T.process() + //Foreach goto(1545) + if (src.paint_cans) + for(var/obj/secloset/highsec/S as obj in world) + new /obj/item/weapon/paint( S ) + //Foreach goto(1595) + if (src.neutral_replace) + while(src.avail_bases.len > 0) + var/t = pick(src.avail_bases) + src.avail_bases -= t + var/L = locate(text("landmark*CTF-supply-[]", t)) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( L.loc ) + F.name = "flag- 'NEUTRAL Team's Flag'" + F.icon_state = "flag_neutral" + F.info = "This is an authentic neutral flag!\nCapture the Flag" + L = null + del(L) + for(var/obj/begin/B as obj in world) + if (locate(/obj/grille, B.loc)) + for(var/obj/grille/G as obj in B.loc) + G = null + del(G) + //Foreach goto(1789) + //Foreach goto(1742) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + ticker.process() + return + data_core = new /obj/datacore( ) + src.show_screen(usr) + for(var/mob/human/H as mob in world) + if (H.CanAdmin()) + src.show_screen(H) + //Foreach goto(1881) + return + +/obj/landmark/New() + + ..() + src.tag = text("landmark*[]", src.name) + src.invisibility = 100 + return + +/obj/start/New() + + ..() + src.tag = text("start*[]", src.name) + src.invisibility = 100 + return + +/obj/sp_start/New() + + src.tag = text("spstart[]", src.name) + src.invisibility = 100 + return + +/obj/admins/Topic(href, href_list) + + if (usr.client != src.owner) + world << text("\blue [] has attempted to override the admin panel!", usr.key) + world.log << text("ADMIN: [] tried to use the admin panel without authorization.", usr.key) + return + if (href_list["boot"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Boot Player:
" + for(var/M as mob in world) + dat += text("N:[] R:[] (K:[])
", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(103) + usr << browse(dat, "window=boot") + if (href_list["boot2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/M = locate(href_list["boot2"]) + if (ismob(M)) + if ((M.client && (M.client.holder && M.client.holder.rank >= src.rank))) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + world.log << text("ADMIN: [] booted [].", usr.key, M.key) + M.client = null + del(M.client) + if (href_list["ban"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Ban Player:
" + for(var/M as mob in world) + dat += text("N: [] R: [] (K: [])
", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(362) + dat += "
Unban Player:
" + for(var/t in banned) + dat += text("K: []
", src, ckey(t), t) + //Foreach goto(424) + usr << browse(dat, "window=ban") + if (href_list["ban2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/M = locate(href_list["ban2"]) + if (ismob(M)) + if ((M.client && (M.client.holder && M.client.holder.rank >= src.rank))) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + world.log << text("ADMIN: [] banned [].", usr.key, M.key) + banned += ckey(M.key) + M.client = null + del(M.client) + if (href_list["unban2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/t = href_list["unban2"] + if (t) + banned -= t + world.log << text("ADMIN: [] unbanned [].", usr.key, t) + if (href_list["mute"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Mute/Unmute Player:
" + for(var/M as mob in world) + dat += text("N:[] R:[] (K:[]) \[[]\]
", src, M, M.name, M.rname, (M.client ? M.client : "No client"), (M.muted ? "Muted" : "Voiced")) + //Foreach goto(757) + usr << browse(dat, "window=mute") + if (href_list["mute2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/M = locate(href_list["mute2"]) + if (ismob(M)) + if ((M.client && (M.client.holder && M.client.holder.rank >= src.rank))) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + world.log << text("ADMIN: [] altered []'s mute status.", usr.key, M.key) + M.muted = !( M.muted ) + if (href_list["restart"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = text("Restart game?
\n
\nYes\n", src) + usr << browse(dat, "window=restart") + if (href_list["restart2"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + world << text("\red Restarting world!\blue Initiated by []!", usr.key) + world.log << text("ADMIN: [] initiated a reboot.", usr.key) + sleep(50) + world.Reboot() + if (href_list["c_mode"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert(usr, "The game has already started.", null, null, null, null) + var/dat = text("What mode do you wish to play?
\nSecret\nTraitor\nMeteor\nExtended\nMonkey\nNuclear Emergency\n\nNow: []\n", src, src, src, src, src, src, master_mode) + usr << browse(dat, "window=c_mode") + if (href_list["c_mode2"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert(usr, "The game has already started.", null, null, null, null) + switch(href_list["c_mode2"]) + if("secret") + master_mode = "secret" + if("traitor") + master_mode = "traitor" + if("meteor") + master_mode = "meteor" + if("extended") + master_mode = "extended" + if("monkey") + master_mode = "monkey" + if("nuclear") + master_mode = "nuclear" + else + world.log << text("ADMIN: [] set the mode as [].", usr.key, master_mode) + world << text("\blue The mode is now: []", master_mode) + if (href_list["l_ban"]) + var/dat = "
Banned Keys:
" + for(var/t in banned) + dat += text("[]
", ckey(t)) + //Foreach goto(1424) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + dat += text("
Goto Ban Control Screen", src) + usr << browse(dat, "window=ban_k") + if (href_list["l_keys"]) + var/dat = "Keys:
" + for(var/M as mob in world) + if (M.client) + dat += text("[]
", M.client.ckey) + //Foreach goto(1525) + usr << browse(dat, "window=keys") + if (href_list["l_players"]) + var/dat = "Name/Real Name/Key:
" + for(var/M as mob in world) + dat += text("N: [] R: [] (K: [])
", M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(1602) + usr << browse(dat, "window=players") + if (href_list["g_send"]) + var/t = input("Global message to send:", "Admin Announce", null, null) as message + if (t) + world << text("\blue [] Announces:\n \t []", usr.key, t) + if (href_list["p_send"]) + var/dat = "Who are you sending a message to?
" + for(var/M as mob in world) + dat += text("N:[] R:[] (K:[])
", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(1737) + usr << browse(dat, "window=p_send") + if (href_list["p_send2"]) + if (locate(href_list["p_send2"])) + var/M = locate(href_list["p_send2"]) + if (!( ismob(M) )) + return + var/t = input("Message:", text("Private message to []", M.key), null, null) as text + if (!( t )) + return + if (M.client.holder) + M << text("\blue Admin PM from-[]: []", M.holder, usr, usr.key, t) + else + M << text("\blue Admin PM from-[]: []", usr.key, t) + usr << text("\blue Admin PM to-[]: []", src, M, M.key, t) + if (href_list["m_item"]) + var/X = typesof(/obj/item/weapon) + var/Q = input("What item?", null, null, null) as null|anything in X + if (!( Q )) + return + new Q( usr.loc ) + world.log << text("ADMIN: [] created a []", usr.key, Q) + if (href_list["m_obj"]) + var/X = typesof(/obj) + var/Q = input("What object?", null, null, null) as null|anything in X + if (!( Q )) + return + new Q( usr.loc ) + world.log << text("ADMIN: [] created a []", usr.key, Q) + if (href_list["dna"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Registered DNA sequences:
" + for(var/M in reg_dna) + dat += text("\t [] = []
", M, reg_dna[text("[]", M)]) + //Foreach goto(2171) + usr << browse(dat, "window=dna") + if (href_list["t_ooc"]) + if ((src.rank in list( "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + world.log << text("ADMIN: [] toggled OOC.", usr.key) + if (href_list["toggle_enter"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + enter_allowed = !( enter_allowed ) + if (!( enter_allowed )) + world << "You may no longer enter the game." + else + world << "The may enter the game." + world.log << text("ADMIN: [] toggled new player game entering.", usr.key) + world.update_stat() + if (href_list["toggle_abandon"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + abandon_allowed = !( abandon_allowed ) + if (abandon_allowed) + world << "You may now abandon mob." + else + world << "Live or Die Mode Activated" + world.log << text("ADMIN: [] toggled abandon mob ability.", usr.key) + world.update_stat() + if (href_list["delay"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert("Too late... The game has already started!", null, null, null, null, null) + going = !( going ) + if (!( going )) + world << text("The game start has been delayed by [] (Administrator to SS13)", usr.key) + world.log << text("ADMIN: [] delayed the game.", usr.key) + else + world << text("The game will now start thanks to [] (Administrator to SS13)", usr.key) + world.log << text("ADMIN: [] removed the delay.", usr.key) + if (href_list["secrets"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = text("What mode do you wish to play?
\nRemove 'internal' clothing
\nRemove ALL clothing
\nRemove firesuits, grilles, and pods
\nRemove all bombs currently existence
\nShow a list of all people who made a bomb
\nShow the key of the traitor
\nToxic Air (WARNING: dangerous)
\nTurn all humans into monkies
", src, src, src, src, src, src, src, src) + usr << browse(dat, "window=secrets") + if (href_list["secrets2"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/ok = 0 + switch(href_list["secrets2"]) + if("sec_clothes") + for(var/obj/item/weapon/clothing/under/O as obj in world) + O = null + del(O) + //Foreach goto(2781) + ok = 1 + if("sec_all_clothes") + for(var/obj/item/weapon/clothing/O as obj in world) + O = null + del(O) + //Foreach goto(2833) + ok = 1 + if("sec_classic1") + for(var/obj/item/weapon/clothing/suit/firesuit/O as obj in world) + O = null + del(O) + //Foreach goto(2885) + for(var/obj/grille/O as obj in world) + O = null + del(O) + //Foreach goto(2928) + for(var/obj/machinery/pod/O as obj in world) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + //Foreach goto(3001) + O = null + del(O) + //Foreach goto(2971) + ok = 1 + if("clear_bombs") + for(var/obj/item/weapon/assembly/r_i_ptank/O as obj in world) + O = null + del(O) + //Foreach goto(3088) + ok = 1 + if("list_bombers") + var/dat = "Don't be insane about this list Get the facts. They also could have disarmed one.
" + for(var/l in bombers) + dat += text("[] 'made' a bomb.
", l) + //Foreach goto(3149) + usr << browse(dat, "window=bombers") + if("toxic") + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/O as obj in world) + O.t_status = 3 + //Foreach goto(3194) + for(var/obj/machinery/atmoalter/siphs/scrubbers/O as obj in world) + O.t_status = 1 + O.t_per = 1000000.0 + //Foreach goto(3234) + for(var/obj/machinery/atmoalter/canister/O as obj in world) + if (!( istype(O, /obj/machinery/atmoalter/canister/oxygencanister) )) + O.t_status = 1 + O.t_per = 1000000.0 + else + O.t_status = 3 + //Foreach goto(3282) + if("check_antagonist") + if (ticker) + if (ticker.killer) + if (ticker.killer.ckey) + alert(text("The traitor's key is [].", ticker.ckey), null, null, null, null, null) + else + alert("It seems like the traitor logged out...", null, null, null, null, null) + else + alert("There is no traitor.", null, null, null, null, null) + else + alert("The game has not started yet.", null, null, null, null, null) + if("monkey") + world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + for(var/mob/human/H as mob in world) + H.monkeyize() + //Foreach goto(3504) + ok = 1 + else + if (usr) + world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + if (ok) + world << text("A secret has been activated by []!", usr.key) + return + +/obj/admins/proc/update() + + switch(src.screen) + if(1.0) + switch(src.rank) + if("Moderator") + var/dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src, src) + if("Supervisor") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\nRestart Game
\n
\nAppoint/Assignments: (To Level 1)
\nAppoint Moderator
\nRemove Moderator
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src, src, src, src, src, src) + if("Administrator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\nRestart Game
\n
\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nDelay Game
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\n
\nAppoint/Assignments: (To Level 2)
\nAppoint Game Master
\nAppoint Moderator
\nAppoint Supervisor
\nReassign Admins
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + if("Game Master") + dat = text("
Admin Control Console

\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\nRestart Game
\n
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src) + if("Major Administrator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\n
\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\nRestart Game
\n
\nAppoint/Assignments: (To Level 3)
\nAppoint Game Master
\nAppoint Moderator
\nAppoint Supervisor
\nAppoint Administrator
\nReassign Admins
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + if("Primary Administrator") + dat = text("
Admin Control Console

\nBoot Player/Key
\nBan/Unban Player/Key
\nMute/Unmute Player/Key
\nToggle OOC
\n
\nDelay Game
\nToggle Entering []
\nToggle Abandon []
\nMake Item
\nMake Object
\nActivate Secrets
\nList DNA
\nChange Game Mode
\nRestart Game
\n
\nAppoint/Assignments: (To Level 4)
\nAppoint Game Master
\nAppoint Moderator
\nAppoint Supervisor
\nAppoint Administrator
\nAppoint Major Administrator
\nReassign Admins
\n
\nList Banned
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, enter_allowed, src, abandon_allowed, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + else + else + dat = text("
Admin Control Center

\nAccess Admin Commands
\nContact Admins
\nAccess Messageboard
\n
\nList Keys
\nList Players/Keys
\nSend Global Message
\nSend Private Message
", src, src, src, src, src, src, src) + usr << browse(dat, "window=admin") + return + +/world/proc/update_stat() + + if (ticker) + src.status = text("Space Station 13 V.[] ([],[],[])[]", SS13_version, master_mode, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), (host ? text(" hosted by []", host) : null), host) + else + src.status = text("Space Station 13 V.[] (STARTING,[],[])[]", SS13_version, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), (host ? text(" hosted by []", host) : null), host) + return + +/world/New() + + var/motd = file2text("motd.txt") + if (motd) + world_message = motd + var/ad_text = file2text("admins.txt") + var/L = dd_text2list(ad_text, "\n") + for(var/t in L) + if (t) + if (copytext(t, 1, 2) == ";") + continue //goto(64) + var/t1 = findtext(t, " - ", 1, null) + if (t1) + var/m_key = copytext(t, 1, t1) + var/a_lev = text("[]", copytext(t, t1 + 3, length(t) + 1)) + admins[text("[]", m_key)] = text("[]", a_lev) + //Foreach goto(64) + admins["exadv1"] = "Primary Administrator" + main_hud = new /obj/hud( ) + main_hud2 = new /obj/hud/hud2( ) + SS13_airtunnel = new /datum/air_tunnel/air_tunnel1( ) + ..() + sleep(50) + nuke_code = text("[]", rand(10000, 99999.0)) + for(var/obj/machinery/nuclearbomb/N as obj in world) + if (N.r_code == "ADMIN") + N.r_code = nuke_code + //Foreach goto(260) + for(var/mob/human/H as mob in world) + if ((H.ckey in list( "exadv1", "epox", "soraku" ))) + H.memory += text("Secret Base Nuke Code: []
", nuke_code) + //Foreach goto(312) + sleep(50) + plmaster = new /obj/overlay( ) + plmaster.icon = 'plasma.dmi' + plmaster.icon_state = "onturf" + plmaster.layer = FLY_LAYER + slmaster = new /obj/overlay( ) + slmaster.icon = 'plasma.dmi' + slmaster.icon_state = "sl_gas" + slmaster.layer = FLY_LAYER + cellcontrol = new /datum/control/cellular( ) + spawn( 0 ) + cellcontrol.process() + return + src.update_stat() + spawn( 0 ) + sleep(900) + Label_482: + if (ctf) + return + if (going) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + ticker.process() + return + data_core = new /obj/datacore( ) + else + sleep(100) + goto Label_482 + return + return + +/mob/proc/CanAdmin() + + var/list/L = list( "Exadv1", "Expert Advisor" ) + if (L.Find(src.key)) + return 1 + if (world.address == src.client.address) + return 1 + if (!( src.client.address )) + return 1 + return 0 + return + +/atom/proc/check_eye(user as mob) + + return + +/atom/proc/Bumped(AM as mob|obj) + + return + +/atom/movable/Bump(A as mob|obj|turf|area, yes) + + spawn( 0 ) + if ((A && yes)) + A.Bumped(src) + return + ..() + return + +/atom/verb/point() + set src in oview() + + if ((!( usr ) || !( isturf(usr.loc) ))) + return + if ((usr.stat == 0 && !( restrained() ))) + var/obj/point/P = new /obj/point( (isturf(src) ? src : src.loc) ) + spawn( 20 ) + P = null + del(P) + return + for(var/M as mob in viewers(usr, null)) + M.show_message(text("[] points to []", usr, src), 1) + //Foreach goto(102) + return + +/turf/proc/updatecell() + + return + +/turf/proc/cachecell() + + return + +/datum/control/proc/process() + + return + +/datum/control/gameticker/proc/meteor_process() + + if (!( shuttle_frozen )) + if (src.timing == 1) + src.timeleft -= 10 + else + if (src.timing == -1.0) + src.timeleft += 10 + if (src.timeleft >= 6000) + src.timeleft = null + src.timing = 0 + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(50)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if ((src.timeleft <= 0 && (src.timing && !( prison_entered )))) + src.timeup() + else + spawn( 10 ) + if (src.processing) + src.meteor_process() + return + return + +/datum/control/gameticker/proc/extend_process() + + if (!( shuttle_frozen )) + if (src.timing == 1) + src.timeleft -= 10 + else + if (src.timing == -1.0) + src.timeleft += 10 + if (src.timeleft >= 6000) + src.timeleft = null + src.timing = 0 + if (prob(2)) + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(10)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if ((src.timeleft <= 0 && (src.timing && (!( prison_entered ) || src.shuttle_location == 1)))) + src.timeup() + else + spawn( 10 ) + if (src.processing) + src.extend_process() + return + return + +/datum/control/gameticker/proc/nuclear(z_level) + + if (src.mode != "nuclear") + return + if (z_level != 1) + return + spawn( 0 ) + src.objective = "Success" + world << "The Syndicate Operatives have destroyed Space Station 13!" + for(var/mob/human/H as mob in world) + if ((H.client && findtext(H.rname, "Syndicate ", 1, null))) + if (H.stat != 2) + world << text("[] was []", H.key, H.rname) + else + world << text("[] was [] (Dead)", H.key, H.rname) + //Foreach goto(64) + src.timing = 0 + sleep(300) + world.Reboot() + return + return + +/datum/control/gameticker/proc/timeup() + + var/A = locate(/area/shuttle) + if (src.shuttle_location == 10) + world << "The emergency shuttle has entered the station! You have 3 minutes to enter the shuttle." + for(var/T as turf in A) + if (T.z == 10) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 1 + //Foreach goto(79) + var/U = locate(T.x, T.y, 10) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + T = null + del(T) + //Foreach goto(45) + src.timeleft = 1800 + src.shuttle_location = 1 + switch(src.mode) + if("meteor") + spawn( 0 ) + meteor_process() + return + else + spawn( 0 ) + extend_process() + return + else + src.check_win() + return + +/datum/control/gameticker/proc/check_win() + + var/A = locate(/area/shuttle) + switch(src.mode) + if("traitor") + var/item = null + var/traitorwin = 1 + switch(src.objective) + if("alone") + for(var/M as mob in world) + if ((M != src.killer && M.client)) + if (M.stat != 2) + var/T = M.loc + if (!( istype(T, /turf) )) + else + if ((T in A)) + traitorwin = 0 + //Foreach goto(79) + if("assassinate") + if ((M.target && src.target.stat != 2)) + traitorwin = 0 + if("theft") + var/list/L = list( ) + if (src.killer) + L += src.killer.contents + for(var/obj/item/weapon/storage/S as obj in src.killer) + L += S.return_inv() + //Foreach goto(228) + for(var/obj/item/weapon/gift/G as obj in src) + L += G.gift + //Foreach goto(271) + traitorwin = 0 + switch(src.theft_obj) + if("lasergun") + for(var/obj/item/weapon/gun/energy/laser_gun/O as obj in L) + if (O.charges == 25) + traitorwin = 1 + else + //Foreach continue //goto(347) + item = "a fully loaded laser gun" + if("plasmabomb") + for(var/obj/item/weapon/assembly/r_i_ptank/O as obj in L) + var/P = O.part3 + if ((P.gas.plasma >= 1600000.0 && P.temperature >= 500)) + traitorwin = 1 + else + //Foreach continue //goto(413) + item = "a fully armed and heated plasma bomb" + if("flashbang") + for(var/obj/item/weapon/flashbang/O as obj in L) + traitorwin = 1 + else + //Foreach goto(500) + item = "a flashbang" + if("captaincard") + for(var/obj/item/weapon/card/id/O as obj in L) + if ((O.access_level == 5 && (O.air_access == 5 && (O.engine_access == 5 && (O.lab_access == 5 && O.assignment == "Captain"))))) + traitorwin = 1 + else + //Foreach continue //goto(553) + item = "a captain's card with universal level 5 access" + if("sleepingpills") + for(var/obj/item/weapon/pill_canister/O as obj in L) + for(var/obj/item/weapon/m_pill/sleep/P as obj in O) + if (P.amount == 30) + traitorwin = 1 + else + //Foreach continue //goto(689) + //Foreach goto(658) + item = "a bottle of 30 sleeping pills" + if("pl_flask") + for(var/obj/item/weapon/flasks/O as obj in L) + if (O.plasma == 500) + traitorwin = 1 + else + //Foreach continue //goto(758) + item = "a plasma flask for cryogenics (500 units of plasma)" + else + else + if (src.killer) + var/T = src.killer.loc + if (!( istype(T, /turf) )) + traitorwin = 0 + else + if ((T in A)) + if (src.stat == 2) + traitorwin = 0 + else + traitorwin = 0 + if (traitorwin) + world << text("The traitor ([]) wins!", src.killer.rname) + else + world << text("The Research Staff has stopped the traitor ([]) !", src.killer.rname) + switch(src.objective) + if("alone") + world << "The objective was to escape alone on the shuttle." + if("assassinate") + world << text("The objective was to assassinate [] and escape.", src.target) + if("theft") + world << text("The objective was to steal [] and escape.", item) + else + if("monkey") + var/monkeywin = 1 + for(var/mob/human/M as mob in world) + if (M.stat != 2) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + monkeywin = 0 + //Foreach goto(999) + if (monkeywin) + monkeywin = 0 + for(var/mob/monkey/M as mob in world) + if (M.stat != 2) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + monkeywin = 1 + //Foreach goto(1096) + if (monkeywin) + world << "The monkies have won!" + for(var/mob/monkey/M as mob in world) + if (M.client) + world << text("[] was a monkey.", M.key) + //Foreach goto(1194) + else + world << "The Research Staff has stopped he monkey invasion!" + for(var/mob/human/M as mob in world) + if (M.client) + world << text("[] was [].", M.key, M) + //Foreach goto(1254) + if("nuclear") + if (M.objective != "Success") + var/disk_on_shuttle = 0 + for(var/obj/item/weapon/disk/nuclear/N as obj in world) + if (N.loc) + var/T = get_turf(N) + if ((T in A)) + disk_on_shuttle = 1 + //Foreach goto(1327) + if (disk_on_shuttle) + world << "The Research Staff has stopped the Syndicate Operatives!" + for(var/mob/human/H as mob in world) + if ((H.client && !( findtext(H.rname, "Syndicate ", 1, null) ))) + if (H.stat != 2) + world << text("[] was []", H.key, H.rname) + else + world << text("[] was [] (Dead)", H.key, H.rname) + //Foreach goto(1414) + else + world << "Neutral Victory" + world << "The Syndicate recovered the abandoned auth. disk but detonation of SS13 was averted. Next time, don't lose the disk!" + if("virus") + var/humanwin = 1 + var/list/shuttle = list( ) + for(var/mob/human/M as mob in world) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + shuttle += M + if (M.virus > 0) + humanwin = 0 + //Foreach goto(1540) + var/list/dead = list( ) + var/list/alive = list( ) + var/list/escapees = list( ) + for(var/M as mob in world) + if (M.stat == 2) + if (M.client) + if (M.virus > 0) + dead += text("[] died. \red (Had Stage [] Infection)", M.rname, round(M.virus)) + else + dead += text("[] died.", M.rname) + else + if (shuttle.Find(M)) + if (M.virus > 0) + escapees += text("[] escaped on the shuttle. \red (Has Stage [] Infection)", M.rname, round(M.virus)) + else + escapees += text("[] escaped on the shuttle.", M.rname) + else + if (M.virus > 0) + alive += text("[] was left infected. \red (Has Stage [] Infection)", M.rname, round(M.virus)) + else + alive += text("[] was left to be infected on Space Station 13.", M.rname) + //Foreach goto(1653) + if (humanwin) + world << "The Research Staff have won!" + else + world << "The Virus has won!" + for(var/I in escapees) + world << text("[]", I) + //Foreach goto(1851) + for(var/I in alive) + world << text("[]", I) + //Foreach goto(1883) + for(var/I in dead) + world << text("[]", I) + //Foreach goto(1915) + if("meteor") + var/list/L = list( ) + for(var/M as mob in world) + if (M.client) + if (M.stat != 2) + var/T = M.loc + if ((T in A)) + L[text("[]", M.rname)] = "shuttle" + else + if (istype(T, /obj/machinery/pod)) + L[text("[]", M.rname)] = "pod" + else + L[text("[]", M.rname)] = "alive" + //Foreach goto(1955) + if (L.len) + world << "\blue The following survived the meteor attack!" + for(var/I in L) + var/tem = L[text("[]", I)] + switch(tem) + if("shuttle") + world << text("\t [] made it to the shuttle!", I) + if("pod") + world << text("\t [] at least made it to an escape pod!", I) + if("alive") + world << text("\t [] at least is alive.", I) + else + //Foreach goto(2092) + else + world << "\blue No one survived the meteor attack!" + else + var/list/L = list( ) + for(var/M as mob in world) + if (M.client) + if (M.stat != 2) + var/T = M.loc + if ((T in A)) + L[text("[]", M.rname)] = "shuttle" + else + if (istype(T, /obj/machinery/pod)) + L[text("[]", M.rname)] = "pod" + else + L[text("[]", M.rname)] = "alive" + //Foreach goto(2200) + if (L.len) + world << "\blue The game has ended!" + for(var/I in L) + var/tem = L[text("[]", I)] + switch(tem) + if("shuttle") + world << text("\t [] has left on the shuttle!", I) + if("pod") + world << text("\t [] has fled on an escape pod!", I) + if("alive") + world << text("\t [] decided to stay on the station.", I) + else + //Foreach goto(2337) + else + world << "\blue No one lived!" + if (src.shuttle_location != 10) + for(var/T as turf in A) + if (T.z == 1) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 10 + //Foreach goto(2483) + var/U = locate(T.x, T.y, 10) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + T = null + del(T) + //Foreach goto(2449) + sleep(300) + world.Reboot() + return + +/datum/control/gameticker/process() + + world.update_stat() + world << "Welcome to the Space Station 13!" + src.mode = master_mode + switch(src.mode) + if("secret") + src.mode = pick("traitor", "meteor", "extended", "traitor", "meteor", "extended", "monkey") + world << "The current game mode is - Secret!" + world << "The game will pick between meteor attack, traitor mode, or no mode!" + if("traitor") + world << "The current game mode is - Traitor!" + world << "There is a traitor among the researchers. You can't let him escape alone!" + if("monkey") + world << "The current game mode is - Monkey!" + world << "Some of your crew members have been infected by a mutageous virus!" + world << "Escape on the shuttle but the humans have precedence!" + if("virus") + world << "The current game mode is - Virus!" + world << "Some of your crew members have been infected by a debilatating virus!" + world << "How many can escape alive? No one with the virus can escape!" + if("extended") + world << "The current game mode is - Extended Role-Playing!" + world << "Just have fun and role-play!" + if("nuclear") + world << "The current game mode is - Nuclear Emergency!" + world << "A Syndicate Strike Force has landed on SS13!" + world << "A nuclear explosive was being transported by Nanotrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around SS13. It was identified by Nanotrasen as a nuclear auth. disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! Also, msot likely Syndicate star ships are in the vicinity so take care not to lose the disk!\nSyndicate: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\nPersonell: Hold the disk and escape with the disk on the shuttle!" + var/list/mobs = list( ) + for(var/mob/human/M as mob in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(260) + var/O = locate("landmark*CTF-rogue") + if (mobs.len >= 4) + var/amount = (round((mobs.len - 1) / 3)) + 1 + amount = min(5, amount) + while(amount > 0) + amount-- + var/H = pick(mobs) + mobs -= H + if (istype(H, /mob/human)) + H.loc = O.loc + if (src.killer) + H.rname = text("Syndicate Operative #[]", amount + 1) + else + H.rname = "Syndicate Leader" + src.killer = H + H.already_placed = 1 + H.w_uniform = null + del(H.w_uniform) + H.w_uniform = new /obj/item/weapon/clothing/under/black( H ) + H.w_uniform.layer = 20 + H.shoes = null + del(H.shoes) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + H.shoes.layer = 20 + H.gloves = new /obj/item/weapon/clothing/gloves/swat( H ) + H.gloves.layer = 20 + H.wear_suit = new /obj/item/weapon/clothing/suit/armor( H ) + H.wear_suit.layer = 20 + H.head = new /obj/item/weapon/clothing/head/swat_hel( H ) + H.head.layer = 20 + H.glasses = new /obj/item/weapon/clothing/glasses/sunglasses( H ) + H.glasses.layer = 20 + H.back = new /obj/item/weapon/storage/backpack( H ) + H.back.layer = 20 + var/obj/item/weapon/ammo/a357/W = new /obj/item/weapon/ammo/a357( H.back ) + W.layer = 20 + W = new /obj/item/weapon/m_pill/cyanide( H.back ) + W.layer = 20 + var/obj/item/weapon/gun/revolver/G = new /obj/item/weapon/gun/revolver( H ) + G.bullets = 7 + G.layer = 20 + H.belt = G + var/obj/item/weapon/radio/headset/R = new /obj/item/weapon/radio/headset( H ) + R.freq = 146.5 + R.layer = 20 + H.w_radio = R + if("meteor") + world << "The current game mode is - Meteor!" + world << "The space station has been stuck in a major meteor shower. You must escape from the station or at least live." + else + world << "Now dispensing all identification cards." + DivideOccupations() + for(var/obj/manifest/M as obj in world) + M.manifest() + //Foreach goto(837) + for(var/mob/human/H as mob in world) + if (H.start) + reg_dna[text("[]", H.primary.uni_identity)] = H.name + //Foreach goto(878) + data_core.manifest() + switch(src.mode) + if("traitor") + var/list/mobs = list( ) + Label_970: + for(var/M as mob in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(983) + if (!( mobs.len )) + sleep(300) + goto Label_970 + ticker.killer = pick(mobs) + mobs -= src.killer + src.objective = pick("assassinate", "alone", "theft") + if (!( mobs )) + src.objective = "alone" + var/item = null + switch(src.objective) + if("alone") + src.killer << "You are the traitor! Be the lone survivor on the emergency shuttle." + src.killer.memory += "Objective: Be the only person on the emergency shuttle." + if("assassinate") + src.target = pick(mobs) + var/t1 = null + if (prob(25)) + t1 = src.target.name + else + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1193) + src.killer << text("You are the traitor! You must assassinate [] and then escape.", t1) + src.killer << "You don't have to be the lone survivor. Just don't get caught. Just escape!" + src.killer.memory += text("Objective: Assassinate [] and escape.", t1) + if("theft") + src.theft_obj = pick("lasergun", "flashbang", "plasmabomb", "captaincard", "sleepingpills", "pl_flask") + switch(src.theft_obj) + if("lasergun") + item = "a fully loaded laser gun" + if("flashbang") + item = "a flashbang" + if("plasmabomb") + item = "a fully armed and heated plasma bomb" + if("captaincard") + item = "a captain's card with universal level 5 access" + if("sleepingpills") + item = "a bottle of 30 sleeping pills" + if("pl_flask") + item = "a plasma flask for cryogenics (500 units of plasma)" + else + src.killer << text("You are the traitor! You must steal [] and then escape.", item) + src.killer << "You don't have to be the lone survivor. Just don't get caught. Just escape!" + src.killer.memory += text("Objective: Steal [] and escape.", item) + else + var/backup = mobs + spawn( 100 ) + var/obj/item/weapon/syndicate_uplink/traitor_item = new /obj/item/weapon/syndicate_uplink( src.killer.loc ) + if ((!( src.l_store ) && src.w_uniform)) + traitor_item.loc = src.killer + src.killer.l_store = traitor_item + traitor_item.layer = 20 + return + spawn( rand(600, 1800) ) + var/dat = "Cent. Com. Update Enemy communication intercept. Security Level Elevated
" + switch(src.objective) + if("alone") + dat += "\red Transmission suggests future attempts of hijacking of emergency shuttle.
" + if("assassinate") + dat += "\red Transmission suggests future attempts of assassinating of key personnel.
" + if (prob(50)) + var/t1 = null + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1612) + if (prob(70)) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
", src.target.rname, t1, rand(30, 100)) + else + var/temp = pick(backup) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
", temp.rname, t1, rand(10, 95)) + if("theft") + dat += "\red Transmission suggests future attempts of theft of critical items.
" + if (prob(50)) + dat += text("\red Perceived target: []
", item) + else + if (prob(10)) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
", src.killer.rname, rand(30, 100)) + else + var/M = pick(backup) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
", M.rname, rand(10, 95)) + for(var/obj/machinery/computer/communications/C as obj in world) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) + P.name = "paper- 'Cent. Com. Comm. Intercept Summary'" + P.info = dat + //Foreach goto(1830) + world << "Cent. Com. Update Enemy communication intercept. Security Level Elevated" + world << "\red Summary downloaded and printed out at all communications consoles." + return + mobs += src.killer + spawn( 0 ) + extend_process() + return + if("meteor") + spawn( 0 ) + meteor_process() + return + if("extended") + spawn( 0 ) + extend_process() + return + if("monkey") + spawn( 50 ) + var/list/mobs = list( ) + for(var/mob/human/M as mob in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(1974) + if (mobs.len >= 3) + var/amount = (round((mobs.len - 1) / 3)) + 1 + amount = min(4, amount) + while(amount > 0) + var/H = pick(mobs) + H.monkeyize() + mobs -= H + amount-- + return + spawn( 0 ) + src.extend_process() + return + if("nuclear") + spawn( 50 ) + var/L = locate("landmark*Nuclear-Disk") + new /obj/item/weapon/disk/nuclear( L.loc ) + L = locate("landmark*Nuclear-Closet") + new /obj/closet/syndicate/nuclear( L.loc ) + L = locate("landmark*Nuclear-Bomb") + var/obj/machinery/nuclearbomb/NB = new /obj/machinery/nuclearbomb( L.loc ) + NB.r_code = text("[]", rand(10000, 99999.0)) + src.killer.memory += text("Syndicate Nuclear Bomb Code: []
", NB.r_code) + src.killer << text("The nuclear authorization code is: []\]", NB.r_code) + src.killer << text("Nuclear Explosives 101:\n\tHello and thank you for choosing the Syndicate for your nuclear information needs.\nToday's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.\nFirst and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.\nPressing any button on the compacted bomb will cause it to extend and bolt itself into place.\nIf this is done to unbolt it one must compeltely log in which at this time may not be possible.\nTo make the device functional:\n1. Place bomb in designated detonation zone\n2. Extend and anchor bomb (attack with hand).\n3. Insert Nuclear Auth. Disk into slot.\n4. Type numeric code into keypad ([]).\n\tNote: If you make a mistake press R to reset the device.\n5. Press the E button to log onto the device\nYou now have activated the device. To deactivate the buttons at anytime for example when\nyou've already prepped the bomb for detonation remove the auth disk OR press the R ont he keypad.\nNow the bomb CAN ONLY be detonated using the timer. A manual det. is not an option.\n\tNote: Nanotrasen is a pain in the neck.\nToggle off the SAFETY.\n\tNote: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step\nSo use the - - and + + to set a det time between 5 seconds and 10 minutes.\nThen press the timer toggle button to start the countdown.\nNow remove the auth. disk so that the buttons deactivate.\n\tNote: THE BOMB IS STILL SET AND WILL DETONATE\nNow before you remvoe the disk if you need to mvoe the bomb you can:\nToggle off the anchor, move it, and re-anchor.\n\nGood luck. Remember the order:\nDisk, Code, Safety, Timer, Disk, RUN\nGood luck.\nIntelligence Analysts believe that they are hiding the disk in the control room emergency room", NB.r_code) + return + spawn( 0 ) + src.extend_process() + return + if("virus") + spawn( 50 ) + var/list/mobs = list( ) + for(var/mob/human/M as mob in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(2295) + if (mobs.len > 3) + var/amount = round(mobs.len / 3) + amount = min(3, amount) + while(amount > 0) + var/H = pick(mobs) + H.virus = 1 + mobs -= H + amount-- + return + spawn( 0 ) + src.extend_process() + return + else + for(var/obj/start/S as obj in world) + S = null + del(S) + //Foreach goto(2445) + return + +/datum/control/cellular/process() + set invisibility = 0 + set background = 1 + + Label_6: + while(!( ticker )) + for(var/M as mob in world) + spawn( 0 ) + M.UpdateClothing() + return + //Foreach goto(28) + sleep(10) + for(var/turf/station/T as turf in world) + if (T.updatecell) + updatecell() + //Foreach goto(73) + sleep(3) + for(var/M as mob in world) + spawn( 0 ) + M.Life() + return + //Foreach goto(126) + sleep(3) + for(var/obj/move/S as obj in world) + S.process() + //Foreach goto(167) + sleep(2) + for(var/obj/machinery/M as obj in world) + M.process() + //Foreach goto(213) + src.var_swap = !( src.var_swap ) + if (src.processing) + sleep(2) + goto Label_6 + return diff --git a/ss13-40.93.2-decomp/spacestation13/chemical.dm b/ss13-40.93.2-decomp/spacestation13/chemical.dm new file mode 100644 index 0000000..2a1ec71 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/chemical.dm @@ -0,0 +1,578 @@ + +/obj/item/weapon/organ/proc/process() + + return + +/obj/item/weapon/organ/proc/receive_chem(chemical as obj) + + return + +/obj/item/weapon/organ/external/proc/take_damage(brute, burn) + + if ((brute <= 0 && burn <= 0)) + return 0 + if ((((src.brute_dam + src.burn_dam) + brute) + burn) < src.max_damage) + src.brute_dam += brute + src.burn_dam += burn + else + var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam) + if (can_inflict) + if ((brute > 0 && burn > 0)) + var/ratio = brute / (brute + burn) + src.brute_dam += ratio * can_inflict + src.burn_dam += (1 - ratio) * can_inflict + else + if (brute > 0) + src.brute_dam += brute + else + src.burn_dam += burn + else + return 0 + return src.update_icon() + return + +/obj/item/weapon/organ/external/proc/heal_damage(brute, burn) + + src.brute_dam = max(0, src.brute_dam - brute) + src.burn_dam = max(0, src.brute_dam - burn) + return src.update_icon() + return + +/obj/item/weapon/organ/external/proc/update_icon() + + var/n_is = text("[]0", src.r_name) + if (src.burn_dam == 0) + n_is = text("0[]", n_is) + else + if (src.burn_dam < ((src.max_damage * 0.25) / 2)) + n_is = text("1[]", n_is) + else + if (src.burn_dam < ((src.max_damage * 0.75) / 2)) + n_is = text("2[]", n_is) + else + n_is = text("3[]", n_is) + if (src.brute_dam == 0) + n_is = text("0[]", n_is) + else + if (src.brute_dam < ((src.max_damage * 0.25) / 2)) + n_is = text("1[]", n_is) + else + if (src.brute_dam < ((src.max_damage * 0.75) / 2)) + n_is = text("2[]", n_is) + else + n_is = text("3[]", n_is) + if (n_is != src.d_i_state) + src.d_i_state = n_is + return 1 + else + return 0 + return + +/obj/substance/proc/leak(turf) + + return + +/obj/substance/chemical/proc/volume() + + var/amount = 0 + for(var/item in src.chemicals) + var/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + amount += C.return_property("volume") + //Foreach goto(24) + return amount + return + +/obj/substance/chemical/proc/split(amount) + + var/obj/substance/chemical/S = new /obj/substance/chemical( null ) + var/tot_volume = src.volume() + if (amount > tot_volume) + amount = tot_volume + for(var/item in src.chemicals) + var/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + S.chemicals[item] = C + src.chemicals[item] = null + //Foreach goto(60) + return S + else + if (tot_volume <= 0) + return S + else + for(var/item in src.chemicals) + var/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + var/N = new C.type( null ) + C.copy_data(N) + var/amt = (C.return_property("volume") * amount) / tot_volume + C.moles -= (amt * C.density) / C.molarmass + if (C.moles == 0) + C = null + del(C) + N.moles += (amt * N.density) / N.molarmass + S.chemicals[text("[]", N.name)] = N + //Foreach goto(161) + return S + return + +/obj/substance/chemical/proc/transfer_from(S as obj, amount) + + var/volume = src.volume() + var/s_volume = S.volume() + if (amount > s_volume) + amount = s_volume + if (src.maximum) + if (amount > (src.maximum - volume)) + amount = src.maximum - volume + if (amount >= s_volume) + for(var/item in S.chemicals) + var/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + var/N = null + N = src.chemicals[item] + if (!( N )) + N = new C.type( null ) + C.copy_data(N) + N.moles += C.moles + C = null + del(C) + //Foreach goto(106) + else + var/U = S.split(amount) + for(var/item in U.chemicals) + var/C = U.chemicals[item] + if (istype(C, /datum/chemical)) + var/N = src.chemicals[item] + if (!( N )) + N = new C.type( null ) + C.copy_data(N) + src.chemicals[item] = N + N.moles += C.moles + C = null + del(C) + //Foreach goto(251) + U = null + del(U) + var/C = null + for(var/t in src.chemicals) + C = src.chemicals[text("[]", t)] + if (istype(C, /datum/chemical)) + C.react(src) + //Foreach goto(403) + return amount + return + +/obj/substance/chemical/proc/transfer_mob(M as mob, amount) + + if (!( ismob(M) )) + return + var/S = src.split(amount) + for(var/item in S.chemicals) + var/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + C.injected(M) + //Foreach goto(44) + S = null + del(S) + return + +/obj/substance/chemical/proc/dropper_mob(M as mob, amount) + + if (!( ismob(M) )) + return + var/S = src.split(amount) + for(var/item in S.chemicals) + var/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + C.injected(M, "eye") + //Foreach goto(44) + S = null + del(S) + return + +/obj/substance/chemical/Del() + + for(var/item in src.chemicals) + src.chemicals[item] = null + del(src.chemicals[item]) + //Foreach goto(17) + ..() + return + +/obj/substance/gas/leak(T as turf) + + src.turf_add(T, (src.co2 + src.oxygen) + src.plasma) + return + +/obj/substance/gas/proc/tot_gas() + + return (((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) + src.n2 + return + +/obj/substance/gas/proc/transfer_from(target as obj, amount) + + if ((!( istype(target, /obj/substance/gas) ) || !( amount ))) + return + var/t1 = (((target.co2 + target.oxygen) + target.plasma) + target.sl_gas) + target.n2 + if (!( t1 )) + return + if (amount > t1) + amount = t1 + var/t2 = (((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) + src.n2 + if (amount < 0) + amount = t1 + if ((src.maximum > 0 && (src.maximum - t2) < amount)) + amount = src.maximum - t2 + var/t_oxy = (amount * target.oxygen) / t1 + var/t_pla = (amount * target.plasma) / t1 + var/t_co2 = (amount * target.co2) / t1 + var/t_sl_gas = (amount * target.sl_gas) / t1 + var/t_n2 = (amount * target.n2) / t1 + var/t3 = t1 + t2 + var/t4 = t2 * src.temperature + var/t5 = t1 * target.temperature + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + src.co2 += t_co2 + src.oxygen += t_oxy + src.plasma += t_pla + src.sl_gas += t_sl_gas + src.n2 += t_n2 + target.oxygen -= t_oxy + target.co2 -= t_co2 + target.plasma -= t_pla + target.sl_gas -= t_sl_gas + target.n2 -= t_n2 + return + +/obj/substance/gas/proc/clear() + + src.oxygen = 0 + src.plasma = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + return + +/obj/substance/gas/proc/has_gas() + + return ((((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) + src.n2) > 0 + return + +/obj/substance/gas/proc/turf_add(target as turf, amount) + + if (((!( istype(target, /turf) ) && !( istype(target, /obj/move) )) || !( amount ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/t2 = (((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) + src.n2 + if (amount < 0) + amount = (((src.plasma + src.oxygen) + src.co2) + src.sl_gas) + src.n2 + if (!( t2 )) + return + var/t_oxy = (amount * src.oxygen) / t2 + var/t_pla = (amount * src.plasma) / t2 + var/t_co2 = (amount * src.co2) / t2 + var/t_sl_gas = (amount * src.sl_gas) / t2 + var/t_n2 = (amount * src.n2) / t2 + src.co2 -= t_co2 + src.oxygen -= t_oxy + src.plasma -= t_pla + src.sl_gas -= t_sl_gas + src.n2 -= t_n2 + target.oxygen += t_oxy + target.co2 += t_co2 + target.poison += t_pla + target.sl_gas += t_sl_gas + target.n2 += t_n2 + target.heat += amount * (src.temperature - -254.7) + target.res_vars() + return + +/obj/substance/gas/proc/turf_take(target as turf, amount) + + if (((!( istype(target, /turf) ) && !( istype(target, /obj/move) )) || !( amount ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/t1 = (((target.co2 + target.oxygen) + target.poison) + target.sl_gas) + target.n2 + if (!( t1 )) + return + var/t2 = (((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) + src.n2 + if (amount > 0) + if ((src.maximum > 0 && (src.maximum - t2) < amount)) + amount = src.maximum - t2 + else + amount = (((src.plasma + src.oxygen) + src.co2) + src.sl_gas) + src.n2 + if (amount > t1) + amount = t1 + var/turf_total = (((target.poison + target.oxygen) + target.co2) + target.sl_gas) + target.n2 + var/heat_gain = (turf_total ? (amount / turf_total) * target.heat : 0) + var/temp_gain = (turf_total ? (target.heat / turf_total) + -254.7 : 0) + var/t_oxy = (amount * target.oxygen) / t1 + var/t_pla = (amount * target.poison) / t1 + var/t_co2 = (amount * target.co2) / t1 + var/t_sl_gas = (amount * target.sl_gas) / t1 + var/t_n2 = (amount * target.n2) / t1 + var/t3 = t1 + t2 + var/t4 = t2 * src.temperature + var/t5 = t1 * temp_gain + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + else + src.temperature = 0 + src.co2 += t_co2 + src.oxygen += t_oxy + src.plasma += t_pla + src.sl_gas += t_sl_gas + src.n2 += t_n2 + target.oxygen -= t_oxy + target.co2 -= t_co2 + target.poison -= t_pla + target.sl_gas -= t_sl_gas + target.n2 -= t_n2 + target.heat -= heat_gain + target.res_vars() + return + +/obj/substance/gas/proc/extract_toxs(target as turf) + + if ((!( istype(target, /turf) ) && !( istype(target, /obj/move) ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/co2_diff = target.co2 - 0 + var/oxy_diff = target.oxygen - 756000.0 + var/no2_diff = target.sl_gas - 0 + var/n2_diff = target.n2 - 2844000.0 + var/plas_diff = target.poison - 0 + if (co2_diff < 0) + co2_diff = 0 + if (oxy_diff < 0) + oxy_diff = 0 + if (no2_diff < 0) + no2_diff = 0 + if (n2_diff < 0) + n2_diff = 0 + if (plas_diff < 0) + plas_diff = 0 + var/turf_total = (((target.poison + target.oxygen) + target.co2) + target.sl_gas) + target.n2 + var/air_total = (((co2_diff + oxy_diff) + no2_diff) + n2_diff) + plas_diff + var/heat_gain = (turf_total ? (air_total / turf_total) * target.heat : null) + var/temp_gain = (turf_total ? (target.heat / turf_total) + -254.7 : 0) + src.co2 += co2_diff + src.oxygen += oxy_diff + src.sl_gas += no2_diff + src.n2 += n2_diff + src.plasma += plas_diff + target.co2 -= co2_diff + target.oxygen -= oxy_diff + target.sl_gas -= no2_diff + target.n2 -= n2_diff + target.poison -= plas_diff + var/t3 = turf_total + air_total + var/t4 = turf_total * src.temperature + var/t5 = air_total * temp_gain + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + else + src.temperature = 0 + target.heat -= heat_gain + target.res_vars() + return + +/obj/substance/gas/proc/merge_into(target as obj) + + if (!( istype(target, /obj/substance/gas) )) + return + var/amount = ((((((((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) + src.n2) + target.co2) + target.oxygen) + target.plasma) + target.sl_gas) + target.n2 + var/t1 = (((src.co2 + src.oxygen) + src.plasma) + src.sl_gas) * src.temperature + var/t2 = (((target.co2 + target.oxygen) + target.plasma) + target.sl_gas) * target.temperature + if (amount > 0) + src.temperature = (t1 + t2) / amount + src.co2 += target.co2 + src.oxygen += target.oxygen + src.plasma += target.plasma + src.sl_gas += target.sl_gas + src.n2 += target.n2 + target.oxygen = 0 + target.plasma = 0 + target.co2 = 0 + target.sl_gas = 0 + target.n2 = 0 + return + +/datum/chemical/pathogen/proc/process(source as obj) + + return + +/datum/chemical/proc/react(S as obj) + + return + +/datum/chemical/proc/react_organ(O as obj) + + return + +/datum/chemical/proc/injected(M as mob, zone) + + if (zone == null) + zone = "body" + return + +/datum/chemical/proc/copy_data(C) + + C.molarmass = src.molarmass + C.density = src.density + C.chem_formula = src.chem_formula + return + +/datum/chemical/proc/return_property(property) + + switch(property) + if("moles") + return src.moles + if("mass") + return src.moles * src.molarmass + if("density") + return src.density + if("volume") + return (src.moles * src.molarmass) / src.density + else + return + +/datum/chemical/pl_coag/react(S as obj) + + var/C = S.chemicals["plasma-l"] + if (istype(C, /datum/chemical/l_plas)) + if (C.moles < src.moles) + src.moles -= C.moles + var/W = S.chemicals["waste-l"] + if (istype(W, /datum/chemical/waste)) + W.moles += C.moles + else + W = new /datum/chemical/waste( ) + W.chemicals["waste-l"] = W + W.moles += C.moles + C = null + del(C) + else + C.moles -= W.moles + var/W = S.chemicals["waste-l"] + if (istype(W, /datum/chemical/waste)) + W.moles += src.moles + else + W = new /datum/chemical/waste( ) + W.chemicals["waste-l"] = W + W.moles += src.moles + src.moles = 0 + if (src.moles <= 0) + src = null + del(src) + return + return + +/datum/chemical/pl_coag/injected(M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat -= volume * 2 + M.eye_stat = max(0, M.eye_stat) + else + if (M.health >= 0) + if ((volume * 4) >= M.toxloss) + M.toxloss = 0 + else + M.toxloss -= volume * 4 + M.antitoxs += volume * 180 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + return + +/datum/chemical/l_plas/injected(M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat += volume * 5 + M.eye_blurry += volume * 3 + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob((M.eye_stat - 20) + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.plasma += volume * 6 + for(var/obj/item/weapon/implant/tracking/T as obj in M) + M.plasma += 1 + T = null + del(T) + //Foreach goto(133) + return + +/datum/chemical/s_tox/injected(M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 10 + M.eye_blurry += volume * 15 + else + M.paralysis += volume * 12 + M.stat = 1 + return + +/datum/chemical/epil/injected(M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 5 + M.eye_stat += volume * 2 + M.eye_blurry += volume * 20 + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob((M.eye_stat - 20) + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.r_epil += volume * 60 + return + +/datum/chemical/ch_cou/injected(M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 2 + M.eye_stat += volume * 3 + M.eye_blurry += volume * 20 + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob((M.eye_stat - 20) + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.r_ch_cou += volume * 60 + return + +/datum/chemical/rejuv/injected(M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat -= volume * 5 + M.eye_blurry += volume * 5 + M.eye_stat = max(0, M.eye_stat) + else + M.rejuv += volume * 3 + if (M.paralysis) + M.paralysis = 3 + if (M.weakened) + M.weakened = 3 + if (M.stunned) + M.stunned = 3 + return diff --git a/ss13-40.93.2-decomp/spacestation13/colour2html.dm b/ss13-40.93.2-decomp/spacestation13/colour2html.dm new file mode 100644 index 0000000..cd70bdd --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/colour2html.dm @@ -0,0 +1,193 @@ + +/proc/colour2html(colour) + + for(var/T in html_colours) + if (ckey(T) == ckey(colour)) + else + //Foreach continue //goto(12) + if (!( T )) + world.log << text("Warning! Could not find matching colour entry for '[]'.", colour) + return "#FFFFFF" + return "#" + uppertext(html_colours[text("[]", colour)]) + return + +/proc/HTMLAssociate(colour, html) + + if (html_colours.Find(colour)) + world.log << text("Changing [] from [] to []!", colour, html_colours[colour], html) + html_colours[colour] = html + return + +/proc/LoadHTMLAssociations() + + var/savefile/F = new /savefile( "s_html.sav" ) + F["html_colours"] >> html_colours + if (!( html_colours )) + html_colours = list( ) + if (!( html_colours.len )) + HTMLAssociate("aliceblue", "f0f8ff") + HTMLAssociate("antiquewhite", "faebd7") + HTMLAssociate("aqua", "00ffff") + HTMLAssociate("aquamarine", "7fffd4") + HTMLAssociate("azure", "f0ffff") + HTMLAssociate("beige", "f5f5dc") + HTMLAssociate("bisque", "ffe4c4") + HTMLAssociate("black", "000000") + HTMLAssociate("blanchedalmond", "ffebcd") + HTMLAssociate("blue", "0000ff") + HTMLAssociate("blueviolet", "8a2be2") + HTMLAssociate("brown", "a52a2a") + HTMLAssociate("burlywood", "deb887") + HTMLAssociate("cadetblue", "5f9ea0") + HTMLAssociate("chartreuse", "7fff00") + HTMLAssociate("chocolate", "d2691e") + HTMLAssociate("coral", "ff7f50") + HTMLAssociate("cornflowerblue", "6495ed") + HTMLAssociate("cornsilk", "fff8dc") + HTMLAssociate("crimson", "dc143c") + HTMLAssociate("cyan", "00ffff") + HTMLAssociate("darkblue", "00008b") + HTMLAssociate("darkcyan", "008b8b") + HTMLAssociate("darkgoldenrod", "b8b60b") + HTMLAssociate("darkgrey", "a9a9a9") + HTMLAssociate("darkgray", "a9a9a9") + HTMLAssociate("darkgreen", "006400") + HTMLAssociate("darkkhaki", "bdb76b") + HTMLAssociate("darkmagenta", "8b008b") + HTMLAssociate("darkolivegreen", "556b2f") + HTMLAssociate("darkorange", "ff8c00") + HTMLAssociate("darkorchid", "9932cc") + HTMLAssociate("darkred", "8b0000") + HTMLAssociate("darksalmon", "e9967a") + HTMLAssociate("darkseagreen", "8fbc8f") + HTMLAssociate("darkslateblue", "483d8b") + HTMLAssociate("darkslategrey", "2f4f4f") + HTMLAssociate("darkslategray", "2f4f4f") + HTMLAssociate("darkturquoise", "00ced1") + HTMLAssociate("darkviolet", "9400d3") + HTMLAssociate("deeppink", "ff1493") + HTMLAssociate("deepskyblue", "00bfff") + HTMLAssociate("dimgrey", "696969") + HTMLAssociate("dimgray", "696969") + HTMLAssociate("dodgerblue", "1e90ff") + HTMLAssociate("firebrick", "b22222") + HTMLAssociate("floralwhite", "fffaf0") + HTMLAssociate("forestgreen", "228b22") + HTMLAssociate("fuchsia", "ff00ff") + HTMLAssociate("gainsboro", "dcdcdc") + HTMLAssociate("ghostwhite", "f8f8ff") + HTMLAssociate("gold", "ffd700") + HTMLAssociate("goldenrod", "daa520") + HTMLAssociate("grey", "808080") + HTMLAssociate("gray", "808080") + HTMLAssociate("green", "008000") + HTMLAssociate("greenyellow", "adff2f") + HTMLAssociate("honeydew", "f0fff0") + HTMLAssociate("hotpink", "ff69b4") + HTMLAssociate("indianred", "cd5c5c") + HTMLAssociate("indigo", "4b0082") + HTMLAssociate("ivory", "fffff0") + HTMLAssociate("khaki", "f0e68c") + HTMLAssociate("lavender", "e6e6fa") + HTMLAssociate("lavenderblush", "fff0f5") + HTMLAssociate("lawngreen", "7cfc00") + HTMLAssociate("lemonchiffon", "fffacd") + HTMLAssociate("lightblue", "add8e6") + HTMLAssociate("lightcoral", "f08080") + HTMLAssociate("lightcyan", "e0ffff") + HTMLAssociate("lightgoldenrod", "fafad2") + HTMLAssociate("lightgreen", "90ee90") + HTMLAssociate("lightgrey", "d3d3d3") + HTMLAssociate("lightgray", "d3d3d3") + HTMLAssociate("lightpink", "ffb6c1") + HTMLAssociate("lightsalmon", "ffa07a") + HTMLAssociate("lightseagreen", "20b2aa") + HTMLAssociate("lightskyblue", "87cefa") + HTMLAssociate("lightslategrey", "778899") + HTMLAssociate("lightslategray", "778899") + HTMLAssociate("lightsteelblue", "b0c4de") + HTMLAssociate("lightyellow", "ffffe0") + HTMLAssociate("lime", "00ff00") + HTMLAssociate("limegreen", "32cd32") + HTMLAssociate("linen", "faf0e6") + HTMLAssociate("magenta", "ff00ff") + HTMLAssociate("maroon", "800000") + HTMLAssociate("mediumaquamarine", "66cdaa") + HTMLAssociate("mediumblue", "0000cd") + HTMLAssociate("mediumorchid", "ba55d3") + HTMLAssociate("mediumpurple", "9370db") + HTMLAssociate("mediumseagreen", "3cb371") + HTMLAssociate("mediumslateblue", "7b68ee") + HTMLAssociate("mediumspringgreen", "00fa9a") + HTMLAssociate("mediumturquoise", "48d1cc") + HTMLAssociate("mediumvioletred", "c71585") + HTMLAssociate("midnightblue", "191970") + HTMLAssociate("mintcream", "f5fffa") + HTMLAssociate("mistyrose", "ffe4e1") + HTMLAssociate("moccasin", "ffe4b5") + HTMLAssociate("navajowhite", "ffdead") + HTMLAssociate("navy", "000080") + HTMLAssociate("oldlace", "fdf5e6") + HTMLAssociate("olive", "808000") + HTMLAssociate("olivedrab", "6b8e23") + HTMLAssociate("orange", "ffa500") + HTMLAssociate("orangered", "ff4500") + HTMLAssociate("orchid", "da70d6") + HTMLAssociate("palegoldenrod", "eee8aa") + HTMLAssociate("palegreen", "98fb98") + HTMLAssociate("paleturquoise", "afeeee") + HTMLAssociate("palevioletred", "db7093") + HTMLAssociate("papayawhip", "ffefd5") + HTMLAssociate("peachpuff", "ffdab9") + HTMLAssociate("peru", "cd853f") + HTMLAssociate("pink", "ffc0cd") + HTMLAssociate("plum", "dda0dd") + HTMLAssociate("powderblue", "b0e0e6") + HTMLAssociate("purple", "800080") + HTMLAssociate("red", "ff0000") + HTMLAssociate("rosybrown", "bc8f8f") + HTMLAssociate("royalblue", "4169e1") + HTMLAssociate("saddlebrown", "8b4513") + HTMLAssociate("salmon", "fa8072") + HTMLAssociate("sandybrown", "f4a460") + HTMLAssociate("seagreen", "2e8b57") + HTMLAssociate("seashell", "fff5ee") + HTMLAssociate("sienna", "a0522d") + HTMLAssociate("silver", "c0c0c0") + HTMLAssociate("skyblue", "87ceed") + HTMLAssociate("slateblue", "6a5acd") + HTMLAssociate("slategrey", "708090") + HTMLAssociate("slategray", "708090") + HTMLAssociate("snow", "fffafa") + HTMLAssociate("springgreen", "00ff7f") + HTMLAssociate("steelblue", "4682b4") + HTMLAssociate("tan", "d2b48c") + HTMLAssociate("teal", "008080") + HTMLAssociate("thistle", "d8bfd8") + HTMLAssociate("tomato", "ff6347") + HTMLAssociate("turquoise", "40e0d0") + HTMLAssociate("violet", "ee82ee") + HTMLAssociate("wheat", "f5deb3") + HTMLAssociate("white", "ffffff") + HTMLAssociate("whitesmoke", "f5f5f5") + HTMLAssociate("yellow", "ffff00") + HTMLAssociate("yellowgreen", "a9cd32") + return + +/proc/SaveHTMLAssociations() + + var/savefile/F = new /savefile( "s_html.sav" ) + F["html_colours"] << html_colours + return + +/world/New() + + ..() + LoadHTMLAssociations() + return + +/world/Del() + + SaveHTMLAssociations() + ..() + return diff --git a/ss13-40.93.2-decomp/spacestation13/computer.dm b/ss13-40.93.2-decomp/spacestation13/computer.dm new file mode 100644 index 0000000..c85f40d --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/computer.dm @@ -0,0 +1,995 @@ + +/obj/machinery/computer/security/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/security/attack_hand(user as mob) + + var/list/L = list( ) + user.machine = src + for(var/obj/machinery/camera/C as obj in world) + if (C.network == src.network) + L[text("[][]", C.c_tag, (C.status ? null : " (Deactivated)"))] = C + //Foreach goto(31) + L["Cancel"] = "Cancel" + var/t = input(user, "Which camera should you change to?", null, null) in L + var/C = L[t] + if (t == "Cancel") + user.machine = null + return 0 + if ((get_dist(user, src) > 1 || (user.machine != src || (user.blinded || (!( user.canmove ) || !( C.status )))))) + return 0 + else + src.current = C + spawn( 0 ) + attack_hand(user) + return + return + +/obj/machinery/computer/security/check_eye(user as mob) + + if ((get_dist(user, src) > 1 || (!( user.canmove ) || (user.blinded || (!( src.current ) || !( src.current.status )))))) + return null + user.reset_view(src.current) + return 1 + return + +/obj/machinery/computer/meteorhit(O as obj) + + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(17) + src.icon_state = "broken" + return + +/obj/machinery/computer/communications/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/communications/verb/call_shuttle() + set src in oview(1) + + if ((!( ticker ) || ticker.shuttle_location == 1)) + return + world << "\blue Alert: The emergency shuttle has been called. It will arrive in T-10:00 minutes." + if (!( ticker.timeleft )) + ticker.timeleft = 6000 + ticker.timing = 1 + src.add_fingerprint(usr) + return + +/obj/machinery/computer/communications/verb/cancel_call() + set src in oview(1) + + if ((!( ticker ) || (ticker.shuttle_location == 1 || (ticker.timing == 0 || ticker.timeleft < 300)))) + return + world << "\blue Alert: The shuttle is going back!" + ticker.timing = -1.0 + src.add_fingerprint(usr) + return + +/obj/machinery/computer/card/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/card/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/card/attack_hand(user as mob) + + user.machine = src + if (!( ticker )) + return + if (src.mode) + var/d2 = text("Confirm Identity: []\n[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), (src.authenticated ? "You are logged in!" : text("{Log in}", src))) + var/d1 = "Please use security Records to modify entries.
" + for(var/datum/data/record/t in data_core.general) + d1 += text("[] - []
", t.fields["name"], t.fields["rank"]) + //Foreach goto(104) + var/dat = text("[]
\n
\nCrew Manifest:
\n[]\n
\nPrint
\n
\nAccess ID modification console.
\n
", d2, d1, src, src) + else + var/d1 = text("{Log in}", src) + if ((t.authenticated && t.modify)) + var/vo = null + var/va = null + var/vl = null + var/ve = null + switch(src.modify.access_level) + if(1.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + else + vo = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.lab_access) + if(1.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + else + vl = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.engine_access) + if(1.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + else + ve = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.air_access) + if(1.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + else + va = text("0 1 2 3 4 5", src, src, src, src, src) + var/list/L = list( "Research Assistant", "Staff Assistant", "Medical Assistant", "Technical Assistant", "Engineer", "Forensic Technician", "Research Technician", "Medical Doctor", "Captain", "Security Officer", "Medical Researcher", "Toxin Researcher", "Head of Research", "Head of Personnel", "Station Technician", "Atmospheric Technician", "Unassigned", "Systems" ) + var/assign = "" + if (istype(user, /mob/human)) + var/counter = 1 + for(var/t in L) + assign += text("[] ", src, t, t) + counter++ + if (counter >= 4) + assign += "
" + counter = 1 + //Foreach goto(912) + d1 = text("[] :
\nGeneral Access Level: []
\nLaboratory Access: []
\nReactor/Engine Access: []
\nMain Systems Access: []
\nRegistered: []
\nAssignment: []
\n[]
", src.modify.name, vo, vl, ve, va, src, (src.registered ? text("[]", src.registered) : "{None: Click to modify}"), (src.modify.assignment ? text("[]", src.assignment) : "None"), assign) + else + var/counter = 1 + for(var/t in L) + assign += text("[] ", src, t, stars(t)) + counter++ + if (counter >= 4) + assign += "
" + counter = 1 + //Foreach goto(1057) + d1 = text("[] :
\n[] []
\n[] []
\n[] []
\n[] []
\n[] []
\n[] []
\n[]
", stars("modify.name"), stars("General Access Level:"), vo, stars("Laboratory Access:"), vl, stars("Reactor/Engine Access:"), ve, stars("Main Systems Access:"), va, stars("Registered:"), src, (src.modify.registered ? text("[]", stars(src.registered)) : text("[]", stars("{None: Click to modify}"))), stars("Assignment:"), (src.modify.assignment ? text("[]", stars(src.assignment)) : "None"), assign) + if (istype(user, /mob/human)) + dat = text("Identification Card Modifier
\nPlease Insert the cards into the slots
\nTarget: []
\nConfirm Identity: []
\n-----------------
\n[]
\n
\n
\nAccess Crew Manifest
\n
", src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.scan ? text("[]", src.scan.name) : "----------"), d1, src) + else + dat = text("[]
\n[]
\n[] []
\n[] []
\n-----------------
\n[]
\n
\n
\n[]
\n
", stars("Identification Card Modifier"), stars("Please Insert the cards into the slots"), stars("Target:"), src, (src.modify ? text("[]", stars(src.modify.name)) : "----------"), stars("Confirm Identity:"), src, (src.scan ? text("[]", stars(src.scan.name)) : "----------"), d1, src, stars("Access Crew Manifest")) + user << browse(dat, "window=id_com;size=400x500") + return + +/obj/machinery/computer/card/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || restrained())) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["modify"]) + if (src.modify) + src.name = text("[]'s ID Card ([]>[]-[]-[])", src.modify.registered, src.access_level, src.lab_access, src.engine_access, src.air_access) + src.modify.loc = src.loc + src.modify = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + drop_item() + I.loc = src + src.modify = I + src.authenticated = 0 + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + drop_item() + I.loc = src + src.scan = I + src.authenticated = 0 + if (href_list["auth"]) + if ((!( src.authenticated ) && (src.scan && (src.modify || src.mode)))) + if ((src.scan.assignment == "Captain" || src.assignment == "Head of Personnel")) + src.authenticated = 1 + if (href_list["vo"]) + if (src.authenticated) + var/t1 = text2num(href_list["vo"]) + if (t1 == -1.0) + t1 = 0 + src.modify.access_level = t1 + if (href_list["vl"]) + if (src.authenticated) + var/t1 = text2num(href_list["vl"]) + if (t1 == -1.0) + t1 = 0 + src.modify.lab_access = t1 + if (href_list["ve"]) + if (src.authenticated) + var/t1 = text2num(href_list["ve"]) + if (t1 == -1.0) + t1 = 0 + src.modify.engine_access = t1 + if (href_list["va"]) + if (src.authenticated) + var/t1 = text2num(href_list["va"]) + if (t1 == -1.0) + t1 = 0 + src.modify.air_access = t1 + if (href_list["assign"]) + if (src.authenticated) + var/t1 = href_list["assign"] + src.modify.assignment = t1 + if (href_list["reg"]) + if (src.authenticated) + var/t2 = src.modify + var/t1 = input(usr, "What name?", "ID computer", null) as text + if ((src.authenticated && (src.modify == t2 && (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + src.modify.registered = t1 + if (href_list["mode"]) + src.mode = text2num(href_list["mode"]) + if (href_list["print"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + var/t1 = "Crew Manifest:
" + for(var/datum/data/record/t in data_core.general) + t1 += text("[] - []
", t.fields["name"], t.fields["rank"]) + //Foreach goto(868) + P.info = text("[]", t1) + P.name = "paper- 'Crew Manifest'" + src.printing = null + if (href_list["mode"]) + src.authenticated = 0 + src.mode = text2num(href_list["mode"]) + if (src.modify) + src.name = text("[]'s ID Card ([]>[]-[]-[])", src.modify.registered, src.access_level, src.lab_access, src.engine_access, src.air_access) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(1015) + src.add_fingerprint(usr) + else + usr << browse(null, "window=id_com") + return + return + +/obj/machinery/computer/card/attackby(I as obj, user as mob) + + src.attack_hand(user) + return + +/obj/machinery/computer/pod/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/pod/proc/alarm() + + if (!( src.connected )) + viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!" + return + for(var/obj/machinery/door/poddoor/M as obj in world) + if (M.id == src.id) + spawn( 0 ) + M.openpod() + return + //Foreach goto(41) + sleep(20) + src.connected.drive() + sleep(50) + for(var/obj/machinery/door/poddoor/M as obj in world) + if (M.id == src.id) + spawn( 0 ) + M.closepod() + return + //Foreach goto(123) + return + +/obj/machinery/computer/pod/New() + + ..() + spawn( 5 ) + for(var/obj/machinery/mass_driver/M as obj in world) + if (M.id == src.id) + src.connected = M + else + //Foreach continue //goto(25) + return + return + +/obj/machinery/computer/pod/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/pod/attack_hand(user as mob) + + var/dat = "Mass Driver Controls" + user.machine = src + if (src.timing) + var/d2 = text("Stop Time Launch", src) + else + d2 = text("Initiate Time Launch", src) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + dat += text("
\nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + if (src.connected) + var/temp = "" + var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) + for(var/t in L) + if (t == src.connected.power) + temp += text("[] ", t) + else + temp += text("[] ", src, t, t) + //Foreach goto(172) + dat += text("
\nPower Level: []
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
", temp, src, src, src) + dat += text("

Close
", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/pod/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + alarm() + src.time = 0 + src.timing = 0 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(68) + return + +/obj/machinery/computer/pod/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["power"]) + var/t = text2num(href_list["power"]) + t = min(max(0.25, t), 16) + if (src.connected) + src.connected.power = t + else + if (href_list["alarm"]) + src.alarm() + else + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + else + if (href_list["door"]) + for(var/obj/machinery/door/poddoor/M as obj in world) + if (M.id == src.id) + if (M.density) + spawn( 0 ) + M.openpod() + return + else + spawn( 0 ) + M.closepod() + return + //Foreach goto(298) + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(394) + return + +/obj/machinery/door/poddoor/open() + + usr << "This is a remote pod door!" + return + +/obj/machinery/door/poddoor/close() + + usr << "This is a remote pod door!" + return + +/obj/machinery/door/poddoor/proc/openpod() + set src in oview(1) + + if (src.operating) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + +/obj/machinery/door/poddoor/proc/closepod() + set src in oview(1) + + if (src.operating) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + src.opacity = 1 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/pod/meteorhit(O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(29) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src = null + del(src) + return + return + +/obj/machinery/pod/process() + + if (src.speed) + if (src.speed <= 10) + var/t1 = 10 - src.speed + while(t1 > 0) + step(src, src.dir) + sleep(1) + t1-- + else + var/t1 = round(src.speed / 5) + while(t1 > 0) + step(src, src.dir) + t1-- + return + +/obj/machinery/pod/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + src = null + del(src) + return + else + return + +/obj/machinery/pod/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/pod/relaymove(user as mob, direction) + + if (user.stat) + return + if ((user in src)) + if (direction & 1) + src.speed = max(src.speed - 1, 1) + else + if (direction & 2) + src.speed++ + if (src.speed > 10) + src.speed = 10 + if (direction & 4) + src.dir = turn(src.dir, -90.0) + else + if (direction & 8) + src.dir = turn(src.dir, 90) + return + +/obj/machinery/pod/verb/eject() + set src = usr.loc + + if (usr.stat) + return + var/M = usr + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + step(M, turn(src.dir, 180)) + return + +/obj/machinery/pod/verb/board() + set src in oview(1) + + if (usr.stat) + return + var/M = usr + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + return + +/obj/machinery/pod/verb/load() + set src in oview(1) + + if (usr.stat) + return + if ((istype(usr, /mob/human) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/H = usr + if ((H.pulling && !( H.pulling.anchored ))) + H.pulling.loc = src + if (ismob(H.pulling)) + var/M = H.pulling + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] loads [] into []!", H, H.pulling, src) + //Foreach goto(152) + H.pulling = null + return + +/obj/machinery/pod/verb/unload(A as mob|obj in src) + set src in oview(1) + + if (usr.stat) + return + if (istype(A, /atom/movable)) + A.loc = src.loc + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unloads [] from []!", usr, A, src) + //Foreach goto(54) + if (ismob(A)) + var/M = A + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + step(A, turn(src.dir, 180)) + return + +/obj/machinery/recon/meteorhit(O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(29) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src = null + del(src) + return + return + +/obj/machinery/recon/process() + + if (src.speed) + if (src.speed <= 10) + var/t1 = 10 - src.speed + while(t1 > 0) + step(src, src.dir) + sleep(1) + t1-- + else + var/t1 = round(src.speed / 5) + while(t1 > 0) + step(src, src.dir) + t1-- + return + +/obj/machinery/recon/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + src = null + del(src) + return + else + return + +/obj/machinery/recon/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/recon/verb/eject() + set src = usr.loc + + if (usr.stat) + return + var/M = usr + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + return + +/obj/machinery/recon/verb/board() + set src in oview(1) + + if (usr.stat) + return + if (locate(/mob, src)) + usr << "There is no room! You can only fit one person." + return + var/M = usr + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + return + +/obj/machinery/recon/verb/load() + set src in oview(1) + + if (usr.stat) + return + if ((istype(usr, /mob/human) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/H = usr + if ((H.pulling && !( H.pulling.anchored ))) + if (!( istype(H.pulling, /obj/item/weapon) )) + usr << "You may only place items in." + else + if ((locate(/mob, src) && ismob(H.pulling))) + usr << "There is no room! You can only fit one person." + else + H.pulling.loc = src + if (ismob(H.pulling)) + var/M = H.pulling + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] loads [] into []!", H, H.pulling, src) + //Foreach goto(204) + H.pulling = null + return + +/obj/machinery/recon/verb/unload(A as mob|obj in src) + set src in oview(1) + + if (usr.stat) + return + if (istype(A, /atom/movable)) + A.loc = src.loc + for(var/O as mob in view(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unloads [] from []!", usr, A, src) + //Foreach goto(53) + if (ismob(A)) + var/M = A + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + return + +/obj/machinery/recon/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/recon/relaymove(user as mob, direction) + + if (user.stat) + return + if ((user in src)) + if (direction & 1) + src.speed = max(src.speed - 1, 1) + else + if (direction & 2) + src.speed++ + if (direction & 4) + src.dir = turn(src.dir, -90.0) + else + if (direction & 8) + src.dir = turn(src.dir, 90) + if (direction & 16) + src.speed = 30 + else + src.speed = min(src.speed, 10) + return + +/obj/datacore/proc/manifest() + + for(var/mob/human/H as mob in world) + if ((H.start && !( findtext(H.rname, "Syndicate ", 1, null) ))) + var/datum/data/record/G = new /datum/data/record( ) + var/datum/data/record/M = new /datum/data/record( ) + var/datum/data/record/S = new /datum/data/record( ) + var/C = H.wear_id + if (C) + G.fields["rank"] = C.assignment + else + G.fields["rank"] = "Unassigned" + G.fields["name"] = H.rname + G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + M.fields["name"] = G.fields["name"] + M.fields["id"] = G.fields["id"] + S.fields["name"] = G.fields["name"] + S.fields["id"] = G.fields["id"] + if (H.gender == "female") + G.fields["sex"] = "Female" + else + G.fields["sex"] = "Male" + G.fields["age"] = text("[]", H.age) + G.fields["fingerprint"] = text("[]", md5(H.primary.uni_identity)) + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + M.fields["b_type"] = text("[]", H.b_type) + M.fields["mi_dis"] = "None" + M.fields["mi_dis_d"] = "No minor disabilities have been declared." + M.fields["ma_dis"] = "None" + M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + M.fields["alg"] = "None" + M.fields["alg_d"] = "No allergies have been detected in this patient." + M.fields["cdi"] = "None" + M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + M.fields["notes"] = "No notes." + S.fields["criminal"] = "None" + S.fields["mi_crim"] = "None" + S.fields["mi_crim_d"] = "No minor crime convictions." + S.fields["ma_crim"] = "None" + S.fields["ma_crim_d"] = "No minor crime convictions." + S.fields["notes"] = "No notes." + src.general += G + src.medical += M + src.security += S + //Foreach goto(15) + return + +/turf/space/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/turf/space/attack_hand(user as mob) + + if ((user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(M.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/space/attackby(T as obj, user as mob) + + if (istype(T, /obj/item/weapon/tile)) + T.build(src) + T.amount-- + src.add_fingerprint(user) + if (T.amount < 1) + user.u_equip(src) + src = null + del(src) + return + return + +/turf/space/updatecell() + + return + return + +/turf/space/Entered(A as mob|obj) + + ..() + if ((!( A ) || (src != A.loc || istype(null, /obj/beam)))) + return + if (!( A.last_move )) + return + if (locate(/obj/move, src)) + return 1 + if ((ismob(A) && (src.x > 2 && src.x < (world.maxx - 2)))) + var/M = A + if ((!( M.restrained() ) && M.canmove)) + var/t1 = 5 + if (locate(/obj/grille, oview(1, M))) + if (!( M.l_hand )) + t1 -= 2 + else + if (M.l_hand.w_class <= 2) + t1 -= 1 + if (!( M.r_hand )) + t1 -= 2 + else + if (M.r_hand.w_class <= 2) + t1 -= 1 + else + if (locate(/turf/station, oview(1, M))) + if (!( M.l_hand )) + t1 -= 1 + else + if (M.l_hand.w_class <= 2) + t1 -= 0.5 + if (!( M.r_hand )) + t1 -= 1 + else + if (M.r_hand.w_class <= 2) + t1 -= 0.5 + t1 = round(t1) + if (t1 < 5) + if (prob(t1)) + M << "\blue You slipped!" + else + spawn( 5 ) + if (src == A.loc) + spawn( 0 ) + src.Entered(A) + return + return + return 0 + if (src.x <= 2) + if (src.z >= 10) + if (world.maxz < 10) + world.maxz++ + A.z++ + else + A.z = 9 + else + A.z++ + A.x = world.maxx - 2 + spawn( 0 ) + if ((A && A.loc)) + A.loc.Entered(A) + return + else + if (A.x >= (world.maxx - 1)) + if (A.z > 3) + A.z-- + else + A.z = 1 + A.x = 3 + spawn( 0 ) + if ((A && A.loc)) + A.loc.Entered(A) + return + else + spawn( 5 ) + if ((A && (!( A.anchored ) && A.loc == src))) + if (step(A, A.last_move)) + else + spawn( 0 ) + src.Entered(A) + return + return + return diff --git a/ss13-40.93.2-decomp/spacestation13/cryo.dm b/ss13-40.93.2-decomp/spacestation13/cryo.dm new file mode 100644 index 0000000..da12bc6 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/cryo.dm @@ -0,0 +1,1623 @@ + +/obj/machinery/computer/med_data/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/med_data/attack_hand(user as mob) + + if (src.temp) + var/dat = text("[]

Clear Screen", src.temp, src) + else + dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------")) + if (src.authenticated) + switch(src.screen) + if(1.0) + dat += text("Search Records
\nList Records
\n
\nRecord Maintenance
\n{Log Out}
\n", src, src, src, src) + if(2.0) + dat += "Record List:
" + for(var/datum/data/record/R in data_core.general) + dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(132) + dat += text("
Back", src) + if(3.0) + dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) + if(4.0) + dat += "
Medical Record

" + if ((istype(R.active1, /datum/data/record) && data_core.general.Find(R.active1))) + dat += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.fields["id"], src, src.fields["sex"], src, src.fields["age"], src, src.fields["fingerprint"], src, src.fields["p_stat"], src, src.fields["m_stat"]) + else + dat += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + dat += text("
\n
Medical Data

\nBlood Type: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src, src.active2.fields["b_type"], src, src.fields["mi_dis"], src, src.fields["mi_dis_d"], src, src.fields["ma_dis"], src, src.fields["ma_dis_d"], src, src.fields["alg"], src, src.fields["alg_d"], src, src.fields["cdi"], src, src.fields["cdi_d"], src, src.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + dat += text("[]
Delete Entry

", src.fields[text("com_[]", counter)], src, counter) + counter++ + dat += text("Add Entry

", src) + dat += text("Delete Record (Medical Only)

", src) + else + dat += "Medical Record Lost!
" + dat += text("New Record

", src) + dat += text("\nPrint Record
\nBack
", src, src) + else + else + dat += text("{Log In}", src) + user << browse(text("Medical Records[]", dat), "window=med_rec") + return + +/obj/machinery/computer/med_data/Topic(href, href_list) + + if (!( data_core.general.Find(src.active1) )) + src.active1 = null + if (!( data_core.medical.Find(src.active2) )) + src.active2 = null + if ((usr.stat || restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + drop_item() + I.loc = src + src.scan = I + else + if (href_list["logout"]) + src.authenticated = null + src.screen = null + src.active1 = null + src.active2 = null + else + if (href_list["login"]) + if (istype(src.scan, /obj/item/weapon/card/id)) + src.active1 = null + src.active2 = null + var/list/L = list( "Medical Researcher", "Medical Doctor", "Head of Personnel", "Captain" ) + if (L.Find(src.scan.assignment)) + src.authenticated = src.scan.registered + src.rank = src.scan.assignment + src.screen = 1 + if (src.authenticated) + if (href_list["list"]) + src.screen = 2 + src.active1 = null + src.active2 = null + else + if (href_list["rec_m"]) + src.screen = 3 + src.active1 = null + src.active2 = null + else + if (href_list["del_all"]) + src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_all2"]) + for(var/datum/data/record/R in data_core.medical) + R = null + del(R) + //Foreach goto(494) + src.temp = "All records deleted." + else + if (href_list["main"]) + src.screen = 1 + src.active1 = null + src.active2 = null + else + if (href_list["field"]) + var/a1 = src.active1 + var/a2 = src.active2 + switch(href_list["field"]) + if("fingerprint") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input fingerprint hash:", "Med. records", src.active1.fields["id"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active1 != a1)))))) + return + src.active1.fields["fingerprint"] = t1 + if("sex") + if (istype(src.active1, /datum/data/record)) + if (src.active1.fields["sex"] == "Male") + src.fields["sex"] = "Female" + else + src.fields["sex"] = "Male" + if("age") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active1 != a1)))))) + return + src.active1.fields["age"] = t1 + if("mi_dis") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["mi_dis"] = t1 + if("mi_dis_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["mi_dis_d"] = t1 + if("ma_dis") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["ma_dis"] = t1 + if("ma_dis_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["ma_dis_d"] = t1 + if("alg") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["alg"] = t1 + if("alg_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["alg_d"] = t1 + if("cdi") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["cdi"] = t1 + if("cdi_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["cdi_d"] = t1 + if("notes") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["notes"] = t1 + if("p_stat") + if (istype(src.active1, /datum/data/record)) + src.temp = text("Physical Condition:
\n\t*Deceased*
\n\t*Unconscious*
\n\tActive
\n\tPhysically Unfit
", src, src, src, src) + if("m_stat") + if (istype(src.active1, /datum/data/record)) + src.temp = text("Mental Condition:
\n\t*Insane*
\n\t*Unstable*
\n\t*Watch*
\n\tStable
", src, src, src, src) + if("b_type") + if (istype(src.active2, /datum/data/record)) + src.temp = text("Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
", src, src, src, src, src, src, src, src) + else + else + if (href_list["p_stat"]) + if (src.active1) + switch(href_list["p_stat"]) + if("deceased") + src.active1.fields["p_stat"] = "*Deceased*" + if("unconscious") + src.active1.fields["p_stat"] = "*Unconscious*" + if("active") + src.active1.fields["p_stat"] = "Active" + if("unfit") + src.active1.fields["p_stat"] = "Physically Unfit" + else + else + if (href_list["m_stat"]) + if (src.active1) + switch(href_list["m_stat"]) + if("insane") + src.active1.fields["m_stat"] = "*Insane*" + if("unstable") + src.active1.fields["m_stat"] = "*Unstable*" + if("watch") + src.active1.fields["m_stat"] = "*Watch*" + if("stable") + src.active2.fields["m_stat"] = "Stable" + else + else + if (href_list["b_type"]) + if (src.active2) + switch(href_list["b_type"]) + if("an") + src.active2.fields["b_type"] = "A-" + if("bn") + src.active2.fields["b_type"] = "B-" + if("abn") + src.active2.fields["b_type"] = "AB-" + if("on") + src.active2.fields["b_type"] = "O-" + if("ap") + src.active2.fields["b_type"] = "A+" + if("bp") + src.active2.fields["b_type"] = "B+" + if("abp") + src.active2.fields["b_type"] = "AB+" + if("op") + src.active2.fields["b_type"] = "O+" + else + else + if (href_list["del_r"]) + if (src.active2) + src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_r2"]) + if (src.active2) + src.active2 = null + del(src.active2) + else + if (href_list["d_rec"]) + var/R = locate(href_list["d_rec"]) + var/M = locate(href_list["d_rec"]) + if (!( data_core.general.Find(R) )) + src.temp = "Record Not Found!" + return + for(var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + M = E + else + //Foreach continue //goto(2540) + src.active1 = R + src.active2 = M + src.screen = 4 + else + if (href_list["new"]) + if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + var/datum/data/record/R = new /datum/data/record( ) + R.fields["name"] = src.active1.fields["name"] + R.fields["id"] = src.active1.fields["id"] + R.name = text("Medical Record #[]", R.fields["id"]) + R.fields["b_type"] = "Unknown" + R.fields["mi_dis"] = "None" + R.fields["mi_dis_d"] = "No minor disabilities have been declared." + R.fields["ma_dis"] = "None" + R.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + R.fields["alg"] = "None" + R.fields["alg_d"] = "No allergies have been detected in this patient." + R.fields["cdi"] = "None" + R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + R.fields["notes"] = "No notes." + data_core.medical += R + src.active2 = R + src.screen = 4 + else + if (href_list["add_c"]) + if (!( istype(src.active2, /datum/data/record) )) + return + var/a2 = src.active2 + var/t1 = input("Add Comment:", "Med. records", null, null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + counter++ + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
[]", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1) + else + if (href_list["del_c"]) + if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" + else + if (href_list["search"]) + var/t1 = input("Search String: (Name or ID)", "Med. records", null, null) as text + if ((!( t1 ) || (usr.stat || (!( src.authenticated ) || (usr.restrained() || get_dist(src, usr) > 1))))) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) + src.active1 = R + else + //Foreach continue //goto(3229) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3334) + src.screen = 4 + else + if (href_list["print_p"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = "
Medical Record

" + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.fields["id"], src.fields["sex"], src.fields["age"], src.fields["fingerprint"], src.fields["p_stat"], src.fields["m_stat"]) + else + P.info += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + P.info += text("
\n
Medical Data

\nBlood Type: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["b_type"], src.fields["mi_dis"], src.fields["mi_dis_d"], src.fields["ma_dis"], src.fields["ma_dis_d"], src.fields["alg"], src.fields["alg_d"], src.fields["cdi"], src.fields["cdi_d"], src.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + P.info += text("[]
", src.fields[text("com_[]", counter)]) + counter++ + else + P.info += "Medical Record Lost!
" + P.info += "" + P.name = "paper- 'Medical Record'" + src.printing = null + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(3792) + return + +/obj/machinery/computer/secure_data/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/secure_data/attack_hand(user as mob) + + if (src.temp) + var/dat = text("[]

Clear Screen", src.temp, src) + else + dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------")) + if (src.authenticated) + switch(src.screen) + if(1.0) + dat += text("Search Records
\nList Records
\nSearch Fingerprints
\nNew Record
\n
\nRecord Maintenance
\n{Log Out}
\n", src, src, src, src, src, src) + if(2.0) + dat += "Record List:
" + for(var/datum/data/record/R in data_core.general) + dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(136) + dat += text("
Back", src) + if(3.0) + dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) + if(4.0) + dat += "
Security Record

" + if ((istype(R.active1, /datum/data/record) && data_core.general.Find(R.active1))) + dat += text("Name: [] ID: []
\nSex: []
\nAge: []
\nRank: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src, src.active1.fields["name"], src, src.fields["id"], src, src.fields["sex"], src, src.fields["age"], src, src.fields["rank"], src, src.fields["fingerprint"], src.fields["p_stat"], src.fields["m_stat"]) + else + dat += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) + dat += text("
\n
Security Data

\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src, src.active2.fields["criminal"], src, src.fields["mi_crim"], src, src.fields["mi_crim_d"], src, src.fields["ma_crim"], src, src.fields["ma_crim_d"], src, src.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + dat += text("[]
Delete Entry

", src.fields[text("com_[]", counter)], src, counter) + counter++ + dat += text("Add Entry

", src) + dat += text("Delete Record (Security Only)

", src) + else + dat += "Security Record Lost!
" + dat += text("New Record

", src) + dat += text("\nDelete Record (ALL)

\nPrint Record
\nBack
", src, src, src) + else + else + dat += text("{Log In}", src) + user << browse(text("Security Records[]", dat), "window=secure_rec") + return + +/obj/machinery/computer/secure_data/Topic(href, href_list) + + if (!( data_core.general.Find(src.active1) )) + src.active1 = null + if (!( data_core.security.Find(src.active2) )) + src.active2 = null + if ((usr.stat || restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + drop_item() + I.loc = src + src.scan = I + else + if (href_list["logout"]) + src.authenticated = null + src.screen = null + src.active1 = null + src.active2 = null + else + if (href_list["login"]) + if (istype(src.scan, /obj/item/weapon/card/id)) + src.active1 = null + src.active2 = null + var/list/L = list( "Security Officer", "Forensic Technician", "Prison Warden", "Head of Personnel", "Captain" ) + if (L.Find(src.scan.assignment)) + src.authenticated = src.scan.registered + src.rank = src.scan.assignment + src.screen = 1 + if (src.authenticated) + if (href_list["list"]) + src.screen = 2 + src.active1 = null + src.active2 = null + else + if (href_list["rec_m"]) + src.screen = 3 + src.active1 = null + src.active2 = null + else + if (href_list["del_all"]) + src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_all2"]) + for(var/datum/data/record/R in data_core.security) + R = null + del(R) + //Foreach goto(497) + src.temp = "All records deleted." + else + if (href_list["main"]) + src.screen = 1 + src.active1 = null + src.active2 = null + else + if (href_list["field"]) + var/a1 = src.active1 + var/a2 = src.active2 + switch(href_list["field"]) + if("name") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input name:", "Secure. records", src.active1.fields["name"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active1 != a1)))))) + return + src.active1.fields["name"] = t1 + if("id") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input id:", "Secure. records", src.active1.fields["id"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active1 != a1)))))) + return + src.active1.fields["id"] = t1 + if("fingerprint") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input fingerprint hash:", "Secure. records", src.active1.fields["fingerprint"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active1 != a1)))))) + return + src.active1.fields["fingerprint"] = t1 + if("sex") + if (istype(src.active1, /datum/data/record)) + if (src.active1.fields["sex"] == "Male") + src.fields["sex"] = "Female" + else + src.fields["sex"] = "Male" + if("age") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input age:", "Secure. records", src.active1.fields["age"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active1 != a1)))))) + return + src.active1.fields["age"] = t1 + if("mi_crim") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input minor disabilities list:", "Secure. records", src.active2.fields["mi_crim"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["mi_crim"] = t1 + if("mi_crim_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize minor dis.:", "Secure. records", src.active2.fields["mi_crim_d"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["mi_crim_d"] = t1 + if("ma_crim") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input major diabilities list:", "Secure. records", src.active2.fields["ma_crim"], null) as text + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["ma_crim"] = t1 + if("ma_crim_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize major dis.:", "Secure. records", src.active2.fields["ma_crim_d"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["ma_crim_d"] = t1 + if("notes") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize notes:", "Secure. records", src.active2.fields["notes"], null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + src.active2.fields["notes"] = t1 + if("criminal") + if (istype(src.active2, /datum/data/record)) + src.temp = text("Criminal Status:
\n\tNone
\n\t*Arrest*
\n\tIncarcerated
\n\tParolled
\n\tReleased
", src, src, src, src, src) + if("rank") + var/list/L = list( "Head of Personnel", "Captain" ) + if ((istype(src.active1, /datum/data/record) && L.Find(src.rank))) + src.temp = text("Rank:
\nAssistants:
\nResearch Assistant
\nStaff Assistant
\nMedical Assistant
\nTechnical Assistant
\nTechnicians:
\nForensic Technician
\nResearch Technician
\nStation Technician
\nAtmospheric Technician
\nEngineer (Engine Technician)\nResearchers:
\n
Medical Researcher
\nToxin Researcher
\nOfficers:
\nMedical Doctor
\nSecurity Officer
\nHigher Officers:
\nHead of Research
\nHead of Personnel
\nCaptain
", src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + else + else + if (href_list["rank"]) + var/list/L = list( "Head of Personnel", "Captain" ) + if ((src.active1 && L.Find(src.rank))) + switch(href_list["rank"]) + if("res_assist") + src.active1.fields["rank"] = "Research Assistant" + if("staff_assist") + src.active1.fields["rank"] = "Staff Assistant" + if("med_assist") + src.active1.fields["rank"] = "Medical Assistant" + if("tech_assist") + src.active1.fields["rank"] = "Technical Assistant" + if("foren_tech") + src.active1.fields["rank"] = "Forensic Technician" + if("res_tech") + src.active1.fields["rank"] = "Research Technician" + if("stat_tech") + src.active1.fields["rank"] = "Station Technician" + if("atmo_tech") + src.active1.fields["rank"] = "Atmospheric Technician" + if("engineer") + src.active1.fields["rank"] = "Engineer" + if("med_res") + src.active1.fields["rank"] = "Medical Researcher" + if("tox_res") + src.active1.fields["rank"] = "Toxin Researcher" + if("med_doc") + src.active1.fields["rank"] = "Medical Doctor" + if("secure_off") + src.active1.fields["rank"] = "Security Officer" + if("hoperson") + src.active1.fields["rank"] = "Head of Research" + if("horesearch") + src.active1.fields["rank"] = "Head of Personnel" + if("captain") + src.active1.fields["rank"] = "Captain" + else + else + if (href_list["criminal2"]) + if (src.active2) + switch(href_list["criminal2"]) + if("none") + src.active2.fields["criminal"] = "None" + if("arrest") + src.active2.fields["criminal"] = "*Arrest*" + if("incarcerated") + src.active2.fields["criminal"] = "Incarcerated" + if("parolled") + src.active2.fields["criminal"] = "Parolled" + if("released") + src.active2.fields["criminal"] = "Released" + else + else + if (href_list["del_r"]) + if (src.active2) + src.temp = text("Are you sure you wish to delete the record (Security Portion Only)?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["del_r2"]) + if (src.active2) + src.active2 = null + del(src.active2) + else + if (href_list["dela_r"]) + if (src.active1) + src.temp = text("Are you sure you wish to delete the record (ALL)?
\n\tYes
\n\tNo
", src, src) + else + if (href_list["dela_r2"]) + for(var/datum/data/record/R in data_core.medical) + if ((R.fields["name"] == src.active1.fields["name"] || R.fields["id"] == src.active1.fields["id"])) + R = null + del(R) + else + //Foreach continue //goto(2405) + if (src.active2) + src.active2 = null + del(src.active2) + if (src.active1) + src.active1 = null + del(src.active1) + else + if (href_list["d_rec"]) + var/R = locate(href_list["d_rec"]) + var/S = locate(href_list["d_rec"]) + if (!( data_core.general.Find(R) )) + src.temp = "Record Not Found!" + return + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + S = E + else + //Foreach continue //goto(2614) + src.active1 = R + src.active2 = S + src.screen = 4 + else + if (href_list["new_r"]) + var/datum/data/record/G = new /datum/data/record( ) + G.fields["name"] = "New Record" + G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + G.fields["rank"] = "Unassigned" + G.fields["sex"] = "Male" + G.fields["age"] = "Unknown" + G.fields["fingerprint"] = "Unknown" + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + data_core.general += G + src.active1 = G + src.active2 = null + else + if (href_list["new"]) + if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + var/datum/data/record/R = new /datum/data/record( ) + R.fields["name"] = src.active1.fields["name"] + R.fields["id"] = src.active1.fields["id"] + R.name = text("Security Record #[]", R.fields["id"]) + R.fields["criminal"] = "None" + R.fields["mi_crim"] = "None" + R.fields["mi_crim_d"] = "No minor crime convictions." + R.fields["ma_crim"] = "None" + R.fields["ma_crim_d"] = "No minor crime convictions." + R.fields["notes"] = "No notes." + data_core.security += R + src.active2 = R + src.screen = 4 + else + if (href_list["add_c"]) + if (!( istype(src.active2, /datum/data/record) )) + return + var/a2 = src.active2 + var/t1 = input("Add Comment:", "Secure. records", null, null) as message + if ((!( t1 ) || (!( src.authenticated ) || (usr.stat || (restrained() || (get_dist(src, usr) > 1 || src.active2 != a2)))))) + return + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + counter++ + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
[]", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1) + else + if (href_list["del_c"]) + if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" + else + if (href_list["search_f"]) + var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text + if ((!( t1 ) || (usr.stat || (!( src.authenticated ) || (usr.restrained() || get_dist(src, usr) > 1))))) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if (lowertext(R.fields["fingerprint"]) == t1) + src.active1 = R + else + //Foreach continue //goto(3414) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3502) + src.screen = 4 + else + if (href_list["search"]) + var/t1 = input("Search String: (Name or ID)", "Secure. records", null, null) as text + if ((!( t1 ) || (usr.stat || (!( src.authenticated ) || (usr.restrained() || get_dist(src, usr) > 1))))) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) + src.active1 = R + else + //Foreach continue //goto(3708) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3813) + src.screen = 4 + else + if (href_list["print_p"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = "
Security Record

" + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.fields["id"], src.fields["sex"], src.fields["age"], src.fields["fingerprint"], src.fields["p_stat"], src.fields["m_stat"]) + else + P.info += "General Record Lost!
" + if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) + P.info += text("
\n
Security Data

\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["criminal"], src.fields["mi_crim"], src.fields["mi_crim_d"], src.fields["ma_crim"], src.fields["ma_crim_d"], src.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + P.info += text("[]
", src.fields[text("com_[]", counter)]) + counter++ + else + P.info += "Security Record Lost!
" + P.info += "" + P.name = "paper- 'Security Record'" + src.printing = null + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(4247) + return + +/obj/machinery/computer/sleep_console/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + else + return + +/obj/machinery/computer/sleep_console/New() + + ..() + spawn( 5 ) + src.connected = locate(/obj/machinery/sleeper, get_step(src, WEST)) + return + return + +/obj/machinery/computer/sleep_console/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/sleep_console/attack_hand(user as mob) + + if (src.connected) + var/occupant = src.connected.occupant + var/dat = "Occupant Statistics:
" + if (occupant) + switch(occupant.stat) + if(0.0) + var/t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\tHealth %: [] ([])

", (occupant.health > 50 ? "" : ""), occupant.health, t1) + dat += text("[]\t-Respiratory Damage %: []
", (occupant.oxyloss < 60 ? "" : ""), occupant.oxyloss) + dat += text("[]\t-Toxin Content %: []
", (occupant.toxloss < 60 ? "" : ""), occupant.toxloss) + dat += text("[]\t-Burn Severity %: []
", (occupant.fireloss < 60 ? "" : ""), occupant.fireloss) + dat += text("
Paralysis Summary %: [] ([] seconds left!)

", occupant.paralysis, round(occupant.paralysis / 4)) + dat += text("
Refresh
Inject Rejuvenators", src, src) + else + dat += "The sleeper is empty." + dat += text("

Close", user) + user << browse(dat, "window=sleeper;size=400x500") + return + +/obj/machinery/computer/sleep_console/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["rejuv"]) + if (src.connected) + src.connected.inject(usr) + if (href_list["refresh"]) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(123) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/sleep_console/process() + + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/freezer/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/freezer/attack_hand(user as mob) + + user.machine = src + if ((istype(user, /mob/human) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + if (locate(/obj/item/weapon/flasks, src)) + var/counter = 1 + for(var/obj/item/weapon/flasks/F as obj in src) + var/d1 += text("Flask []: [] / [] / []
", src, counter, counter, F.oxygen, F.plasma, F.coolant) + counter++ + //Foreach goto(78) + d1 += "Key: Oxygen / Plasma / Coolant
" + else + d1 = "No flasks!" + var/t1 = null + switch(src.t_flags) + if(0.0) + t1 = text("Oxygen-No Plasma-No", src, src) + if(1.0) + t1 = text("Oxygen-Yes Plasma-No", src, src) + if(2.0) + t1 = text("Oxygen-No Plasma-Yes", src, src) + if(3.0) + t1 = text("Oxygen-Yes Plasma-Yes", src, src) + else + var/t2 = null + if (src.status) + t2 = text("Cooling-[] Stop", src.c_used, src) + else + t2 = text("Cool Stopped", src) + var/dat = text("
\n\t\tTemperature: []
\n\t\tTransfer Status: []
\n\t\t Chemicals Used: []
\n\t\tFreezer status: []
\n\t\t - - [] + +
\n
\n\t[]
\n
\n
\n\tClose
\n\t
", src.temperature, (src.transfer ? text("Transfering Stop", src) : text("Transfer Stopped", src)), t1, t2, src, src, src.c_used, src, src, d1, user) + user << browse(dat, "window=freezer;size=400x500") + else + var/d1 = null + if (locate(/obj/item/weapon/flasks, src)) + var/counter = 1 + for(var/obj/item/weapon/flasks/F as obj in src) + d1 += text("[] []: []
", src, counter, stars("Flask"), counter, stars(text("[] / [] / []", F.oxygen, F.plasma, F.coolant))) + counter++ + //Foreach goto(380) + d1 += "Key: Oxygen / Plasma / Coolant
" + else + d1 = "No flasks!" + var/t1 = null + switch(src.t_flags) + if(0.0) + t1 = text("[] []", src, stars("Oxygen-No"), src, stars("Plasma-No")) + if(1.0) + t1 = text("[] []", src, stars("Oxygen-Yes"), src, stars("Plasma-No")) + if(2.0) + t1 = text("[] []", src, stars("Oxygen-No"), src, stars("Plasma-Yes")) + if(3.0) + t1 = text("[] []", src, stars("Oxygen-Yes"), src, stars("Plasma-Yes")) + else + var/t2 = null + if (src.status) + t2 = text("Cooling-[] []", src.c_used, src, stars("Stop")) + else + t2 = text("Cool []", src, stars("Stopped")) + var/dat = text("
\n\t\t[]: []
\n\t\t[]: []
\n\t\t []: []
\n\t\t[]: []
\n\t\t - - [] + +
\n
\n\t[]
\n
\n
\n\tClose\n\t
", stars("Temperature"), src.temperature, stars("Transfer Status"), (src.transfer ? text("Transfering Stop", src) : text("Transfer Stopped", src)), stars("Chemicals Used"), t1, stars("Freezer status"), t2, src, src, src.c_used, src, src, d1, user) + user << browse(dat, "window=freezer;size=400x500") + return + +/obj/machinery/freezer/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_used += cp + src.c_used = min(max(round(src.c_used), 0), 10) + if (href_list["oxygen"]) + var/t1 = text2num(href_list["oxygen"]) + if (t1) + src.t_flags |= 1 + else + src.t_flags &= 65534 + if (href_list["plasma"]) + var/t1 = text2num(href_list["plasma"]) + if (t1) + src.t_flags |= 2 + else + src.t_flags &= 65533 + if (href_list["cool"]) + src.status = text2num(href_list["cool"]) + src.icon_state = text("freezer_[]", src.status) + if (href_list["transfer"]) + src.transfer = text2num(href_list["transfer"]) + if (href_list["flask"]) + var/t1 = text2num(href_list["flask"]) + if (t1 <= src.contents.len) + var/F = src.contents[t1] + F.loc = src.loc + src.rebuild_overlay() + src.add_fingerprint(usr) + return + +/obj/machinery/freezer/process() + + if (src.contents.len >= 3) + var/F3 = src.contents[3] + if (src.contents.len >= 2) + var/F2 = src.contents[2] + if (src.contents.len >= 1) + var/F1 = src.contents[1] + var/u_cool = 0 + if (src.status) + u_cool = src.c_used + if ((F2 && F2.coolant)) + if (F2.coolant >= u_cool) + F2.coolant -= u_cool + else + u_cool = F2.coolant + F2.coolant = 0 + else + if ((F1 && F1.coolant)) + if (F1.coolant >= u_cool) + F1.coolant -= u_cool + else + u_cool = F1.coolant + F1.coolant = 0 + else + if ((F3 && F3.coolant)) + if (F3.coolant >= u_cool) + F3.coolant -= u_cool + else + u_cool = F3.coolant + F3.coolant = 0 + else + u_cool = 0 + if (u_cool) + src.temperature = max(-100.0, src.temperature - (u_cool * 5)) + src.temperature = min(src.temperature + 5, 20) + if (src.transfer) + var/u_oxy = 0 + var/u_pla = 0 + if (src.t_flags & 1) + u_oxy = 1 + if ((F1 && F1.oxygen)) + if (F1.oxygen >= u_oxy) + F1.oxygen -= u_oxy + else + u_oxy = F1.oxygen + F1.oxygen = 0 + else + if ((F2 && F2.oxygen)) + if (F2.oxygen >= u_oxy) + F2.oxygen -= u_oxy + else + u_oxy = F2.oxygen + F2.oxygen = 0 + else + if ((F3 && F3.oxygen)) + if (F3.oxygen >= u_oxy) + F3.oxygen -= u_oxy + else + u_oxy = F3.oxygen + F3.oxygen = 0 + else + u_oxy = 0 + if (src.t_flags & 2) + u_pla = 1 + if ((F3 && F3.plasma)) + if (F3.plasma >= u_pla) + F3.plasma -= u_pla + else + u_pla = F3.plasma + F3.plasma = 0 + else + if ((F2 && F2.plasma)) + if (F2.plasma >= u_pla) + F2.plasma -= u_pla + else + u_pla = F2.plasma + F2.plasma = 0 + else + if ((F1 && F1.plasma)) + if (F1.plasma >= u_pla) + F1.plasma -= u_pla + else + u_pla = F1.plasma + F1.plasma = 0 + else + u_pla = 0 + if ((u_oxy + u_pla) > 0) + var/obj/substance/gas/G = new /obj/substance/gas( null ) + G.oxygen = u_oxy + G.plasma = u_pla + G.temperature = src.temperature + spawn( 3 ) + if (src.line_out) + src.line_out.receive_gas(G, src) + return + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(809) + return + +/obj/machinery/freezer/receive_gas(S as obj, source as obj) + + S = null + del(S) + return + +/obj/machinery/freezer/orient_pipe(P as obj) + + if (!( src.line_out )) + src.line_out = P + else + return 0 + return 1 + return + +/obj/machinery/freezer/New() + + ..() + var/obj/overlay/O1 = new /obj/overlay( ) + O1.icon = 'Cryogenic2.dmi' + O1.icon_state = "canister connector_0" + O1.pixel_y = -16.0 + src.overlays += O1 + src.connector = O1 + new /obj/item/weapon/flasks/oxygen( src ) + new /obj/item/weapon/flasks/coolant( src ) + new /obj/item/weapon/flasks/plasma( src ) + src.rebuild_overlay() + spawn( 50 ) + for(var/obj/machinery/M as obj in orange(src, 1)) + if ((M.level == src.level && (src.p_dir & get_dir(src, M) && M.p_dir & get_dir(M, src)))) + if (!( src.line_out )) + src.line_out = M + //Foreach goto(117) + return + return + +/obj/machinery/freezer/attackby(F as obj, user as mob) + + if (!( istype(F, /obj/item/weapon/flasks) )) + return + if (src.contents.len >= 3) + user << "\blue All slots are full!" + return + else + user.drop_item() + F.loc = src + src.rebuild_overlay() + return + +/obj/machinery/freezer/proc/rebuild_overlay() + + for(var/x in src.overlays) + src.overlays -= x + //Foreach goto(17) + src.overlays += src.connector + var/counter = 0 + for(var/obj/item/weapon/flasks/F as obj in src.contents) + var/obj/overlay/O = new /obj/overlay( ) + O.icon = F.icon + O.icon_state = F.icon_state + O.pixel_y = -17.0 + O.pixel_x = counter * 12 + src.overlays += O + counter++ + if (counter >= 3) + return + //Foreach goto(64) + return + +/obj/machinery/sleeper/allow_drop() + + return 0 + return + +/obj/machinery/sleeper/process() + + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/sleeper/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + src = null + del(src) + return + else + return + +/obj/machinery/sleeper/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + src.add_fingerprint(usr) + return + +/obj/machinery/sleeper/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The sleeper is already occupied!" + return + if (usr.abiotic()) + usr << "Subject may not have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "sleeper_1" + for(var/obj/O as obj in src) + O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/sleeper/attackby(G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The sleeper is already occupied!" + return + if (G.affecting.abiotic()) + user << "Subject may not have abiotic items on." + return + var/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "sleeper_1" + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + G = null + del(G) + return + +/obj/machinery/sleeper/proc/go_out() + + if (!( src.occupant )) + return + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(26) + if (src.occupant.client) + src.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "sleeper_0" + return + +/obj/machinery/sleeper/proc/inject(user as mob) + + if (src.occupant) + if (src.occupant.rejuv < 60) + src.rejuv = 60 + user << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", src.occupant.rejuv) + else + user << "No occupant!" + return + +/obj/machinery/sleeper/proc/check(user as mob) + + if (src.occupant) + user << text("\blue Occupant ([]) Statistics:", src.occupant) + switch(src.occupant.stat) + if(0.0) + var/t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + user << text("[]\t Health %: [] ([])", (src.occupant.health > 50 ? "\blue " : "\red "), src.occupant.health, t1) + user << text("[]\t -Respiratory Damage %: []", (src.oxyloss < 60 ? "\blue " : "\red "), src.occupant.oxyloss) + user << text("[]\t -Toxin Content %: []", (src.toxloss < 60 ? "\blue " : "\red "), src.occupant.toxloss) + user << text("[]\t -Burn Severity %: []", (src.fireloss < 60 ? "\blue " : "\red "), src.occupant.fireloss) + user << "\blue Expected time till occupant can safely awake: (note: If health is below 20% these times are inaccurate)" + user << text("\blue \t [] second\s (if around 1 or 2 the sleeper is keeping them asleep.)", src.paralysis / 5) + else + user << "\blue There is no one inside!" + return + +/obj/machinery/sleeper/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + src = null + del(src) + return + else + return + +/obj/machinery/sleeper/alter_health(M as mob) + + if (M.health > 0) + if (M.oxyloss >= 10) + var/amount = max(0.15, 1) + M.oxyloss -= amount + else + M.oxyloss = 0 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + M.paralysis -= 4 + M.weakened -= 4 + M.stunned -= 4 + if (M.paralysis <= 1) + M.paralysis = 3 + if (M.weakened <= 1) + M.weakened = 3 + if (M.stunned <= 1) + M.stunned = 3 + if (M.rejuv < 3) + M.rejuv = 4 + return + +/obj/machinery/cryo_cell/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(54) + src.icon_state = "broken" + else + return + +/obj/machinery/cryo_cell/orient_pipe(P as obj) + + if (!( src.line_in )) + src.line_in = P + else + return 0 + return 1 + return + +/obj/machinery/cryo_cell/allow_drop() + + return 0 + return + +/obj/machinery/cryo_cell/New() + + ..() + src.gas = new /obj/substance/gas( null ) + spawn( 50 ) + for(var/obj/machinery/M as obj in orange(src, 1)) + if ((M.level == src.level && (src.p_dir & get_dir(src, M) && M.p_dir & get_dir(M, src)))) + if (!( src.line_in )) + src.line_in = M + //Foreach goto(42) + return + return + +/obj/machinery/cryo_cell/verb/move_eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + src.add_fingerprint(usr) + return + +/obj/machinery/cryo_cell/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The cell is already occupied!" + return + if (usr.abiotic()) + usr << "Subject may not have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "celltop_1" + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/cryo_cell/attackby(G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The cell is already occupied!" + return + if (G.affecting.abiotic()) + user << "Subject may not have abiotic items on." + return + var/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "celltop_1" + for(var/obj/O as obj in src) + O = null + del(O) + //Foreach goto(154) + src.add_fingerprint(user) + G = null + del(G) + return + +/obj/machinery/cryo_cell/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/cryo_cell/attack_hand(user as mob) + + user.machine = src + if (istype(user, /mob/human)) + var/dat = " System Statistics:
" + if (src.gas.temperature > 0) + dat += text("\tTemperature (Farenheight): [] (MUST be below 0, add coolant to mixture)
", src.temperature) + else + dat += text("\tTemperature(Farenheight): []
", src.temperature) + if (src.gas.plasma < 1) + dat += text("\tPlasma Units: [] (Add plasma to mixture!)
", src.plasma) + else + dat += text("\tPlasma Units: []
", src.plasma) + if (src.gas.oxygen < 1) + dat += text("\tOxygen Units: [] (Add oxygen to mixture!)
", src.oxygen) + else + dat += text("\tOxygen Units: []
", src.oxygen) + if (src.occupant) + dat += "Occupant Statistics:
" + switch(src.occupant.stat) + if(0.0) + var/t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\tHealth %: [] ([])

", (src.occupant.health > 50 ? "" : ""), src.occupant.health, t1) + dat += text("[]\t-Respiratory Damage %: []
", (src.occupant.oxyloss < 60 ? "" : ""), src.occupant.oxyloss) + dat += text("[]\t-Toxin Content %: []
", (src.occupant.toxloss < 60 ? "" : ""), src.occupant.toxloss) + dat += text("[]\t-Burn Severity %: []", (src.occupant.fireloss < 60 ? "" : ""), src.occupant.fireloss) + dat += text("

Close", user) + user << browse(dat, "window=cryo;size=400x500") + else + var/dat = text(" []
", stars("System Statistics:")) + if (src.gas.temperature > 0) + dat += text("\t[]
", stars(text("Temperature (Farenheight): [] (MUST be below 0, add coolant to mixture)", src.temperature))) + else + dat += text("\t[]
", stars(text("Temperature(Farenheight): []", src.temperature))) + if (src.gas.plasma < 1) + dat += text("\t[]
", stars(text("Plasma Units: [] (Add plasma to mixture!)", src.plasma))) + else + dat += text("\t[]
", stars(text("Plasma Units: []", src.plasma))) + if (src.gas.oxygen < 1) + dat += text("\t[]
", stars(text("Oxygen Units: [] (Add oxygen to mixture!)", src.oxygen))) + else + dat += text("\t[]
", stars(text("Oxygen Units: []", src.oxygen))) + if (src.occupant) + dat += "Occupant Statistics:
" + var/t1 = null + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\t[]

", (src.occupant.health > 50 ? "" : ""), stars(text("Health %: [] ([])", src.occupant.health, t1))) + dat += text("[]\t[]
", (src.occupant.oxyloss < 60 ? "" : ""), stars(text("-Respiratory Damage %: []", src.occupant.oxyloss))) + dat += text("[]\t[]
", (src.occupant.toxloss < 60 ? "" : ""), stars(text("-Toxin Content %: []", src.occupant.toxloss))) + dat += text("[]\t[]", (src.occupant.fireloss < 60 ? "" : ""), stars(text("-Burn Severity %: []", src.occupant.fireloss))) + dat += text("

Close", user) + user << browse(dat, "window=cryo;size=400x500") + return + +/obj/machinery/cryo_cell/proc/go_out() + + if (!( src.occupant )) + return + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(26) + if (src.occupant.client) + src.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "celltop" + return + +/obj/machinery/cryo_cell/relaymove(user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/cryo_cell/alter_health(M as mob) + + if (M.health < 0) + if ((src.gas.temperature > 0 || src.plasma < 1)) + return + if (M.stat == 2) + return + if (src.gas.oxygen >= 1) + src.oxygen-- + if (M.oxyloss >= 10) + var/amount = max(0.15, 2) + M.oxyloss -= amount + else + M.oxyloss = 0 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + if ((src.gas.temperature < 0 && src.plasma >= 1)) + src.gas.plasma-- + if (M.toxloss > 5) + var/amount = max(0.1, 2) + M.toxloss -= amount + else + M.toxloss = 0 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + if (istype(M, /mob/human)) + var/H = M + var/ok = 0 + for(var/organ in H.organs) + var/affecting = H.organs[text("[]", organ)] + ok += affecting.heal_damage(5, 5) + //Foreach goto(267) + if (ok) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + if (H.fireloss > 15) + var/amount = max(0.3, 2) + H.fireloss -= amount + else + H.fireloss = 0 + if (M.bruteloss > 10) + var/amount = max(0.3, 2) + M.bruteloss -= amount + else + M.bruteloss = 0 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + M.paralysis += 5 + if (src.gas.temperature < 60) + src.temperature = min(src.temperature + 1, 60) + for(var/E as mob in viewers(1, src)) + if ((E.client && E.machine == src)) + src.attack_hand(E) + //Foreach goto(489) + return + return + +/obj/machinery/cryo_cell/receive_gas(S as obj, source as obj) + + if (!( istype(S, /obj/substance/gas) )) + S = null + del(S) + return + else + src.gas.merge_into(S) + S = null + del(S) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(74) + return + +/obj/machinery/cryo_cell/New() + + ..() + src.layer = 5 + var/obj/overlay/O1 = new /obj/overlay( ) + O1.icon = 'Cryogenic2.dmi' + O1.icon_state = "cellconsole" + O1.pixel_y = -32.0 + O1.layer = 4 + var/obj/overlay/O2 = new /obj/overlay( ) + O2.icon = 'Cryogenic2.dmi' + O2.icon_state = "cellbottom" + O2.pixel_y = -32.0 + src.pixel_y = 32 + src.overlays += O2 + src.overlays += O1 + return + +/obj/item/weapon/flasks/examine() + set src in oview(1) + + usr << text("The flask is []% full", (((src.oxygen + src.plasma) + src.coolant) * 100) / 500) + usr << "The flask can ONLY store liquids." + return + +/mob/human/abiotic() + + if (((src.l_hand && !( src.l_hand.abstract )) || ((src.r_hand && !( src.r_hand.abstract )) || (src.back || (src.wear_mask || (src.head || (src.shoes || (src.w_uniform || (src.wear_suit || (src.w_radio || (src.glasses || (src.ears || src.gloves)))))))))))) + return 1 + else + return 0 + return + +/mob/proc/abiotic() + + if (((src.l_hand && !( src.l_hand.abstract )) || ((src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))) + return 1 + else + return 0 + return + +/datum/data/function/proc/reset() + + return + +/datum/data/function/proc/r_input(href, href_list, user as mob) + + return + +/datum/data/function/proc/display() + + return diff --git a/ss13-40.93.2-decomp/spacestation13/dam_zones.dmi b/ss13-40.93.2-decomp/spacestation13/dam_zones.dmi new file mode 100644 index 0000000..be4ca69 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/dam_zones.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/demo.dm b/ss13-40.93.2-decomp/spacestation13/demo.dm new file mode 100644 index 0000000..32570a7 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/demo.dm @@ -0,0 +1,2876 @@ + +/obj/machinery/door/meteorhit(M as obj) + + src.open() + return + +/obj/machinery/door/Move() + + ..() + if (src.density) + var/location = src.loc + if (istype(location, /turf)) + location.updatecell = 0 + return + +/obj/machinery/door/attackby(I as obj, user as mob) + + if (src.operating) + return + src.add_fingerprint(user) + if ((src.density && istype(I, /obj/item/weapon/card/emag))) + src.operating = 1 + flick("door_spark", src) + sleep(6) + src.operating = null + open() + return 1 + if (istype(usr, /mob/human)) + var/H = usr + var/card = H.wear_id + if (istype(I, /obj/item/weapon/card/id)) + card = I + else + if (!( istype(card, /obj/item/weapon/card/id) )) + return 0 + if ((card.air_access >= src.r_air && (card.lab_access >= src.r_lab && (card.engine_access >= src.r_engine && card.access_level >= src.r_access)))) + if (src.density) + open() + else + close() + else + if (src.density) + flick("door_deny", src) + return + +/obj/machinery/door/window/close() + + ..() + var/T = src.loc + if (T) + T.updatecell = 1 + return + +/obj/machinery/door/window/New() + + ..() + var/T = src.loc + if (T) + T.updatecell = 1 + if ((src.r_air || (src.r_engine || (src.r_access || src.r_lab)))) + src.icon = 'security.dmi' + return + +/obj/machinery/door/window/Bumped(AM as mob|obj) + + if (!( ismob(AM) )) + return + if (!( ticker )) + return + if (src.operating) + return + if ((src.r_air == 0 && (src.r_engine == 0 && (src.r_lab == 0 && src.r_access == 0)))) + src.open() + sleep(50) + src.close() + return + +/obj/machinery/door/window/CheckPass(O as mob|obj, target as turf) + + if (src.density) + var/direct = get_dir(O, target) + if ((direct == NORTH && src.dir & 12)) + return 0 + else + if ((direct == WEST && src.dir & 3)) + return 0 + return 1 + return + +/obj/machinery/door/window/CheckExit(O as mob|obj, target as turf) + + if (src.density) + var/direct = get_dir(O, target) + if ((direct == SOUTH && src.dir & 12)) + return 0 + else + if ((direct == EAST && src.dir & 3)) + return 0 + return 1 + return + +/obj/machinery/door/false_wall/New() + + src.verbs -= /atom/movable/verb/pull + return + +/obj/machinery/door/false_wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall" + return + +/obj/machinery/door/false_wall/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/door/false_wall/attack_hand(user as mob) + + src.add_fingerprint(user) + if (src.density) + if (prob(25)) + src.open() + else + user << "\blue You push the wall but nothing happens!" + else + src.close() + return + +/obj/machinery/door/false_wall/attackby(S as obj, user as mob) + + src.add_fingerprint(user) + if (istype(S, /obj/item/weapon/screwdriver)) + new /obj/item/weapon/sheet/metal( src.loc ) + new /obj/d_girders( src.loc ) + src = null + del(src) + return + else + ..() + return + +/obj/machinery/door/airlock/proc/update() + + if (((!( src.wires & 2 ) || (!( src.wires & 8 ) || (!( src.wires & 32 ) || (!( src.wires & 64 ) || (!( src.wires & 128 ) || !( src.wires & 256 )))))) && src.powered)) + src.locked = 1 + if ((!( src.wires & 1 ) && (!( src.wires & 4 ) && !( src.wires & 16 )))) + src.powered = 0 + else + src.powered = 1 + var/d = src.density + if (src.blocked) + d = "l" + src.icon_state = text("[]door[]", (src.p_open ? "o_" : null), d) + return + +/obj/machinery/door/airlock/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/door/airlock/attack_hand(user as mob) + + if (src.p_open) + user.machine = src + var/t1 = text("Access Panel
\nOrange Wire: []
\nDark Red Wire: []
\nWhite Wire: []
\nYellow Wire: []
\nRed Wire: []
\nBlue Wire: []
\nGreen Wire: []
\nGrey Wire: []
\nBlack Wire: []
\n
\n[]
\n[]", (src.wires & 256 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 128 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 64 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 32 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 16 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 8 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), (src.powered ? "The test light is on." : "The test light is off!")) + user << browse(t1, "window=airlock") + return + +/obj/machinery/door/airlock/Topic(href, href_list) + + if (usr.stat) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if (!( src.p_open )) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + else + if (t1 & 8) + if (src.wires & 8) + src.wires &= 65527 + else + src.wires |= 8 + else + if (t1 & 16) + if (src.wires & 16) + src.wires &= 65519 + else + src.wires |= 16 + else + if (t1 & 32) + if (src.wires & 32) + src.wires &= 65503 + else + src.wires |= 32 + else + if (t1 & 64) + if (src.wires & 64) + src.wires &= 65471 + else + src.wires |= 64 + else + if (t1 & 128) + if (src.wires & 128) + src.wires &= 65407 + else + src.wires |= 128 + else + if (t1 & 256) + if (src.wires & 256) + src.wires &= 65279 + else + src.wires |= 256 + src.update() + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(477) + return + +/obj/machinery/door/airlock/attackby(C as obj, user as mob) + + src.add_fingerprint(user) + if ((istype(C, /obj/item/weapon/weldingtool) && (!( src.operating ) && src.density))) + var/W = C + if (W.weldfuel > 2) + W.weldfuel -= 2 + else + user << "Need more wleding fuel!" + return + if (!( src.blocked )) + src.blocked = 1 + else + src.blocked = null + src.update() + return + else + if (istype(C, /obj/item/weapon/wrench)) + if (src.p_open) + if (src.powered) + src.locked = null + else + user << alert("You need power assist!", null, null, null, null, null) + src.update() + else + if (istype(C, /obj/item/weapon/screwdriver)) + src.p_open = !( src.p_open ) + update() + else + if (istype(C, /obj/item/weapon/crowbar)) + if ((src.density && (!( src.blocked ) && (!( src.operating ) && (!( src.powered ) && !( src.locked )))))) + spawn( 0 ) + src.operating = 1 + flick(text("[]doorc0", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door0", (src.p_open ? "o_" : null)) + sleep(15) + src.density = 0 + src.opacity = 0 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + else + ..() + return + +/obj/machinery/door/airlock/open() + + if ((src.blocked || (src.locked || !( src.powered )))) + return + ..() + return + +/obj/machinery/door/airlock/close() + + if (!( src.powered )) + return + ..() + var/T = src.loc + if (T) + T.firelevel = 0 + return + +/obj/machinery/door/firedoor/open() + + usr << "This is a remote firedoor!" + return + +/obj/machinery/door/firedoor/close() + + usr << "This is a remote firedoor!" + return + +/obj/machinery/door/firedoor/attackby(C as obj, user as mob) + + src.add_fingerprint(user) + if ((istype(C, /obj/item/weapon/weldingtool) && (!( src.operating ) && src.density))) + var/W = C + if (W.weldfuel > 2) + W.weldfuel -= 2 + if (!( src.blocked )) + src.blocked = 1 + src.icon_state = "doorl" + else + src.blocked = 0 + src.icon_state = "door1" + return + else + if (!( istype(C, /obj/item/weapon/crowbar) )) + return + if ((src.density && (!( src.blocked ) && !( src.operating )))) + spawn( 0 ) + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + return + +/obj/machinery/door/firedoor/proc/openfire() + set src in oview(1) + + if ((src.operating || src.blocked)) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + +/obj/machinery/door/firedoor/proc/closefire() + set src in oview(1) + + if (src.operating) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + src.opacity = 1 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + T.firelevel = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/door/New() + + ..() + var/T = src.loc + if (istype(T, /turf)) + if (src.density) + T.updatecell = 0 + return + +/obj/machinery/door/proc/open() + + if (src.operating) + return + src.operating = 1 + flick(text("[]doorc0", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door0", (src.p_open ? "o_" : null)) + sleep(15) + src.density = 0 + src.opacity = 0 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + src.operating = 0 + return + +/obj/machinery/door/proc/close() + + if (src.operating) + return + src.operating = 1 + flick(text("[]doorc1", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door1", (src.p_open ? "o_" : null)) + src.density = 1 + if (src.visible) + src.opacity = 1 + var/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/igniter/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/igniter/attack_hand(user as mob) + + ..() + src.on = !( src.on ) + src.icon_state = text("igniter[]", src.on) + src.add_fingerprint(user) + return + +/obj/machinery/igniter/process() + + if (src.on) + var/T = src.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (T.firelevel < 900000.0) + T.firelevel = T.poison + return + +/obj/machinery/firealarm/burn(fi_amount) + + src.alarm() + return + +/obj/machinery/firealarm/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/firealarm/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.detecting = !( src.detecting ) + if (src.detecting) + viewers(user, null) << text("\red [] has reconnected []'s detecting unit!", user, src) + else + viewers(user, null) << text("\red [] has disconnected []'s detecting unit!", user, src) + else + src.alarm() + src.add_fingerprint(user) + return + +/obj/machinery/firealarm/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + src.alarm() + src.time = 0 + src.timing = 0 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(68) + return + +/obj/machinery/firealarm/attack_hand(user as mob) + + user.machine = src + var/A = src.loc + if (istype(user, /mob/human)) + A = A.loc + if (A.fire) + var/d1 = text("Reset - Lockdown", src) + else + d1 = text("Alarm - Lockdown", src) + if (src.timing) + var/d2 = text("Stop Time Lock", src) + else + d2 = text("Initiate Time Lock", src) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("Fire alarm []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + user << browse(dat, "window=firealarm") + else + A = A.loc + if (A.fire) + d1 = text("[]", src, stars("Reset - Lockdown")) + else + d1 = text("[]", src, stars("Alarm - Lockdown")) + if (src.timing) + d2 = text("[]", src, stars("Stop Time Lock")) + else + d2 = text("[]", src, stars("Initiate Time Lock")) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("[] []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", stars("Fire alarm"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + user << browse(dat, "window=firealarm") + return + +/obj/machinery/firealarm/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["reset"]) + src.reset() + else + if (href_list["alarm"]) + src.alarm() + else + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(194) + src.add_fingerprint(usr) + else + usr << browse(null, "window=firealarm") + return + return + +/obj/machinery/firealarm/proc/reset() + + if (!( src.working )) + return + var/A = src.loc + A = A.loc + if (!( istype(A, /area) )) + return + A.fire = 0 + if (A.icon_state == "blue-red") + A.icon_state = "red" + else + A.icon_state = null + for(var/obj/machinery/door/firedoor/D as obj in A) + if (D.density) + spawn( 0 ) + openfire() + return + //Foreach goto(93) + return + +/obj/machinery/firealarm/proc/alarm() + + if (!( src.working )) + return + var/A = src.loc + A = A.loc + if (!( istype(A, /area) )) + return + A.firealert() + return + +/obj/machinery/dispenser/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(25)) + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + else + return + +/obj/machinery/dispenser/meteorhit() + + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + src = null + del(src) + return + return + +/obj/machinery/dispenser/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/dispenser/attack_hand(user as mob) + + user.machine = src + var/dat = text("Loaded Tank Dispensing Unit
\nOxygen: [] []
\nPlasma: [] []
\n
", src.o2tanks, (src.o2tanks ? text("Dispense", src) : "empty"), src.pltanks, (src.pltanks ? text("Dispense", src) : "empty")) + user << browse(dat, "window=dispenser") + return + +/obj/machinery/dispenser/Topic(href, href_list) + + if (usr.stat) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["oxygen"]) + if (text2num(href_list["oxygen"])) + if (src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + if (istype(src.loc, /mob)) + attack_hand(src.loc) + else + if (href_list["plasma"]) + if (text2num(href_list["plasma"])) + if (src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + if (istype(src.loc, /mob)) + attack_hand(src.loc) + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(275) + else + usr << browse(null, "window=dispenser") + return + return + +/obj/item/weapon/clothing/burn(fi_amount) + + if (fi_amount > src.s_fire) + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + src = null + del(src) + return + return + return + return 0 + return 1 + return + +/obj/item/weapon/clothing/gloves/examine() + set src in usr + + ..() + return + +/obj/item/weapon/clothing/shoes/orange/attack_self(user as mob) + + if (src.chained) + src.chained = null + new /obj/item/weapon/handcuffs( user.loc ) + src.icon_state = "o_shoes" + return + +/obj/item/weapon/clothing/shoes/orange/attackby(H as obj, loc) + + if ((istype(H, /obj/item/weapon/handcuffs) && !( src.chained ))) + H = null + del(H) + src.chained = 1 + src.icon_state = "o_shoes1" + return + +/obj/item/weapon/clothing/mask/muzzle/attack_paw(user as mob) + + if (src == user.wear_mask) + return + else + ..() + return + +/obj/item/weapon/tank/attack_self(user as mob) + + user.machine = src + if (!( src.gas )) + return + var/dat = text("Tank
\nContains/Capacity [] / []
\nInterals Valve: [] Gas Flow
\n\t- - - [] + + +
\n
\nClose\n
", src.gas.tot_gas(), src.maximum, src, ((src.loc == user && user.internal == src) ? "Stop" : "Restore"), src, src, src, src.i_used, src, src, src, user) + user << browse(dat, "window=tank;size=600x300") + return + +/obj/item/weapon/tank/Topic(href, href_list) + + if (usr.stat) + return + if (src.loc == usr) + usr.machine = src + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.i_used += cp + src.i_used = min(max(round(src.i_used), 0), 10000) + if ((href_list["stat"] && src.loc == usr)) + if (usr.internal == src) + usr.internal = null + return + if (usr.internal) + usr.internal = null + if ((!( usr.wear_mask ) || !( usr.wear_mask.flags & 8 ))) + return + usr.internal = src + usr << "\blue Now running on internals!" + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src.loc)) + if ((M.client && M.machine == src)) + src.attack_self(M) + //Foreach goto(206) + else + usr << browse(null, "window=tank") + return + return + +/obj/item/weapon/tank/proc/process(M as mob, G as obj) + + var/amount = src.i_used + var/total = src.gas.tot_gas() + if (amount > total) + amount = total + if (total > 0) + G.transfer_from(src.gas, amount) + return G + return + +/obj/item/weapon/tank/attack(M as mob, user as mob) + + ..() + if ((prob(30) && M.stat < 2)) + var/H = M + if ((istype(H, /mob/human) && (istype(H, /obj/item/weapon/clothing/head) && (H.flags & 8 && prob(80))))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.stunned < time) + M.stunned = time + M.stat = 1 + for(var/O as mob in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been knocked unconscious!", M) + //Foreach goto(169) + M << text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", (time * 100) / 120) + return + +/obj/item/weapon/tank/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/item/weapon/tank/Del() + + src.gas = null + del(src.gas) + return + return + +/obj/item/weapon/tank/burn(fi_amount) + + if ((fi_amount * src.gas.tot_gas()) > (src.maximum * 3.75E7)) + src.turf_add(get_turf(src.loc), src.gas.tot_gas()) + src = null + del(src) + return + return + +/obj/item/weapon/tank/examine() + set src in view(1) + + usr << text("\blue The \icon[] contains [] unit\s of gas.", src, src.gas.tot_gas()) + return + +/obj/item/weapon/tank/oxygentank/New() + + ..() + src.gas.oxygen = src.maximum + return + +/obj/item/weapon/tank/jetpack/New() + + ..() + src.gas.oxygen = src.maximum + return + +/obj/item/weapon/tank/jetpack/verb/toggle() + + src.on = !( src.on ) + src.icon_state = text("jetpack[]", src.on) + return + +/obj/item/weapon/tank/jetpack/proc/allow_thrust(num, user as mob) + + if (!( src.on )) + return 0 + if ((num < 1 || src.gas.tot_gas() < num)) + return 0 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, num) + if (G.oxygen >= 100) + return 1 + if (G.plasma > 10) + if (user) + var/d = G.plasma / 2 + d = min(abs(user.health + 100), d, 25) + user.fireloss += d + user.health = (((100 - user.oxyloss) - user.toxloss) - user.fireloss) - user.bruteloss + return (G.oxygen >= 75 ? 0.5 : 0) + else + if (G.oxygen >= 75) + return 0.5 + else + return 0 + G = null + del(G) + return + +/obj/item/weapon/tank/anesthetic/New() + + ..() + src.gas.sl_gas = 1000 + return + +/obj/item/weapon/tank/plasmatank/proc/ignite() + + if ((src.gas.plasma < 1600000.0 || src.temperature < 500)) + var/T = get_turf(src.loc) + T.poison += src.gas.plasma + T.firelevel = T.poison + T.res_vars() + if ((src.gas.temperature > 450 && src.plasma == 1600000.0)) + var/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/U as turf in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 1) && (U.y >= (T.y - 1) && (U.x <= (T.x + 2) && U.x >= (T.x - 2))))) + zone = 3 + if ((U.y <= (T.y + 1) && (U.y >= (T.y - 1) && (U.x <= (T.x + 1) && U.x >= (T.x - 1))))) + zone = 2 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(342) + U.ex_act(zone) + //Foreach goto(170) + else + if ((src.gas.temperature > 300 && src.plasma == 1600000.0)) + var/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/U as turf in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 2) && (U.y >= (T.y - 2) && (U.x <= (T.x + 2) && U.x >= (T.x - 2))))) + zone = 3 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(598) + U.ex_act(zone) + //Foreach goto(498) + src.master = null + del(src.master) + src = null + del(src) + return + return + var/T = src.loc + while(!( istype(T, /turf) )) + T = T.loc + src.master.loc = null + for(var/M as mob in range(T, null)) + flick("flash", M.flash) + //Foreach goto(732) + var/m_range = 2 + for(var/obj/machinery/atmoalter/canister/C as obj in range(2, T)) + if (!( C.destroyed )) + if (C.gas.plasma >= 35000) + C.destroyed = 1 + m_range++ + //Foreach goto(776) + var/min = m_range + var/med = m_range * 2 + var/max = m_range * 3 + var/u_max = m_range * 4 + var/sw = locate(max(T.x - u_max, 1), max(T.y - u_max, 1), T.z) + var/ne = locate(min(T.x + u_max, world.maxx), min(T.y + u_max, world.maxy), T.z) + for(var/U as turf in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + max) && (U.y >= (T.y - max) && (U.x <= (T.x + max) && U.x >= (T.x - max))))) + zone = 3 + if ((U.y <= (T.y + med) && (U.y >= (T.y - med) && (U.x <= (T.x + med) && U.x >= (T.x - med))))) + zone = 2 + if ((U.y <= (T.y + min) && (U.y >= (T.y - min) && (U.x <= (T.x + min) && U.x >= (T.x - min))))) + zone = 1 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(1217) + U.ex_act(zone) + //Foreach goto(961) + src.master = null + del(src.master) + src = null + del(src) + return + return + +/obj/item/weapon/tank/plasmatank/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/assembly/rad_ignite)) + var/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/r_i_ptank/R = new /obj/item/weapon/assembly/r_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = S.initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + u_equip(S) + user.r_hand = R + else + u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + S = null + del(S) + if (istype(W, /obj/item/weapon/assembly/prox_ignite)) + var/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/m_i_ptank/R = new /obj/item/weapon/assembly/m_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = S.initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + u_equip(S) + user.r_hand = R + else + u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + S = null + del(S) + return + +/obj/item/weapon/tank/plasmatank/New() + + ..() + src.gas.plasma = src.maximum + return + +/obj/meteor/small/Move() + + if (src.steps < 7) + src.steps++ + if (src.steps >= 7) + src.icon_state = "smallf" + else + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + 5 + ..() + if (src.z != 1) + src = null + del(src) + return + spawn( 3 ) + step(src, WEST) + if (prob(30)) + step(src, pick(NORTH, SOUTH)) + return + return + +/obj/meteor/New() + + ..() + sleep(1) + step(src, WEST) + return + +/obj/meteor/Move() + + if (src.steps < 7) + src.steps++ + if (src.steps >= 7) + src.icon_state = "flaming" + else + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + 5 + ..() + if (src.z != 1) + src = null + del(src) + return + spawn( 3 ) + step(src, WEST) + if (prob(30)) + step(src, pick(NORTH, SOUTH)) + return + return + +/obj/meteor/Bump(A as mob|obj|turf|area) + + spawn( 0 ) + if (A) + A.meteorhit(src) + if (--src.hits <= 0) + src = null + del(src) + return + return + return + +/obj/meteor/ex_act(severity) + + if (severity < 4) + src = null + del(src) + return + return + +/obj/secloset/alter_health() + + return src.loc + return + +/obj/secloset/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/secloset/personal/New() + + ..() + sleep(2) + new /obj/item/weapon/storage/backpack( src ) + new /obj/item/weapon/radio/headset( src ) + new /obj/item/weapon/radio/signaler( src ) + new /obj/item/weapon/pen( src ) + return + +/obj/secloset/personal/attackby(W as obj, user as mob) + + if (src.opened) + user.drop_item() + W.loc = src.loc + else + if (istype(W, /obj/item/weapon/card/id)) + var/list/L = list( ) + if (W.assignment == "Systems") + src.allowed = null + src.icon_state = "0secloset0" + src.locked = 1 + src.desc = "The first card swiped gains control." + return + if (src.allowed) + L = dd_text2list(src.allowed, ",") + if ((L.Find(W.assignment) || (!( src.allowed ) || L.Find(text("m[]", W.registered))))) + src.locked = !( src.locked ) + for(var/O as mob in viewers(user, 3)) + if ((O.client && !( O.blinded ))) + O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user) + //Foreach goto(185) + src.icon_state = text("[]secloset0", (src.locked ? "1" : null)) + if (!( src.allowed )) + src.allowed = text("m[],Captain,Head of Personnel", W.registered) + src.desc = text("Owned by [], Clear by using a card of rank 'Systems'", W.registered) + else + user << "\red Access Denied" + else + user << "\red It's closed..." + return + +/obj/secloset/security2/New() + + ..() + sleep(2) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/camera( src ) + new /obj/item/weapon/f_print_scanner( src ) + new /obj/item/weapon/f_print_scanner( src ) + new /obj/item/weapon/f_print_scanner( src ) + return + +/obj/secloset/security1/New() + + ..() + sleep(2) + new /obj/item/weapon/storage/flashbang_kit( src ) + new /obj/item/weapon/storage/handcuff_kit( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/flash( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/helmet( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + return + +/obj/secloset/highsec/New() + + ..() + sleep(2) + new /obj/item/weapon/gun/energy/laser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/flash( src ) + new /obj/item/weapon/storage/id_kit( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/helmet( src ) + return + +/obj/secloset/animal/New() + + ..() + sleep(2) + new /obj/item/weapon/radio/signaler( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + return + +/obj/secloset/medical1/New() + + ..() + sleep(2) + new /obj/item/weapon/bottle/toxins( src ) + new /obj/item/weapon/bottle/rejuvenators( src ) + new /obj/item/weapon/bottle/s_tox( src ) + new /obj/item/weapon/bottle/s_tox( src ) + new /obj/item/weapon/bottle/toxins( src ) + new /obj/item/weapon/bottle/r_epil( src ) + new /obj/item/weapon/bottle/r_ch_cough( src ) + new /obj/item/weapon/pill_canister/Tourette( src ) + new /obj/item/weapon/pill_canister/cough( src ) + new /obj/item/weapon/pill_canister/epilepsy( src ) + new /obj/item/weapon/pill_canister/sleep( src ) + new /obj/item/weapon/pill_canister/antitoxin( src ) + new /obj/item/weapon/pill_canister/placebo( src ) + new /obj/item/weapon/storage/firstaid/syringes( src ) + new /obj/item/weapon/storage/gl_kit( src ) + new /obj/item/weapon/dropper( src ) + return + +/obj/secloset/medical2/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + return + +/obj/secloset/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + src = null + del(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + src = null + del(src) + return + else + return + +/obj/secloset/meteorhit(O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(29) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src.icon_state = "secloset1" + src = null + del(src) + return + return + +/obj/secloset/attackby(W as obj, user as mob) + + if (src.opened) + user.drop_item() + W.loc = src.loc + else + if (istype(W, /obj/item/weapon/card/id)) + var/list/L = list( ) + if (W.allowed) + L = dd_text2list(W.allowed, ",") + if ((L.Find(W.assignment) || !( src.allowed ))) + src.locked = !( src.locked ) + for(var/O as mob in viewers(user, 3)) + if ((O.client && !( O.blinded ))) + O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user) + //Foreach goto(121) + src.icon_state = text("[]secloset0", (src.locked ? "1" : null)) + else + user << "\red Access Denied" + else + user << "\red It's closed..." + return + +/obj/secloset/relaymove(user as mob) + + if (user.stat) + return + if (!( src.locked )) + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(36) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(78) + src.icon_state = "secloset1" + src.opened = 1 + else + user << "\blue It's welded shut!" + for(var/M as mob in hearers(src, null)) + M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) + //Foreach goto(170) + return + +/obj/secloset/MouseDrop_T(O as mob|obj, user as mob) + + if ((user.restrained() || user.stat)) + return + if ((!( istype(O, /atom/movable) ) || (O.anchored || (get_dist(user, src) > 1 || (get_dist(user, O) > 1 || user.contents.Find(src)))))) + return + step_towards(O, src.loc) + if (user != O) + for(var/B as mob in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + B << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(115) + src.add_fingerprint(user) + return + +/obj/secloset/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/secloset/attack_hand(user as mob) + + src.add_fingerprint(user) + if (!( src.opened )) + if (!( src.locked )) + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(43) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(85) + src.icon_state = "secloset1" + src.opened = 1 + else + usr << "\blue It's locked tight!" + else + for(var/obj/item/I as obj in src.loc) + if (!( I.anchored )) + I.loc = src + //Foreach goto(176) + for(var/M as mob in src.loc) + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + //Foreach goto(226) + src.icon_state = "secloset0" + src.opened = 0 + return + +/obj/morgue/proc/update() + + if (src.connected) + src.icon_state = "morgue0" + else + if (src.contents.len) + src.icon_state = "morgue2" + else + src.icon_state = "morgue1" + return + +/obj/morgue/alter_health() + + return src.loc + return + +/obj/morgue/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/morgue/attack_hand(user as mob) + + if (src.connected) + for(var/atom/movable/A as mob|obj in src.connected.loc) + if (!( A.anchored )) + A.loc = src + //Foreach goto(28) + src.connected = null + del(src.connected) + else + src.connected = new /obj/m_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.loc = src.connected.loc + //Foreach goto(168) + src.connected.icon_state = "morguet" + else + src.connected = null + del(src.connected) + src.add_fingerprint(user) + update() + return + +/obj/morgue/attackby(P as obj, user as mob) + + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != P) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("Morgue- '[]'", t) + else + src.name = "Morgue" + src.add_fingerprint(user) + return + +/obj/morgue/relaymove(user as mob) + + if (user.stat) + return + src.connected = new /obj/m_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.loc = src.connected.loc + //Foreach goto(106) + src.connected.icon_state = "morguet" + else + src.connected = null + del(src.connected) + return + +/obj/m_tray/CheckPass(D as obj) + + if (istype(D, /obj/item/weapon/dummy)) + return 1 + else + return ..() + return + +/obj/m_tray/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/m_tray/attack_hand(user as mob) + + if (src.connected) + for(var/atom/movable/A as mob|obj in src.loc) + if (!( A.anchored )) + A.loc = src.connected + //Foreach goto(26) + src.connected.connected = null + src.connected.update() + src.add_fingerprint(user) + src = null + del(src) + return + return + +/obj/m_tray/MouseDrop_T(O as mob|obj, user as mob) + + if ((!( istype(O, /atom/movable) ) || (O.anchored || (get_dist(user, src) > 1 || (get_dist(user, O) > 1 || user.contents.Find(src)))))) + return + O.loc = src.loc + if (user != O) + for(var/B as mob in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + B << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(99) + return + +/obj/closet/alter_health() + + return src.loc + return + +/obj/closet/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/closet/syndicate/nuclear/New() + + ..() + sleep(2) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/storage/handcuff_kit( src ) + new /obj/item/weapon/storage/flashbang_kit( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink( src ) + U.uses = 5 + return + +/obj/closet/emcloset/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/oxygentank( src ) + new /obj/item/weapon/clothing/mask/gasmask( src ) + return + +/obj/closet/l3closet/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/oxygentank( src ) + new /obj/item/weapon/clothing/mask/gasmask( src ) + new /obj/item/weapon/clothing/suit/bio_suit( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/head/bio_hood( src ) + return + +/obj/closet/wardrobe/New() + + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/red/New() + + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/pink/New() + + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/black/New() + + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + return + +/obj/closet/wardrobe/green/New() + + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + return + +/obj/closet/wardrobe/orange/New() + + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + return + +/obj/closet/wardrobe/yellow/New() + + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + return + +/obj/closet/wardrobe/mixed/New() + + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/white/New() + + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/storage/stma_kit( src ) + return + +/obj/closet/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + src = null + del(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + src = null + del(src) + return + else + return + +/obj/closet/meteorhit(O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(29) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src.icon_state = "emcloset1" + src = null + del(src) + return + return + +/obj/closet/attackby(W as obj, user as mob) + + if ((src.opened || (W.damtype != "fire" || !( istype(W, /obj/item/weapon/weldingtool) )))) + user.drop_item() + W.loc = src.loc + else + src.welded = !( src.welded ) + for(var/M as mob in viewers(user, null)) + if (M.client) + M.show_message(text("\red [] has been [] by [].", src, (src.welded ? "welded shut" : "unwelded"), user), 3, "\red You hear welding.", 2) + //Foreach goto(82) + return + +/obj/closet/relaymove(user as mob) + + if (user.stat) + return + if (!( src.welded )) + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(36) + for(var/M as mob in src) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(78) + src.icon_state = "emcloset1" + src.opened = 1 + else + user << "\blue It's welded shut!" + for(var/M as mob in hearers(src, null)) + M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) + //Foreach goto(170) + return + +/obj/closet/MouseDrop_T(O as mob|obj, user as mob) + + if ((user.restrained() || user.stat)) + return + if ((!( istype(O, /atom/movable) ) || (O.anchored || (get_dist(user, src) > 1 || (get_dist(user, O) > 1 || user.contents.Find(src)))))) + return + step_towards(O, src.loc) + for(var/M as mob in viewers(user, null)) + if ((M.client && !( M.blinded ))) + M << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(104) + src.add_fingerprint(user) + return + +/obj/closet/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/closet/attack_hand(user as mob) + + src.add_fingerprint(user) + if (!( src.opened )) + if (!( src.welded )) + for(var/obj/item/I as obj in src) + I.loc = src.loc + //Foreach goto(43) + for(var/M as mob in src) + if (!( M.buckled )) + M.loc = src.loc + if (M.client) + M.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(85) + src.icon_state = "emcloset1" + src.opened = 1 + else + usr << "\blue It's welded shut!" + else + for(var/obj/item/I as obj in src.loc) + if (!( I.anchored )) + I.loc = src + //Foreach goto(187) + for(var/M as mob in src.loc) + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + //Foreach goto(237) + src.icon_state = src.original + src.opened = 0 + return + +/obj/closet/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/stool/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(5)) + src = null + del(src) + return + else + return + +/obj/stool/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + src = null + del(src) + return + return + return + +/obj/stool/bed/attackby(W as obj, user as mob) + + return + +/obj/stool/chair/attackby(W as obj, user as mob) + + ..() + if (istype(W, /obj/item/weapon/assembly/shock_kit)) + var/obj/stool/chair/e_chair/E = new /obj/stool/chair/e_chair( src.loc ) + E.dir = src.dir + E.part1 = W + W.loc = E + W.master = E + user.u_equip(W) + W.layer = W.initial(W.layer) + src = null + del(src) + return + return + +/obj/stool/chair/e_chair/New() + + src.overl = new /atom/movable/overlay( src.loc ) + src.overl.icon = 'Icons.dmi' + src.overl.icon_state = "e_chairo0" + src.overl.layer = 5 + src.overl.name = "electrified chair" + src.overl.master = src + return + +/obj/stool/chair/e_chair/Del() + + src.overl = null + del(src.overl) + ..() + return + +/obj/stool/chair/e_chair/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + var/obj/stool/chair/C = new /obj/stool/chair( src.loc ) + C.dir = src.dir + src.part1.loc = src.loc + src.part1.master = null + src.part1 = null + src = null + del(src) + return + return + +/obj/stool/chair/e_chair/verb/toggle_power() + set src in oview(1) + + if ((usr.stat || (usr.restrained() || (!( usr.canmove ) || usr.lying)))) + return + src.on = !( src.on ) + src.icon_state = text("e_chair[]", src.on) + src.overl.icon_state = text("e_chairo[]", src.on) + return + +/obj/stool/chair/e_chair/proc/shock() + + if (!( src.on )) + return + if ((src.last_time + 50) > world.time) + return + src.last_time = world.time + flick("e_chairs", src) + flick("e_chairos", src.overl) + for(var/M as mob in src.loc) + M.burn(7.5E7) + M << "\red You feel a deep shock curse through your body!" + sleep(1) + burn(7.5E7) + M.stunned = 600 + //Foreach goto(72) + for(var/M as mob in hearers(src, null)) + if (!( M.blinded )) + M << "\red The electric chair went off!" + else + M << "\red You hear a deep sharp shock." + //Foreach goto(142) + return + +/obj/stool/chair/ex_act(severity) + + if (severity < 4) + for(var/M as mob in src.loc) + M.buckled = null + //Foreach goto(28) + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(5)) + src = null + del(src) + return + else + return + +/obj/stool/chair/New() + + src.verbs -= /atom/movable/verb/pull + if (src.dir == NORTH) + src.layer = FLY_LAYER + ..() + return + +/obj/stool/chair/Del() + + for(var/M as mob in src.loc) + if (M.buckled == src) + M.buckled = null + //Foreach goto(17) + ..() + return + +/obj/stool/chair/verb/rotate() + set src in oview(1) + + src.dir = turn(src.dir, 90) + if (src.dir == NORTH) + src.layer = FLY_LAYER + else + src.layer = OBJ_LAYER + return + +/obj/stool/chair/MouseDrop_T(M as mob, user as mob) + + if ((!( istype(M, /mob) ) || (get_dist(src, user) > 1 || (M.loc != src.loc || (user.restrained() || usr.stat))))) + return + if (M == usr) + for(var/O as mob in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] buckles in!", user) + //Foreach goto(83) + else + for(var/O as mob in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] is buckled in by []!", M, user) + //Foreach goto(137) + M.anchored = 1 + M.buckled = src + M.loc = src.loc + src.add_fingerprint(user) + return + +/obj/stool/chair/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/stool/chair/attack_hand(user as mob) + + for(var/M as mob in src.loc) + if (M.buckled) + if (M != user) + for(var/O as mob in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] is unbuckled by [].", M, user) + //Foreach goto(64) + else + for(var/O as mob in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unbuckles.", M) + //Foreach goto(123) + M.anchored = 0 + M.buckled = null + src.add_fingerprint(user) + //Foreach goto(17) + return + +/obj/grille/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(25)) + src.health -= 11 + src.healthcheck() + else + return + +/obj/grille/meteorhit() + + if (src.icon_state == "flaming") + src.health -= 3 + src.healthcheck() + return + +/obj/grille/CheckPass(B as obj) + + if ((istype(B, /obj/effects) || (istype(B, /obj/item/weapon/dummy) || (istype(B, /obj/beam) || istype(B, /obj/meteor/small))))) + return 1 + else + if (istype(B, /obj/bullet)) + return prob(30) + else + return !( src.density ) + return + +/obj/grille/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.health = 0 + else + if ((istype(W, /obj/item/weapon/screwdriver) && (istype(src.loc, /turf/station) || src.anchored))) + src.anchored = !( src.anchored ) + user << (src.anchored ? "You have fastened the grille to the floor." : "You have unfastened the grill.") + else + switch(W.damtype) + if("fire") + src.health -= W.force + if("brute") + src.health -= src.force * 0.1 + else + src.healthcheck() + ..() + return + +/obj/grille/proc/healthcheck() + + if (src.health <= 0) + if (!( src.destroyed )) + src.icon_state = "brokengrille" + src.density = 0 + src.destroyed = 1 + new /obj/item/weapon/rods( src.loc ) + else + if (src.health <= -10.0) + new /obj/item/weapon/rods( src.loc ) + src = null + del(src) + return + return + +/obj/window/las_act(flag) + + if (flag == "bullet") + new /obj/item/weapon/shard( src.loc ) + src = null + del(src) + return + return + +/obj/window/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + new /obj/item/weapon/shard( src.loc ) + src = null + del(src) + return + if(3.0) + if (prob(50)) + new /obj/item/weapon/shard( src.loc ) + src = null + del(src) + return + else + return + +/obj/window/CheckPass(O as mob|obj, target as turf) + + if (istype(O, /obj/beam)) + return 1 + if (src.dir == SOUTHWEST) + return 0 + else + if (get_dir(target, O.loc) == src.dir) + return 0 + return 1 + return + +/obj/window/CheckExit(O as mob|obj, target as turf) + + if (istype(O, /obj/beam)) + return 1 + if (get_dir(O.loc, target) == src.dir) + return 0 + return 1 + return + +/obj/window/meteorhit() + + src.health = 0 + new /obj/item/weapon/shard( src.loc ) + src = null + del(src) + return + return + +/obj/window/hitby(W as obj) + + ..() + src.health = max(0, src.health - W.throwforce) + if (src.health <= 7) + src.anchored = 0 + step(src, get_dir(W, src)) + if (src.health <= 0) + new /obj/item/weapon/shard( src.loc ) + src = null + del(src) + return + ..() + return + +/obj/window/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + src.anchored = !( src.anchored ) + user << (src.anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") + else + src.health = max(0, src.health - W.force) + if (src.health <= 7) + src.anchored = 0 + step(src, get_dir(user, src)) + if (src.health <= 0) + if (src.dir == SOUTHWEST) + var/index = null + index = 0 + while(index < 2) + new /obj/item/weapon/shard( src.loc ) + index++ + else + new /obj/item/weapon/shard( src.loc ) + src = null + del(src) + return + ..() + return + +/obj/window/verb/rotate() + set src in oview(1) + + if (src.anchored) + usr << "It is fastened to the floor; therefore, you can't rotate it!" + return 0 + else + if (src.dir == SOUTHWEST) + usr << "You can't rotate this! " + return 0 + src.dir = turn(src.dir, 90) + src.ini_dir = src.dir + return + +/obj/window/New() + + ..() + src.ini_dir = src.dir + return + +/obj/window/Move() + + ..() + src.dir = src.ini_dir + return + +/atom/proc/meteorhit(meteor as obj) + + return + return + +/atom/proc/allow_drop() + + return 1 + return + +/atom/proc/CheckPass(O as mob|obj|turf|area) + + return (!( O.density ) || !( src.density )) + return + +/atom/proc/CheckExit() + + return 1 + return + +/atom/proc/HasEntered(AM as mob|obj) + + return + +/atom/proc/HasProximity(AM as mob|obj) + + return + +/atom/movable/overlay/attackby(a, b) + + if (src.master) + return src.master.attackby(a, b) + return + +/atom/movable/overlay/attack_paw(a, b, c) + + if (src.master) + return src.master.attack_paw(a, b, c) + return + +/atom/movable/overlay/attack_hand(a, b, c) + + if (src.master) + return src.master.attack_hand(a, b, c) + return + +/atom/movable/overlay/New() + + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(17) + return + +/turf/CheckPass(O as mob|obj|turf|area) + + return !( src.density ) + return + +/turf/New() + + ..() + for(var/atom/movable/AM as mob|obj in src) + spawn( 0 ) + src.Entered(AM) + return + //Foreach goto(19) + return + +/turf/Enter(O as mob|obj, forget as mob|obj|turf|area) + + if (!( isturf(O.loc) )) + return 1 + for(var/atom/A as mob|obj|turf|area in O.loc) + if ((!( A.CheckExit(O, src) ) && (O != A && A != forget))) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(34) + for(var/atom/A as mob|obj|turf|area in src) + if ((A.flags & 512 && get_dir(A, O) & A.dir)) + if ((!( A.CheckPass(O, src) ) && (A != src && A != forget))) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(127) + for(var/atom/A as mob|obj|turf|area in src) + if ((!( A.CheckPass(O, src) ) && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(244) + if (src != forget) + if (!( src.CheckPass(O, src) )) + if (O) + O.Bump(src, 1) + return 0 + return 1 + return + +/turf/Entered(M as mob|obj) + + ..() + for(var/atom/A as mob|obj|turf|area in src) + spawn( 0 ) + if ((A && M)) + A.HasEntered(M, 1) + return + //Foreach goto(19) + for(var/atom/A as mob|obj|turf|area in range(1, null)) + spawn( 0 ) + if ((A && M)) + A.HasProximity(M, 1) + return + //Foreach goto(86) + return + +/turf/station/r_wall/updatecell() + + if (src.state == 2) + return + else + ..() + return + +/turf/station/r_wall/proc/update() + + if (src.d_state > 6) + src.d_state = 0 + src.state = 1 + if (src.state == 2) + src.icon_state = text("r_wall[]", (src.d_state > 0 ? text("-[]", src.d_state) : null)) + src.opacity = 1 + src.density = 1 + src.updatecell = 0 + else + src.icon_state = "r_girder" + src.opacity = 0 + src.density = 1 + src.updatecell = 1 + return + +/turf/station/r_wall/unburn() + + src.update() + return + +/turf/station/r_wall/meteorhit(M as obj) + + if ((M.icon_state == "flaming" && prob(30))) + if (src.state == 2) + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + update() + else + if ((prob(20) && src.state == 1)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + return + +/turf/station/r_wall/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(75)) + src.opacity = 0 + src.updatecell = 1 + src.state = 1 + src.intact = 0 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + else + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + if(3.0) + if (prob(15)) + src.opacity = 0 + src.updatecell = 1 + src.intact = 0 + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + update() + else + return + +/turf/station/r_wall/attackby(W as obj, user as mob) + + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (src.state == 2) + if (istype(W, /obj/item/weapon/wrench)) + if (src.d_state == 4) + var/T = user.loc + user << "\blue Cutting support rods." + sleep(40) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.d_state = 5 + else + if (istype(W, /obj/item/weapon/wirecutters)) + if (src.d_state == 0) + src.d_state = 1 + new /obj/item/weapon/rods( src ) + else + if (istype(W, /obj/item/weapon/weldingtool)) + if (src.d_state == 2) + var/T = user.loc + user << "\blue Slicing metal cover." + sleep(60) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.d_state = 3 + else + if (src.d_state == 5) + var/T = user.loc + user << "\blue Removing support rods." + sleep(100) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.d_state = 6 + new /obj/item/weapon/rods( src ) + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.d_state == 1) + var/T = user.loc + user << "\blue Removing support lines." + sleep(40) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.d_state = 2 + else + if (istype(W, /obj/item/weapon/crowbar)) + if (src.d_state == 3) + var/T = user.loc + user << "\blue Prying cover off." + sleep(100) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.d_state = 4 + else + if (src.d_state == 6) + var/T = user.loc + user << "\blue Prying outer sheath off." + sleep(100) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.d_state = 7 + new /obj/item/weapon/sheet/metal( src ) + else + if (istype(W, /obj/item/weapon/sheet/metal)) + var/T = user.loc + user << "\blue Repairing wall." + sleep(100) + if ((user.loc == T && (equipped() == W && (!( user.stat ) && src.state == 2)))) + src.d_state = 0 + if (W.amount > 1) + W.amount-- + else + W = null + del(W) + if (src.state == 1) + if (istype(W, /obj/item/weapon/wrench)) + user << "\blue Now dismantling girders." + var/T = user.loc + sleep(100) + if ((user.loc == T && (equipped() == W && !( user.stat )))) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + else + if (istype(W, /obj/item/weapon/sheet/r_metal)) + F.state = 2 + F.d_state = 0 + W = null + del(W) + src.update() + return + +/turf/station/wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall." + return + +/turf/station/wall/updatecell() + + if (src.state == 2) + return + else + ..() + return + +/turf/station/wall/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src.opacity = 0 + src.updatecell = 1 + src.state = 1 + src.intact = 0 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + else + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + if(3.0) + if (prob(25)) + src.opacity = 0 + src.updatecell = 1 + src.intact = 0 + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + else + return + +/turf/station/wall/unburn() + + if (src.state == 1) + src.icon_state = "girder" + else + src.icon_state = "" + return + +/turf/station/wall/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/turf/station/wall/attack_hand(user as mob) + + user << "\blue You push the wall but nothing happens!" + src.add_fingerprint(user) + return + +/turf/station/wall/attackby(W as obj, user as mob) + + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if ((istype(W, /obj/item/weapon/wrench) && src.state == 1)) + var/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now dissembling the reinforced girders. Please stand still. This is a long process." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && (src.state == 1 && user.equipped() == W))) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + else + if ((istype(W, /obj/item/weapon/screwdriver) && src.state == 1)) + var/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now dislodging girders." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && (src.state == 1 && user.equipped() == W))) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/d_girders( F ) + new /obj/item/weapon/sheet/metal( F ) + else + if ((istype(W, /obj/item/weapon/sheet/r_metal) && src.state == 1)) + var/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now reinforcing girders." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && (src.state == 1 && user.equipped() == W))) + src.state = 0 + var/turf/station/r_wall/F = new /turf/station/r_wall( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + F.icon_state = "r_girder" + F.state = 1 + F.opacity = 0 + F.updatecell = 1 + else + if ((istype(W, /obj/item/weapon/weldingtool) && src.state == 2)) + var/T = user.loc + if (!( istype(T, /turf) )) + return + var/WT = W + if (WT.weldfuel < 5) + user << "\blue You need more welding fuel to complete this task." + return + WT.weldfuel -= 5 + user << "\blue Now dissembling the outer wall plating. Please stand still." + sleep(50) + if ((user.loc == T && (src.state == 2 && user.equipped() == W))) + src.opacity = 0 + src.updatecell = 1 + src.state = 1 + src.intact = 0 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + return + +/turf/station/wall/meteorhit(M as obj) + + if (M.icon_state == "flaming") + src.icon_state = "girder" + if (src.state == 2) + src.state = 1 + src.opacity = 0 + src.updatecell = 1 + src.firelevel = 11 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + else + if ((prob(20) && src.state == 1)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = 756000.0 + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + return + +/turf/station/floor/CheckPass(O as mob|obj) + + if ((istype(O, /obj/machinery/pod) && !( src.burnt ))) + if (!( locate(/obj/machinery/mass_driver, src) )) + return 0 + return 1 + return + +/turf/station/floor/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + else + src.icon_state = "burning" + src.burnt = 1 + src.health = 30 + src.intact = 0 + src.firelevel = 1800000.0 + if(3.0) + if (prob(50)) + src.burnt = 1 + src.health = 1 + src.intact = 0 + src.icon_state = "Floor1" + else + return + +/turf/station/floor/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/turf/station/floor/attack_hand(user as mob) + + if ((!( user.canmove ) || (restrained() || !( user.pulling )))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(M.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/station/floor/attackby(C as obj, user as mob) + + if (istype(C, /obj/item/weapon/crowbar)) + if (src.health > 100) + src.health = 100 + src.burnt = 1 + src.intact = 0 + new /obj/item/weapon/tile( src ) + src.icon_state = text("Floor[]", (src.burnt ? "1" : "")) + else + if (istype(C, /obj/item/weapon/tile)) + if (src.health <= 100) + src.intact = 1 + src.health = 150 + src.burnt = 0 + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + else + src.icon_state = "Floor" + var/T = C + T.amount-- + if (T.amount < 1) + T = null + del(T) + return + +/turf/station/floor/unburn() + + src.icon_state = text("Floor[]", (src.burnt ? "1" : "")) + return + +/turf/station/floor/updatecell() + + ..() + if (src.checkfire) + if (src.firelevel >= 2700000.0) + src.health-- + if (src.health <= 0) + src.burnt = 1 + src.intact = 0 + src = null + del(src) + return + else + if (src.health <= 100) + src.burnt = 1 + src.intact = 0 + return + +/turf/station/floor/plasma_test/updatecell() + + ..() + src.poison = 7.5E7 + src.res_vars() + return + +/area/New() + + ..() + src.icon = 'alert.dmi' + src.layer = 10 + return + +/area/vehicles/New() + + ..() + sleep(1) + var/obj/shut_controller/S = new /obj/shut_controller( ) + shuttles += S + for(var/obj/move/O as obj in src) + S.parts += O + O.master = S + //Foreach goto(42) + spawn( 5 ) + world << "Vehicle loaded!" + return + return + +/area/proc/firealert() + + if (!( src.fire )) + if ((src.icon_state == "red" || src.icon_state == "blue-red")) + src.icon_state = "blue-red" + else + src.icon_state = "blue" + src.fire = 1 + for(var/obj/machinery/door/firedoor/D as obj in src) + if (!( D.density )) + spawn( 0 ) + closefire() + return + //Foreach goto(74) + return diff --git a/ss13-40.93.2-decomp/spacestation13/demo2.dm b/ss13-40.93.2-decomp/spacestation13/demo2.dm new file mode 100644 index 0000000..06889d9 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/demo2.dm @@ -0,0 +1,570 @@ + +/obj/machinery/computer/atmosphere/proc/returnarea() + + return + +/obj/machinery/computer/atmosphere/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/atmosphere/siphonswitch/returnarea() + + var/T = src.loc + if (!( istype(T, /turf) )) + return + return T.loc.contents + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/siphon_all() + set src in oview(1) + + if (usr.stat) + return + usr << "Starting all siphon systems." + for(var/obj/machinery/atmoalter/siphs/S as obj in src.returnarea()) + S.reset(1, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/stop_all() + set src in oview(1) + + if (usr.stat) + return + usr << "Stopping all siphon systems." + for(var/obj/machinery/atmoalter/siphs/S as obj in src.returnarea()) + S.reset(0, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/auto_on() + set src in oview(1) + + if (usr.stat) + return + usr << "Starting automatic air control systems." + for(var/obj/machinery/atmoalter/siphs/S as obj in src.returnarea()) + S.reset(0, 1) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/release_scrubbers() + set src in oview(1) + + if (usr.stat) + return + usr << "Releasing all scrubber toxins." + for(var/obj/machinery/atmoalter/siphs/scrubbers/S as obj in src.returnarea()) + S.reset(-1.0, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/release_all() + + if (usr.stat) + return + usr << "REleasing all stored air." + for(var/obj/machinery/atmoalter/siphs/S as obj in src.returnarea()) + S.reset(-1.0, 0) + //Foreach goto(37) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/returnarea() + + return world + return + +/obj/machinery/atmoalter/heater/proc/setstate() + + if (src.holding) + src.icon_state = "heater1-h" + else + src.icon_state = "heater1" + return + +/obj/machinery/atmoalter/heater/process() + + var/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + if (src.h_status) + var/t1 = src.gas.tot_gas() + if ((t1 > 0 && src.temperature < src.h_tar)) + var/increase = 1500000.0 / t1 + var/n_temp = src.gas.temperature + increase + src.gas.temperature = min(n_temp, src.h_tar) + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + src.t_status = 3 + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + src.t_status = 3 + else + if (src.c_status == 1) + var/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + else + C.c_status = 0 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(432) + src.setstate() + return + +/obj/machinery/atmoalter/heater/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/heater/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/heater/attack_hand(user as mob) + + user.machine = src + switch(src.t_status) + if(1.0) + var/tt = text("Releasing Siphon Stop", src, src) + if(2.0) + tt = text("Release SiphoningStop", src, src) + if(3.0) + tt = text("Release Siphon Stopped", src, src) + else + var/ht = null + if (src.h_status) + ht = text("Heating Stop", src) + else + ht = text("Heat Stopped", src) + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/dat = text("Canister Valves
\nContains/Capacity [] / []
\nUpper Valve Status: [][]
\n\tM - - - - [] + + + + M
\nHeater Status: [] - []
\n\tTrg Tmp: - - - [] + + +
\n
\nPipe Valve Status: []
\n\tM - - - - [] + + + + M
\n
\nClose
\n
", src.gas.tot_gas(), src.maximum, tt, (src.holding ? text("
Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ht, (src.gas.tot_gas() ? src.temperature : 20), src, src, src, src.h_tar, src, src, src, ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=canister;size=600x300") + return + +/obj/machinery/atmoalter/heater/Topic(href, href_list) + + if (usr.stat) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + src.t_status = 2 + if(3.0) + src.t_status = 3 + else + else + if (href_list["h"]) + var/h = text2num(href_list["h"]) + if (h == 1) + src.h_status = 1 + else + src.h_status = null + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["ht"]) + var/cp = text2num(href_list["ht"]) + src.h_tar += cp + src.h_tar = min(max(round(src.h_tar), 0), 500) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if ((cp == 1 && src.holding)) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(515) + src.add_fingerprint(usr) + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/heater/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/tank)) + if (src.holding) + return + var/T = W + user.drop_item() + T.loc = src + src.holding = T + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + return + +/obj/machinery/atmoalter/canister/proc/update_icon() + + var/air_in = src.gas.tot_gas() + if (src.destroyed) + src.icon_state = text("[]-1", src.color) + else + if (air_in < 10) + src.icon_state = text("0[][]", src.color, (src.holding ? "-T" : null)) + else + if (air_in < (src.gas.maximum * 0.2)) + src.icon_state = text("1[][]", src.color, (src.holding ? "-T" : null)) + else + if (air_in < (src.maximum * 0.6)) + src.icon_state = text("2[][]", src.color, (src.holding ? "-T" : null)) + else + src.icon_state = text("3[][]", src.color, (src.holding ? "-T" : null)) + return + +/obj/machinery/atmoalter/canister/proc/healthcheck() + + if (src.health <= 10) + var/T = src.loc + if (!( istype(T, /turf) )) + return + src.gas.turf_add(T, -1.0) + src.destroyed = 1 + src.density = 0 + update_icon() + if (src.holding) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + return + +/obj/machinery/atmoalter/canister/process() + + if (src.destroyed) + return + var/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + src.update_icon() + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + src.t_status = 3 + src.update_icon() + else + if (src.c_status == 1) + var/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, null) + return + src.update_icon() + else + src.c_status = 0 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(450) + src.update_icon() + return + +/obj/machinery/atmoalter/canister/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/canister/burn(fi_amount) + + src.health -= 1 + healthcheck() + return + +/obj/machinery/atmoalter/canister/meteorhit(O as obj) + + src.health = 0 + healthcheck() + return + +/obj/machinery/atmoalter/canister/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/canister/attack_hand(user as mob) + + if (src.destroyed) + return + user.machine = src + switch(src.t_status) + if(1.0) + var/tt = text("Releasing Siphon (only tank) Stop", src, src) + if(2.0) + tt = text("Release Siphoning (only tank) Stop", src, src) + if(3.0) + tt = text("Release Siphon (only tank) Stopped", src, src) + else + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/dat = text("Canister Valves
\nContains/Capacity [] / []
\nUpper Valve Status: []
\n\t[]
\n\tM - - - - [] + + + + M
\nPipe Valve Status: []
\n\tM - - - - [] + + + + M
\n
\nClose
\n
", num2text(src.gas.tot_gas(), 20), num2text(src.maximum, 20), tt, (src.holding ? text("Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=canister;size=600x300") + return + +/obj/machinery/atmoalter/canister/Topic(href, href_list) + + if (usr.stat) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + if (src.holding) + src.t_status = 2 + else + src.t_status = 3 + if(3.0) + src.t_status = 3 + else + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if ((cp == 1 && src.holding)) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(423) + src.add_fingerprint(usr) + update_icon() + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/canister/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) + if (src.holding) + return + var/T = W + user.drop_item() + T.loc = src + src.holding = T + update_icon() + else + if ((istype(W, /obj/item/weapon/screwdriver) && !( src.destroyed ))) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + switch(W.damtype) + if("fire") + src.health -= W.force + if("brute") + src.health -= src.force * 0.5 + else + src.healthcheck() + ..() + return + +/obj/machinery/atmoalter/canister/las_act(flag) + + if (flag == "bullet") + src.health = 0 + spawn( 0 ) + healthcheck() + return + if (flag) + var/T = src.loc + if (!( istype(T, /turf) )) + return + else + T.firelevel = T.poison + else + src.health = 0 + spawn( 0 ) + healthcheck() + return + return + +/obj/machinery/atmoalter/canister/poisoncanister/New() + + ..() + src.update_icon() + src.gas.plasma = 9.0E7 + return + +/obj/machinery/atmoalter/canister/oxygencanister/New() + + ..() + src.gas.oxygen = 1.0E8 + return + +/obj/machinery/atmoalter/canister/anesthcanister/New() + + ..() + src.gas.sl_gas = 1.0E8 + return + +/obj/machinery/atmoalter/canister/n2canister/New() + + ..() + src.gas.n2 = 1.0E8 + return diff --git a/ss13-40.93.2-decomp/spacestation13/dna.dm b/ss13-40.93.2-decomp/spacestation13/dna.dm new file mode 100644 index 0000000..eab94ca --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/dna.dm @@ -0,0 +1,936 @@ + +/proc/scram(n) + + var/t = "" + var/p = null + p = 1 + while(p <= n) + t = text("[][]", t, rand(1, 9)) + p++ + return t + return + +/obj/machinery/computer/dna/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/dna/attack_hand(user as mob) + + user.machine = src + if (istype(user, /mob/human)) + var/dat = text("Please Insert the cards into the slots
\n\t\t\t\tFunction Disk: []
\n\t\t\t\tTarget Disk: []
\n\t\t\t\tAux. Data Disk: []
\n\t\t\t\t\t(Not always used!)
\n\t\t\t\t[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("Execute Function", src) : "No function disk inserted!")) + if (src.temp) + dat = text("[]

Clear Message", src.temp, src) + user << browse(dat, "window=dna_comp") + else + var/dat = text("[]
\n\t\t\t\t[] []
\n\t\t\t\t[] []
\n\t\t\t\t[] []
\n\t\t\t\t\t(Not always used!)
\n\t\t\t\t[]", stars("Please Insert the cards into the slots"), stars("Function Disk:"), src, (src.scan ? text("[]", src.scan.name) : "----------"), stars("Target Disk:"), src, (src.modify ? text("[]", src.modify.name) : "----------"), stars("Aux. Data Disk:"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("[]", src, stars("Execute Function")) : stars("No function disk inserted!"))) + if (src.temp) + dat = text("[]

[]", stars(src.temp), src, stars("Clear Message")) + user << browse(dat, "window=dna_comp") + return + +/obj/machinery/computer/dna/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["modify"]) + if (src.modify) + src.modify.loc = src.loc + src.modify = null + src.mode = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.modify = I + src.mode = null + if (href_list["modify2"]) + if (src.modify2) + src.modify2.loc = src.loc + src.modify2 = null + src.mode = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.modify2 = I + src.mode = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + src.mode = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.scan = I + src.mode = null + if (href_list["clear"]) + src.temp = null + if (href_list["execute"]) + if ((src.scan && src.scan.function)) + switch(src.scan.function) + if("data_mutate") + if (src.modify) + if (!( findtext(src.scan.data, "-", 1, null) )) + if ((src.modify.data && (src.scan.data && length(src.modify.data) >= length(src.scan.data)))) + src.modify.data = text("[][]", src.scan.data, (length(src.modify.data) > length(src.scan.data) ? copytext(src.modify.data, length(src.scan.data) + 1, length(src.modify.data) + 1) : null)) + else + src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" + else + var/d = findtext(src.data, "-", 1, null) + var/t = copytext(src.data, d + 1, length(src.data) + 1) + d = text2num(copytext(1, d, null)) + if ((d && (t && (src.modify.data && (src.scan.data && length(src.modify.data) >= ((length(t) + d) - 1)))))) + src.modify.data = text("[][][]", copytext(src.modify.data, 1, d), t, (length(src.data) > (length(t) + d) ? copytext(src.data, length(t) + d, length(src.data) + 1) : null)) + else + src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("dna_seq") + src.temp = "DNA Systems Help:\nHuman DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (28 chromosomes)\n\t\t5BDFE293BA5500F9FFFD500AAFFE\n\tStructural Enzymes:\n\t\tCDE375C9A6C25A7DBDA50EC05AC6CEB63\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\t493DB249EB6D13236100A37000800AB71\n\tSpecies/Genus Classification: Homo Sapien\n\nMonkey DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (16 chromosomes)\n\t\t2B6696D2B127E5A4\n\tStructural Enzymes:\n\t\tCDEAF5B90AADBC6BA8033DB0A7FD613FA\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\tC8FFFE7EC09D80AEDEDB9A5A0B4085B61\n\tSpecies/Genus Classification: Generic Monkey\n>" + if("dna_help") + src.temp = "DNA Systems Help:\nThe DNA systems consists 3 systems.\nI. DNA Scanner/Implanter - This system is slightly advanced to use. It accepts\n\t1 disk. Before you wish to run a function/program you must implant the\n\tdisk data into the temporary memory. Note that once this is done the disk can\n\tbe removed to place a data disk in.\nII. DNA computer - This is a simple yet fast computer that basically operates on data.\nIII. Restructurer - This device reorganizes the anatomical structure of the subject\n\taccording to the DNA sequences. Please note that it is illegal to perform a\n\ttransfer from one species to or from the Homo sapiens species but\n\thuman to human is acceptable under UNSD guidlines.\n\tNote: This machine is programmed to operate on specific preprogrammed species with\n\tspecialized anatomical blueprints hard coded into its databanks. It cannot operate\n\ton other species. (Current: Human, Monkey)\n\nData Disks:\n\tThese run on 2 (or 3) types: DNA scanner program disks and data modification\nfunctions (and disk modification functions)\n\nDisk-Copy\n\tThis erases the target disk and completely copies the data from the aux. disk.\nDisk-Erase\n\tThis erases everything on the target disk.\nData-Clear\n\tThis erases (clears) only the data.\n\nData-Trunicate\n\tThis removes data from the target disk (parameters gathered from data slot on target\n\tdisk). This fuction has 4 modes (a,b,c,default) defined by this way. (mode id)(#)\n\ta - This cuts # data from the end. (ex a1 on ABCD = ABC)\n\tb - This cuts # data from the beginning. (ex b1 on ABCD = BCD)\n\tc - This limits the data from the end. (ex c1 on ABCD = A)\n\tdefault - This limits the data from the end. (ex 1 on ABCD = D)\nData-Add\n\tThis adds thedata on the aux. disk to the data on the target disk.\nData-Sramble\n\tThis scrambles the data on the target disk. The length is equal to\n\tthe length of the original data.\nData-Input\n\tThis lets you input data into the data slot of any data disk.\n\tNote: This doesn't work only on storage.\nData-Mutate\n\tThis basically inserts text. You follow this format:\n\tpos-text (or just text for automatic pos 1)\n\tie 2-IVE on FOUR yields FIVE\n" + if("data_add") + if (src.modify) + if (src.modify2) + if ((src.modify.data && src.modify2.data)) + src.modify.data += src.modify2 + src.temp = text("Done!
New Data:
[]", src.modify.data) + else + src.temp = "Cannot read data! (may be null)" + else + src.temp = "Disk Failure: Cannot read aux. data disk!" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_scramble") + if (src.modify) + if (length(text("[]", src.modify.data)) >= 1) + src.modify.data = scram(length(text("[]", src.data))) + src.temp = text("Data scrambled: []", src.modify.data) + else + src.temp = "No data to scramble" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_input") + if (src.modify) + var/dat = input(usr, ">", text("[]", src.name), null) as text + var/s = src.scan + var/m = src.modify + if ((usr.stat || (usr.restrained() || (src.modify != m || src.scan != s)))) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + src.modify.data = dat + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_copy") + if (src.modify) + if (src.modify2) + src.modify.function = src.modify2.function + src.modify.data = src.modify2.data + src.modify.special = src.modify2.special + src.temp = "All disk data/programs copied." + else + src.temp = "Disk Failure: Cannot read aux. data disk!" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_dis") + if (src.modify) + src.temp = text("Function: [][]
Data: []", src.modify.function, (src.special ? text("-[]", src.special) : null), src.modify.data) + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_erase") + if (src.modify) + src.modify.data = null + src.modify.function = "storage" + src.modify.special = null + src.temp = "All Disk contents deleted." + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_clear") + if (src.modify) + src.modify.data = null + src.temp = "Disk data cleared." + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_trun") + if (src.modify) + if ((src.modify.data && src.scan.data)) + var/l1 = length(src.modify.data) + var/l2 = max(round(text2num(src.scan.data)), 1) + switch(copytext(src.data, 1, 2)) + if("a") + if (l1 > l2) + src.data = copytext(src.modify.data, 1, (l1 - l2) + 1) + else + src.modify.data = "" + src.temp = text("Done!
New Data:
[]", src.modify.data) + if("b") + if (l1 > l2) + src.data = copytext(src.modify.data, l2, l1 + 1) + else + src.modify.data = "" + src.temp = text("Done!
New Data:
[]", src.modify.data) + if("c") + if (l1 >= l2) + src.data = copytext(src.modify.data, l1 - l2, l1 + 1) + src.temp = text("Done!
New Data:
[]", src.modify.data) + else + if (l1 >= l2) + src.data = copytext(src.modify.data, 1, l2 + 1) + src.temp = text("Done!
New Data:
[]", src.modify.data) + else + src.temp = "Cannot read data! (may be null and note that function data slot is used instead of aux disk!!)" + else + src.temp = "Disk Failure: Cannot read target disk!" + else + else + src.temp = "System Failure: Cannot read disk function!" + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(1764) + return + +/obj/machinery/computer/dna/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + else + return + +/obj/machinery/dna_scanner/allow_drop() + + return 0 + return + +/obj/machinery/dna_scanner/relaymove(user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/dna_scanner/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + src.add_fingerprint(usr) + return + +/obj/machinery/dna_scanner/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The scanner is already occupied!" + return + if (usr.abiotic()) + usr << "\blue Subject cannot have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "scanner_1" + for(var/obj/O as obj in src) + O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/dna_scanner/attackby(G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The scanner is already occupied!" + return + if (G.affecting.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + var/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "scanner_1" + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + G = null + del(G) + return + +/obj/machinery/dna_scanner/proc/go_out() + + if ((!( src.occupant ) || src.locked)) + return + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(30) + if (src.occupant.client) + src.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "scanner_0" + return + +/obj/machinery/dna_scanner/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + src = null + del(src) + return + else + return + +/obj/machinery/scan_console/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + else + return + +/obj/machinery/scan_console/New() + + ..() + spawn( 5 ) + src.connected = locate(/obj/machinery/dna_scanner, get_step(src, WEST)) + return + return + +/obj/machinery/scan_console/process() + + if (!( src.status )) + return + if (!( src.func )) + src.temp = "No function loaded into memory core!" + src.status = null + if ((src.connected && src.connected.occupant)) + var/M = src.connected.occupant + if (src.status == "load") + src.prog_p1 = null + src.prog_p2 = null + src.prog_p3 = null + src.prog_p4 = null + switch(src.func) + if("dna_trun") + if (src.data) + src.prog_p1 = copytext(src.data, 1, 2) + src.prog_p2 = text2num(src.data) + src.prog_p3 = src.special + src.status = "dna_trun" + src.temp = "Executing trunication function on occupant." + else + src.temp = "No data implanted in core memory." + src.status = null + if("dna_scan") + if (src.special) + if (src.scan) + if (istype(M, /mob)) + switch(src.special) + if("UI") + src.temp = text("Scan Complete:
Data downloaded to disk!
Unique Identifier: []", M.primary.uni_identity) + src.scan.data = M.primary.uni_identity + if("SE") + src.temp = text("Scan Complete:
Data downloaded to disk!
Structural Enzymes: []", M.primary.struc_enzyme) + src.scan.data = M.primary.struc_enzyme + if("UE") + src.temp = text("Scan Complete:
Data downloaded to disk!
Used Enzynmes: []", M.primary.use_enzyme) + src.scan.data = M.primary.use_enzyme + if("SI") + src.temp = text("Scan Complete:
Data downloaded to disk!
Species Identifier: []", M.primary.spec_identity) + src.scan.data = M.primary.spec_identity + else + else + src.temp = "No occupant to scan!" + else + src.temp = "Error: No disk to upload data to." + else + src.temp = "Error: Function program errors." + src.status = null + if("dna_replace") + if ((src.data && src.special)) + src.prog_p1 = src.special + src.prog_p2 = src.data + src.status = "dna_replace" + src.temp = "Executing repalcement function on occupant." + else + src.temp = "Error: No DNA data loaded into core or function program errors." + src.status = null + if("dna_add") + if ((src.data && src.special)) + src.prog_p1 = src.special + src.prog_p2 = src.data + src.status = "dna_add" + src.temp = "Executing addition function on occupant." + else + src.temp = "Error: No DNA data loaded into core or function program errors." + src.status = null + else + src.temp = "Cannot execute program!" + src.status = null + else + if (src.status == "dna_trun") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p3) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + switch(src.prog_p1) + if("a") + src.prog_p4 = length(t) + if("b") + src.prog_p4 = 1 + else + else + if (src.prog_p1 == "a") + src.prog_p4-- + else + if (src.prog_p1 == "b") + src.prog_p4-- + switch(src.prog_p1) + if("a") + if (src.prog_p4 <= 0) + src.temp = "Trunication complete" + src.status = null + else + t = copytext(t, 1, length(t)) + src.temp = text("Trunicating []'s DNA sequence...
[]
Status: [] units left.

Emergency Abort", M.name, t, src.prog_p4, src) + if("b") + if (src.prog_p4 <= 0) + src.temp = "Trunication complete" + src.status = null + else + t = copytext(t, 2, length(t) + 1) + src.temp = text("Trunicating []'s DNA sequence...
[]
Status: [] units left.

Emergency Abort", M.name, t, src.prog_p4, src) + if("c") + if (length(t) <= src.prog_p2) + src.temp = "Limitation complete" + src.status = null + else + t = copytext(t, 1, length(t)) + src.temp = text("Limiting []'s DNA sequence...
[]
Status: [] units converting to [] units.

Emergency Abort", M.name, t, length(t), src.prog_p2, src) + else + if (length(t) <= src.prog_p2) + src.temp = "Limitation complete" + src.status = null + else + t = copytext(t, 2, length(t) + 1) + src.temp = text("Limiting []'s DNA sequence...
[]
Status: [] units converting to [] units.

Emergency Abort", M.name, t, length(t), src.prog_p2, src) + switch(src.prog_p3) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + M.temp = "Process terminated due to lack of occupant in DNA chamber." + M.status = null + else + if (M.status == "dna_replace") + if (istype(M, /mob)) + var/t = null + switch(M.prog_p1) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + src.prog_p4 = 1 + else + src.prog_p4++ + if ((src.prog_p4 > length(t) || src.prog_p4 > length(src.prog_p2))) + src.temp = "Replacement complete" + src.status = null + else + t = text("[][][]", copytext(t, 1, src.prog_p4), copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1), (src.prog_p4 < length(t) ? copytext(t, src.prog_p4 + 1, length(t) + 1) : null)) + src.temp = text("Replacing []'s DNA sequence...
[]
Target: []
Status: At position []

Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) + switch(src.prog_p1) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + M.temp = "Process terminated due to lack of occupant in DNA chamber." + M.status = null + else + if (M.status == "dna_add") + if (istype(M, /mob)) + var/t = null + switch(M.prog_p1) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + src.prog_p4 = 1 + else + src.prog_p4++ + if (src.prog_p4 > length(src.prog_p2)) + src.temp = "Addition complete" + src.status = null + else + t = text("[][]", t, copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1)) + src.temp = text("Adding to []'s DNA sequence...
[]
Adding: []
Position: []

Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) + switch(src.prog_p1) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + M.temp = "Process terminated due to lack of occupant in DNA chamber." + M.status = null + else + M.status = null + M.temp = "Unknown system error." + for(var/O as mob in viewers(1, src)) + if ((O.client && O.machine == src)) + src.attack_hand(O) + //Foreach goto(1755) + return + +/obj/machinery/scan_console/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/scan_console/attack_hand(user as mob) + + if (src.temp) + var/dat = text("[]

Clear Message", src.temp, src) + else + if (src.connected) + var/occupant = src.connected.occupant + dat = "Occupant Statistics:
" + if (occupant) + switch(occupant.stat) + if(0.0) + var/t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + else + t1 = "*dead*" + dat += text("[]\tHealth %: [] ([])


", (occupant.health > 50 ? "" : ""), occupant.health, t1) + else + dat += "The scanner is empty.
" + if (!( src.connected.locked )) + dat += text("Lock (Unlocked)
", src) + else + dat += text("Unlock (Locked)
", src) + dat += text("Disk: []
\n[]
\n[]
", src, (src.scan ? text("[]", src.scan.name) : "----------"), (src.scan ? text("Upload Data", src) : "No disk to upload"), ((src.data || (src.func || src.special)) ? text("Clear Data
Execute Data
Function Type: [][]
Data: []", src, src, src.func, (src.special ? text("-[]", src.special) : null), src.data) : "No data uploaded")) + dat += text("

Close", user) + user << browse(dat, "window=scanner;size=400x500") + return + +/obj/machinery/scan_console/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["locked"]) + if ((src.connected && src.connected.occupant)) + src.locked = !( src.connected.locked ) + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.scan = I + if (href_list["u_dat"]) + if ((src.scan && !( src.status ))) + if ((src.scan.function && src.function != "storage")) + src.func = src.scan.function + src.special = src.scan.special + if (src.scan.data) + src.data = src.data + else + src.temp = "No disk found or core data access lock out!" + if (href_list["c_dat"]) + if (!( src.status )) + src.func = null + src.data = null + src.special = null + else + src.temp = "No disk found or core data access lock out!" + if (href_list["clear"]) + src.temp = null + if (href_list["abort"]) + src.status = null + if (href_list["e_dat"]) + if (!( src.status )) + src.status = "load" + src.temp = "Loading..." + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(484) + return + +/obj/machinery/restruct/allow_drop() + + return 0 + return + +/obj/machinery/restruct/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + src.add_fingerprint(usr) + return + +/obj/machinery/restruct/verb/operate() + set src in oview(1) + + src.add_fingerprint(usr) + if ((src.occupant && src.occupant.primary)) + switch(src.occupant.primary.spec_identity) + if("5BDFE293BA5500F9FFFD500AAFFE") + if (!( istype(src.occupant, /mob/human) )) + for(var/obj/O as obj in src.occupant) + O = null + del(O) + //Foreach goto(78) + var/mob/human/O = new /mob/human( src ) + var/M = src.occupant + O.start = 1 + O.primary = M.primary + M.primary = null + var/t1 = hex2num(copytext(O.primary.uni_identity, 25, 28)) + if (t1 < 125) + O.gender = "male" + else + O.gender = "female" + M << "Genetic Transversal Complete!" + if (M.client) + M << "Transferring..." + M.client.mob = O + O << "Neural Sequencing Complete!" + O.loc = src + src.occupant = O + M = null + del(M) + src.occupant = O + src.occupant << "Done!" + if("2B6696D2B127E5A4") + if (!( istype(src.occupant, /mob/monkey) )) + for(var/obj/O as obj in src.occupant) + O = null + del(O) + //Foreach goto(337) + var/mob/monkey/O = new /mob/monkey( src ) + var/M = src.occupant + O.start = 1 + O.primary = M.primary + M.primary = null + M << "Genetic Transversal Complete!" + if (M.client) + M << "Transferring..." + M.client.mob = O + O << "Neural Sequencing Complete!" + O.loc = src + O << "Genetic Transversal Complete!" + src.occupant = O + M = null + del(M) + O.name = text("monkey ([])", copytext(md5(src.occupant.primary.uni_identity), 2, 6)) + src.occupant << "Done!" + else + if (istype(src.occupant, /mob/human)) + var/H = src.occupant + if (reg_dna[text("[]", H.primary.uni_identity)]) + H.rname = reg_dna[text("[]", H.uni_identity)] + else + if (findname("Unknown")) + var/counter = 1 + while(findname(text("Unknown #[]", counter))) + counter++ + H.rname = text("Unknown #[]", counter) + else + H.rname = "Unknown" + reg_dna[text("[]", H.primary.uni_identity)] = H.rname + H << text("\red Your name is now [].", H.rname) + var/speak = (length(H.primary.struc_enzyme) >= 25 ? hex2num(copytext(H.struc_enzyme, 22, 25)) : 9999) + var/ears = (length(H.primary.struc_enzyme) >= 10 ? hex2num(copytext(H.struc_enzyme, 7, 10)) : 9999) + var/vision = (length(H.primary.struc_enzyme) >= 16 ? hex2num(copytext(H.struc_enzyme, 13, 16)) : 1) + var/mental1 = (length(H.primary.struc_enzyme) >= 31 ? hex2num(copytext(H.struc_enzyme, 28, 31)) : 1) + var/mental2 = (length(H.primary.struc_enzyme) >= 28 ? hex2num(copytext(H.struc_enzyme, 25, 28)) : 1) + var/speak2 = (length(H.primary.struc_enzyme) >= 22 ? hex2num(copytext(H.struc_enzyme, 19, 22)) : 1) + H.sdisabilities = 0 + H.disabilities = 0 + if (speak < 3776) + H.disabilities = H.disabilities | 4 + else + if (speak > 3776) + H.sdisabilities = H.sdisabilities | 2 + if (speak2 < 2640) + H.disabilities = H.disabilities | 16 + if (ears > 3226) + H.sdisabilities = H.sdisabilities | 4 + if (vision < 1447) + H.sdisabilities = H.sdisabilities | 1 + else + if (vision > 1447) + H.disabilities = H.disabilities | 1 + if (mental1 < 1742) + H.disabilities = H.disabilities | 2 + if (mental2 < 1452) + H.disabilities = H.disabilities | 8 + var/t1 = null + if (length(H.primary.uni_identity) >= 20) + t1 = copytext(H.uni_identity, 19, 21) + if (hex2num(t1) > 127) + H.gender = "female" + else + H.gender = "male" + else + H.gender = "neuter" + if (length(H.primary.uni_identity) >= 18) + t1 = copytext(H.uni_identity, 17, 19) + H.ns_tone = hex2num(t1) + H.ns_tone = -H.ns_tone + 35 + else + H.ns_tone = 1 + H.ns_tone = -H.ns_tone + 35 + if (length(H.primary.uni_identity) >= 16) + t1 = copytext(H.uni_identity, 15, 17) + H.b_eyes = hex2num(t1) + else + H.b_eyes = 255 + if (length(H.primary.uni_identity) >= 14) + t1 = copytext(H.uni_identity, 13, 15) + H.g_eyes = hex2num(t1) + else + H.g_eyes = 255 + if (length(H.primary.uni_identity) >= 12) + t1 = copytext(H.uni_identity, 11, 13) + H.r_eyes = hex2num(t1) + else + H.r_eyes = 255 + if (length(H.primary.uni_identity) >= 10) + t1 = copytext(H.uni_identity, 9, 11) + H.nb_hair = hex2num(t1) + else + H.nb_hair = 255 + if (length(H.primary.uni_identity) >= 8) + t1 = copytext(H.uni_identity, 7, 9) + H.ng_hair = hex2num(t1) + else + H.ng_hair = 255 + if (length(H.primary.uni_identity) >= 6) + t1 = copytext(H.uni_identity, 5, 7) + H.nr_hair = hex2num(t1) + else + H.nr_hair = 255 + H.r_hair = H.nr_hair + H.g_hair = H.ng_hair + H.b_hair = H.nb_hair + H.s_tone = H.ns_tone + H.update_face() + H.update_body() + return + +/obj/machinery/restruct/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The scanner is already occupied!" + return + if (usr.abiotic()) + usr << "\blue Subject cannot have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "restruct_1" + for(var/obj/O as obj in src) + O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/restruct/relaymove(user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/restruct/attackby(G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The machine is already occupied!" + return + if (G.affecting.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + var/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "restruct_1" + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + G = null + del(G) + return + +/obj/machinery/restruct/proc/go_out() + + if ((!( src.occupant ) || src.locked)) + return + for(var/obj/O as obj in src) + O.loc = src.loc + //Foreach goto(30) + if (src.occupant.client) + src.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "restruct_0" + return + +/obj/machinery/restruct/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + src = null + del(src) + return + else + return diff --git a/ss13-40.93.2-decomp/spacestation13/doors.dmi b/ss13-40.93.2-decomp/spacestation13/doors.dmi new file mode 100644 index 0000000..564fa29 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/doors.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/engine.dm b/ss13-40.93.2-decomp/spacestation13/engine.dm new file mode 100644 index 0000000..42230aa --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/engine.dm @@ -0,0 +1,241 @@ + +/obj/machinery/computer/engine/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/engine/New() + + if (!( engine_eject_control )) + engine_eject_control = new /datum/engine_eject( ) + ..() + return + +/obj/machinery/computer/engine/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/engine/attack_hand(user as mob) + + user.machine = src + if (src.temp) + var/dat = text("[]

Clear Screen", src.temp, src) + else + if (engine_eject_control.status == 0) + dat = text("Engine Ejection Module
\nStatus: Docked
\n
\nCountdown: []/60 \[Reset\]
\n
\nEject Engine
\n
\nClose", engine_eject_control.timeleft, src, src, user) + else + if (engine_eject_control.status == 1) + dat = text("Engine Ejection Module
\nStatus: Ejecting
\n
\nCountdown: []/60 \[Reset\]
\n
\nStop Ejection
\n
\nClose", engine_eject_control.timeleft, src, user) + else + dat = text("Engine Ejection Module
\nStatus: Ejected
\n
\nCountdown: N/60 \[Reset\]
\n
\nEngine Ejected!
\n
\nClose", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/engine/process() + + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/computer/engine/Topic(href, href_list) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["eject"]) + if (engine_eject_control.status == 0) + src.temp = text("Eject Engine?

Yes
No", src, src) + else + if (href_list["eject2"]) + if (engine_eject_control.status == 0) + engine_eject_control.ejectstart() + src.temp = null + else + if (href_list["stop"]) + if (engine_eject_control.status > 0) + src.temp = text("Stop Ejection?

Yes
No", src, src) + else + if (href_list["stop2"]) + if (engine_eject_control.status > 0) + stopcount() + src.temp = null + else + if (href_list["reset"]) + if (engine_eject_control.status == 0) + resetcount() + else + if (href_list["temp"]) + src.temp = null + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(351) + return + +/turf/station/engine/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/turf/station/engine/attack_hand(user as mob) + + if ((!( user.canmove ) || (restrained() || !( user.pulling )))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(M.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/station/engine/floor/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + else + return + +/datum/engine_eject/proc/ejectstart() + + if (!( src.status )) + if (src.timeleft <= 0) + src.timeleft = 60 + world << "\red Alert: Ejection Sequence for Engine Module has been engaged." + world << text("\red Ejection Time in T-[] seconds!", src.timeleft) + src.resetting = 0 + var/engine = locate(/area/engine) + engine.icon = 'alert.dmi' + if (!( engine.icon_state )) + engine.icon_state = "red" + else + engine.icon_state = "blue-red" + src.status = 1 + for(var/obj/machinery/computer/engine/E as obj in world) + E.icon_state = "engaging" + //Foreach goto(113) + spawn( 0 ) + src.countdown() + return + return + +/datum/engine_eject/proc/resetcount() + + if (!( src.status )) + src.resetting = 1 + sleep(50) + if (src.resetting) + src.timeleft = 60 + world << "\red Alert: Ejection Sequence Countdown for Engine Module has been reset." + return + +/datum/engine_eject/proc/countdone() + + src.status = -1.0 + var/engine = locate(/area/engine) + engine.icon = 'alert.dmi' + engine.icon_state = null + var/A = locate(/area/engine) + for(var/T as turf in A) + var/S = new T.type( locate(T.x, T.y, 8) ) + for(var/atom/movable/AM as mob|obj in T) + AM.loc = S + S.oxygen = T.oxygen + S.oldoxy = T.oldoxy + S.tmpoxy = T.tmpoxy + S.poison = T.poison + S.oldpoison = T.oldpoison + S.tmppoison = T.tmppoison + S.co2 = T.co2 + S.oldco2 = T.oldco2 + S.tmpco2 = T.tmpco2 + S.sl_gas = T.sl_gas + S.osl_gas = T.osl_gas + S.tsl_gas = T.tsl_gas + S.n2 = T.n2 + S.on2 = T.on2 + S.tn2 = T.tn2 + //Foreach goto(100) + A.contents += S + var/P = new T.type( locate(T.x, T.y, T.z) ) + var/D = locate(/area/dummy) + D.contents += P + T = null + del(T) + //Foreach goto(60) + world << "\red Engine Ejected!" + for(var/obj/machinery/computer/engine/E as obj in world) + E.icon_state = "engaged" + //Foreach goto(392) + return + +/datum/engine_eject/proc/stopcount() + + if (src.status > 0) + src.status = 0 + world << "\red Alert: Ejection Sequence for Engine Module has been disengaged!" + var/engine = locate(/area/engine) + engine.icon = 'alert.dmi' + if (engine.icon_state == "blue-red") + engine.icon_state = "blue" + else + engine.icon_state = null + for(var/obj/machinery/computer/engine/E as obj in world) + E.icon_state = null + //Foreach goto(84) + return + +/datum/engine_eject/proc/countdown() + + if (src.timeleft <= 0) + spawn( 0 ) + countdone() + return + return + if (src.status > 0) + src.timeleft-- + if ((src.timeleft <= 15 || src.timeleft == 30)) + world << text("\red [] seconds until engine ejection.", src.timeleft) + spawn( 10 ) + src.countdown() + return + return diff --git a/ss13-40.93.2-decomp/spacestation13/engine.dmi b/ss13-40.93.2-decomp/spacestation13/engine.dmi new file mode 100644 index 0000000..06ea1b3 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/engine.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/enginecomputer.dmi b/ss13-40.93.2-decomp/spacestation13/enginecomputer.dmi new file mode 100644 index 0000000..1a31384 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/enginecomputer.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/escapepod.dmi b/ss13-40.93.2-decomp/spacestation13/escapepod.dmi new file mode 100644 index 0000000..59eeb93 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/escapepod.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/ghost.dmi b/ss13-40.93.2-decomp/spacestation13/ghost.dmi new file mode 100644 index 0000000..e9e5ae8 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/ghost.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/help.htm b/ss13-40.93.2-decomp/spacestation13/help.htm new file mode 100644 index 0000000..781f978 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/help.htm @@ -0,0 +1,121 @@ +
Space Station 13
+By: Exadv1

+
+Overview
+ Space Station 13 was written on BYOND. Like a majority of BYOND games it is two dimensional with a top-down view. It uses tile-based movement. Space Station 13 (or SS13 for short) starts you on a space station orbitting a very peculiar gaseous planet in a binary star system. Threoughout a round many disasters will probably occur from meteor attacks to internal disasters such as a traitor. The game is constantly being developed so eventually more disasters will occur such as pathogens, re-entry, and raiders.
+
+Objectives
+ The primary objective in most modes of Space Station 13 is survival. You must stay alive long enough to escape. Now when you first start the game you shouldn't immediately try to escape! You should try and prevent disaster for as long as you can. Eventually you will be able to perform various experiments on-board SS13 between disasters (medical experiments, atmospheric experiments, and plasma experiments). Also depending on the mode there may be more objectives.
+
+Modes
+Traitor - In traitor mode there is a traitor aboard the space station. The objective of the traitor is to be the last person aboard the shuttle when it departs destroying anything or anyone in your way. The objective of everyone else to survive and attempt to pinpoint who the traitor is and stop them.
+
+Meteor - In meteor mode the objective is to escape and see how long you can ride out the meteor storm. This is very challenging and you are given no precious time to prepare for disaster.
+Monkey - In monkey a mode a extremely mutagenous retrovirus has infected the ship. The goal as a human is to escape on the shuttle to warn the rest of the world. The monkies must infect the rest of the crew and stop them. Future modes will allow the humans to examine exactly what the virus is and apply that knowledge.
+
+Secret - This mode chooses randomly between all the modes (or just nothing). This is the default mode and generally produces the best gameplay.
+
+Proposed Modes
+Space Raiders- A group of combatants are trying to raid the station and gather a list of items to escape to their station with.
+Alien- A parasitic organism has infected a crew member. The crew must stay uninfected while the infected people must try and infect the others.
+Orbital Failure- The engine/reactor system is failng and you must regain a safe orbit or plummet into the gaseous planet.
+...
+
+Getting around
+The interface for Space Station 13 is largely click driven. When I refer to attacking I am referring to double clicking.
+Getting Started (A Quick jump-start guide to get into the game)
+You must select your preferences then go over the begin object and get ready. (use ready verb)
+If you want to you can go to SS13 by using enter.
+If you don't and the game hasn't started yet you'll still be automatically teleported.
+Movement
+Movement on SS13 is only in the 4 cardinal directions. The diagonal directions throw/drop items, switch hand/modes. If you move into a dense object you first try to push it. Not all items can be pushed. You can also right click on an object and select 'pull' and then every movement you make will ttempt to drag that object behind you. If you wish to stop pulling you must go onto your on-screen display and find the object with a person in a box. Click on it and you will stop pulling. If you ever desire to make sure of which direction you are facing use .center and then try to move what direction you want to face.
+'Equipping'
+You 'equip' items in SS13 by picking them up. In order to pick an item up all you must do is attack it with a free hand. Now you hae two hands. Which hand is being used is indicated by the blue button in the lower-left area of your HUD. You can change hands by clicking the hand button or pressing the .northeast macro. You can then also then transfer that item to another part of your body. In order to do this you just attack the green box (or blue storage box) on your hud that you would like to move it to. In order to 'unequip' a equipped item that is not in your hand. Get a free hand and attack the item. Then in order to drop an item in your hand (and make it a free hand again) click the drop button (or throw to throw the item wherever you are facing).
+Talking
+ Talking on SS13 is still via the say verb so the normal say speech bubble on the command line will still work. Please note however that you can whisper. More on this in the items selection under radio, intercoms, and headsets. There are a lot of emotes that are accessed by preceding your text with a '*'. To view a list of available emotes for your character use the type '*help' into the say menu.
+Taking Items/Giving Items
+ You can take items from people by dragging their mob onto your mob. A screen will pop up. From this screen you can select an object to remove from them. If you select a 'Nothing' slot then you will attempt to equip that slot with the object you are holding. +Death
+ If you are dead then you can use the watch verb to look through the eyes of another mob. Depending on circumstances you can use abandon mob to restart (leaving that box blank gives you a random name). A dead person hears everything that is said but might not hear all attack message dialog.
+
+The Items
+If it has a [stackable-x]. This means that if you attack another item of its type with it then you will gather more items on its stack until you hit x items. you can usually see how much is on the stack by right clicking and selecting examine.
+
+Analyzer - Attacking this item with itself (having it equipped then using .southeast, mode, or double clicking it) shows the oxygen, carbon dioxide, and plasma content of the tile you are standing on.
+
+Bottle - This item stores chemicals (60 cubic centimeters). You must use a syringe to draw chemicals from it. You can however pour bottles into bottles by attacking a bottle with another bottle.
+
+Brute Pack [stackable-5] - This item can be used to treat damage done by brute force weapons or piercing weapons. A mix of biodegradable experimental nanites cures most damage almost instantly amone contact.
+
+Card (identification) - Every crew member besides are issued this card. At game start they are given this card and a position (random) aboard Space Station 13. Late joiners get the hyper boring job of Researcher's Assisstant and must have their card filled by the captain at an identification computer. You can wear this card so that every door you walk through will open and close. (on security doors (has the black tab) you automatically try to use your card). You can also equip it and attack a door and it will stay open or stay closed. Also if you are wearing a card that is not yours then your name will be whoever the card is registered to. This however can be considered a crime and grounds for being arrested and punished.
+
+Clothing - This has its own section at the bottom. This includes masks and suits.
+
+Fire Extinguisher - This when you have equipped you can then attack anything besides a person (which can knock them unconscious) will release an anti-fire chemical which eventually helps greatly in stopping a fire. Yuo can refill this by attacking a water-tank and it will refill its 20 units. Right click on it and select examine to see how many units are left.

+Flasks - These contain a large mixture of chemicals (liquid) that are used for cryogenic healing. More on this later.
+
+Handcuffs - These are used for general detainment. It takes 3 uninterrupted (no movement AT ALL) seconds in order to place them on a person. These prevent the person from dong anything with their hands and allow you to remove things from them without resistance (they normally would need to be unconscious). you can rmeove handcuffs by either removing them via the right click option or by double clicking them with a free hand.
+
+Health analyzer - This when you attack a target will give you the overall health and type of damage the target has occurred. note that this only gives physical health and not (role-played) mental health.
+
+Ointment [stackable-5] - This like bruise packs allow you to heal your and other people's damage due to fire (or a welder that is on).
+
+Paper - Double clicking on this will give you its text which can sometimes be very helpful. Various things not in this document are detailed on the papers such as job positions, chemical information, and an old map.
+
+Parts - Table and rack parts. I'm not going to explaion these seperate so just attack themselves and you will construct a rack or get the box for a table. Using a wrench on these I believe converts them to its original metal.
+
+Radios/Headset/Intercom - These are the general method for communication aboard SS13. In order to best use a radio you must either attack itself (this means for headsets you must take them OFF your head first) or if its an intercom attack it with a free hand. This will bring up its control box where you can select a frequency to transmit/receive on (It's very simple - You receive and transmit messages only if you are on that frequency). You can also select whether to hear messages (speaker). Having this off still let's you broadcast but you won't hear yourself broadcast or any responses from others. You can also select having it automatically boradcast. This is most important for intercoms. This means that whenever it hears something via say or a whisper it will send it broadcast it. If you have it off you can still use it prefixing your say with [h] (for head), [l] (for left hand), or [r] (for right hand). This also will whisper what you are saying to those in the tiles adjacent to you.
+
+Rods [stackable-6] - These are like the parts and when you attack them with themselves they will either construct a grille (need 2) or repair a grille (only 1). Unlike the parts these can be used as an OK weapon.
+
+Screwdriver - This item is able to help fasten and unfasten items. It can fasten canisters to connecters, tables to floors, and grilles to floors. It can also unfasten them as well. You can attack with this weapon but there is no chance of knocknig them unconscious. (besides making them bleed to death)
+
+Shards - This glass item can be converted into glass by using a welding tool. Until then it is an unstackable weapon. They can cause a little piercing damage.
+
+Sheets [stackable-5] - These are like rods except that the glass sheets build windows and the metal sheets build MANY things. All you must do is attack self.
+
+Storage Containers (first aid kits and toolboxes) - These allow you to store items into them to allow easier transportation of a lot of items. You cannot store storage containers in storage containers no matter what the sizes are. Also certsin things can't go in ccertain containers because of their size. Most containers hold 7 items. You can open a container in 2 ways. Drag it onto yourself or equip it in one hand then attack it with a free hand. You can then remove items by attackng them with a free hand. Then when you've removed the item close the container by double clicking on the big red close X. You place items in the container by attacking it. They automatically go in unless they don't fit.
+
+Syringe - This object is capable of injecting chemicals into a targets bloodstream. It can also be used for precise mixing of bottles wherejust pouring is too inaccurate. It injects and draws in increments of 5 cubic centimeters. Attack it with itself to change the mode from inject to draw and vice versa. See the chemical information paper for information on the chemicals.
+
+Tanks - These plain and simple hold gases. The 2 types of tanks come prestocked with either oxygen or plasma. you can attach these to a siphon or canister for refillng by attacking it. This is one of the few items that CAN be worn on your back. Also if you have a gas mask on you can attack the tank with itself in order to switch your internals on. This puts you on an external atmosphere and lets you traverse highly toxic or low oxygen environments without fear of being injured. They also make a great item for attacking. It is a good idea to turn on internals then put them on your back so they are out of your way though. See the canisters sections for more information on refilling.
+
+Tile [stackable-10]- These are like the rods except that they build or repair floor tiles. (only one tile regardless)
+
+Welding Tool (or Welder) - This has two modes swapped by attacking itself. When its off its like a wrench except it won't deconstruct. When its on it will cause piercing fire damage. It also can slice canisters open releasing their contents. It also can be used to weld open the plating on a wall, cut grilles, form chards into sheets, and many other things. Be warned that using this in a high plasma environment may ignite the highly flammable plasma! Most actions with this use up fuel which can be refilled by attacking a welding fuel tank and cghecked by using the examine verb.
+
+Wirecutters - These can be used to cut wires on electronic devices. They can also easily cut grilles open
+
+Wrench - This item performs a variety of functions that largely deal with deconstruction. Attacking a chair, stool, table, rack, or wall girders will deconstruct them into eith metal sheets, table parts, or rack parts. It's also not too bad as an item to club an assailant over the head. (You can knock them unconscious) Since they disassemble tables and racks in order to place them on the table drag them over to the table.
+
+Clothing
+ Masks- There are currently two types of masks. Masks can be put on by either attackng yourself with it, attacking your mask hud button, or if the other person is submissive (unconscious/handcuffed) attacking the other person to place it on them.
+Gas mask- This filters out most plasma from the environment and allows for running on internals
+Muzzle - This is a negative item and prevents all speech including gasping generally leaving only nod. you can take this off yourself provided your hands aren't handcuffed.
+
+ Suits These work like masks except you must use the external clothing HUD.
+Fire suit - This prevents damage from the flames of fire. (Not welding tool attacks though as well as the oxygen deprivation from fire) also note there is a limit which once surpassed the suit can't disperse the heat causing you o take damage.
+
+Canisters/Siphons/Scrubbers
+ If you attack these with a free hand you'll bring up the control box. The only part that really deserves observance is the first set of buttons. The lower valve is not in yet. The release button releases x amount of units into the connected tank or if no tank to the environment. The amount of units is determined by the valve. You can alter this amount from 0 to 1000 by using the + + + and - - - buttons which go alter by adding or subtracting 1, 5, or 50 units. The next button - siphon - either siphons gas from the environment or an attached tank. Canisters are unable to siphon from the environment! The next button stop stops all siphoning or releasing. Siphons/scrubbers also contain an option canisters do not - automatic. This makes the sensors on board the unit to try and equalize the atmospheric environment of the tile it is on every second. The vents start with this as its option. Please note that the presence of a tank makes no difference as this part is on a seperate air track and it will still release into the environment. Once your done click the close button to stop the box from popping up.
+Scrubbers/air filters - These are like the normak siphons except that before its air cycle it releases all the oxygen it has stored. The automatic mode also instead of equalizingthe oxygen level removes carbon dioxide and plasma.
+
+Chairs
+ Chairs have a special feature - buckling. You can buckle someone (including yourself)into a chair by dragging them onto the chair object. The person must already be on the same tile as the chair however. You can unbuckle them/yourself from a chair by attacking the chair with a free hand. (Note: Handcuffed people can't unbuckle from chairs.)
+
+Miscellaneous Object Descriptions
+
+Alarm - This object is able to detect whether the area arod it has an appropriate co2 and o2 content to stay alive. Basically green is good and red is bad.
+
+Cryogenic Healing Units - There is a tutorial for this on the main SS13 website so I won't detail it here. Please note you can't revive already dead people.
+
+Firealarm - This is able to lock down an area instantly. When a fire gets near it it will trigger the lockdown to prevent contamination. You must use the reset button on this in order to clear the alarm and unlock the firedoors. You can also initiate a timer lock if you want time to escape.
+
+Grilles - These do a great job of blocking a lot of thngs. They stop most meteors in their tracks and are hard to destroy with normal weapons. (although it IS possible.)
+
+
+Miscellaneous Notes (a.k.a. archived world messages)
+
+Job selection is in thanks to Spuzzum! A captain is still randomly assigned if no one picks captain as their choice. Also please note that if you pick something as your primary and someone else picks it as their secondary (or tertiary) then they will always lose. This is essence is fairer. Also you can pick your beginning gender and name. I hope you enjoy it! Also I've extended time till start from one minute to one and a half minutes.
+
+ \ No newline at end of file diff --git a/ss13-40.93.2-decomp/spacestation13/hexadecimal.dm b/ss13-40.93.2-decomp/spacestation13/hexadecimal.dm new file mode 100644 index 0000000..dd9353b --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/hexadecimal.dm @@ -0,0 +1,78 @@ + +/proc/hex2num(hex) + + if (!( istext(hex) )) + CRASH("hex2num not given a hexadecimal string argument (user error)") + return + var/num = 0 + var/power = 0 + var/i = null + i = length(hex) + while(i > 0) + var/char = copytext(hex, i, i + 1) + switch(char) + if("0") + power++ + goto Label_290 + if("9", "8", "7", "6", "5", "4", "3", "2", "1") + num += text2num(char) * (16 ** power) + if("a", "A") + num += (16 ** power) * 10 + if("b", "B") + num += (16 ** power) * 11 + if("c", "C") + num += (16 ** power) * 12 + if("d", "D") + num += (16 ** power) * 13 + if("e", "E") + num += (16 ** power) * 14 + if("f", "F") + num += (16 ** power) * 15 + else + CRASH("hex2num given non-hexadecimal string (user error)") + return + power++ + Label_290: + i-- + return num + return + +/proc/num2hex(num, placeholder) + + if (placeholder == null) + placeholder = 2 + if (!( isnum(num) )) + CRASH("num2hex not given a numeric argument (user error)") + return + if (!( num )) + return "0" + var/hex = "" + var/i = 0 + while((16 ** i) < num) + i++ + var/power = null + power = i - 1 + while(power >= 0) + var/val = round(num / (16 ** power)) + num -= val * (16 ** power) + switch(val) + if(9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0) + hex += text("[]", val) + if(10.0) + hex += "A" + if(11.0) + hex += "B" + if(12.0) + hex += "C" + if(13.0) + hex += "D" + if(14.0) + hex += "E" + if(15.0) + hex += "F" + else + power-- + while(length(hex) < placeholder) + hex = text("0[]", hex) + return hex + return diff --git a/ss13-40.93.2-decomp/spacestation13/hi_pipe.dmi b/ss13-40.93.2-decomp/spacestation13/hi_pipe.dmi new file mode 100644 index 0000000..77fb29e Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/hi_pipe.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/human.dmi b/ss13-40.93.2-decomp/spacestation13/human.dmi new file mode 100644 index 0000000..1c03266 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/human.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/instructions.dm b/ss13-40.93.2-decomp/spacestation13/instructions.dm new file mode 100644 index 0000000..3ad69bc --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/instructions.dm @@ -0,0 +1,333 @@ + +/obj/machinery/computer/hologram_comp/New() + + ..() + spawn( 10 ) + src.projector = locate(/obj/machinery/hologram_proj, get_step(src.loc, NORTH)) + return + return + +/obj/machinery/computer/hologram_comp/DblClick() + + if (get_dist(src, usr) > 1) + return 0 + src.show_console(usr) + return + +/obj/machinery/computer/hologram_comp/proc/render() + + var/icon/I = new /icon( 'human.dmi', "male" ) + if (src.lumens >= 0) + I.Blend(rgb(src.lumens, src.lumens, src.lumens), 0) + else + I.Blend(rgb( -I.lumens, -I.lumens, -I.lumens), 1) + I.Blend(new /icon( 'human.dmi', "mouth" ), 3) + var/icon/U = new /icon( 'human.dmi', "diaper" ) + Blend(U, 3) + U = new /icon( 'mob.dmi', "hair_a" ) + U.Blend(rgb(src.h_r, src.h_g, src.h_b), 0) + I.Blend(U, 3) + src.projector.projection.icon = I + return + +/obj/machinery/computer/hologram_comp/proc/show_console(user as mob) + + user.machine = src + if (src.temp) + var/dat = text("[]

Clear", src.temp, src) + else + dat = text("Hologram Status:
\nPower: []
\nHologram Control:
\nColor Luminosity: []/220 \[Reset\]
\nLighten: 1 10
\nDarken: 1 10
\n
\nHair Color: ([],[],[]) \[Reset\]
\nRed (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nGreen (0-255): \[0\] -10 -1 [] 1 10 \[255\]
\nBlue (0-255): \[0\] -10 -1 [] 1 10 \[255\]
", src, (src.projector.projection ? "On" : "Off"), -src.lumens + 35, src, src, src, src, src, src.h_r, src.h_g, src.h_b, src, src, src, src, src.h_r, src, src, src, src, src, src, src.h_g, src, src, src, src, src, src, src.h_b, src, src, src) + user << browse(dat, "window=hologram_console") + return + +/obj/machinery/computer/hologram_comp/Topic(href, href_list) + + if (get_dist(src, usr) <= 1) + flick("holo_console1", src) + if (href_list["power"]) + if (src.projector.projection) + src.icon_state = "hologram0" + src.projection = null + del(src.projector.projection) + else + src.projection = new /obj/projection( src.loc ) + src.projector.projection.icon = 'human.dmi' + src.projector.projection.icon_state = "male" + src.projector.icon_state = "hologram1" + src.render() + else + if (href_list["h_r"]) + if (src.projector.projection) + src.h_r += text2num(href_list["h_r"]) + src.h_r = min(max(src.h_r, 0), 255) + render() + else + if (href_list["h_g"]) + if (src.projector.projection) + src.h_g += text2num(href_list["h_g"]) + src.h_g = min(max(src.h_g, 0), 255) + render() + else + if (href_list["h_b"]) + if (src.projector.projection) + src.h_b += text2num(href_list["h_b"]) + src.h_b = min(max(src.h_b, 0), 255) + render() + else + if (href_list["light"]) + if (src.projector.projection) + src.lumens += text2num(href_list["light"]) + src.lumens = min(max(src.lumens, -185.0), 35) + render() + else + if (href_list["reset"]) + if (src.projector.projection) + src.lumens = 0 + render() + else + if (href_list["temp"]) + src.temp = null + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.show_console(M) + //Foreach goto(446) + return + +/obj/begin/verb/ready() + set src in usr.loc + + if ((!( istype(usr, /mob/human) ) || usr.start)) + usr << "You have already started!" + return + var/M = usr + src.get_dna_ready(M) + if ((!( M.w_uniform ) && !( ticker ))) + if (M.gender == "female") + M.w_uniform = new /obj/item/weapon/clothing/under/pink( M ) + else + M.w_uniform = new /obj/item/weapon/clothing/under/blue( M ) + M.w_uniform.layer = 20 + M.shoes = new /obj/item/weapon/clothing/shoes/brown( M ) + M.shoes.layer = 20 + else + M << "You will have to find clothes from the station." + if ((ticker && !( M.l_hand ))) + var/obj/item/weapon/card/id/I = new /obj/item/weapon/card/id( M ) + var/list/L = list( "Technical Assistant", "Research Assistant", "Staff Assistant", "Medical Assistant" ) + if (L.Find(M.occupation1)) + var/choose = M.occupation1 + else + choose = pick(L) + switch(choose) + if("Research Assistant") + I.assignment = "Research Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + if("Technical Assistant") + I.assignment = "Technical Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + if("Medical Assistant") + I.assignment = "Medical Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + if("Staff Assistant") + I.assignment = "Staff Assistant" + I.registered = M.rname + I.access_level = 0 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + else + I.name = text("[]'s ID Card ([]>[]-[]-[])", I.registered, I.access_level, I.lab_access, I.engine_access, I.air_access) + I.layer = 20 + M.l_hand = I + M.start = 1 + M.update_face() + M.update_body() + return + +/obj/begin/verb/enter() + set src in usr.loc + + if (!( enter_allowed )) + usr << "\blue There is an administrative lock on entering the game!" + return + if ((!( usr.start ) || !( istype(usr, /mob/human) ))) + usr << "\blue You aren't ready! Use the ready verb on this pad to set up your character!" + return + if (ctf) + var/rogue = locate("landmark*CTF-rogue") + usr.loc = rogue.loc + usr << "It's CTF mode. You are a late joiner so you are a Rogue!" + usr << "\blue Now teleporting." + if (ticker) + var/H = usr + if (istype(H, /mob/human)) + reg_dna[text("[]", H.primary.uni_identity)] = H.rname + return + var/M = usr + var/list/start_loc = list( ) + if ((M.key in list( "Thief jack", "Link43130", "Hutchy2k1", "Easty", "Exadv1" ))) + start_loc["Supply Station"] = locate(77, 40, 10) + var/A = locate(/area/sleep_area) + var/list/L = list( ) + for(var/T as turf in A) + L += T + //Foreach goto(239) + start_loc["SS13"] = pick(L) + if (locate(text("spstart[]", M.ckey))) + for(var/obj/sp_start/S as obj in world) + if (S.tag == text("spstart[]", M.ckey)) + start_loc[text("[]", S.desc)] = S + //Foreach goto(295) + var/option = input(M, "Where should you start?", "Start Selector", null) in start_loc + if ((!( usr.start ) || (!( istype(usr, /mob/human) ) || usr.loc != src.loc))) + return + if (ticker) + reg_dna[text("[]", M.primary.uni_identity)] = M.rname + var/S = start_loc[option] + if (istype(S, /obj/sp_start)) + M << "\blue Now teleporting to special location." + if (S.special == 2) + for(var/obj/O as obj in M) + O = null + del(O) + //Foreach goto(492) + M.loc = S.loc + else + if (M.special == 3) + for(var/obj/O as obj in M) + O = null + del(O) + //Foreach goto(560) + var/mob/monkey/O = new /mob/monkey( S.loc ) + M.client.mob = O + O.loc = S.loc + M = null + del(M) + else + M.loc = O.loc + else + if (isturf(S)) + M << "\blue Now teleporting." + M.loc = S + return + +/obj/begin/proc/get_dna_ready(user as mob) + + var/M = user + if (!( M.primary )) + M.r_hair = M.nr_hair + M.b_hair = M.nb_hair + M.g_hair = M.ng_hair + M.s_tone = M.ns_tone + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + M.primary = new /obj/dna( null ) + M.primary.uni_identity = text("[]", add_zero(num2hex(dna_ident), 4)) + var/t2 = add_zero(num2hex(M.nr_hair), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.ng_hair), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.nb_hair), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.r_eyes), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.g_eyes), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.b_eyes), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex( -M.ns_tone + 35), 2) + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = (M.gender == "male" ? text("[]", num2hex(rand(1, 124))) : text("[]", num2hex(rand(127, 250)))) + if (length(t2) < 2) + M.uni_identity = text("[]0[]", M.primary.uni_identity, t2) + else + M.uni_identity = text("[][]", M.primary.uni_identity, t2) + M.primary.spec_identity = "5BDFE293BA5500F9FFFD500AAFFE" + M.primary.struc_enzyme = "CDE375C9A6C25A7DBDA50EC05AC6CEB63" + if (rand(1, 3125) == 13) + M.need_gl = 1 + M.be_epil = 1 + M.be_cough = 1 + M.be_tur = 1 + M.be_stut = 1 + if (M.need_gl) + var/b_vis = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 1 + M << "\blue You need glasses!" + else + b_vis = "5A7" + if (M.be_epil) + var/epil = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 2 + M << "\blue You are epileptic!" + else + epil = "6CE" + if (M.be_cough) + var/cough = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 4 + M << "\blue You have a chronic coughing syndrome!" + else + cough = "EC0" + if (M.be_tur) + epil = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 8 + M << "\blue You have Tourette syndrome!" + else + var/Tourette = "5AC" + if (M.be_stut) + var/stutter = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 16 + M << "\blue You have a stuttering problem!" + else + stutter = "A50" + M.primary.struc_enzyme = text("CDE375C9A6C2[]DBD[][][][]B63", b_vis, stutter, cough, Tourette, epil) + M.primary.use_enzyme = "493DB249EB6D13236100A37000800AB71" + M.primary.n_chromo = 28 + return + +/turf/station/command/floor/updatecell() + + src.oxygen = 756000.0 + src.firelevel = 0 + src.co2 = 0 + src.poison = 0 + src.sl_gas = 0 + src.n2 = 0 + return + +/turf/station/command/floor/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/turf/station/command/floor/attack_hand(user as mob) + + if ((!( user.canmove ) || (restrained() || !( user.pulling )))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(M.pulling, get_dir(user.pulling.loc, src)) + return diff --git a/ss13-40.93.2-decomp/spacestation13/inverthtml.dm b/ss13-40.93.2-decomp/spacestation13/inverthtml.dm new file mode 100644 index 0000000..fd51487 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/inverthtml.dm @@ -0,0 +1,27 @@ + +/proc/invertHTML(HTMLstring) + + if (!( istext(HTMLstring) )) + CRASH("Given non-text argument!") + return + else + if (length(HTMLstring) != 7) + CRASH("Given non-HTML argument!") + return + var/textr = copytext(HTMLstring, 2, 4) + var/textg = copytext(HTMLstring, 4, 6) + var/textb = copytext(HTMLstring, 6, 8) + var/r = hex2num(textr) + var/g = hex2num(textg) + var/b = hex2num(textb) + textr = num2hex(255 - r) + textg = num2hex(255 - g) + textb = num2hex(255 - b) + if (length(textr) < 2) + textr = text("0[]", textr) + if (length(textg) < 2) + textr = text("0[]", textg) + if (length(textb) < 2) + textr = text("0[]", textb) + return text("#[][][]", textr, textg, textb) + return diff --git a/ss13-40.93.2-decomp/spacestation13/items.dm b/ss13-40.93.2-decomp/spacestation13/items.dm new file mode 100644 index 0000000..5e62618 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/items.dm @@ -0,0 +1,5419 @@ + +/proc/text2dir(direction) + + switch(uppertext(direction)) + if("NORTH") + return 1 + if("SOUTH") + return 2 + if("EAST") + return 4 + if("WEST") + return 8 + if("NORTHEAST") + return 5 + if("NORTHWEST") + return 9 + if("SOUTHEAST") + return 6 + if("SOUTHWEST") + return 10 + else + return + +/proc/get_turf(T as turf) + + while((!( istype(T, /turf) ) && T)) + T = T.loc + return T + return + +/proc/dir2text(direction) + + switch(direction) + if(1.0) + return "north" + if(2.0) + return "south" + if(4.0) + return "east" + if(8.0) + return "west" + if(5.0) + return "northeast" + if(6.0) + return "southeast" + if(9.0) + return "northwest" + if(10.0) + return "southwest" + else + return + +/obj/proc/hear_talk(M as mob, text) + + return + +/obj/machinery/recharger/process() + + if (src.charging) + if (src.charging.charges < 10) + src.charges++ + src.icon_state = "recharger1" + else + src.icon_state = "recharger2" + else + src.icon_state = "recharger0" + return + +/obj/machinery/recharger/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/recharger/attack_hand(user as mob) + + src.add_fingerprint(user) + if (src.charging) + src.charging.update_icon() + src.charging.loc = src.loc + src.charging = null + return + +/obj/machinery/recharger/attackby(G as obj, user as mob) + + if (src.charging) + return + if (istype(G, /obj/item/weapon/gun/energy)) + user.drop_item() + G.loc = src + src.charging = G + return + return + +/obj/item/weapon/table_parts/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + src = null + del(src) + return + return + return + +/obj/item/weapon/table_parts/attack_self(user as mob) + + var/state = input(user, "What type of table?", "Assembling Table", null) in list( "sides", "corners", "alone" ) + var/direct = SOUTH + if (state == "corners") + direct = input(user, "Direction?", "Assembling Table", null) in list( "northwest", "northeast", "southwest", "southeast" ) + else + if (state == "sides") + direct = input(user, "Direction?", "Assembling Table", null) in list( "north", "east", "south", "west" ) + var/obj/table/T = new /obj/table( user.loc ) + T.icon_state = state + T.dir = text2dir(direct) + T.add_fingerprint(user) + src = null + del(src) + return + return + +/obj/item/weapon/rack_parts/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + src = null + del(src) + return + return + return + +/obj/item/weapon/rack_parts/attack_self(user as mob) + + var/obj/rack/R = new /obj/rack( user.loc ) + R.add_fingerprint(user) + src = null + del(src) + return + return + +/obj/item/weapon/paper_bin/proc/update() + + src.icon_state = text("paper_bin[]", ((src.amount || locate(/obj/item/weapon/paper, src)) ? "1" : null)) + return + +/obj/item/weapon/paper_bin/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/paper)) + user.drop_item() + W.loc = src + else + if (istype(W, /obj/item/weapon/weldingtool)) + var/T = W + if ((T.welding && T.weldfuel > 0)) + viewers(user, null) << text("[] burns the paper with the welding tool!", user) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(W, /obj/item/weapon/igniter)) + viewers(user, null) << text("[] burns the paper with the igniter!", user) + spawn( 0 ) + src.burn(1800000.0) + return + src.update() + return + +/obj/item/weapon/paper_bin/burn(fi_amount) + + flick("paper_binb", src) + for(var/atom/movable/A as mob|obj in src) + A.burn(fi_amount) + //Foreach goto(23) + if (fi_amount >= 900000.0) + src.amount = 0 + src.update() + return + +/obj/item/weapon/paper_bin/MouseDrop(user as mob) + + if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || get_dist(src, usr) <= 1))))) + if (usr.hand) + if (!( usr.l_hand )) + spawn( 0 ) + src.attack_hand(usr, 1, 1) + return + else + if (!( src.r_hand )) + spawn( 0 ) + src.attack_hand(usr, 0, 1) + return + return + +/obj/item/weapon/paper_bin/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/paper_bin/attack_hand(user as mob, unused, flag) + + if (flag) + return ..() + src.add_fingerprint(user) + if (locate(/obj/item/weapon/paper, src)) + for(var/obj/item/weapon/paper/P as obj in src) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + P = null + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + P = null + usr.UpdateClothing() + else + //Foreach goto(48) + else + if (usr.amount >= 1) + usr.amount-- + new /obj/item/weapon/paper( usr.loc ) + src.update() + return + +/obj/item/weapon/paper_bin/examine() + set src in oview(1) + + src.amount = round(src.amount) + var/n = src.amount + for(var/obj/item/weapon/paper/P as obj in src) + n++ + //Foreach goto(33) + if (n <= 0) + n = 0 + usr << "There are no papers in the bin." + else + if (n == 1) + usr << "There is one paper in the bin." + else + usr << text("There are [] papers in the bin.", n) + return + +/obj/item/weapon/dummy/ex_act() + + return + +/obj/item/weapon/game_kit/New() + + src.board_stat = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" + src.selected = "CR" + return + +/obj/item/weapon/game_kit/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/game_kit/MouseDrop(user as mob) + + if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || get_dist(src, usr) <= 1))))) + if (usr.hand) + if (!( usr.l_hand )) + spawn( 0 ) + src.attack_hand(usr, 1, 1) + return + else + if (!( src.r_hand )) + spawn( 0 ) + src.attack_hand(usr, 0, 1) + return + return + +/obj/item/weapon/game_kit/proc/update() + + if (!( src.internet )) + var/dat = text("
Game Board

[] remove
", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src) + var/counter = null + counter = 1 + while(counter <= 8) + dat += text("\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t", src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 1) * 2) - 1, ((((counter - 1) * 8) + 1) * 2) + 1), ((counter + 1) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 2) * 2) - 1, ((((counter - 1) * 8) + 2) * 2) + 1), ((counter + 2) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 3) * 2) - 1, ((((counter - 1) * 8) + 3) * 2) + 1), ((counter + 3) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 4) * 2) - 1, ((((counter - 1) * 8) + 4) * 2) + 1), ((counter + 4) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 5) * 2) - 1, ((((counter - 1) * 8) + 5) * 2) + 1), ((counter + 5) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 6) * 2) - 1, ((((counter - 1) * 8) + 6) * 2) + 1), ((counter + 6) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 7) * 2) - 1, ((((counter - 1) * 8) + 7) * 2) + 1), ((counter + 7) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 8) * 2) - 1, ((((counter - 1) * 8) + 8) * 2) + 1), ((counter + 8) % 2 ? "W" : "B")) + counter++ + dat += "

Chips: " + dat += text("", src) + dat += text("", src) + dat += "
Chess pieces:
" + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("Using cache for pictures", src) + src.data = dat + else + var/dat = text("
Game Board

[] remove
", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src) + var/counter = null + counter = 1 + while(counter <= 8) + dat += text("\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t", src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 1) * 2) - 1, ((((counter - 1) * 8) + 1) * 2) + 1), ((counter + 1) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 2) * 2) - 1, ((((counter - 1) * 8) + 2) * 2) + 1), ((counter + 2) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 3) * 2) - 1, ((((counter - 1) * 8) + 3) * 2) + 1), ((counter + 3) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 4) * 2) - 1, ((((counter - 1) * 8) + 4) * 2) + 1), ((counter + 4) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 5) * 2) - 1, ((((counter - 1) * 8) + 5) * 2) + 1), ((counter + 5) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 6) * 2) - 1, ((((counter - 1) * 8) + 6) * 2) + 1), ((counter + 6) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 7) * 2) - 1, ((((counter - 1) * 8) + 7) * 2) + 1), ((counter + 7) % 2 ? "W" : "B"), src, counter, copytext(src.board_stat, ((((counter - 1) * 8) + 8) * 2) - 1, ((((counter - 1) * 8) + 8) * 2) + 1), ((counter + 8) % 2 ? "W" : "B")) + counter++ + dat += "

Chips: " + dat += text("", src) + dat += text("", src) + dat += "
Chess pieces:
" + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
", src) + dat += text("Using Internet for pictures", src) + src.data = dat + return + +/obj/item/weapon/game_kit/attack_hand(user as mob, unused, flag) + + if (flag) + return ..() + else + user.machine = src + if (!( src.data )) + update() + user << browse(src.data, "window=game_kit") + return + return + +/obj/item/weapon/game_kit/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + if (href_list["s_piece"]) + src.selected = href_list["s_piece"] + else + if (href_list["mode"]) + if (href_list["mode"] == "remove") + src.selected = "remove" + else + src.selected = null + else + if (href_list["sw_pic"]) + src.internet = !( src.internet ) + else + if (href_list["s_board"]) + if (!( src.selected )) + src.selected = href_list["s_board"] + else + var/tx = text2num(copytext(href_list["s_board"], 1, 2)) + var/ty = text2num(copytext(href_list["s_board"], 3, 4)) + if ((copytext(src.selected, 2, 3) == " " && length(src.selected) == 3)) + var/sx = text2num(copytext(src.selected, 1, 2)) + var/sy = text2num(copytext(src.selected, 3, 4)) + var/place = ((((sy - 1) * 8) + sx) * 2) - 1 + src.selected = copytext(src.board_stat, place, place + 2) + if (place == 1) + src.board_stat = text("BB[]", copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[]BB", copytext(src.board_stat, 1, 127)) + else + if (place) + src.board_stat = text("[]BB[]", copytext(src.board_stat, 1, place), copytext(src.board_stat, place + 2, 129)) + place = ((((ty - 1) * 8) + tx) * 2) - 1 + if (place == 1) + src.board_stat = text("[][]", src.selected, copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[][]", copytext(src.board_stat, 1, 127), src.selected) + else + if (place) + src.board_stat = text("[][][]", copytext(src.board_stat, 1, place), src.selected, copytext(src.board_stat, place + 2, 129)) + src.selected = null + else + if (src.selected == "remove") + var/place = ((((ty - 1) * 8) + tx) * 2) - 1 + if (place == 1) + src.board_stat = text("BB[]", copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[]BB", copytext(src.board_stat, 1, 127)) + else + if (place) + src.board_stat = text("[]BB[]", copytext(src.board_stat, 1, place), copytext(src.board_stat, place + 2, 129)) + else + if (length(src.selected) == 2) + var/place = ((((ty - 1) * 8) + tx) * 2) - 1 + if (place == 1) + src.board_stat = text("[][]", src.selected, copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[][]", copytext(src.board_stat, 1, 127), src.selected) + else + if (place) + src.board_stat = text("[][][]", copytext(src.board_stat, 1, place), src.selected, copytext(src.board_stat, place + 2, 129)) + src.add_fingerprint(usr) + update() + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(835) + return + +/obj/item/weapon/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(5)) + src = null + del(src) + return + else + return + +/obj/item/weapon/proc/attack_self() + + return + +/obj/item/weapon/proc/talk_into(M as mob, text) + + return + +/obj/item/weapon/proc/moved(user as mob, old_loc as turf) + + return + +/obj/item/weapon/proc/dropped(user as mob) + + return + +/obj/item/weapon/proc/afterattack() + + return + return + +/obj/item/weapon/proc/attack(M as mob, user as mob, def_zone) + + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been attacked with [][] ", M, src, (user ? text(" by [].", user) : ".")), 1) + //Foreach goto(20) + var/power = src.force + if (M.health >= -10.0) + if (istype(M, /mob/human)) + var/H = M + var/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + if (!( def_zone )) + var/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + def_zone = ran_zone(t) + if (H.organs[text("[]", def_zone)]) + affecting = H.organs[text("[]", def_zone)] + if (istype(affecting, /obj/item/weapon/organ/external)) + var/b_dam = (src.damtype == "brute" ? src.force : 0) + var/f_dam = (src.damtype == "fire" ? src.force : 0) + if (def_zone == "head") + if ((b_dam && (((H.head && H.head.brute_protect & 1) || (H.wear_mask && H.wear_mask.brute_protect & 1)) && prob(75)))) + if (prob(20)) + affecting.take_damage(power, 0) + else + H.show_message("\red You have been protected from a hit to the head.") + return + if ((b_dam && prob((src.force + affecting.brute_dam) + affecting.burn_dam))) + var/time = rand(10, 120) + if (prob(90)) + if (H.paralysis < time) + H.paralysis = time + else + if (H.weakened < time) + H.weakened = time + H.stat = 1 + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(514) + H.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", (time * 100) / 120)) + affecting.take_damage(b_dam, f_dam) + else + if (def_zone == "chest") + if ((b_dam && (((H.wear_suit && H.wear_suit.brute_protect & 2) || (H.w_uniform && H.w_uniform.brute_protect & 2)) && prob(90 - src.force)))) + H.show_message("\red You have been protected from a hit to the chest.") + return + if ((b_dam && prob((src.force + affecting.brute_dam) + affecting.burn_dam))) + if (prob(50)) + if (H.weakened < 5) + H.weakened = 5 + for(var/O as mob in viewers(H, null)) + O.show_message(text("\red [] has been knocked down!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(738) + else + if (H.stunned < 2) + H.stunned = 2 + for(var/O as mob in viewers(H, null)) + O.show_message(text("\red [] has been stunned!", H), 1) + //Foreach goto(808) + H.stat = 1 + affecting.take_damage(b_dam, f_dam) + else + if (def_zone == "diaper") + if ((b_dam && (((H.wear_suit && H.wear_suit.brute_protect & 4) || (H.w_uniform && H.w_uniform.brute_protect & 4)) && prob(90 - src.force)))) + H.show_message("\red You have been protected from a hit to the lower chest/diaper.") + return + if ((b_dam && prob((src.force + affecting.brute_dam) + affecting.burn_dam))) + if (prob(50)) + if (H.weakened < 5) + H.weakened = 5 + for(var/O as mob in viewers(H, null)) + O.show_message(text("\red [] has been knocked down!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(1014) + else + if (H.stunned < 2) + H.stunned = 2 + for(var/O as mob in viewers(H, null)) + O.show_message(text("\red [] has been stunned!", H), 1) + //Foreach goto(1084) + H.stat = 1 + affecting.take_damage(b_dam, f_dam) + else + affecting.take_damage(b_dam, f_dam) + H.UpdateDamageIcon() + else + switch(src.damtype) + if("brute") + M.bruteloss += power + if("fire") + M.fireloss += power + else + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + src.add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/ex_act(severity) + + if (severity <= 2) + src = null + del(src) + return + return + +/obj/item/weapon/bedsheet/attack_self(user as mob) + + user.drop_item() + src.layer = 5 + src.add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/burn(fi_amount) + + if (fi_amount > 3.0E7) + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + src = null + del(src) + return + return + return + return + +/obj/item/weapon/wrapping_paper/examine() + set src in oview(1) + + ..() + usr << text("There is about [] square units of paper left!", src.amount) + return + +/obj/item/weapon/wrapping_paper/attackby(W as obj, user as mob) + + if (!( locate(/obj/table, src.loc) )) + user << "\blue You MUST put the paper on a table!" + if (W.w_class < 4) + if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters))) + var/a_used = 2 ** (src.w_class - 1) + if (src.amount < a_used) + user << "\blue You need more paper!" + return + else + src.amount -= a_used + user.drop_item() + var/obj/item/weapon/gift/G = new /obj/item/weapon/gift( src.loc ) + G.size = W.w_class + G.w_class = G.size + 1 + G.icon_state = text("gift[]", G.size) + G.gift = W + W.loc = G + G.add_fingerprint(user) + W.add_fingerprint(user) + src.add_fingerprint(user) + if (src.amount <= 0) + new /obj/item/weapon/c_tube( src.loc ) + src = null + del(src) + return + else + user << "\blue You need scissors!" + else + user << "\blue The object is FAR too large!" + return + +/obj/item/weapon/gift/attack_self(user as mob) + + src.gift.loc = user + if (user.hand) + user.l_hand = src.gift + else + user.r_hand = src.gift + src.gift.layer = 20 + src.gift.add_fingerprint(user) + src = null + del(src) + return + return + +/obj/item/weapon/a_gift/ex_act() + + src = null + del(src) + return + return + +/obj/item/weapon/a_gift/burn(fi_amount) + + if (fi_amount > 900000.0) + src = null + del(src) + return + return + +/obj/item/weapon/a_gift/attack_self(M as mob) + + switch(pick("pill", "flash", "t_gun", "l_gun", "shield", "sword")) + if("pill") + var/obj/item/weapon/m_pill/superpill/W = new /obj/item/weapon/m_pill/superpill( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + src = null + del(src) + return + if("flash") + var/obj/item/weapon/flash/W = new /obj/item/weapon/flash( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + src = null + del(src) + return + if("l_gun") + var/obj/item/weapon/gun/energy/laser_gun/W = new /obj/item/weapon/gun/energy/laser_gun( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + src = null + del(src) + return + if("t_gun") + var/obj/item/weapon/gun/energy/taser_gun/W = new /obj/item/weapon/gun/energy/taser_gun( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + src = null + del(src) + return + if("shield") + var/obj/item/weapon/shield/W = new /obj/item/weapon/shield( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + src = null + del(src) + return + if("sword") + var/obj/item/weapon/sword/W = new /obj/item/weapon/sword( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + src = null + del(src) + return + else + return + +/obj/item/weapon/flashbang/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.det_time == 30) + src.det_time = 30 + user.show_message("\blue You set the flashbang for 3 second detonation time.") + src.desc = "It is set to detonate in 3 seconds." + else + src.det_time = 100 + user.show_message("\blue You set the flashbang for 10 second detonation time.") + src.desc = "It is set to detonate in 10 seconds." + src.add_fingerprint(user) + return + +/obj/item/weapon/flashbang/afterattack(target as mob|obj|turf|area, user as mob) + + if (user.equipped() == src) + if (!( src.state )) + user << "\red You prime the flashbang! 10 seconds!" + src.state = 1 + src.icon_state = "flashbang1" + spawn( src.det_time ) + src.prime() + return + user.dir = get_dir(user, target) + user.drop_item() + var/t = (isturf(target) ? target : target.loc) + walk_towards(src, t, 3) + src.add_fingerprint(user) + return + +/obj/item/weapon/flashbang/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/flashbang/attack_hand() + + walk(src, null, null) + src.throwspeed = 20 + ..() + return + +/obj/item/weapon/flashbang/proc/prime() + + var/T = get_turf(src) + T.firelevel = T.poison + for(var/M as mob in viewers(T, null)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S as obj in M) + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(72) + if ((get_dist(M, T) <= 2 || (src.loc == M.loc || src.loc == M))) + flick("e_flash", M.flash) + M.stunned = 10 + M.weakened = 3 + M << "\red BANG" + if ((prob(14) || (M == src.loc && prob(70)))) + M.ear_damage += rand(10, 20) + else + if (prob(30)) + M.ear_damage += rand(7, 14) + if (!( M.paralysis )) + M.eye_stat += rand(10, 15) + if (prob(10)) + M.eye_stat += 7 + M.ear_deaf += 30 + if (M == src.loc) + M.eye_stat += 10 + if (prob(60)) + if (istype(M, /mob/human)) + var/H = M + if (!( istype(H.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + M.ear_damage += 15 + M.ear_deaf += 60 + else + M.ear_damage += 15 + M.ear_deaf += 60 + else + if (get_dist(M, T) <= 5) + flick("e_flash", M.flash) + if (!( istype(M, /mob/human) )) + M.stunned = 7 + M.weakened = 2 + else + var/H = M + M.ear_deaf += 10 + if (prob(20)) + M.ear_damage += 10 + if ((!( istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses) ) || M.paralysis)) + M.stunned = 7 + M.weakened = 2 + else + if (!( M.paralysis )) + M.eye_stat += rand(1, 3) + M << "\red BANG" + else + if (!( istype(M, /mob/human) )) + flick("flash", M.flash) + else + var/H = M + if (!( istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses) )) + flick("flash", M.flash) + M.eye_stat += rand(1, 2) + M.ear_deaf += 5 + M << "\red BANG" + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob((M.eye_stat - 20) + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + if (M.ear_damage >= 15) + M << "\red Your ears start to ring badly!" + if (prob((M.ear_damage - 10) + 5)) + M << "\red You go deaf!" + M.sdisabilities |= 4 + else + if (M.ear_damage >= 5) + M << "\red Your ears start to ring!" + //Foreach goto(39) + src = null + del(src) + return + return + +/obj/item/weapon/flashbang/attack_self(user as mob) + + if (!( src.state )) + user << "\red You prime the flashbang! 10 seconds!" + src.state = 1 + src.icon_state = "flashbang1" + src.add_fingerprint(user) + spawn( src.det_time ) + prime() + return + return + +/obj/item/weapon/flash/attack(M as mob, user as mob) + + if (src.shots > 0) + var/safety = null + if (istype(M, /mob/human)) + var/H = M + if (istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses)) + safety = 1 + if (!( safety )) + M.weakened = 10 + if (M.client) + if (!( safety )) + if ((M.eye_stat > 15 && prob(M.eye_stat + 50))) + flick("e_flash", M.flash) + M.eye_stat += rand(1, 2) + else + flick("flash", M.flash) + M.eye_stat += rand(0, 2) + if (M.eye_stat >= 20) + M << "\red You eyes start to burn badly!" + M.disabilities |= 1 + if (prob((M.eye_stat - 20) + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] blinds [] with the flash!", user, M)) + //Foreach goto(229) + src.attack_self(user, 1) + return + +/obj/item/weapon/flash/attack_self(user as mob, flag) + + if ((world.time + 600) > src.l_time) + src.shots = 5 + if (src.shots < 1) + user.show_message("\red *click* *click*", 2) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.l_time = world.time + src.add_fingerprint(user) + src.shots-- + flick("flash2", src) + if (!( flag )) + for(var/M as mob in oviewers(3, null)) + if (prob(50)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S as obj in M) + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(201) + if (M.client) + var/safety = null + if (istype(M, /mob/human)) + var/H = M + if (istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses)) + safety = 1 + if (!( safety )) + flick("flash", M.flash) + //Foreach goto(160) + return + +/obj/item/weapon/locator/attack_self(user as mob) + + user.machine = src + if (src.temp) + var/dat = text("[]

Clear", src.temp, src) + else + dat = text("Persistent Signal Locator
\nFrequency: -- [] ++
\nRefresh", src, src, src.freq, src, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/locator/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["refresh"]) + src.temp = "Persistent Signal Locator
" + var/sr = get_turf(src) + if (sr) + src.temp += "Located Beacons:
" + for(var/obj/item/weapon/radio/beacon/W as obj in world) + if (W.freq == src.freq) + var/tr = get_turf(W) + if ((tr.z == sr.z && tr)) + var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) + if (direct < 5) + direct = "very strong" + else + if (direct < 10) + direct = "strong" + else + if (direct < 20) + direct = "weak" + else + direct = "very weak" + src.temp += text("[]-[]-[]
", W.code, dir2text(get_dir(sr, tr)), direct) + //Foreach goto(114) + src.temp += "Extranneous Signals:
" + for(var/obj/item/weapon/implant/tracking/W as obj in world) + Label_332: + if (W.freq == src.freq) + if ((!( W.implanted ) || !( ismob(W.loc) ))) + goto Label_332 + else + var/M = W.loc + if (M.stat == 2) + if ((M.timeofdeath + 6000) < world.time) + continue //goto(332) + var/tr = get_turf(W) + if ((tr.z == sr.z && tr)) + var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) + if (direct < 20) + if (direct < 5) + direct = "very strong" + else + if (direct < 10) + direct = "strong" + else + direct = "weak" + src.temp += text("[]-[]-[]
", W.id, dir2text(get_dir(sr, tr)), direct) + //Foreach goto(332) + src.temp += text("You are at \[[],[],[]\] in orbital coordinates.

Refresh
", sr.x, sr.y, sr.z, src) + else + src.temp += "Processing Error: Unable to locate orbital position.
" + else + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (((src.freq * 10) % 2) == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(749) + return + +/obj/item/weapon/syndicate_uplink/proc/explode() + + var/T = get_turf(src.loc) + T.firelevel = T.poison + T.res_vars() + var/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/U as turf in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 2) && (U.y >= (T.y - 2) && (U.x <= (T.x + 2) && U.x >= (T.x - 2))))) + zone = 3 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(209) + U.ex_act(zone) + //Foreach goto(109) + src.master = null + del(src.master) + src = null + del(src) + return + return + +/obj/item/weapon/syndicate_uplink/attack_self(user as mob) + + user.machine = src + if (src.selfdestruct) + var/dat = "Self Destructing..." + else + if (src.temp) + dat = text("[]

Clear", src.temp, src) + else + dat = text("Syndicate Uplink Console:
\nTele-Crystals left: []
\nRequest item: (uses 1 tele-crystal)
\nElectromagnet Card
\nSleepy Pen
\nCyanide Pill
\nCloaking Device
\nRevolver
\nImplant- Freedom (with injector)
\n
\nSelf-Destruct", src.uses, src, src, src, src, src, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/syndicate_uplink/Topic(href, href_list) + + if (usr.stat) + return + var/H = usr + if (!( istype(H, /mob/human) )) + return 1 + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["item_emag"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/card/emag( H.loc ) + else + if (href_list["item_sleepypen"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/pen/sleepypen( H.loc ) + else + if (href_list["item_cyanide"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/m_pill/cyanide( H.loc ) + else + if (href_list["item_cloak"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/cloaking_device( H.loc ) + else + if (href_list["item_revolver"]) + if (src.uses > 0) + src.uses-- + var/obj/item/weapon/gun/revolver/O = new /obj/item/weapon/gun/revolver( H.loc ) + O.bullets = 7 + else + if (href_list["item_imp_freedom"]) + if (src.uses > 0) + src.uses-- + var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter( H.loc ) + O.imp = new /obj/item/weapon/implant/freedom( O ) + src.temp = "The implant is triggered by chuckling and has a random amount of uses." + if (href_list["selfdestruct"]) + src.temp = text("Self-Destruct", src) + if (href_list["selfdestruct2"]) + src.selfdestruct = 1 + spawn( 30 ) + explode() + return + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(488) + return + +/obj/item/weapon/sword/attack(target as mob, user as mob) + + ..() + if (user.key == "Exadv1") + user.next_move = 1 + return + +/obj/item/weapon/sword/attack_self(user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The sword is now active." + src.force = 40 + src.icon_state = "sword1" + src.w_class = 4 + else + user << "\blue The sword can now be concealed." + src.force = 3 + src.icon_state = "sword0" + src.w_class = 2 + src.add_fingerprint(user) + return + +/obj/item/weapon/shield/attack_self(user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The shield is now active." + src.force = 40 + src.icon_state = "shield1" + else + user << "\blue The shield is now inactive." + src.force = 3 + src.icon_state = "shield0" + src.add_fingerprint(user) + return + +/obj/item/weapon/cloaking_device/attack_self(user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The cloaking device is now active." + src.force = 40 + src.icon_state = "shield1" + else + user << "\blue The cloaking device is now inactive." + src.force = 3 + src.icon_state = "shield0" + src.add_fingerprint(user) + return + +/obj/item/weapon/ammo/proc/update_icon() + + return + +/obj/item/weapon/ammo/a357/update_icon() + + src.icon_state = text("357-[]", src.amount_left) + src.desc = text("There are [] bullet\s left!", src.amount_left) + return + +/obj/item/weapon/gun/revolver/examine() + set src in usr + + src.desc = text("There are [] bullet\s left! Uses 357.", src.bullets) + ..() + return + +/obj/item/weapon/gun/revolver/attackby(A as obj, user as mob) + + if (istype(A, /obj/item/weapon/ammo/a357)) + if (src.bullets >= 7) + user << "\blue It's already fully loaded!" + return 1 + if (A.amount_left <= 0) + user << "\red There is no more bullets!" + return 1 + if (A.amount_left < (7 - src.bullets)) + src.bullets += A.amount_left + user << text("\red You reload [] bullet\s!", A.amount_left) + A.amount_left = 0 + else + user << text("\red You reload [] bullet\s!", 7 - A.bullets) + A.amount_left -= 7 - A.bullets + src.bullets = 7 + A.update_icon() + return 1 + return + +/obj/item/weapon/gun/revolver/afterattack(target as mob|obj|turf|area, user as mob, flag) + + if (flag) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.bullets < 1) + user.show_message("\red *click* *click*", 2) + return + src.bullets-- + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] fires a revolver at []!", user, target), 1, "\red You hear a gunshot", 2) + //Foreach goto(122) + var/T = user.loc + var/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while(!( istype(U, /turf) )) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act() + return + var/obj/bullet/A = new /obj/bullet( user.loc ) + if (!( istype(U, /turf) )) + A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + user.next_move = world.time + 4 + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/revolver/attack(M as mob, user as mob) + + src.add_fingerprint(user) + var/H = M + if ((istype(H, /mob/human) && (istype(H, /obj/item/weapon/clothing/head) && (H.flags & 8 && prob(80))))) + M << "\red The helmet protects you from being hit hard in the head!" + return + if ((user.a_intent == "hurt" && src.bullets > 0)) + if (prob(20)) + if (M.paralysis < 10) + M.paralysis = 10 + else + if (M.weakened < 10) + M.weakened = 10 + src.bullets-- + src.force = 75 + ..() + src.force = 60 + M.stat = 1 + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been shot point-blank by []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(192) + else + if (prob(50)) + if (M.paralysis < 60) + M.paralysis = 60 + else + if (M.weakened < 60) + M.weakened = 60 + src.force = 60 + ..() + M.stat = 1 + for(var/O as mob in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been pistol whipped []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(315) + return + +/obj/item/weapon/gun/energy/proc/update_icon() + + var/ratio = src.charges / 10 + ratio = round(ratio, 0.25) * 100 + src.icon_state = text("gun[]", ratio) + return + +/obj/item/weapon/gun/energy/laser_gun/afterattack(target as mob|obj|turf|area, user as mob, flag) + + if (flag) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.charges < 1) + user.show_message("\red *click* *click*", 2) + return + src.charges-- + update_icon() + var/T = user.loc + var/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while(!( istype(U, /turf) )) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act() + return + var/obj/beam/a_laser/A = new /obj/beam/a_laser( user.loc ) + if (!( istype(U, /turf) )) + A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + user.next_move = world.time + 4 + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/energy/laser_gun/attack(M as mob, user as mob) + + ..() + src.add_fingerprint(user) + if ((prob(30) && M.stat < 2)) + var/H = M + if ((istype(H, /mob/human) && (istype(H, /obj/item/weapon/clothing/head) && (H.flags & 8 && prob(80))))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.weakened < time) + M.weakened = time + M.stat = 1 + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall", 2) + //Foreach goto(181) + M.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", (time * 100) / 120)) + return + +/obj/item/weapon/gun/energy/taser_gun/update_icon() + + var/ratio = src.charges / 10 + ratio = round(ratio, 0.25) * 100 + src.icon_state = text("t_gun[]", ratio) + return + +/obj/item/weapon/gun/energy/taser_gun/afterattack(target as mob|obj|turf|area, user as mob, flag) + + if (flag) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.charges < 1) + user.show_message("\red *click* *click*", 2) + return + src.charges-- + update_icon() + var/T = user.loc + var/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while((!( istype(U, /turf) ) && U)) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act(1) + return + var/obj/beam/a_laser/s_laser/A = new /obj/beam/a_laser/s_laser( user.loc ) + if (!( istype(U, /turf) )) + A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/energy/taser_gun/attack(M as mob, user as mob) + + src.add_fingerprint(user) + var/H = M + if ((istype(H, /mob/human) && (istype(H, /obj/item/weapon/clothing/head) && (H.flags & 8 && prob(80))))) + M << "\red The helmet protects you from being hit hard in the head!" + return + if (user.a_intent == "hurt") + if (prob(20)) + if (M.paralysis < 10) + M.paralysis = 10 + else + if (M.weakened < 10) + M.weakened = 10 + if (M.stuttering < 10) + M.stuttering = 10 + ..() + M.stat = 1 + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall", 2) + //Foreach goto(182) + else + if (prob(50)) + if (M.paralysis < 60) + M.paralysis = 60 + else + if (M.weakened < 60) + M.weakened = 60 + if (M.stuttering < 60) + M.stuttering = 60 + M.stat = 1 + for(var/O as mob in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been stunned with the taser gun by []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(309) + return + +/obj/item/weapon/pill_canister/New() + + ..() + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + return + +/obj/item/weapon/pill_canister/placebo/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/P = new /obj/item/weapon/m_pill( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/antitoxin/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/antitoxin/P = new /obj/item/weapon/m_pill/antitoxin( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/Tourette/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/Tourette/P = new /obj/item/weapon/m_pill/Tourette( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/sleep/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/sleep/P = new /obj/item/weapon/m_pill/sleep( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/epilepsy/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/epilepsy/P = new /obj/item/weapon/m_pill/epilepsy( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/cough/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/cough/P = new /obj/item/weapon/m_pill/cough( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/examine() + set src in view(1) + + ..() + if (src.contents.len) + var/pills = 0 + for(var/obj/item/weapon/m_pill/M as obj in src) + pills += M.amount + //Foreach goto(39) + usr << text("\blue There are [] pills inside!", pills) + else + usr << "\blue It looks empty!" + return + +/obj/item/weapon/pill_canister/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/item/weapon/pill_canister/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + var/P = pick(src.contents) + if (P) + P.amount-- + var/W = new P.type( user ) + if (user.hand) + user.l_hand = W + else + user.r_hand = W + W.layer = 20 + if (P.amount <= 0) + P = null + del(P) + W.add_fingerprint(user) + src.add_fingerprint(user) + else + return ..() + return + +/obj/item/weapon/pill_canister/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/m_pill)) + var/pills = 0 + for(var/obj/item/weapon/m_pill/M as obj in src) + pills += M.amount + //Foreach goto(34) + if (pills > 30) + usr << "\blue There are too many pills inside!" + return + for(var/obj/item/weapon/m_pill/M as obj in src) + if (M.type == W.type) + M.amount += W.amount + W = null + del(W) + return + //Foreach goto(97) + if (W) + user.drop_item() + W.loc = src + src.add_fingerprint(user) + W.add_fingerprint(user) + if (istype(W, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != W) + return + if (src.loc != user) + return + t = html_encode(t) + if (t) + src.name = text("Pill Canister- '[]'", t) + else + src.name = "Pill Canister" + return + +/obj/item/weapon/m_pill/proc/ingest(M as mob) + + src.amount-- + if (src.amount <= 0) + src = null + del(src) + return + return + +/obj/item/weapon/m_pill/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/F = new src.type( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/m_pill/attack(M as mob, user as mob) + + if ((user != M && istype(M, /mob/human))) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] is forcing [] to swallow the []", user, M, src), 1) + //Foreach goto(41) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = src + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "pill" + M.requests += O + spawn( 0 ) + O.process() + return + else + src.add_fingerprint(user) + ingest(M) + return + +/obj/item/weapon/m_pill/superpill/ingest(M as mob) + + M.fireloss = 0 + M.toxloss = 0 + M.bruteloss = 0 + M.oxyloss = 0 + M.paralysis = 5 + M.stunned = 15 + M.weakened = 10 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/sleep/ingest(M as mob) + + if (M.drowsyness < 600) + M.drowsyness += 600 + M.drowsyness = min(M.drowsyness, 1800) + if (prob(25)) + M.paralysis += 60 + else + if (prob(50)) + M.paralysis += 30 + ..() + return + +/obj/item/weapon/m_pill/cyanide/ingest(M as mob) + + if (M.health > -50.0) + M.toxloss += M.health + 50 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/antitoxin/ingest(M as mob) + + if ((prob(50) && M.drowsyness < 600)) + M.drowsyness += 60 + M.drowsyness = min(M.drowsyness, 600) + if (M.health >= 0) + if (M.toxloss <= 20) + M.toxloss = 0 + else + M.toxloss -= 20 + M.antitoxs += 600 + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/cough/ingest(M as mob) + + if ((prob(75) && M.drowsyness < 600)) + M.drowsyness += 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_ch_cou += 1200 + ..() + return + +/obj/item/weapon/m_pill/epilepsy/ingest(M as mob) + + if (M.drowsyness < 600) + M.drowsyness += rand(2, 3) * 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_epil += 1200 + ..() + return + +/obj/item/weapon/m_pill/Tourette/ingest(M as mob) + + if (M.drowsyness < 600) + M.drowsyness += rand(3, 5) * 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_Tourette += 1200 + ..() + return + +/obj/item/weapon/m_pill/examine() + set src in view(1) + + ..() + usr << text("\blue There are [] pills left on the stack!", src.amount) + return + +/obj/item/weapon/m_pill/attackby(W as obj, user as mob) + + if (!( istype(W, src.type) )) + return + if (W.amount == 5) + return + if ((W.amount + src.amount) > 5) + src.amount = (W.amount + src.amount) - 5 + W.amount = 5 + else + W.amount += W.amount + src = null + del(src) + return + return + +/obj/item/weapon/handcuffs/attack(M as mob, user as mob) + + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (istype(M, /mob/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + else + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + return + +/obj/item/weapon/throwing(t_dir, rs) + + if (!( rs )) + rs = src.r_speed + ..(t_dir, rs) + return + +/obj/item/weapon/examine() + set src in view() + + switch(src.w_class) + if(1.0) + var/t = "tiny" + if(2.0) + t = "small" + if(3.0) + t = "normal-sized" + if(4.0) + t = "bulky" + if(5.0) + t = "huge" + else + usr << text("This is a \icon[][]. It is a [] item.", src, src.name, t) + ..() + return + +/obj/item/weapon/attack_hand(user as mob) + + if (istype(src.loc, /obj/item/weapon/storage)) + for(var/M as mob in range(1, src.loc)) + if (M.s_active == src.loc) + if (M.client) + M.client.screen -= src + //Foreach goto(34) + src.throwing = 0 + if (src.loc == user) + user.u_equip(src) + if (user.hand) + user.l_hand = src + else + user.r_hand = src + src.loc = user + src.layer = 20 + src.add_fingerprint(user) + user.UpdateClothing() + return + +/obj/item/weapon/attack_paw(user as mob) + + if (istype(src.loc, /obj/item/weapon/storage)) + for(var/M as mob in range(1, src.loc)) + if (M.s_active == src.loc) + if (M.client) + M.client.screen -= src + //Foreach goto(34) + src.throwing = 0 + if (src.loc == user) + user.u_equip(src) + if (user.hand) + user.l_hand = src + else + user.r_hand = src + src.loc = user + src.layer = 20 + user.UpdateClothing() + return + +/obj/item/weapon/wire/proc/update() + + if (src.amount > 1) + src.icon_state = "spool_wire" + src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount) + else + src.icon_state = "item_wire" + src.desc = "This is just a simple piece of regular insulated wire." + return + +/obj/item/weapon/wire/attack_self(user as mob) + + if (src.laying) + src.laying = 0 + user << "\blue Your done laying wire!" + else + user << "\blue You are not using this to lay wire..." + return + +/obj/item/weapon/card/data/verb/label(t as text) + set src in usr + + if (t) + src.name = text("Data Disk- '[]'", t) + else + src.name = "Data Disk" + src.add_fingerprint(usr) + return + +/obj/item/weapon/card/id/attack_self(user as mob) + + for(var/O as mob in viewers(user, null)) + O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1) + //Foreach goto(20) + src.add_fingerprint(user) + return + +/obj/item/weapon/card/id/verb/read() + set src in usr + + usr << text("\icon[] []: The current assignment on the card is [].", src, src.name, src.assignment) + usr << "\blue The rubric for the 4 access numbers is: general>lab-engine-air" + return + +/obj/item/weapon/rods/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/rods/F = new /obj/item/weapon/rods( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/rods/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/rods) )) + return + if (W.amount == 6) + return + if ((W.amount + src.amount) > 6) + src.amount = (W.amount + src.amount) - 6 + W.amount = 6 + else + W.amount += W.amount + src = null + del(src) + return + return + +/obj/item/weapon/rods/examine() + set src in view(1) + + ..() + usr << text("There are [] rod\s left on the stack.", src.amount) + return + +/obj/item/weapon/rods/attack_self(user as mob) + + if (locate(/obj/grille, usr.loc)) + for(var/obj/grille/G as obj in usr.loc) + if (G.destroyed) + G.health = 10 + G.density = 1 + G.destroyed = 0 + G.icon_state = "grille" + src.amount-- + else + //Foreach continue //goto(30) + else + if (src.amount < 2) + return + src.amount -= 2 + new /obj/grille( usr.loc ) + if (src.amount < 1) + src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/sheet/metal/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/metal/F = new /obj/item/weapon/sheet/metal( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/metal/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/sheet/metal) )) + return + if (W.amount == 5) + return + if ((W.amount + src.amount) > 5) + src.amount = (W.amount + src.amount) - 5 + W.amount = 5 + else + W.amount += W.amount + src = null + del(src) + return + return + +/obj/item/weapon/sheet/metal/examine() + set src in view(1) + + ..() + usr << text("There are [] metal sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/metal/attack_self(user as mob) + + var/t1 = text("Amount Left: []
", src.amount) + var/counter = 1 + var/list/L = list( ) + L["rods"] = "metal rods (makes 2)" + L["stool"] = "stool" + L["chair"] = "chair" + L["table"] = "table parts (2)" + L["rack"] = "rack parts" + L["o2can"] = "o2 canister (2)" + L["plcan"] = "pl canister (2)" + L["closet"] = "closet (2)" + L["fl_tiles"] = "floor tiles (makes 4)" + L["reinforced"] = "reinforced sheet (2) (Doesn't stack)" + L["repair"] = "repair wall" + L["construct"] = "construct wall" + for(var/t in L) + counter++ + t1 += text("[] ", src, t, L[t]) + if (counter > 2) + counter = 1 + t1 += "
" + //Foreach goto(186) + t1 += "
" + user << browse(t1, "window=met_sheet") + return + +/obj/item/weapon/sheet/metal/Topic(href, href_list) + + if ((usr.restrained() || (usr.stat || usr.equipped() != src))) + return + if (href_list["make"]) + if (src.amount < 1) + src = null + del(src) + return + switch(href_list["make"]) + if("rods") + src.amount-- + var/obj/item/weapon/rods/R = new /obj/item/weapon/rods( usr.loc ) + R.amount = 2 + if("table") + if (src.amount < 2) + return + src.amount -= 2 + new /obj/item/weapon/table_parts( usr.loc ) + if("stool") + src.amount-- + new /obj/stool( usr.loc ) + if("chair") + src.amount-- + var/obj/stool/chair/C = new /obj/stool/chair( usr.loc ) + C.dir = usr.dir + if (C.dir == NORTH) + C.layer = 5 + if("rack") + src.amount-- + new /obj/item/weapon/rack_parts( usr.loc ) + if("o2can") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/machinery/atmoalter/canister/oxygencanister/C = new /obj/machinery/atmoalter/canister/oxygencanister( usr.loc ) + C.gas.oxygen = 0 + if("plcan") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/machinery/atmoalter/canister/poisoncanister/C = new /obj/machinery/atmoalter/canister/poisoncanister( usr.loc ) + C.gas.plasma = 0 + if("reinforced") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/item/weapon/sheet/r_metal/C = new /obj/item/weapon/sheet/r_metal( usr.loc ) + C.amount = 1 + if("closet") + if (src.amount < 2) + return + src.amount -= 2 + new /obj/closet( usr.loc ) + if("fl_tiles") + src.amount-- + var/obj/item/weapon/tile/R = new /obj/item/weapon/tile( usr.loc ) + R.amount = 4 + if("construct") + if (src.amount < 2) + return + src.amount -= 2 + var/F = get_step(usr, usr.dir) + if (!( istype(F, /turf/station/floor) )) + return + var/turf/station/wall/W = new /turf/station/wall( locate(F.x, F.y, F.z) ) + W.icon_state = "girder" + W.updatecell = 1 + W.opacity = 0 + W.state = 1 + W.density = 1 + else + if (src.amount < 2) + return + var/W = get_step(usr, usr.dir) + if (!( istype(W, /turf/station/wall) )) + return + src.amount -= 2 + W.icon_state = "" + W.state = 2 + W.density = 1 + W.opacity = 1 + W.updatecell = 0 + if (src.amount <= 0) + src = null + del(src) + return + spawn( 0 ) + src.attack_self(usr) + return + return + +/obj/item/weapon/sheet/glass/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/glass/F = new /obj/item/weapon/sheet/glass( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/glass/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/sheet/glass) )) + return + if (W.amount == 5) + return + if ((W.amount + src.amount) > 5) + src.amount = (W.amount + src.amount) - 5 + W.amount = 5 + else + W.amount += W.amount + src = null + del(src) + return + return + +/obj/item/weapon/sheet/glass/examine() + set src in view(1) + + ..() + usr << text("There are [] glass sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/glass/attack_self(user as mob) + + if (!( istype(usr.loc, /turf/station) )) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + switch(alert("Sheet-Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", null, null)) + if("one direct") + var/obj/window/W = new /obj/window( usr.loc ) + W.anchored = 0 + if (src.amount < 1) + return + src.amount-- + if("full (2 sheets)") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/window/W = new /obj/window( usr.loc ) + W.dir = SOUTHWEST + W.ini_dir = SOUTHWEST + W.anchored = 0 + else + if (src.amount <= 0) + user.u_equip(src) + src = null + del(src) + return + return + +/obj/item/weapon/clipboard/attack_self(user as mob) + + var/dat = "Clipboard
" + if (src.pen) + dat += text("Remove Pen

", src) + for(var/obj/item/weapon/paper/P as obj in src) + dat += text("[] Write Remove
", src, P, P.name, src, P, src, P) + //Foreach goto(42) + user << browse(dat, "window=clipboard") + return + +/obj/item/weapon/clipboard/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if (usr.contents.Find(src)) + usr.machine = src + if (href_list["pen"]) + if (src.pen) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = src.pen + src.pen.loc = usr + src.pen.layer = 20 + src.pen = null + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = src.pen + src.pen.loc = usr + src.pen.layer = 20 + src.pen = null + usr.UpdateClothing() + if (src.pen) + src.pen.add_fingerprint(usr) + src.add_fingerprint(usr) + if (href_list["remove"]) + var/P = locate(href_list["remove"]) + if ((P && P.loc == src)) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + P.add_fingerprint(usr) + src.add_fingerprint(usr) + if (href_list["write"]) + var/P = locate(href_list["write"]) + if ((P && P.loc == src)) + if (istype(usr.r_hand, /obj/item/weapon/pen)) + P.attackby(usr.r_hand, usr) + else + if (istype(P.l_hand, /obj/item/weapon/pen)) + P.attackby(P.l_hand, usr) + else + if (istype(src.pen, /obj/item/weapon/pen)) + P.attackby(src.pen, usr) + src.add_fingerprint(usr) + if (href_list["read"]) + var/P = locate(href_list["read"]) + if ((P && P.loc == src)) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", P.name, stars(P.info)), text("window=[]", P.name)) + else + usr << browse(text("[][]", P.name, P.info), text("window=[]", P.name)) + if (ismob(src.loc)) + var/M = src.loc + if (M.machine == src) + spawn( 0 ) + src.attack_self(M) + return + return + +/obj/item/weapon/clipboard/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/clipboard/attack_hand(user as mob) + + if ((locate(/obj/item/weapon/paper, src) && (!( user.equipped() ) && (user.l_hand == src || user.r_hand == src)))) + for(/obj/item/weapon/paper/var/P as obj in src) + else + //Foreach goto(50) + if (P) + if (user.hand) + user.l_hand = P + else + user.r_hand = P + P.loc = user + P.layer = 20 + P.add_fingerprint(user) + user.UpdateClothing() + src.add_fingerprint(user) + else + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + else + return ..() + return + +/obj/item/weapon/clipboard/attackby(P as obj, user as mob) + + if (istype(P, /obj/item/weapon/paper)) + if (src.contents.len < 15) + user.drop_item() + P.loc = src + if (istype(P, /obj/item/weapon/paper/flag)) + if (ctf) + ctf.check_win(src) + else + user << "\blue Not enough space!!!" + else + if (istype(P, /obj/item/weapon/pen)) + if (!( src.pen )) + user.drop_item() + P.loc = src + src.pen = P + else + return + src.update() + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/clipboard/proc/update() + + src.icon_state = text("clipboard[][]", (locate(/obj/item/weapon/paper, src) ? "1" : "0"), (locate(/obj/item/weapon/pen, src) ? "1" : "0")) + return + +/obj/item/weapon/fcardholder/attack_self(user as mob) + + var/dat = "Clipboard
" + for(var/obj/item/weapon/f_card/P as obj in src) + dat += text("[] Remove
", src, P, P.name, src, P) + //Foreach goto(23) + user << browse(dat, "window=fcardholder") + return + +/obj/item/weapon/fcardholder/Topic(href, href_list) + + if ((usr.stat || usr.restrained())) + return + if (usr.contents.Find(src)) + usr.machine = src + if (href_list["remove"]) + var/P = locate(href_list["remove"]) + if ((P && P.loc == src)) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + src.add_fingerprint(usr) + P.add_fingerprint(usr) + src.update() + if (href_list["read"]) + var/P = locate(href_list["read"]) + if ((P && P.loc == src)) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", P.name, P.display()), text("window=[]", P.name)) + else + usr << browse(text("[][]", P.name, P.display()), text("window=[]", P.name)) + src.add_fingerprint(usr) + if (ismob(src.loc)) + var/M = src.loc + if (M.machine == src) + spawn( 0 ) + src.attack_self(M) + return + return + +/obj/item/weapon/fcardholder/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/fcardholder/attack_hand(user as mob) + + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + src.add_fingerprint(user) + else + return ..() + return + +/obj/item/weapon/fcardholder/attackby(P as obj, user as mob) + + if (istype(P, /obj/item/weapon/f_card)) + if (src.contents.len < 30) + user.drop_item() + P.loc = src + add_fingerprint(user) + src.add_fingerprint(user) + else + user << "\blue Not enough space!!!" + else + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "Holder Label:", text("[]", src.name), null) as text + if (user.equipped() != P) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("FPCase- '[]'", t) + else + src.name = "Finger Print Case" + else + return + src.update() + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/fcardholder/proc/update() + + var/i = 0 + for(var/obj/item/weapon/f_card/F as obj in src) + i = 1 + else + //Foreach goto(22) + src.icon_state = text("fcardholder[]", (i ? "1" : "0")) + return + +/obj/item/weapon/extinguisher/examine() + set src in usr + + usr << text("\icon[] [] contains [] units of water left!", src, src.name, src.waterleft) + ..() + return + +/obj/item/weapon/extinguisher/afterattack(target as mob|obj|turf|area, user as mob, flag) + + if (src.icon_state == "fire_extinguisher1") + if (src.waterleft < 1) + return + if (world.time < (src.last_use + 20)) + return + src.last_use = world.time + if (istype(target, /area)) + return + var/cur_loc = get_turf(user) + var/tar_loc = (isturf(target) ? target : get_turf(target)) + if (get_dist(tar_loc, cur_loc) > 1) + var/list/close = list( ) + var/list/far = list( ) + for(var/T as turf in oview(2, tar_loc)) + if (get_dist(T, tar_loc) <= 1) + close += T + else + far += T + //Foreach goto(147) + close += tar_loc + var/t = null + t = 1 + while(t <= 14) + var/obj/effects/water/W = new /obj/effects/water( cur_loc ) + if (rand(1, 3) != 1) + walk_towards(W, pick(close), null) + else + walk_towards(W, pick(far), null) + sleep(1) + t++ + src.waterleft-- + src.last_use = world.time + else + if (cur_loc == tar_loc) + new /obj/effects/water( cur_loc ) + src.waterleft -= 0.25 + src.last_use = 1 + else + var/list/possible = list( ) + for(var/T as turf in oview(1, tar_loc)) + possible += T + //Foreach goto(366) + possible += tar_loc + var/t = null + t = 1 + while(t <= 7) + var/obj/effects/water/W = new /obj/effects/water( cur_loc ) + walk_towards(W, pick(possible), null) + sleep(1) + t++ + src.waterleft -= 0.5 + src.last_use = world.time + else + return ..() + return + +/obj/item/weapon/extinguisher/attack_self(user as mob) + + if (src.icon_state == "fire_extinguisher0") + src.icon_state = "fire_extinguisher1" + src.desc = "The safety is off." + else + src.icon_state = "fire_extinguisher0" + src.desc = "The safety is on." + return + +/obj/item/weapon/pen/sleepypen/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/pen/sleepypen/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 5 + var/datum/chemical/s_tox/C = new /datum/chemical/s_tox( null ) + C.moles = (C.density * 5) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + ..() + return + +/obj/item/weapon/pen/sleepypen/attack(M as mob, user as mob) + + if (!( istype(M, /mob) )) + return + if (src.desc == "It's a normal black ink pen.") + return ..() + if (user) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been stabbed with [] by [].", M, src, user), 1) + //Foreach goto(57) + var/amount = src.transfer_mob(M, src.chem.maximum) + user.show_message(text("\red You inject [] units into the [].", amount, M)) + src.desc = "It's a normal black ink pen." + return + +/obj/item/weapon/paint/attack_self(user as mob) + + var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white", "neutral" ) + if ((user.equipped() != src || (user.stat || user.restrained()))) + return + src.color = t1 + src.icon_state = text("paint_[]", t1) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/burn(fi_amount) + + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + src = null + del(src) + return + return + return + return + +/obj/item/weapon/paper/photograph/New() + + ..() + src.pixel_y = 0 + src.pixel_x = 0 + return + +/obj/item/weapon/paper/photograph/attack_self(user as mob) + + var/n_name = input(user, "What would you like to label the photo?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("photo[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/photograph/examine() + set src in view() + + ..() + return + +/obj/item/weapon/paper/flag/burn() + + return + return + +/obj/item/weapon/paper/flag/New() + + ..() + src.pixel_y = 0 + src.pixel_x = 0 + src.name = "flag- 'FLAG'" + return + +/obj/item/weapon/paper/flag/attack_hand() + + if ((ctf && ctf.immobile)) + return 0 + else + . = ..() + return + +/obj/item/weapon/paper/flag/attack_self(user as mob) + + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("flag[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/flag/attackby(P as obj, user as mob) + + if (istype(P, /obj/item/weapon/pen)) + ..() + else + if (istype(P, /obj/item/weapon/paint)) + var/C = P + src.icon_state = text("flag_[]", C.color) + if (ctf) + ctf.check_win() + else + return + return + +/obj/item/weapon/paper/New() + + ..() + src.pixel_y = rand(1, 16) + src.pixel_x = rand(1, 16) + return + +/obj/item/weapon/paper/attack_self(user as mob) + + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("paper[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/attackby(P as obj, user as mob) + + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "What text do you wish to add?", text("[]", src.name), null) as message + if ((get_dist(src, usr) > 1 && (src.loc != user && (!( istype(src.loc, /obj/item/weapon/clipboard) ) && (src.loc.loc != user && user.equipped() != P))))) + return + t = html_encode(t) + t = dd_replacetext(t, "\n", "
") + t = dd_replacetext(t, "\[b\]", "") + t = dd_replacetext(t, "\[/b\]", "") + t = dd_replacetext(t, "\[i\]", "") + t = dd_replacetext(t, "\[/i\]", "") + t = dd_replacetext(t, "\[u\]", "") + t = dd_replacetext(t, "\[/u\]", "") + t = dd_replacetext(t, "\[sign\]", text("[]", user.rname)) + t = text("[]", t) + src.info += t + else + if (istype(P, /obj/item/weapon/weldingtool)) + var/W = P + if ((W.welding && W.weldfuel > 0)) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] burns [] with the welding tool!", user, src), 1, "\red You hear a small burning noise", 2) + //Foreach goto(323) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(P, /obj/item/weapon/igniter)) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] burns [] with the igniter!", user, src), 1, "\red You hear a small burning noise", 2) + //Foreach goto(406) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(P, /obj/item/weapon/wirecutters)) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] starts cutting []!", user, src), 1) + //Foreach goto(489) + sleep(50) + if (((src.loc == src || get_dist(src, user) <= 1) && (!( user.stat ) && !( restrained() )))) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\red [] cuts [] to pieces!", user, src), 1) + //Foreach goto(580) + src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/examine() + set src in view() + + ..() + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", src.name, stars(src.info)), text("window=[]", src.name)) + else + usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name)) + return + +/obj/item/weapon/f_card/examine() + set src in view(2) + + ..() + usr << text("\blue There are [] on the stack!", src.amount) + usr << browse(text("[][]", src.name, src.display()), text("window=[]", src.name)) + return + +/obj/item/weapon/f_card/proc/display() + + if (src.fingerprints) + var/dat = "Fingerprints on Card
" + var/L = params2list(src.fingerprints) + for(var/i in L) + dat += text("[]
", i) + //Foreach goto(41) + return dat + else + return "There are no fingerprints on this card." + return + +/obj/item/weapon/f_card/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/f_card/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/f_card)) + if ((src.fingerprints || W.fingerprints)) + return + if (src.amount == 10) + return + if ((W.amount + src.amount) > 10) + src.amount = 10 + W.amount = (W.amount + src.amount) - 10 + else + src.amount += W.amount + W = null + del(W) + src.add_fingerprint(user) + if (W) + W.add_fingerprint(user) + else + if (istype(W, /obj/item/weapon/pen)) + var/t = input(user, "Card Label:", text("[]", src.name), null) as text + if (user.equipped() != W) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("FPrintC- '[]'", t) + else + src.name = "Finger Print Card" + W.add_fingerprint(user) + src.add_fingerprint(user) + return + +/obj/item/weapon/f_card/add_fingerprint() + + ..() + if (src.fingerprints) + if (src.amount > 1) + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( (ismob(src.loc) ? src.loc.loc : src.loc) ) + F.amount = --src.amount + src.amount = 1 + src.icon_state = "f_print_card1" + return + +/obj/item/weapon/f_print_scanner/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/f_card)) + if (W.fingerprints) + return + if (src.amount == 20) + return + if ((W.amount + src.amount) > 20) + src.amount = 20 + W.amount = (W.amount + src.amount) - 20 + else + src.amount += W.amount + W = null + del(W) + src.add_fingerprint(user) + if (W) + W.add_fingerprint(user) + return + +/obj/item/weapon/f_print_scanner/attack_self(user as mob) + + src.printing = !( src.printing ) + src.icon_state = text("f_print_scanner[]", src.printing) + src.add_fingerprint(user) + return + +/obj/item/weapon/f_print_scanner/attack(M as mob, user as mob) + + if ((!( ismob(M) ) || (!( istype(M.primary, /obj/dna) ) || (!( istype(M, /mob/human) ) || M.gloves)))) + user << text("\blue Unable to locate any fingerprints on []!", M) + return 0 + else + if ((src.amount < 1 && src.printing)) + user << text("\blue Fingerprints scanned on []. Need more cards to print.", M) + src.printing = 0 + src.icon_state = text("f_print_scanner[]", src.printing) + if (src.printing) + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.fingerprints = md5(M.primary.uni_identity) + F.icon_state = "f_print_card1" + F.name = text("FPrintC- '[]'", M.name) + user << "\blue Done printing." + user << text("\blue []'s Fingerprints: []", M, md5(M.primary.uni_identity)) + return + +/obj/item/weapon/f_print_scanner/afterattack(A as mob|obj|turf|area, user as mob) + + src.add_fingerprint(user) + if (!( A.fingerprints )) + user << "\blue Unable to locate any fingerprints!" + return 0 + else + if ((src.amount < 1 && src.printing)) + user << "\blue Fingerprints found. Need more cards to print." + src.printing = 0 + src.icon_state = text("f_print_scanner[]", src.printing) + if (src.printing) + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.fingerprints = A.fingerprints + F.icon_state = "f_print_card1" + user << "\blue Done printing." + var/L = params2list(A.fingerprints) + user << text("\blue Isolated [] fingerprints.", L.len) + for(var/i in L) + user << text("\blue \t []", i) + //Foreach goto(186) + return + +/obj/item/weapon/healthanalyzer/attack(M as mob, user as mob) + + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1) + //Foreach goto(67) + user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1) + user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.oxyloss, M.toxloss, M.fireloss, M.bruteloss), 1) + user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) + if (M.rejuv) + user.show_message(text("\blue Bloodstream Analysis located [] units of rejuvenation chemicals.", M.rejuv), 1) + src.add_fingerprint(user) + return + return + +/obj/item/weapon/analyzer/attack_self(user as mob) + + if (user.stat) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + var/T = user.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = (((T.co2 + T.oxygen) + T.poison) + T.sl_gas) + T.n2 + turf_total = max(turf_total, 1) + user.show_message("\blue Results:", 1) + var/t = "" + var/t1 = (turf_total / 3600000.0) * 100 + if ((90 < t1 && t1 < 110)) + user.show_message(text("\blue Air Pressure: []%", t1), 1) + else + user.show_message(text("\blue Air Pressure:\red []%", t1), 1) + t1 = (T.n2 / turf_total) * 100 + t1 = round(t1, 0.0010) + if ((60 < t1 && t1 < 80)) + t += text("Nitrogen: [] ", t1) + else + t += text("Nitrogen: [] ", t1) + t1 = (T.oxygen / turf_total) * 100 + t1 = round(t1, 0.0010) + if ((20 < t1 && t1 < 24)) + t += text("Oxygen: [] ", t1) + else + t += text("Oxygen: [] ", t1) + t1 = (T.poison / turf_total) * 100 + t1 = round(t1, 0.0010) + if (t1 < 0.5) + t += text("Plasma: [] ", t1) + else + t += text("Plasma: [] ", t1) + t1 = (T.co2 / turf_total) * 100 + t1 = round(t1, 0.0010) + if (t1 < 1) + t += text("CO2: [] ", t1) + else + t += text("CO2: [] ", t1) + t1 = (T.sl_gas / turf_total) * 100 + t1 = round(t1, 0.0010) + if (t1 < 5) + t += text("NO2: []", t1) + else + t += text("NO2: []", t1) + user.show_message(t, 1) + user.show_message(text("\blue \t Temperature: [] C", (T.heat / turf_total) + -254.7), 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/proc/return_inv() + + var/list/L = list( ) + for(var/obj/item/weapon/storage/S as obj in src) + L += S.return_inv() + //Foreach goto(22) + return L + return + +/obj/item/weapon/storage/proc/show_to(user as mob) + + user.client.screen -= src.boxes + user.client.screen -= src.closer + user.client.screen -= src.contents + user.client.screen += src.boxes + user.client.screen += src.closer + user.client.screen += src.contents + user.s_active = src + return + +/obj/item/weapon/storage/proc/hide_from(user as mob) + + user.client.screen -= src.boxes + user.client.screen -= src.closer + user.client.screen -= src.contents + return + +/obj/item/weapon/storage/proc/close(user as mob) + + src.hide_from(user) + user.s_active = null + return + +/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) + + var/cx = tx + var/cy = ty + src.boxes.screen_loc = text("[],[] to [],[]", tx, ty, mx, my) + for(var/obj/O as obj in src.contents) + O.screen_loc = text("[],[]", cx, cy) + O.layer = 20 + cx++ + if (cx > mx) + cx = tx + cy-- + //Foreach goto(56) + src.closer.screen_loc = text("[],[]", mx, my) + return + +/obj/item/weapon/storage/proc/orient2hud(user as mob) + + if (src == user.l_hand) + src.orient_objs(3, 11, 3, 4) + else + if (src == src.r_hand) + src.orient_objs(1, 11, 1, 4) + else + if (src == src.back) + src.orient_objs(4, 10, 4, 3) + else + src.orient_objs(7, 8, 10, 7) + return + +/obj/item/weapon/storage/lglo_kit/New() + + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + ..() + return + +/obj/item/weapon/storage/flashbang_kit/New() + + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + ..() + return + +/obj/item/weapon/storage/stma_kit/New() + + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + ..() + return + +/obj/item/weapon/storage/gl_kit/New() + + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + ..() + return + +/obj/item/weapon/storage/trackimp_kit/New() + + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implanter( src ) + new /obj/item/weapon/implantpad( src ) + new /obj/item/weapon/locator( src ) + ..() + return + +/obj/item/weapon/storage/fcard_kit/New() + + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + ..() + return + +/obj/item/weapon/storage/id_kit/New() + + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + ..() + return + +/obj/item/weapon/storage/handcuff_kit/New() + + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + ..() + return + +/obj/item/weapon/storage/disk_kit/disks/New() + + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + ..() + return + +/obj/item/weapon/storage/disk_kit/disks2/New() + + spawn( 2 ) + for(var/obj/item/weapon/card/data/D as obj in src.loc) + D.loc = src + //Foreach goto(23) + return + ..() + return + +/obj/item/weapon/storage/backpack/New() + + new /obj/item/weapon/storage/box( src ) + ..() + return + +/obj/item/weapon/storage/backpack/MouseDrop(over_object as obj) + + if (src.loc != usr) + return + if ((istype(usr, /mob/human) || (ticker && ticker.mode == "monkey"))) + var/M = usr + if (!( istype(over_object, /obj/screen) )) + return ..() + if ((!( M.restrained() ) && (!( M.stat ) && M.back == src))) + if (over_object.name == "r_hand") + if (!( M.r_hand )) + M.u_equip(src) + M.r_hand = src + else + if (M.name == "l_hand") + if (!( M.l_hand )) + M.u_equip(src) + M.l_hand = src + M.UpdateClothing() + src.add_fingerprint(usr) + return + +/obj/item/weapon/storage/backpack/attackby(W as obj, user as mob) + + if (src.contents.len >= 7) + return + if (W.w_class > 3) + return + for(var/obj/item/weapon/O as obj in src) + var/t += O.w_class + //Foreach goto(46) + t += W.w_class + if (t > 20) + user << "You cannot fit the item inside. (Remove larger classed items)" + return + user.u_equip(W) + W.loc = src + if ((user.client && user.s_active != src)) + user.client.screen -= W + src.orient2hud(user) + W.dropped() + add_fingerprint(user) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\blue [] has added [] to []!", user, W, src), 1) + //Foreach goto(206) + return + +/obj/item/weapon/storage/attackby(W as obj, user as mob) + + if (src.contents.len >= 7) + return + if ((W.w_class >= 3 || istype(W, /obj/item/weapon/storage))) + return + user.u_equip(W) + W.loc = src + if ((user.client && user.s_active != src)) + user.client.screen -= W + src.orient2hud(user) + W.dropped() + add_fingerprint(user) + for(var/O as mob in viewers(user, null)) + O.show_message(text("\blue [] has added [] to []!", user, W, src), 1) + //Foreach goto(139) + return + +/obj/item/weapon/storage/dropped(user as mob) + + src.orient_objs(7, 8, 10, 7) + return + +/obj/item/weapon/storage/MouseDrop(over_object, src_location, over_location) + + ..() + if ((over_object == usr && (get_dist(src, usr) <= 1 || usr.contents.Find(src)))) + if (usr.s_active) + usr.s_active.close(usr) + src.show_to(usr) + return + +/obj/item/weapon/storage/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/storage/attack_hand(user as mob) + + if (src.loc == user) + if (user.s_active) + user.s_active.close(user) + src.show_to(user) + else + ..() + for(var/M as mob in range(1, null)) + if (M.s_active == src) + src.close(M) + //Foreach goto(76) + src.orient2hud(user) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/New() + + src.boxes = new /obj/screen/storage( ) + src.boxes.name = "storage" + src.boxes.master = src + src.boxes.icon_state = "block" + src.boxes.screen_loc = "7,7 to 10,8" + src.boxes.layer = 19 + src.closer = new /obj/screen/close( ) + src.closer.master = src + src.closer.icon_state = "x" + src.closer.layer = 20 + spawn( 5 ) + src.orient_objs(7, 8, 10, 7) + return + return + +/obj/item/weapon/storage/toolbox/New() + + new /obj/item/weapon/screwdriver( src ) + new /obj/item/weapon/wrench( src ) + new /obj/item/weapon/weldingtool( src ) + new /obj/item/weapon/radio( src ) + new /obj/item/weapon/analyzer( src ) + new /obj/item/weapon/extinguisher( src ) + new /obj/item/weapon/wirecutters( src ) + ..() + return + +/obj/item/weapon/storage/toolbox/attack(M as mob, user as mob) + + ..() + if ((prob(30) && M.stat < 2)) + var/H = M + if ((istype(H, /mob/human) && (istype(H, /obj/item/weapon/clothing/head) && (H.flags & 8 && prob(80))))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.stunned < time) + M.stunned = time + M.stat = 1 + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall.", 2) + //Foreach goto(169) + M.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", (time * 100) / 120)) + return + +/obj/item/weapon/storage/firstaid/fire/New() + + ..() + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/healthanalyzer( src ) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = (C.density * 15) / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + return + +/obj/item/weapon/storage/firstaid/syringes/New() + + ..() + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + return + +/obj/item/weapon/storage/firstaid/regular/New() + + ..() + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/healthanalyzer( src ) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = (C.density * 15) / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + return + +/obj/item/weapon/storage/firstaid/toxin/New() + + ..() + new /obj/item/weapon/pill_canister/antitoxin( src ) + new /obj/item/weapon/pill_canister/antitoxin( src ) + var/t = null + t = 1 + while(t <= 4) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/pl_coag/C = new /datum/chemical/pl_coag( null ) + C.moles = (C.density * 15) / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + t++ + new /obj/item/weapon/healthanalyzer( src ) + return + +/obj/item/weapon/storage/firstaid/attackby(W as obj, user as mob) + + if (src.contents.len >= 7) + return + if ((W.w_class >= 2 || istype(W, /obj/item/weapon/storage))) + return + ..() + return + +/obj/item/weapon/tile/New() + + src.pixel_x = rand(1, 14) + src.pixel_y = rand(1, 14) + return + +/obj/item/weapon/tile/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/tile/F = new /obj/item/weapon/tile( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/tile/proc/build(S as turf) + + var/A = S.loc + var/turf/station/floor/W = new /turf/station/floor( locate(S.x, S.y, S.z) ) + if (istype(A, /area)) + A.contents -= W + A.contents += W + W.oxygen = 0 + return + +/obj/item/weapon/tile/attack_self(user as mob) + + if (usr.stat) + return + var/T = user.loc + if (!( istype(T, /turf) )) + user << "\blue You must be on the ground!" + return + else + var/S = T + if (!( istype(S, /turf/space) )) + user << "You cannot build on or repair this turf!" + return + else + src.build(S) + src.amount-- + if (src.amount < 1) + user.u_equip(src) + src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/tile/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/tile) )) + return + if (W.amount == 10) + return + W.add_fingerprint(user) + if ((W.amount + src.amount) > 10) + src.amount = (W.amount + src.amount) - 10 + W.amount = 10 + else + W.amount += W.amount + src = null + del(src) + return + return + +/obj/item/weapon/tile/examine() + set src in view(1) + + ..() + usr << text("There are [] tile\s left on the stack.", src.amount) + return + +/obj/item/weapon/igniter/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/radio/signaler) && !( src.status ))) + var/S = W + if (!( S.b_stat )) + return + var/obj/item/weapon/assembly/rad_ignite/R = new /obj/item/weapon/assembly/rad_ignite( user ) + S.loc = R + R.part1 = S + S.layer = S.initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + u_equip(S) + user.r_hand = R + else + u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + else + if ((istype(W, /obj/item/weapon/prox_sensor) && !( src.status ))) + var/obj/item/weapon/assembly/prox_ignite/R = new /obj/item/weapon/assembly/prox_ignite( user ) + W.loc = R + R.part1 = W + W.layer = W.initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + u_equip(W) + user.r_hand = R + else + u_equip(W) + user.l_hand = R + W.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The igniter is ready!") + else + user.show_message("\blue The igniter can now be attached!") + src.add_fingerprint(user) + return + +/obj/item/weapon/igniter/attack_self(user as mob) + + src.add_fingerprint(user) + spawn( 5 ) + src.ignite() + return + return + +/obj/item/weapon/igniter/proc/ignite() + + if (src.status) + var/T = src.loc + if (src.master) + T = src.master.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + if (!( istype(T, /turf) )) + return + if (T.firelevel < 900000.0) + T.firelevel = T.poison + return + +/obj/item/weapon/igniter/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.status) + usr.show_message("The igniter is ready!") + else + usr.show_message("The igniter can be attached!") + return + +/obj/item/weapon/radio/electropack/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.e_pads) + usr << "\blue The electric pads are exposed!" + return + +/obj/item/weapon/radio/electropack/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/radio/electropack/attack_hand(user as mob) + + if (src == user.back) + user << "\blue You need help taking this off!" + return + else + ..() + return + +/obj/item/weapon/radio/electropack/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + src.e_pads = !( src.e_pads ) + if (src.e_pads) + user.show_message("\blue The electric pads have been exposed!") + else + user.show_message("\blue The electric pads have been reinserted!") + src.add_fingerprint(user) + else + if (istype(W, /obj/item/weapon/clothing/head/helmet)) + var/obj/item/weapon/assembly/shock_kit/A = new /obj/item/weapon/assembly/shock_kit( user ) + W.loc = A + A.part1 = W + W.layer = W.initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + u_equip(W) + user.r_hand = A + else + u_equip(W) + user.l_hand = A + W.master = A + src.master = A + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = A + A.part2 = src + A.layer = 20 + src.add_fingerprint(user) + A.add_fingerprint(user) + return + +/obj/item/weapon/radio/electropack/Topic(href, href_list) + + if (usr.stat) + return + if (((istype(usr, /mob/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (((src.freq * 10) % 2) == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["code"]) + src.code += text2num(href_list["code"]) + src.code = round(src.code) + src.code = min(100, src.code) + src.code = max(1, src.code) + else + if (href_list["power"]) + src.on = !( src.on ) + src.icon_state = text("electropack[]", src.on) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(308) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(384) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/electropack/accept_rad(R as obj, message) + + if ((istype(R, /obj/item/weapon/radio/signaler) && (R.freq == src.freq && R.code == src.code))) + return 1 + else + return null + return + +/obj/item/weapon/radio/electropack/r_signal() + + if ((ismob(src.loc) && src.on)) + var/M = src.loc + var/T = M.loc + if ((istype(T, /turf) || istype(T, /obj/move))) + if (M.last_move) + step(M, M.last_move) + M.show_message("\red You feel a sharp shock!") + if (M.weakened < 10) + M.weakened = 10 + if ((src.master && src.wires & 1)) + src.master.r_signal(1) + return + +/obj/item/weapon/radio/electropack/attack_self(user as mob, flag1) + + if (!( istype(user, /mob/human) )) + return + user.machine = src + var/dat = text("[]
\nFrequency/Code for electropack:
\nFrequency: -- [] ++
\nCode: -- [] ++
\n
", src, (src.on ? "Turn Off" : "Turn On"), src, src, src.freq, src, src, src, src, src.code, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/proc/accept_rad(R as obj, message) + + if ((R.freq == src.freq && message)) + return 1 + else + return null + return + +/obj/item/weapon/radio/proc/r_signal() + + return + +/obj/item/weapon/radio/proc/send_crackle() + + if ((src.listening && src.wires & 2)) + return hearers(3, src.loc) + return + +/obj/item/weapon/radio/proc/sendm(msg) + + if ((src.listening && src.wires & 2)) + return hearers(1, src.loc) + return + +/obj/item/weapon/radio/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.b_stat) + usr.show_message("\blue The radio can be attached and modified!") + else + usr.show_message("\blue The radio can not be modified or attached!") + return + +/obj/item/weapon/radio/attackby(W as obj, user as mob) + + user.machine = src + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.b_stat = !( src.b_stat ) + if (src.b_stat) + user.show_message("\blue The radio can now be attached and modified!") + else + user.show_message("\blue The radio can no longer be modified or attached!") + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(83) + src.add_fingerprint(user) + return + +/obj/item/weapon/radio/beacon/hear_talk() + + return + return + +/obj/item/weapon/radio/beacon/sendm() + + return null + return + +/obj/item/weapon/radio/beacon/send_crackle() + + return null + return + +/obj/item/weapon/radio/beacon/verb/alter_signal(t as text) + set src in usr + + if ((usr.canmove && !( usr.restrained() ))) + src.code = t + if (!( src.code )) + src.code = "beacon" + src.add_fingerprint(usr) + return + +/obj/item/weapon/radio/signaler/accept_rad(R as obj, message) + + if ((istype(R, /obj/item/weapon/radio/signaler) && (R.freq == src.freq && R.code == src.code))) + return 1 + else + return null + return + +/obj/item/weapon/radio/signaler/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.b_stat) + usr.show_message("\blue The signaler can be attached and modified!") + else + usr.show_message("\blue The signaler can not be modified or attached!") + return + +/obj/item/weapon/radio/signaler/attack_self(user as mob, flag1) + + user.machine = src + if ((src.b_stat && !( flag1 ))) + var/t1 = text("-------
\nGreen Wire: []
\nRed Wire: []
\nBlue Wire: []
\n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + else + t1 = "-------" + var/dat = text("Speaker: []
\nSend Signal
\nFrequency/Code for signaler:
\nFrequency: -- [] ++
\nCode: -- [] ++
\n[]
", (src.listening ? text("Engaged", src) : text("Disengaged", src)), src, src, src, src.freq, src, src, src, src, src.code, src, src, t1) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/signaler/hear_talk() + + return + return + +/obj/item/weapon/radio/signaler/sendm() + + return + return + +/obj/item/weapon/radio/signaler/send_crackle() + + return + return + +/obj/item/weapon/radio/signaler/r_signal(signal) + + if (!( src.wires & 2 )) + return + if ((src.master && src.wires & 1)) + src.master.r_signal(signal) + for(var/O as mob in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(64) + return + +/obj/item/weapon/radio/signaler/proc/s_signal(signal) + + if (signal == null) + signal = 1 + if (!( src.wires & 4 )) + return + for(var/obj/item/weapon/radio/R as obj in world) + if (R.accept_rad(src)) + spawn( 0 ) + if (R) + r_signal(signal) + return + //Foreach goto(48) + return + +/obj/item/weapon/radio/signaler/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (((src.freq * 10) % 2) == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["code"]) + src.code += text2num(href_list["code"]) + src.code = round(src.code) + src.code = min(100, src.code) + src.code = max(1, src.code) + else + if (href_list["send"]) + var/t1 = round(text2num(href_list["send"])) + spawn( 0 ) + src.s_signal(t1) + return + else + if (href_list["listen"]) + src.listening = text2num(href_list["listen"]) + else + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(src.equipped(), /obj/item/weapon/wirecutters) )) + return + if ((!( src.b_stat ) && !( src.master ))) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + src.add_fingerprint(usr) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(501) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(577) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/intercom/attack_paw(user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/item/weapon/radio/intercom/attack_hand(user as mob) + + src.add_fingerprint(user) + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/radio/intercom/send_crackle() + + if (src.listening) + return list( ) + return + +/obj/item/weapon/radio/intercom/sendm(msg) + + if (src.listening) + return hearers(7, src.loc) + return + +/obj/item/weapon/radio/attack_self(user as mob) + + user.machine = src + if (src.b_stat) + var/t1 = text("-------
\nGreen Wire: []
\nRed Wire: []
\nBlue Wire: []
\n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + else + t1 = "-------" + var/dat = text("Microphone: []
\nSpeaker: []
\nFrequency: -- [] ++
\n[]
", (src.broadcasting ? text("Engaged", src) : text("Disengaged", src)), (src.listening ? text("Engaged", src) : text("Disengaged", src)), src, src, src.freq, src, src, t1) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (((src.freq * 10) % 2) == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["talk"]) + src.broadcasting = text2num(href_list["talk"]) + else + if (href_list["listen"]) + src.listening = text2num(href_list["listen"]) + else + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(src.equipped(), /obj/item/weapon/wirecutters) )) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(390) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(466) + src.add_fingerprint(usr) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/talk_into(M as mob, msg) + + if (!( src.wires & 4 )) + return + var/list/receive = list( ) + var/list/crackle = list( ) + for(var/obj/item/weapon/radio/R as obj in world) + if (((src.freq == 0 || R.accept_rad(src, msg)) && src.freq != 5)) + for(var/i as mob in R.sendm(msg)) + receive -= i + receive += i + //Foreach goto(118) + for(var/i as mob in R.send_crackle()) + crackle -= i + crackle += i + //Foreach goto(162) + //Foreach goto(43) + for(var/i as mob in receive) + crackle -= i + //Foreach goto(203) + for(var/O as mob in crackle) + O.show_message(text("\icon[] Crackle,Crackle", src), 2) + //Foreach goto(233) + if (istype(M, /mob/human)) + for(var/O as mob in receive) + if (istype(O, /mob/human)) + O.show_message(text("[]-\icon[]\[[]\]-broadcasts: []", M.rname, src, src.freq, msg), 2) + else + O.show_message(text("[]-\icon[]\[[]\]-broadcasts: []", M.rname, src, src.freq, stars(msg)), 2) + //Foreach goto(284) + if (src.freq == 5) + for(var/O as mob in receive) + if (istype(O, /mob/human)) + O.show_message(text("[]-\icon[]\[[]\]-broadcasts (over PA): []", M.rname, src, src.freq, msg), 2) + else + O.show_message(text("[]-\icon[]\[[]\]-broadcasts (over PA): []", M.rname, src, src.freq, stars(msg)), 2) + //Foreach goto(393) + else + for(var/O as mob in receive) + if (istype(O, M)) + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts: []", src, src.freq, msg), 2) + else + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts: chimpering", src, src.freq), 2) + //Foreach goto(492) + if (src.freq == 5) + for(var/O as mob in receive) + if (istype(O, M)) + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts (over PA): []", src, src.freq, msg), 2) + else + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts (over PA): chimpering", src, src.freq), 2) + //Foreach goto(585) + return + +/obj/item/weapon/radio/hear_talk(M as mob, msg) + + if (src.broadcasting) + talk_into(M, msg) + return + +/obj/item/weapon/shard/Bump() + + spawn( 0 ) + if (prob(20)) + src.force = 15 + else + src.force = 4 + ..() + return + return + +/obj/item/weapon/shard/New() + + src.icon_state = pick("large", "medium", "small") + switch(src.icon_state) + if("small") + src.pixel_x = rand(1, 18) + src.pixel_y = rand(1, 18) + if("medium") + src.pixel_x = rand(1, 16) + src.pixel_y = rand(1, 16) + if("large") + src.pixel_x = rand(1, 10) + src.pixel_y = rand(1, 5) + else + return + +/obj/item/weapon/shard/attackby(W as obj, user as mob) + + ..() + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + new /obj/item/weapon/sheet/glass( user.loc ) + src = null + del(src) + return + return + +/obj/item/weapon/Bump(M as mob) + + spawn( 0 ) + ..() + if (src.throwing) + src.throwing = 0 + src.density = 0 + if (istype(M, /obj)) + var/O = M + for(var/B as mob in viewers(M, null)) + B.show_message(text("\red [] has been hit by [].", M, src), 1) + //Foreach goto(71) + O.hitby(src) + if (!( istype(M, /mob) )) + return + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been hit by [].", M, src), 1) + //Foreach goto(143) + if (M.health > -100.0) + if (istype(M, /mob/human)) + var/H = M + var/dam_zone = pick("chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(src.throwforce, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + M.bruteloss += src.throwforce + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + return + return + +/obj/item/weapon/wrench/New() + + if (prob(75)) + src.pixel_x = rand(0, 16) + return + +/obj/item/weapon/screwdriver/New() + + if (prob(75)) + src.pixel_y = rand(0, 16) + return + +/obj/item/weapon/dropper/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/dropper/attack_hand() + + ..() + src.update_is() + return + +/obj/item/weapon/dropper/proc/update_is() + + var/t1 = round(src.chem.volume()) + if (istype(src.loc, /mob)) + if (src.mode == "inject") + src.icon_state = text("dropper_[]_I", t1) + else + src.icon_state = text("dropper_[]_d", t1) + else + src.icon_state = text("dropper_[]", t1) + src.s_istate = "dropper" + return + +/obj/item/weapon/dropper/dropped() + + ..() + src.update_is() + return + +/obj/item/weapon/dropper/attack_self() + + if (src.mode == "inject") + src.mode = "draw" + else + src.mode = "inject" + src.update_is() + return + +/obj/item/weapon/dropper/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 5 + ..() + return + +/obj/item/weapon/dropper/attack(M as mob, user as mob) + + if (!( istype(M, /mob) )) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been eyedropped with [] by [].", M, src, user), 1) + //Foreach goto(89) + var/amount = src.chem.dropper_mob(M, 1) + src.update_is() + user.show_message(text("\red You drop [] units into []'s eyes. The dropper contains [] millimeters.", amount, M, src.chem.volume())) + src.add_fingerprint(user) + return + +/obj/item/weapon/implantcase/proc/update() + + if (src.imp) + src.icon_state = text("implantcase-[]", src.imp.color) + else + src.icon_state = "implantcase-0" + return + +/obj/item/weapon/implantcase/attackby(I as obj, user as mob) + + if (istype(I, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != I) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("Glass Case- '[]'", t) + else + src.name = "Glass Case" + else + if (!( istype(I, /obj/item/weapon/implanter) )) + return + if (I.imp) + if ((src.imp || I.imp.implanted)) + return + I.imp.loc = src + src.imp = I.imp + I.imp = null + src.update() + I.update() + else + if (src.imp) + if (I.imp) + return + src.imp.loc = I + I.imp = src.imp + src.imp = null + update() + I.update() + return + +/obj/item/weapon/implantcase/tracking/New() + + src.imp = new /obj/item/weapon/implant/tracking( src ) + ..() + return + +/obj/item/weapon/implantpad/proc/update() + + if (src.case) + src.icon_state = "implantpad-1" + else + src.icon_state = "implantpad-0" + return + +/obj/item/weapon/implantpad/attack_hand(user as mob) + + if ((src.case && (user.l_hand == src || user.r_hand == src))) + if (user.hand) + user.l_hand = src.case + else + user.r_hand = src.case + src.case.loc = user + src.case.layer = 20 + src.case.add_fingerprint(user) + src.case = null + user.UpdateClothing() + src.add_fingerprint(user) + update() + else + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + else + return ..() + return + +/obj/item/weapon/implantpad/attackby(C as obj, user as mob) + + if (istype(C, /obj/item/weapon/implantcase)) + if (!( src.case )) + user.drop_item() + C.loc = src + src.case = C + else + return + src.update() + return + +/obj/item/weapon/implantpad/attack_self(user as mob) + + user.machine = src + var/dat = "Implant Mini-Computer:
" + if (src.case) + if (src.case.imp) + if (istype(src.imp, /obj/item/weapon/implant/tracking)) + var/T = src.imp + dat += text("Implant Specifications:
\nName: Tracking Beacon
\nZone: Spinal Column> 2-5 vertebrae
\nPower Source: Nervous System Ion Withdrawl Gradient
\nLife: 10 minutes after death of host
\nImportant Notes: None
\n
\nImplant Details:
\nFunction: Continuously transmits low power signal on frequency- Useful for tracking.
\nRange: 35-40 meters
\nSpecial Features:
\nNeuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if\na malfunction occurs thereby securing safety of subject. The implant will melt and\ndisintegrate into bio-safe elements.
\nIntegrity: Gradient creates slight risk of being overcharged and frying the\ncircuitry. As a result neurotoxins can cause massive damage.
\nImplant Specifics:\nFrequency (144.1-148.9): -- [] ++
\nID (1-100): -- [] ++
", src, src, T.freq, src, src, src, src, T.id, src, src) + else + if (istype(T.imp, /obj/item/weapon/implant/freedom)) + dat += "Implant Specifications:
\nName: Freedom Beacon
\nZone: Right Hand> Near wrist
\nPower Source: Lithium Ion Battery
\nLife: optimum 5 uses
\nImportant Notes: Illegal
\n
\nImplant Details:
\nFunction: Transmits a specialized cluster of signals to override handcuff locking\nmechanisms
\nSpecial Features:
\nNeuro-Scan- Analyzes certain shadow signals in the nervous system along the dark\njoy sectors which respond mainly to chuckling
\nIntegrity: The battery is extremely weak and commonly after injection its\nlife can drive down to only 1 use.
\nNo Implant Specifics" + else + dat += "Implant ID not in database" + else + dat += "The implant casing is empty." + else + dat += "Please insert an implant casing!" + user << browse(dat, "window=implantpad") + return + +/obj/item/weapon/implantpad/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["freq"]) + if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking))) + var/T = src.case.imp + T.freq += text2num(href_list["freq"]) + if (((T.freq * 10) % 2) == 0) + T.freq += 0.1 + T.freq = min(148.9, T.freq) + T.freq = max(144.1, T.freq) + if (href_list["id"]) + if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking))) + var/T = src.case.imp + T.id += text2num(href_list["id"]) + T.id = min(100, T.id) + T.id = max(1, T.id) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(290) + src.add_fingerprint(usr) + else + usr << browse(null, "window=implantpad") + return + return + +/obj/item/weapon/implant/proc/trigger(emote, source as mob) + + return + +/obj/item/weapon/implant/freedom/New() + + src.uses = rand(1, 5) + ..() + return + +/obj/item/weapon/implant/freedom/trigger(emote, source as mob) + + if (src.uses < 1) + return 0 + if (emote == "chuckle") + src.uses-- + if (source.handcuffed) + var/W = source.handcuffed + source.handcuffed = null + if (source.client) + source.client.screen -= W + if (W) + W.loc = source.loc + dropped(source) + if (W) + W.layer = initial(W.layer) + return + +/obj/item/weapon/implanter/proc/update() + + if (src.imp) + src.icon_state = "implanter1" + else + src.icon_state = "implanter0" + return + +/obj/item/weapon/implanter/attack(M as mob, user as mob) + + if (!( istype(M, /mob) )) + return + if ((user && src.imp)) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been implanted by [].", M, user), 1) + //Foreach goto(48) + src.imp.loc = M + src.imp.implanted = 1 + src.imp = null + user.show_message(text("\red You implanted the implant into the [].", M)) + src.icon_state = "implanter0" + return + +/obj/item/weapon/syringe/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/syringe/attack_hand() + + ..() + src.update_is() + return + +/obj/item/weapon/syringe/proc/update_is() + + var/t1 = round(src.chem.volume(), 5) + if (istype(src.loc, /mob)) + if (src.mode == "inject") + src.icon_state = text("syringe_[]_I", t1) + else + src.icon_state = text("syringe_[]_d", t1) + else + src.icon_state = text("syringe_[]", t1) + src.s_istate = text("syringe_[]", t1) + return + +/obj/item/weapon/syringe/proc/inject(M as mob) + + var/amount = 5 + var/volume = src.chem.volume() + if (volume < 0.01) + return + else + if (volume < 5.01) + amount = volume - 0.01 + amount = src.chem.transfer_mob(M, amount) + src.update_is() + return amount + return + +/obj/item/weapon/syringe/dropped() + + ..() + src.update_is() + return + +/obj/item/weapon/syringe/attack_self() + + if (src.mode == "inject") + src.mode = "draw" + else + src.mode = "inject" + src.update_is() + return + +/obj/item/weapon/syringe/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 15 + ..() + return + +/obj/item/weapon/syringe/attack(M as mob, user as mob) + + if (!( istype(M, /mob) )) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + if (istype(M, /mob/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = src + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "syringe" + M.requests += O + spawn( 0 ) + O.process() + return + else + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been injected with [] by [].", M, src, user), 1) + //Foreach goto(192) + var/amount = src.chem.transfer_mob(M, 5) + src.update_is() + user.show_message(text("\red You inject [] units into the []. The syringe contains [] millimeters.", amount, M, src.chem.volume())) + return + +/obj/item/weapon/brutepack/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/brutepack/F = new /obj/item/weapon/brutepack( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/brutepack/attack(M as mob, user as mob) + + if (M.health < 0) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been applied with [] by []", M, src, user), 1) + //Foreach goto(89) + if (istype(M, /mob/human)) + var/H = M + var/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + var/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + if (H.organs[text("[]", t)]) + affecting = H.organs[text("[]", t)] + else + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["head"] + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["diaper"] + if (affecting.heal_damage(60, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + M.health = (((100 - M.oxyloss) - M.toxloss) - M.fireloss) - M.bruteloss + src.amount-- + return + +/obj/item/weapon/brutepack/examine() + set src in view(1) + + ..() + usr << text("\blue there are [] bruise pack\s left on the stack!", src.amount) + if (src.amount <= 0) + src = null + del(src) + return + return + +/obj/item/weapon/brutepack/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/brutepack) )) + return + if (src.amount == 5) + return + if ((W.amount + src.amount) > 5) + src.amount = 5 + W.amount = (W.amount + src.amount) - 5 + else + src.amount += W.amount + W = null + del(W) + return + +/obj/item/weapon/hand_tele/attack_self(user as mob) + + var/list/L = list( ) + for(var/obj/machinery/teleport/hub/R as obj in world) + var/com = locate(/obj/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z)) + if (istype(com, /obj/machinery/computer/teleporter)) + L[text("[][]", com.id, (src.icon_state == "tele1" ? " (Active)" : " (Inactive)"))] = com.locked + //Foreach goto(22) + var/t1 = input(user, "Please select a location to lock in.", "Locking Computer", null) in L + if ((user.equipped() != src || (user.stat || user.restrained()))) + return + var/T = L[t1] + for(var/O as mob in hearers(user, null)) + O.show_message("\blue Locked In", 2) + //Foreach goto(192) + var/obj/portal/P = new /obj/portal( get_turf(src) ) + P.target = T + src.add_fingerprint(user) + return + +/obj/item/weapon/ointment/attack_hand(user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/ointment/F = new /obj/item/weapon/ointment( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/ointment/attack(M as mob, user as mob) + + if (M.health < 0) + return + if ((!( istype(user, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/O as mob in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been applied with [] by []", M, src, user), 1) + //Foreach goto(89) + if (istype(M, /mob/human)) + var/H = M + var/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + var/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + if (H.organs[text("[]", t)]) + affecting = H.organs[text("[]", t)] + else + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["head"] + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["diaper"] + if (affecting.heal_damage(0, 40)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + src.amount-- + if (src.amount <= 0) + src = null + del(src) + return + return + +/obj/item/weapon/ointment/examine() + set src in view(1) + + usr << text("\blue there are [] ointment pack\s left on the stack!", src.amount) + return + +/obj/item/weapon/ointment/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/ointment) )) + return + if (W.amount == 5) + return + if ((W.amount + src.amount) > 5) + src.amount = (W.amount + src.amount) - 5 + W.amount = 5 + else + W.amount += W.amount + src = null + del(src) + return + return + +/obj/item/weapon/bottle/examine() + set src in usr + + usr << text("\blue The bottle \icon[] contains [] millimeters of chemicals", src, round(src.chem.volume(), 0.1)) + return + +/obj/item/weapon/bottle/New() + + src.chem = new /obj/substance/chemical( ) + ..() + return + +/obj/item/weapon/bottle/attackby(B as obj, user as mob) + + if (istype(B, /obj/item/weapon/bottle)) + var/t1 = src.chem.maximum + var/volume = B.chem.volume() + if (volume < 0.1) + return + else + t1 = volume - 0.1 + t1 = src.chem.transfer_from(B.chem, t1) + if (t1) + user.show_message(text("\blue You pour [] unit\s into the bottle. The bottle now contains [] millimeters.", round(t1, 0.1), round(src.chem.volume(), 0.1))) + if (istype(B, /obj/item/weapon/syringe)) + if (B.mode == "inject") + var/t1 = 5 + var/volume = B.chem.volume() + if (volume < 0.01) + return + else + if (volume < 5.01) + t1 = volume - 0.01 + t1 = src.chem.transfer_from(B.chem, t1) + B.update_is() + if (t1) + user.show_message(text("\blue You inject [] unit\s into the bottle. The syringe contains [] units.", round(t1, 0.1), round(B.chem.volume(), 0.1))) + else + var/t1 = 5 + var/volume = src.chem.volume() + if (volume < 0.05) + return + else + if (volume < 5.05) + t1 = volume - 0.05 + t1 = B.chem.transfer_from(src.chem, t1) + B.update_is() + if (t1) + user.show_message(text("\blue You draw [] unit\s from the bottle. The syringe contains [] units.", round(t1, 0.1), round(B.chem.volume(), 0.1))) + src.add_fingerprint(user) + else + if (istype(B, /obj/item/weapon/dropper)) + if (B.mode == "inject") + var/t1 = 1 + var/volume = B.chem.volume() + if (volume < 0.0050) + return + else + if (volume < 1.005) + t1 = volume - 0.0050 + t1 = src.chem.transfer_from(B.chem, t1) + B.update_is() + if (t1) + user.show_message(text("\blue You deposit [] unit\s into the bottle. The dropper contains [] units.", round(t1, 0.1), round(B.chem.volume(), 0.1))) + else + var/t1 = 1 + var/volume = src.chem.volume() + if (volume < 0.0050) + return + else + if (volume < 1.005) + t1 = volume - 0.0050 + t1 = B.chem.transfer_from(src.chem, t1) + B.update_is() + if (t1) + user.show_message(text("\blue You extract [] unit\s from the bottle. The dropper contains [] units.", round(t1, 0.1), round(B.chem.volume(), 0.1))) + return + +/obj/item/weapon/bottle/toxins/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/l_plas/C = new /datum/chemical/l_plas( null ) + C.moles = (C.density * 50) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/antitoxins/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/pl_coag/C = new /datum/chemical/pl_coag( null ) + C.moles = (C.density * 50) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/r_epil/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/epil/C = new /datum/chemical/epil( null ) + C.moles = (C.density * 50) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/r_ch_cough/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/ch_cou/C = new /datum/chemical/ch_cou( null ) + C.moles = (C.density * 50) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/rejuvenators/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = (C.density * 50) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/s_tox/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/s_tox/C = new /datum/chemical/s_tox( null ) + C.moles = (C.density * 50) / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/New() + + ..() + src.pixel_y = rand(-8.0, 8) + src.pixel_x = rand(-8.0, 8) + return + +/obj/item/weapon/weldingtool/examine() + set src in usr + + usr << text("\icon[] [] contains [] units of fuel left!", src, src.name, src.weldfuel) + return + +/obj/item/weapon/weldingtool/afterattack(O as obj, user as mob) + + if (src.welding) + src.weldfuel-- + if (src.weldfuel <= 0) + usr << "\blue Need more fuel!" + src.welding = 0 + src.force = 3 + src.damtype = "brute" + src.icon_state = "welder" + var/location = user.loc + if (!( istype(location, /turf) )) + return + location.firelevel = location.poison + 1 + return + +/obj/item/weapon/weldingtool/attack_self(user as mob) + + src.welding = !( src.welding ) + if (src.welding) + if (src.weldfuel <= 0) + user << "\blue Need more fuel!" + src.welding = 0 + return 0 + user << "\blue You will now weld when you attack." + src.force = 15 + src.damtype = "fire" + src.icon_state = "welder1" + else + user << "\blue Not welding anymore." + src.force = 3 + src.damtype = "brute" + src.icon_state = "welder" + return + +/obj/manifest/New() + + src.invisibility = 100 + return + +/obj/manifest/proc/manifest() + + var/dat = "Crew Manifest:
" + for(var/mob/human/M as mob in world) + if (M.start) + dat += text(" [] - []
", M.name, (istype(M.wear_id, /obj/item/weapon/card/id) ? text("[]", M.wear_id.assignment) : "Unknown Position")) + //Foreach goto(23) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = dat + P.name = "paper- 'Crew Manifest'" + src = null + del(src) + return + return + +/obj/screen/close/DblClick() + + if (src.master) + src.master.close(usr) + return + +/obj/screen/storage/attackby(W, user as mob) + + src.master.attackby(W, user) + return + +/obj/bedsheetbin/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/bedsheet)) + W = null + del(W) + src.amount++ + return + +/obj/bedsheetbin/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/bedsheetbin/attack_hand(user as mob) + + if (src.amount >= 1) + src.amount-- + new /obj/item/weapon/bedsheet( src.loc ) + src.add_fingerprint(user) + return + +/obj/bedsheetbin/examine() + set src in oview(1) + + src.amount = round(src.amount) + if (src.amount <= 0) + src.amount = 0 + usr << "There are no bed sheets in the bin." + else + if (src.amount == 1) + usr << "There is one bed sheet in the bin." + else + usr << text("There are [] bed sheets in the bin.", src.amount) + return + +/obj/table/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(25)) + src.density = 0 + else + return + +/obj/table/hand_p(user as mob) + + return src.attack_paw(user) + return + +/obj/table/attack_paw(user as mob) + + if (!( locate(/obj/table, user.loc) )) + step(user, get_dir(user, src)) + if (user.loc == src.loc) + user.layer = TURF_LAYER + for(var/M as mob in viewers(user, null)) + M.show_message("The monkey hides under the table!", 1) + //Foreach goto(69) + return + +/obj/table/CheckPass(O as mob|obj, target as turf) + + if ((O.flags & 2 || istype(O, /obj/meteor))) + return 1 + else + return 0 + return + +/obj/table/MouseDrop_T(O as obj, user as mob) + + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + +/obj/table/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/table_parts( src.loc ) + src = null + del(src) + return + return + user.drop_item() + if (W.loc != src.loc) + step(W, get_dir(W, src)) + return + +/obj/rack/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(25)) + src.icon_state = "rackbroken" + src.density = 0 + else + return + +/obj/rack/CheckPass(O as mob|obj, target as turf) + + if (O.flags & 2) + return 1 + else + return 0 + return + +/obj/rack/MouseDrop_T(O as obj, user as mob) + + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + +/obj/rack/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/rack_parts( src.loc ) + src = null + del(src) + return + return + user.drop_item() + if (W.loc != src.loc) + step(W, get_dir(W, src)) + return + +/obj/rack/meteorhit(O as obj) + + if (O.icon_state == "flaming") + src.icon_state = "rackbroken" + src.density = 0 + return + +/obj/weldfueltank/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + W.weldfuel = 20 + W.suffix = text("[][]", (W == src ? "equipped " : ""), W.weldfuel) + user << "\blue Welder refueled" + return + +/obj/weldfueltank/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(5)) + src = null + del(src) + return + else + return + +/obj/watertank/attackby(W as obj, user as mob) + + if (!( istype(W, /obj/item/weapon/extinguisher) )) + return + W.waterleft = 20 + W.suffix = text("[][]", (user.equipped() == src ? "equipped " : ""), W.waterleft) + user << "\blue Extinguisher refueled" + return + +/obj/watertank/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + if(3.0) + if (prob(5)) + src = null + del(src) + return + else + return + +/obj/d_girders/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/sheet/metal)) + if (W.amount < 1) + W = null + del(W) + return + new /obj/machinery/door/false_wall( src.loc ) + W.amount-- + if (W.amount < 1) + W = null + del(W) + user << "\blue Keep in mind when you open it that it MAY be difficult to sldie at first so keep trying." + src = null + del(src) + return + else + if (istype(W, /obj/item/weapon/screwdriver)) + new /obj/item/weapon/sheet/metal( src.loc ) + src = null + del(src) + return + return + +/obj/barrier/New() + + var/t = 1800 + if (ctf) + t = round(ctf.barriertime * 600) + spawn( t ) + src = null + del(src) + return + return + return + +/obj/portal/Bumped(M as mob|obj) + + spawn( 0 ) + src.teleport(M) + return + return + +/obj/portal/HasEntered(AM as mob|obj) + + spawn( 0 ) + src.teleport(AM) + return + return + +/obj/portal/New() + + spawn( 300 ) + src = null + del(src) + return + return + return + +/obj/portal/proc/teleport(M as mob|obj) + + if (M.anchored) + return + if (src.icon_state == "portal1") + return + if (!( src.target )) + src = null + del(src) + return + var/obj/effects/sparks/O = new /obj/effects/sparks( src.target ) + O.dir = pick(1, 2, 4, 8) + spawn( 0 ) + O.Life() + return + if (istype(M, /atom/movable)) + var/tx = src.target.x + rand(-5.0, 5) + var/ty = src.y + rand(-5.0, 5) + if (prob(10)) + src.icon_state = "portal1" + if (ismob(M)) + M.ex_act(2) + else + M.ex_act(1) + if (rand(1, 1000) <= 10) + M << "\red You see a fainting blue light." + M.loc = null + else + M.loc = locate(tx, ty, src.target.z) + return + +/obj/effects/water/New() + + ..() + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + spawn( 70 ) + src = null + del(src) + return + return + return + +/obj/effects/water/Del() + + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + ..() + return + +/obj/effects/water/Move() + + ..() + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + if (--src.life < 1) + src = null + del(src) + return + return + +/mob/attackby(W as obj, user as mob) + + var/shielded = 0 + for(var/obj/item/weapon/shield/S as obj in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(22) + if (locate(/obj/item/weapon/grab, src)) + var/safe = null + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/G = src.l_hand + if ((G.state == 3 && get_dir(src, user) == src.dir)) + safe = G.affecting + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/G = src.r_hand + if ((G.state == 3 && get_dir(src, user) == src.dir)) + safe = G.affecting + if (safe) + return safe.attackby(W, user) + if ((!( shielded ) || !( W.flags ) & 32)) + spawn( 0 ) + W.attack(src, user) + return + return + +/atom/proc/MouseDrop_T() + + return + +/atom/proc/attack_hand(user as mob) + + return + +/atom/proc/attack_paw(user as mob) + + return + +/atom/proc/hand_h(user as mob) + + return + +/atom/proc/hand_p(user as mob) + + return + +/atom/proc/hitby(W as obj) + + return + +/atom/proc/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/f_print_scanner)) + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been scanned by [] with the []", src, user, W) + //Foreach goto(31) + else + if (!( istype(W, /obj/item/weapon/grab) )) + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been hit by [] with []", src, user, W) + //Foreach goto(102) + return + +/atom/proc/add_fingerprint(M as mob) + + if ((!( istype(M, /mob/human) ) || !( istype(M.primary, /obj/dna) ))) + return 0 + if (!( src.flags ) & 256) + return + if (M.gloves) + return 0 + if (!( src.fingerprints )) + src.fingerprints = text("[]", md5(M.primary.uni_identity)) + else + var/L = params2list(src.fingerprints) + L -= md5(M.primary.uni_identity) + while(L.len >= 3) + L -= L[1] + L += md5(M.primary.uni_identity) + src.fingerprints = list2params(L) + return + +/atom/MouseDrop(over_object as mob|obj|turf|area) + + spawn( 0 ) + if (istype(over_object, /atom)) + over_object.MouseDrop_T(src, usr) + return + ..() + return + +/atom/DblClick() + + ..() + var/W = usr.equipped() + if ((W == src && usr.stat == 0)) + spawn( 0 ) + W.attack_self(usr) + return + return + if ((!( usr.canmove ) || usr.stat != 0)) + return + if ((!( usr.contents.Find(src) ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) + return + var/t5 = (get_dist(src, usr) <= 1 || src.loc == usr) + if ((istype(src, /obj/item/weapon/organ) && usr.contents.Find(src))) + var/H = usr + usr << "Betchya think your really smart trying to remvoe your own body parts aren't ya!" + if (istype(H, /mob/human)) + if (!( (src == H.l_store || src == H.r_store) )) + return + else + return + if (((t5 || (W && W.flags & 16)) && !( istype(src, /obj/screen) ))) + if (usr.next_move < world.time) + usr.next_move = world.time + 10 + else + return + if ((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) + var/direct = get_dir(usr, src) + var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc ) + var/ok = 0 + if ((direct - 1) & direct) + switch(direct) + if(5.0) + var/T = get_step(usr, NORTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, EAST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(6.0) + T = get_step(usr, SOUTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, EAST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(9.0) + T = get_step(usr, NORTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, WEST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(10.0) + T = get_step(usr, SOUTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, WEST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + else + if (src.loc.Enter(D, src)) + ok = 1 + else + if ((src.flags & 512 && get_dir(src, usr) & src.dir)) + ok = 1 + if (usr.loc != src.loc) + for(var/atom/A as mob|obj|turf|area in usr.loc) + if ((!( A.CheckExit(usr, src.loc) ) && A != usr)) + ok = 0 + //Foreach goto(1111) + D = null + del(D) + if (!( ok )) + return 0 + if (!( usr.restrained() )) + if (W) + if (t5) + src.attackby(W, usr) + if (W) + W.afterattack(src, usr, (t5 ? 1 : 0)) + else + if (istype(usr, /mob/human)) + src.attack_hand(usr, W.hand) + else + if (istype(usr, /mob/monkey)) + src.attack_paw(usr, src.hand) + else + if (istype(usr, /mob/human)) + src.hand_h(usr, src.hand) + else + if (istype(usr, /mob/monkey)) + src.hand_p(usr, src.hand) + else + if (istype(src, /obj/screen)) + if (usr.next_move < world.time) + usr.next_move = world.time + 10 + else + return + if (!( usr.restrained() )) + if ((W && !( istype(src, /obj/screen) ))) + src.attackby(W, usr) + if (W) + W.afterattack(src, usr) + else + if (istype(usr, /mob/human)) + src.attack_hand(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.attack_paw(usr, usr.hand) + else + if (istype(usr, /mob/human)) + src.hand_h(usr, src.hand) + else + if (istype(usr, /mob/monkey)) + src.hand_p(usr, src.hand) + return diff --git a/ss13-40.93.2-decomp/spacestation13/items.dmi b/ss13-40.93.2-decomp/spacestation13/items.dmi new file mode 100644 index 0000000..b84168c Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/items.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/l_items.dmi b/ss13-40.93.2-decomp/spacestation13/l_items.dmi new file mode 100644 index 0000000..8651cb0 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/l_items.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/meteor.dmi b/ss13-40.93.2-decomp/spacestation13/meteor.dmi new file mode 100644 index 0000000..07a97a0 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/meteor.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/mob.dm b/ss13-40.93.2-decomp/spacestation13/mob.dm new file mode 100644 index 0000000..6958105 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/mob.dm @@ -0,0 +1,6688 @@ + +/proc/hsl2rgb(h, s, l) + + return + +/proc/ran_zone(zone, probability) + + if (probability == null) + probability = 75 + if (probability == 100) + return zone + switch(zone) + if("chest") + if (prob(probability)) + return "chest" + else + var/t = rand(1, 15) + if (t < 3) + return "head" + else + if (t < 6) + return "l_arm" + else + if (t < 9) + return "r_arm" + else + if (t < 13) + return "diaper" + else + if (t < 14) + return "l_hand" + else + if (t < 15) + return "r_hand" + else + return null + if("diaper") + if (prob(probability * 0.9)) + return "diaper" + else + var/t = rand(1, 8) + if (t < 4) + return "chest" + else + if (t < 5) + return "r_leg" + else + if (t < 6) + return "l_leg" + else + if (t < 7) + return "l_hand" + else + if (t < 8) + return "r_hand" + else + return null + if("head") + if (prob(probability * 0.75)) + return "head" + else + if (prob(60)) + return "chest" + else + return null + if("l_arm") + if (prob(probability * 0.75)) + return "l_arm" + else + if (prob(60)) + return "chest" + else + return null + if("r_arm") + if (prob(probability * 0.75)) + return "r_arm" + else + if (prob(60)) + return "chest" + else + return null + if("r_leg") + if (prob(probability * 0.75)) + return "r_leg" + else + if (prob(60)) + return "diaper" + else + return null + if("l_leg") + if (prob(probability * 0.75)) + return "l_leg" + else + if (prob(60)) + return "diaper" + else + return null + if("l_hand") + if (prob(probability * 0.5)) + return "l_hand" + else + var/t = rand(1, 8) + if (t < 2) + return "l_arm" + else + if (t < 3) + return "chest" + else + if (t < 4) + return "diaper" + else + if (t < 6) + return "l_leg" + else + return null + if("r_hand") + if (prob(probability * 0.5)) + return "r_hand" + else + var/t = rand(1, 8) + if (t < 2) + return "r_arm" + else + if (t < 3) + return "chest" + else + if (t < 4) + return "diaper" + else + if (t < 6) + return "r_leg" + else + return null + if("l_foot") + if (prob(probability * 0.25)) + return "l_foot" + else + var/t = rand(1, 5) + if (t < 2) + return "r_leg" + else + if (t < 3) + return "l_foot" + else + return null + if("r_foot") + if (prob(probability * 0.25)) + return "r_foot" + else + var/t = rand(1, 5) + if (t < 2) + return "r_leg" + else + if (t < 3) + return "l_foot" + else + return null + else + return + +/proc/stars(n, pr) + + if (pr == null) + pr = 25 + if (pr <= 0) + return null + else + if (pr >= 100) + return n + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + while(p <= n) + if (((copytext(te, p, p + 1)) == " " || prob(pr))) + t = text("[][]", t, copytext(te, p, p + 1)) + else + t = text("[]*", t) + p++ + return t + return + +/proc/stutter(n) + + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + while(p <= n) + var/n_letter = copytext(te, p, p + 1) + if (prob(80)) + if (prob(10)) + n_letter = text("[][][][]", n_letter, n_letter, n_letter, n_letter) + else + if (prob(20)) + n_letter = text("[][][]", n_letter, n_letter, n_letter) + else + if (prob(5)) + n_letter = null + else + n_letter = text("[][]", n_letter, n_letter) + t = text("[][]", t, n_letter) + p++ + return t + return + +/proc/findname(msg) + + for(var/M as mob in world) + if (M.rname == text("[]", msg)) + return 1 + //Foreach goto(15) + return 0 + return + +/obj/proc/alter_health() + + return 1 + return + +/obj/proc/relaymove() + + return + +/obj/item/weapon/grab/proc/throw() + + src.affecting.density = 1 + step(src.affecting, src.assailant.dir) + if (prob(75)) + step(src.affecting, src.assailant.dir) + src = null + del(src) + return + return + +/obj/item/weapon/grab/proc/synch() + + if (src.assailant.r_hand == src) + src.hud1.screen_loc = "1,4" + else + src.hud1.screen_loc = "3,4" + return + +/obj/item/weapon/grab/proc/process() + + if ((!( isturf(src.assailant.loc) ) || (!( isturf(src.affecting.loc) ) || (src.assailant.loc != src.affecting.loc && get_dist(src.assailant, src.affecting) > 1)))) + src = null + del(src) + return + if (src.assailant.client) + src.assailant.client.screen -= src.hud1 + src.assailant.client.screen += src.hud1 + if (src.assailant.pulling == src.affecting) + src.assailant.pulling = null + if (src.state <= 2) + src.allow_upgrade = 1 + if ((src.assailant.l_hand && (src.l_hand != src && istype(src.l_hand, /obj/item/weapon/grab)))) + var/G = src.assailant.l_hand + if (G.affecting != src.affecting) + src.allow_upgrade = 0 + if ((src.assailant.r_hand && (src.r_hand != src && istype(src.r_hand, /obj/item/weapon/grab)))) + var/G = src.assailant.r_hand + if (G.affecting != src.affecting) + src.allow_upgrade = 0 + if (src.state == 2) + var/h = src.affecting.hand + src.hand = 0 + src.affecting.drop_item() + src.hand = 1 + src.affecting.drop_item() + src.hand = h + for(var/obj/item/weapon/grab/G as obj in src.affecting.grabbed_by) + if (G.state == 2) + src.allow_upgrade = 0 + //Foreach goto(341) + if (src.allow_upgrade) + src.hud1.icon_state = "reinforce" + else + src.hud1.icon_state = "!reinforce" + else + if (!( src.affecting.buckled )) + src.affecting.loc = src.assailant.loc + if ((src.killing && src.state == 3)) + src.stunned = max(5, src.affecting.stunned) + src.paralysis = max(3, src.affecting.paralysis) + src.losebreath = min(src.affecting.losebreath + 2, 3) + return + +/obj/item/weapon/grab/proc/s_click(S as obj) + + if (src.assailant.next_move > world.time) + return + if ((!( src.assailant.canmove ) || src.lying)) + src = null + del(src) + return + switch(S.id) + if(1.0) + if (src.state >= 3) + if (!( src.killing )) + for(var/O as mob in viewers(src.assailant, null)) + O.show_message(text("\red [] has temporarily tightened his grip on []!", src.assailant, src.affecting), 1) + //Foreach goto(97) + src.assailant.next_move = world.time + 10 + src.stunned = max(2, src.affecting.stunned) + src.paralysis = max(1, src.affecting.paralysis) + src.losebreath = min(src.affecting.losebreath + 1, 3) + src.last_suffocate = world.time + flick("disarm/killf", S) + else + return + +/obj/item/weapon/grab/proc/s_dbclick(S as obj) + + if ((src.assailant.next_move > world.time && !( src.last_suffocate < (world.time + 2) ))) + return + if ((!( src.assailant.canmove ) || src.lying)) + src = null + del(src) + return + switch(S.id) + if(1.0) + if (src.state < 2) + if (!( src.allow_upgrade )) + return + if (prob(75)) + for(var/O as mob in viewers(src.assailant, null)) + O.show_message(text("\red [] has grabbed [] aggressively (now hands)!", src.assailant, src.affecting), 1) + //Foreach goto(121) + src.state = 2 + src.icon_state = "grabbed1" + else + for(var/O as mob in viewers(src.assailant, null)) + O.show_message(text("\red [] has failed to grab [] aggressively!", src.assailant, src.affecting), 1) + //Foreach goto(186) + src = null + del(src) + return + else + if (O.state < 3) + for(var/O as mob in viewers(src.assailant, null)) + O.show_message(text("\red [] has reinforced his grip on [] (now neck)!", src.assailant, src.affecting), 1) + //Foreach goto(257) + src.state = 3 + src.icon_state = "grabbed+1" + if (!( src.affecting.buckled )) + src.affecting.loc = src.assailant.loc + src.hud1.icon_state = "disarm/kill" + src.hud1.name = "disarm/kill" + else + if (src.state >= 3) + src.killing = !( src.killing ) + if (src.killing) + for(var/O as mob in viewers(src.assailant, null)) + O.show_message(text("\red [] has tightened his grip on []'s neck!", src.assailant, src.affecting), 1) + //Foreach goto(392) + src.assailant.next_move = world.time + 10 + src.stunned = max(2, src.affecting.stunned) + src.paralysis = max(1, src.affecting.paralysis) + src.affecting.losebreath += 1 + src.hud1.icon_state = "disarm/kill1" + else + src.hud1.icon_state = "disarm/kill" + for(var/O as mob in viewers(src.assailant, null)) + O.show_message(text("\red [] has loosened the grip on []'s neck!", src.assailant, src.affecting), 1) + //Foreach goto(517) + else + return + +/obj/item/weapon/grab/New() + + ..() + src.hud1 = new /obj/screen/grab( src ) + src.hud1.icon_state = "reinforce" + src.hud1.name = "Reinforce Grab" + src.hud1.id = 1 + src.hud1.master = src + return + +/obj/item/weapon/grab/attack(M as mob, user as mob) + + if (M == src.affecting) + if (src.state < 3) + s_dbclick(src.hud1) + else + s_click(src.hud1) + return 0 + return + +/obj/item/weapon/grab/dropped() + + src = null + del(src) + return + return + +/obj/item/weapon/grab/Del() + + src.hud1 = null + del(src.hud1) + ..() + return + +/obj/screen/zone_sel/MouseDown(location, icon_x, icon_y) + + if (icon_y < 6) + if ((icon_x > 10 && icon_x < 22)) + if (icon_x < 16) + src.selecting = "r_foot" + else + src.selecting = "l_foot" + else + if (icon_y < 13) + if ((icon_x > 11 && icon_x < 21)) + if (icon_x < 16) + src.selecting = "r_leg" + else + src.selecting = "l_leg" + else + if (icon_y < 16) + if ((icon_x > 9 && icon_x < 23)) + if (icon_x < 12) + src.selecting = "r_hand" + else + if (icon_x < 20) + src.selecting = "diaper" + else + src.selecting = "l_hand" + else + if (icon_y < 23) + if ((icon_x > 9 && icon_x < 23)) + if (icon_x < 12) + src.selecting = "r_arm" + else + if (icon_x < 20) + src.selecting = "chest" + else + src.selecting = "l_arm" + else + if (icon_y < 25) + if ((icon_x > 13 && icon_x < 18)) + src.selecting = "neck" + else + if (icon_y < 30) + if ((icon_x > 11 && icon_x < 20)) + if (icon_y == 28) + src.selecting = "eyes" + else + if (icon_y == 29) + src.selecting = "hair" + else + if (icon_y == 26) + src.selecting = "mouth" + else + src.selecting = "head" + return + +/obj/screen/grab/Click() + + src.master.s_click(src) + return + +/obj/screen/grab/DblClick() + + src.master.s_dbclick(src) + return + +/obj/screen/grab/attack_hand() + + return + +/obj/screen/grab/attackby() + + return + +/obj/screen/Click() + + switch(src.name) + if("other") + usr.other = !( usr.other ) + if("intent") + if (!( usr.intent )) + switch(usr.a_intent) + if("help") + usr.intent = "12,15" + if("disarm") + usr.intent = "13,15" + if("hurt") + usr.intent = "14,15" + if("grab") + usr.intent = "11,15" + else + else + usr.intent = null + if("m_intent") + if (!( usr.m_int )) + switch(usr.m_intent) + if("run") + usr.m_int = "12,14" + if("walk") + usr.m_int = "13,14" + if("face") + usr.m_int = "14,14" + else + else + usr.m_int = null + if("walk") + usr.m_intent = "walk" + usr.m_int = "13,14" + if("face") + usr.m_intent = "face" + usr.m_int = "14,14" + if("run") + usr.m_intent = "run" + usr.m_int = "12,14" + if("hurt") + usr.a_intent = "hurt" + usr.intent = "14,15" + if("grab") + usr.a_intent = "grab" + usr.intent = "11,15" + if("disarm") + if (istype(usr, /mob/human)) + var/M = usr + M.a_intent = "disarm" + M.intent = "13,15" + if("help") + usr.a_intent = "help" + usr.intent = "12,15" + if("Reset Machine") + usr.machine = null + if("internal") + if ((!( usr.stat ) && (usr.canmove && !( usr.restrained() )))) + usr.internal = null + if("pull") + usr.pulling = null + if("sleep") + usr.sleeping = !( usr.sleeping ) + if("rest") + usr.resting = !( usr.resting ) + if("throw") + if ((!( usr.stat ) && (usr.canmove && (isturf(usr.loc) && !( usr.restrained() ))))) + usr.throw_item_v() + if("drop") + usr.drop_item_v() + if("swap") + usr.swap_hand() + if("resist") + if (usr.next_move < world.time) + return + usr.next_move = world.time + 20 + if ((!( usr.stat ) && (usr.canmove && !( usr.restrained() )))) + for(var/obj/O as obj in usr.requests) + O = null + del(O) + //Foreach goto(557) + for(var/obj/item/weapon/grab/G as obj in usr.grabbed_by) + if (G.state == 1) + G = null + del(G) + else + if (G.state == 2) + if (prob(25)) + for(var/O as mob in viewers(usr, null)) + O.show_message(text("\red [] has broken free of []'s grip!", usr, G.assailant), 1) + //Foreach goto(681) + G = null + del(G) + else + if (O.state == 2) + if (prob(5)) + for(var/O as mob in viewers(usr, null)) + O.show_message(text("\red [] has broken free of []'s headlock!", usr, G.assailant), 1) + //Foreach goto(762) + G = null + del(G) + //Foreach goto(602) + for(var/O as mob in viewers(usr, null)) + O.show_message(text("\red [] resists!", usr), 1) + //Foreach goto(824) + else + return + +/obj/screen/attack_hand(user as mob, using) + + user.db_click(src.name, using) + return + +/obj/screen/attack_paw(user as mob, using) + + user.db_click(src.name, using) + return + +/obj/point/point() + set src in oview() + + return + +/obj/dna/proc/cleanup() + + var/e1 = (length(src.struc_enzyme) > 3 ? copytext(src.struc_enzyme, 1, 4) : null) + if ((e1 == "AEC" && length(src.spec_identity) > src.n_chromo)) + src.r_spec_identity = src.spec_identity + else + if (e1 == "14A") + var/t1 = rand(1, 3) + var/t = null + while(t < t1) + var/t2 = rand(1, length(src.use_enzyme) + 1) + src.use_enzyme = text("[]0[]", copytext(1, t2, null), copytext(t2 + 1, length(src.use_enzyme) + 1, null)) + t++ + else + if (e1 == "CDE") + if (length(src.spec_identity) == length(src.r_spec_identity)) + src.spec_identity = src.r_spec_identity + else + src.r_spec_identity = src.spec_identity + else + src.spec_identity = src.r_spec_identity + src.n_chromo = length(src.r_spec_identity) + return + +/obj/hud/New() + + src.instantiate() + ..() + return + +/obj/hud/proc/instantiate() + + src.adding = list( ) + src.other = list( ) + src.intents = list( ) + src.mon_blo = list( ) + src.m_ints = list( ) + src.mov_int = list( ) + src.vimpaired = list( ) + src.g_dither = new src.h_type( src ) + src.g_dither.screen_loc = "1,1 to 15,15" + src.g_dither.name = "Mask" + src.g_dither.icon_state = "dither12g" + src.g_dither.layer = 18 + src.blurry = new src.h_type( src ) + src.blurry.screen_loc = "1,1 to 15,15" + src.blurry.name = "Blurry" + src.blurry.icon_state = "blurry" + src.blurry.layer = 17 + var/using = new src.h_type( src ) + using.name = "vitals" + using.dir = SOUTH + using.screen_loc = "15,2 to 15,15" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "actions" + using.dir = EAST + using.screen_loc = "4,1 to 14,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTHWEST + using.screen_loc = "15,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = WEST + using.screen_loc = "1,3 to 2,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTHEAST + using.screen_loc = "3,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTH + using.screen_loc = "3,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = SOUTHEAST + using.screen_loc = "3,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = SOUTHWEST + using.screen_loc = "1,1 to 2,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "drop" + using.icon_state = "act_drop" + using.screen_loc = "7,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "throw" + using.icon_state = "act_throw" + using.screen_loc = "9,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "swap" + using.icon_state = "act_hand" + using.screen_loc = "11,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "i_clothing" + using.dir = SOUTH + using.icon_state = "center" + using.screen_loc = "2,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "o_clothing" + using.dir = SOUTH + using.icon_state = "equip" + using.screen_loc = "2,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "headset" + using.dir = SOUTHEAST + using.icon_state = "equip" + using.screen_loc = "3,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "r_hand" + using.dir = WEST + using.icon_state = "equip" + using.screen_loc = "1,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "l_hand" + using.dir = EAST + using.icon_state = "equip" + using.screen_loc = "3,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "id" + using.dir = SOUTHWEST + using.icon_state = "equip" + using.screen_loc = "1,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "mask" + using.dir = NORTH + using.icon_state = "equip" + using.screen_loc = "2,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "back" + using.dir = NORTHEAST + using.icon_state = "equip" + using.screen_loc = "3,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "storage1" + using.icon_state = "block" + using.screen_loc = "4,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "storage2" + using.icon_state = "block" + using.screen_loc = "5,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "resist" + using.icon_state = "act_resist" + using.screen_loc = "13,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "other" + using.icon_state = "other" + using.screen_loc = "4,2" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "intent" + using.icon_state = "intent" + using.screen_loc = "14,15" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "m_intent" + using.icon_state = "move" + using.screen_loc = "14,14" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "gloves" + using.icon_state = "gloves" + using.screen_loc = "4,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "eyes" + using.icon_state = "glasses" + using.screen_loc = "6,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "ears" + using.icon_state = "ears" + using.screen_loc = "9,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "head" + using.icon_state = "hair" + using.screen_loc = "7,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "shoes" + using.icon_state = "shoes" + using.screen_loc = "5,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "belt" + using.icon_state = "belt" + using.screen_loc = "8,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "grab" + using.icon_state = "grab" + using.screen_loc = "11,15" + using.layer = 19 + src.intents += using + using = new src.h_type( src ) + using.name = "hurt" + using.icon_state = "harm" + using.screen_loc = "14,15" + using.layer = 19 + src.intents += using + src.m_ints += using + using = new src.h_type( src ) + using.name = "disarm" + using.icon_state = "disarm" + using.screen_loc = "13,15" + using.layer = 19 + src.intents += using + using = new src.h_type( src ) + using.name = "help" + using.icon_state = "help" + using.screen_loc = "12,15" + using.layer = 19 + src.intents += using + src.m_ints += using + using = new src.h_type( src ) + using.name = "face" + using.icon_state = "facing" + using.screen_loc = "14,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "walk" + using.icon_state = "walking" + using.screen_loc = "13,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "run" + using.icon_state = "running" + using.screen_loc = "12,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "2,2" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "1,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "2,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "3,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "4,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "5,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "1,1 to 5,15" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "5,1 to 10,5" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "6,11 to 10,15" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "11,1 to 15,15" + using.layer = 17 + src.vimpaired += using + return + +/obj/equip_e/proc/process() + + return + +/obj/equip_e/proc/done() + + return + +/obj/equip_e/New() + + if (!( ticker )) + src = null + del(src) + return + spawn( 100 ) + src = null + del(src) + return + return + ..() + return + +/obj/equip_e/monkey/process() + + if (src.item) + src.item.add_fingerprint(src.source) + if (!( src.item )) + switch(src.place) + if("head") + if (!( src.target.wear_mask )) + src = null + del(src) + return + if("l_hand") + if (!( src.target.l_hand )) + src = null + del(src) + return + if("r_hand") + if (!( src.target.r_hand )) + src = null + del(src) + return + if("back") + if (!( src.target.back )) + src = null + del(src) + return + if("handcuff") + if (!( src.target.handcuffed )) + src = null + del(src) + return + if("internal") + if ((!( (istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) && (istype(src.back, /obj/item/weapon/tank) && !( src.internal ))) ) && !( src.target.internal ))) + src = null + del(src) + return + else + if (src.item) + for(var/O as mob in viewers(src.target, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] is trying to put a [] on []", src.source, src.item, src.target), 1) + //Foreach goto(251) + else + var/message = null + switch(O.place) + if("l_hand") + message = text("\red [] is trying to take off a [] from []'s left hand!", O.source, src.target.l_hand, src.target) + if("r_hand") + message = text("\red [] is trying to take off a [] from []'s right hand!", src.source, src.target.r_hand, src.target) + if("back") + message = text("\red [] is trying to take off a [] from []'s back!", src.source, src.target.back, src.target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", src.source, src.target) + if("internal") + if (src.target.internal) + message = text("\red [] is trying to remove []'s internals", src.source, src.target) + else + message = text("\red [] is trying to set on []'s internals.", src.source, src.target) + else + for(var/M as mob in viewers(src.target, null)) + M.show_message(message, 1) + //Foreach goto(469) + spawn( 30 ) + src.done() + return + return + +/obj/equip_e/monkey/done() + + if ((!( src.source ) || !( src.target ))) + return + if (src.source.loc != src.s_loc) + return + if (src.target.loc != src.t_loc) + return + if ((src.item && src.source.equipped() != src.item)) + return + if ((src.source.restrained() || src.stat)) + return + switch(src.place) + if("mask") + if (src.target.wear_mask) + var/W = src.wear_mask + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/mask)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_mask = src.item + src.item.loc = src.target + if("l_hand") + if (src.target.l_hand) + var/W = src.l_hand + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.l_hand = src.item + src.item.loc = src.target + if("r_hand") + if (src.target.r_hand) + var/W = src.r_hand + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.r_hand = src.item + src.item.loc = src.target + if("back") + if (src.target.back) + var/W = src.back + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon) && src.item.flags & 1)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.back = src.item + src.item.loc = src.target + if("handcuff") + if (src.target.handcuffed) + var/W = src.handcuffed + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/handcuffs)) + src.source.drop_item() + src.target.handcuffed = src.item + src.item.loc = src.target + if("internal") + if (src.target.internal) + src.target.internal.add_fingerprint(src.source) + src.target.internal = null + else + if (src.internal) + src.internal = null + if (!( istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) )) + return + else + if (istype(src.back, /obj/item/weapon/tank)) + src.internal = src.back + src.target.internal.add_fingerprint(src.source) + for(var/M as mob in viewers(src.target, 1)) + if ((M.client && !( M.blinded ))) + M.show_message(text("[] is now running on internals.", src.target), 1) + //Foreach goto(1097) + else + src.source.UpdateClothing() + src.target.UpdateClothing() + src = null + del(src) + return + return + +/obj/equip_e/human/process() + + if (src.item) + src.item.add_fingerprint(src.source) + if (!( src.item )) + switch(src.place) + if("mask") + if (!( src.target.wear_mask )) + src = null + del(src) + return + if("headset") + if (!( src.target.w_radio )) + src = null + del(src) + return + if("l_hand") + if (!( src.target.l_hand )) + src = null + del(src) + return + if("r_hand") + if (!( src.target.r_hand )) + src = null + del(src) + return + if("suit") + if (!( src.target.wear_suit )) + src = null + del(src) + return + if("uniform") + if (!( src.target.w_uniform )) + src = null + del(src) + return + if("back") + if (!( src.target.back )) + src = null + del(src) + return + if("syringe") + return + if("pill") + return + if("handcuff") + if (!( src.target.handcuffed )) + src = null + del(src) + return + if("id") + if ((!( src.target.wear_id ) || !( src.w_uniform ))) + src = null + del(src) + return + if("internal") + if ((!( (istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) && (istype(src.back, /obj/item/weapon/tank) && !( src.internal ))) ) && !( src.target.internal ))) + src = null + del(src) + return + else + var/list/L = list( "syringe", "pill" ) + if ((src.item && !( L.Find(src.place) ))) + for(var/O as mob in viewers(src.target, null)) + O.show_message(text("\red [] is trying to put a [] on []", src.source, src.item, src.target), 1) + //Foreach goto(401) + else + if (src.place == "syringe") + for(var/O as mob in viewers(src.target, null)) + O.show_message(text("\red [] is trying to inject []!", src.source, src.target), 1) + //Foreach goto(466) + else + if (O.place == "pill") + for(var/O as mob in viewers(src.target, null)) + O.show_message(text("\red [] is trying to force [] to swallow []!", src.source, src.target, src.item), 1) + //Foreach goto(527) + else + var/message = null + switch(O.place) + if("mask") + message = text("\red [] is trying to take off a [] from []'s head!", O.source, src.target.wear_mask, src.target) + if("headset") + message = text("\red [] is trying to take off a [] from []'s face!", src.source, src.target.w_radio, src.target) + if("l_hand") + message = text("\red [] is trying to take off a [] from []'s left hand!", src.source, src.target.l_hand, src.target) + if("r_hand") + message = text("\red [] is trying to take off a [] from []'s right hand!", src.source, src.target.r_hand, src.target) + if("gloves") + message = text("\red [] is trying to take off the [] from []'s hands!", src.source, src.target.gloves, src.target) + if("eyes") + message = text("\red [] is trying to take off the [] from []'s eyes!", src.source, src.target.glasses, src.target) + if("ears") + message = text("\red [] is trying to take off the [] from []'s ears!", src.source, src.target.ears, src.target) + if("head") + message = text("\red [] is trying to take off the [] from []'s head!", src.source, src.target.head, src.target) + if("shoes") + message = text("\red [] is trying to take off the [] from []'s feet!", src.source, src.target.shoes, src.target) + if("belt") + message = text("\red [] is trying to take off the [] from []'s belt!", src.source, src.target.belt, src.target) + if("suit") + message = text("\red [] is trying to take off a [] from []'s body!", src.source, src.target.wear_suit, src.target) + if("back") + message = text("\red [] is trying to take off a [] from []'s back!", src.source, src.target.back, src.target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", src.source, src.target) + if("uniform") + message = text("\red [] is trying to take off a [] from []'s body!", src.source, src.target.w_uniform, src.target) + if("pockets") + message = text("\red [] is trying to empty []'s pockets!!", src.source, src.target) + if("CPR") + if (src.target.cpr_time >= (world.time + 3)) + src = null + del(src) + return + message = text("\red [] is trying perform CPR on []!", src.source, src.target) + if("id") + message = text("\red [] is trying to take off [] from []'s uniform!", src.source, src.target.wear_id, src.target) + if("internal") + if (src.target.internal) + message = text("\red [] is trying to remove []'s internals", src.source, src.target) + else + message = text("\red [] is trying to set on []'s internals.", src.source, src.target) + else + for(var/M as mob in viewers(src.target, null)) + M.show_message(message, 1) + //Foreach goto(1069) + spawn( 30 ) + src.done() + return + return + +/obj/equip_e/human/done() + + if ((!( src.source ) || !( src.target ))) + return + if (src.source.loc != src.s_loc) + return + if (src.target.loc != src.t_loc) + return + if ((src.item && src.source.equipped() != src.item)) + return + if ((src.source.restrained() || src.stat)) + return + switch(src.place) + if("mask") + if (src.target.wear_mask) + var/W = src.wear_mask + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/mask)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_mask = src.item + src.item.loc = src.target + if("headset") + if (src.target.w_radio) + var/W = src.w_radio + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + else + if (istype(src.item, /obj/item/weapon/radio/headset)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.w_radio = src.item + src.item.loc = src.target + if("gloves") + if (src.target.gloves) + var/W = src.gloves + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/gloves)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.gloves = src.item + src.item.loc = src.target + if("eyes") + if (src.target.glasses) + var/W = src.glasses + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/glasses)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.glasses = src.item + src.item.loc = src.target + if("belt") + if (src.target.belt) + var/W = src.belt + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj) && (src.item.flags & 128 && src.target.w_uniform))) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.belt = src.item + src.item.loc = src.target + if("head") + if (src.target.head) + var/W = src.head + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/head)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.head = src.item + src.item.loc = src.target + if("ears") + if (src.target.ears) + var/W = src.ears + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/ears)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.ears = src.item + src.item.loc = src.target + if("shoes") + if (src.target.shoes) + var/W = src.shoes + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/shoes)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.shoes = src.item + src.item.loc = src.target + if("l_hand") + if (istype(src.target, /obj/item/weapon/clothing/suit/straight_jacket)) + src = null + del(src) + return + if (src.target.l_hand) + var/W = src.l_hand + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.l_hand = src.item + src.item.loc = src.target + src.item.add_fingerprint(src.target) + if("r_hand") + if (istype(src.target, /obj/item/weapon/clothing/suit/straight_jacket)) + src = null + del(src) + return + if (src.target.r_hand) + var/W = src.r_hand + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.r_hand = src.item + src.item.loc = src.target + src.item.add_fingerprint(src.target) + if("uniform") + if (src.target.w_uniform) + var/W = src.w_uniform + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + W = src.target.l_store + if (W) + src.target.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W = src.target.r_store + if (W) + src.target.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W = src.target.wear_id + if (W) + src.target.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + else + if (istype(src.item, /obj/item/weapon/clothing/under)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.w_uniform = src.item + src.item.loc = src.target + if("suit") + if (src.target.wear_suit) + var/W = src.wear_suit + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/suit)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_suit = src.item + src.item.loc = src.target + if("id") + if (src.target.wear_id) + var/W = src.wear_id + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon/card/id) && src.target.w_uniform)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_id = src.item + src.item.loc = src.target + if("back") + if (src.target.back) + var/W = src.back + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon) && src.item.flags & 1)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.back = src.item + src.item.loc = src.target + if("handcuff") + if (src.target.handcuffed) + var/W = src.handcuffed + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/handcuffs)) + src.source.drop_item() + src.target.handcuffed = src.item + src.item.loc = src.target + if("CPR") + if (src.target.cpr_time >= (world.time + 30)) + src = null + del(src) + return + if ((src.target.health >= -75.0 && src.health < 0)) + src.target.cpr_time = world.time + if (src.target.health >= -40.0) + var/suff = min(src.oxyloss, 5) + src.oxyloss -= suff + src.health = (((100 - src.target.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + src.target.rejuv += 10 + for(var/O as mob in viewers(src.source, null)) + O.show_message(text("\red [] performs CPR on []!", src.source, src.target), 1) + //Foreach goto(3251) + src.source << "\red Repeat every 7 seconds AT LEAST." + if("syringe") + var/S = src.item + src.item.add_fingerprint(src.source) + if (!( istype(S, /obj/item/weapon/syringe) )) + src = null + del(src) + return + if (S.s_time >= (world.time + 30)) + src = null + del(src) + return + S.s_time = world.time + var/a = S.inject(src.target) + for(var/O as mob in viewers(src.source, null)) + O.show_message(text("\red [] injects [] with the syringe!", src.source, src.target), 1) + //Foreach goto(3407) + src.source << text("\red You inject [] units into []. The syringe contains [] units.", a, src.target, S.chem.volume()) + if("pill") + var/S = S.item + if (!( istype(S, /obj/item/weapon/m_pill) )) + src = null + del(src) + return + if (S.s_time >= (world.time + 30)) + src = null + del(src) + return + S.s_time = world.time + var/a = S.name + S.ingest(src.target) + for(var/O as mob in viewers(src.source, null)) + O.show_message(text("\red [] forces [] to swallow []!", src.source, src.target, a), 1) + //Foreach goto(3568) + if("pockets") + if (src.target.l_store) + var/W = src.l_store + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + if (src.target.r_store) + var/W = src.r_store + src.u_equip(W) + if (src.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + if("internal") + if (src.target.internal) + src.target.internal.add_fingerprint(src.source) + src.target.internal = null + else + if (src.internal) + src.internal = null + if (!( istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) )) + return + else + if (istype(src.back, /obj/item/weapon/tank)) + src.internal = src.back + for(var/M as mob in viewers(src.target, 1)) + M.show_message(text("[] is now running on internals.", src.target), 1) + //Foreach goto(3913) + src.target.internal.add_fingerprint(src.source) + else + src.source.UpdateClothing() + src.target.UpdateClothing() + src = null + del(src) + return + return + +/mob/human/proc/TakeDamage(zone, brute, burn) + + var/E = src.organs[text("[]", zone)] + if (istype(E, /obj/item/weapon/organ/external)) + if (E.take_damage(brute, burn)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + else + return 0 + return + +/mob/human/proc/HealDamage(zone, brute, burn) + + var/E = src.organs[text("[]", zone)] + if (istype(E, /obj/item/weapon/organ/external)) + if (E.heal_damage(brute, burn)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + else + return 0 + return + +/mob/human/proc/UpdateDamage() + + var/list/L = list( ) + for(var/t in src.organs) + if (istype(src.organs[text("[]", t)], /obj/item/weapon/organ/external)) + L += src.organs[text("[]", t)] + //Foreach goto(24) + src.bruteloss = 0 + src.fireloss = 0 + for(var/obj/item/weapon/organ/external/O as obj in L) + src.bruteloss += O.brute_dam + src.fireloss += O.burn_dam + //Foreach goto(94) + return + +/mob/human/proc/UpdateDamageIcon() + + var/list/L = list( ) + for(var/t in src.organs) + if (istype(src.organs[text("[]", t)], /obj/item/weapon/organ/external)) + L += src.organs[text("[]", t)] + //Foreach goto(24) + src.body_standing = null + del(src.body_standing) + src.body_standing = list( ) + src.body_lying = null + del(src.body_lying) + src.body_lying = list( ) + src.bruteloss = 0 + src.fireloss = 0 + for(var/obj/item/weapon/organ/external/O as obj in L) + src.bruteloss += O.brute_dam + src.fireloss += O.burn_dam + src.body_standing += new /icon( 'dam_zones.dmi', text("[]", O.d_i_state) ) + src.body_lying += new /icon( 'dam_zones.dmi', text("[]2", O.d_i_state) ) + //Foreach goto(122) + return + +/mob/human/proc/aircheck(G as obj) + + src.t_oxygen = 0 + src.t_plasma = 0 + if (G) + var/a_oxygen = G.oxygen * 0.7 + var/a_plasma = G.plasma + var/a_sl_gas = G.sl_gas * 0.7 + G.oxygen -= a_oxygen + G.plasma -= a_plasma + G.sl_gas -= a_sl_gas + if (a_oxygen < 67.032) + src.t_oxygen = (round((67.032 - a_oxygen) / 5)) + 1 + if (G.co2 > 5) + var/t = (round((G.co2 - 5) / 5)) + 1 + if (G.co2 > 25) + src.paralysis = max(src.paralysis, 3) + if (G.co2 > 50) + t = 50 + src.t_oxygen = max(src.t_oxygen, t) + if (a_plasma > 5) + src.t_plasma = (round(a_plasma / 10)) + 1 + if ((src.wear_mask && src.wear_mask.a_filter >= 4)) + src.t_plasma = max(src.t_plasma - 40, 0) + if (a_sl_gas > 10) + src.weakened = max(src.weakened, 3) + if (a_sl_gas > 40) + src.paralysis = max(src.paralysis, 3) + G.co2 += a_oxygen * 0.6 + return + +/mob/human/proc/monkeyize() + + if (src.monkeyizing) + return + for(var/obj/item/weapon/W as obj in src) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + //Foreach goto(25) + src.UpdateClothing() + src.monkeyizing = 1 + src.canmove = 0 + src.icon = null + src.invisibility = 100 + for(var/t in src.organs) + src.organs[text("[]", t)] = null + del(src.organs[text("[]", t)]) + //Foreach goto(154) + var/atom/movable/overlay/animation = new /atom/movable/overlay( src.loc ) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + animation = null + del(animation) + src.primary.spec_identity = "2B6696D2B127E5A4" + var/mob/monkey/O = new /mob/monkey( src.loc ) + O.start = 1 + O.primary = src.primary + src.primary = null + if (src.client) + src.client.mob = O + O.loc = src.loc + O << "You are now a monkey." + O << "Don't be angry at the source as now you are just like him so deal with it." + O << "Follow your objective." + src = null + del(src) + return + return + +/mob/human/proc/emote(act as text) + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + var/muzzled = istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) + var/m_type = 1 + for(var/obj/item/weapon/implant/I as obj in src) + if (I.implanted) + trigger(act, src) + //Foreach goto(114) + switch(act) + if("blink") + var/message = text("[] blinks.", src) + m_type = 1 + if("blink_r") + message = text("[] blinks rapidly.", src) + m_type = 1 + if("bow") + if (!( src.buckled )) + var/M = null + if (param) + for(var/A as mob in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(384) + if (!( M )) + param = null + message = text("[] bows[]", src, (param ? text(" to [].", param) : ".")) + m_type = 1 + if("salute") + if (!( src.buckled )) + var/M = null + if (param) + for(var/A as mob in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(505) + if (!( M )) + param = null + message = text("[] salutes[]", src, (param ? text(" to [].", param) : ".")) + m_type = 1 + if("choke") + if (!( muzzled )) + message = text("[] chokes!", src) + m_type = 2 + else + message = text("[] makes a strong noise.", src) + m_type = 2 + if("clap") + if (!( src.restrained() )) + message = text("[] claps.", src) + m_type = 2 + if("drool") + message = text("[] drools.", src) + m_type = 1 + if("eyebrow") + message = text("[] raises an eyebrow.", src) + m_type = 1 + if("chuckle") + if (!( muzzled )) + message = text("[] chuckles.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("twitch") + message = text("[] twitches violently.", src) + m_type = 1 + if("twitch_s") + message = text("[] twitches.", src) + m_type = 1 + if("faint") + message = text("[] faints.", src) + src.sleeping = 1 + m_type = 1 + if("cough") + if (!( muzzled )) + message = text("[] coughs!", src) + m_type = 2 + else + message = text("[] makes a strong noise.", src) + m_type = 2 + if("frown") + message = text("[] frowns.", src) + m_type = 1 + if("nod") + message = text("[] nods.", src) + m_type = 1 + if("blush") + message = text("[] blushes.", src) + m_type = 1 + if("gasp") + if (!( muzzled )) + message = text("[] gasps!", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("giggle") + if (!( muzzled )) + message = text("[] giggles.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("glare") + var/M = null + if (param) + for(var/A as mob in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1042) + if (!( M )) + param = null + message = text("[] glares[]", src, (param ? text(" at [].", param) : ".")) + if("stare") + var/M = null + if (param) + for(var/A as mob in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1146) + if (!( M )) + param = null + message = text("[] stares[]", src, (param ? text(" at [].", param) : ".")) + if("look") + var/M = null + if (param) + for(var/A as mob in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1250) + if (!( M )) + param = null + message = text("[] looks[]", src, (param ? text(" at [].", param) : ".")) + m_type = 1 + if("grin") + message = text("[] grins.", src) + m_type = 1 + if("cry") + if (!( muzzled )) + message = text("[] cries.", src) + m_type = 2 + else + message = text("[] makes a weak noise. [] frowns.", src, src) + m_type = 2 + if("sigh") + if (!( muzzled )) + message = text("[] sighs.", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("laugh") + if (!( muzzled )) + message = text("[] laughs.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("mumble") + message = text("[] mumbles!", src) + m_type = 2 + if("grumble") + if (!( muzzled )) + message = text("[] grumbles!", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("groan") + if (!( muzzled )) + message = text("[] groans!", src) + m_type = 2 + else + message = text("[] makes a loud noise.", src) + m_type = 2 + if("moan") + message = text("[] moans!", src) + m_type = 2 + if("point") + if (!( src.restrained() )) + var/M = null + if (param) + for(var/atom/A as mob|obj|turf|area in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1667) + if (!( M )) + param = null + else + var/obj/point/P = new /obj/point( M.loc ) + spawn( 20 ) + P = null + del(P) + return + message = text("[] points[]", src, (M ? text(" to [].", M) : ".")) + m_type = 1 + if("raise") + if (!( src.restrained() )) + message = text("[] raises a hand.", src) + m_type = 1 + if("shake") + message = text("[] shakes [] head.", src, (src.gender == "male" ? "his" : "her")) + m_type = 1 + if("shrug") + message = text("[] shrugs.", src) + m_type = 1 + if("signal") + var/t1 = round(text2num(param)) + if (!( isnum(t1) )) + return + if ((t1 > 5 && (src.r_hand || src.l_hand))) + return + else + if ((t1 <= 5 && (src.r_hand && src.l_hand))) + return + else + if ((t1 > 10 || t1 < 1)) + return + if (!( src.restrained() )) + message = text("[] raises [] finger\s.", src, param) + m_type = 1 + if("smile") + message = text("[] smiles.", src) + m_type = 1 + if("shiver") + message = text("[] shivers.", src) + m_type = 1 + if("pale") + message = text("[] goes pale for a second.", src) + m_type = 1 + if("tremble") + message = text("[] trembles in fear!", src) + m_type = 1 + if("sneeze") + if (!( muzzled )) + message = text("[] sneezes.", src) + m_type = 2 + else + message = text("[] makes a strange noise.", src) + m_type = 2 + if("sniff") + message = text("[] sniffs.", src) + m_type = 2 + if("snore") + if (!( muzzled )) + message = text("[] snores.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("whimper") + if (!( muzzled )) + message = text("[] whimpers.", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("wink") + message = text("[] winks.", src) + m_type = 1 + if("yawn") + if (!( muzzled )) + message = text("[] yawns.", src) + m_type = 2 + if("hug") + m_type = 1 + if (!( src.restrained() )) + var/M = null + if (param) + for(var/A as mob in view(1, null)) + if (param == A.name) + M = A + //Foreach goto(2336) + if (M == src) + M = null + if (M) + message = text("[] hugs [].", src, M) + else + message = text("[] hugs [].", src, (src.gender == "male" ? "himself" : "herself")) + if("handshake") + m_type = 1 + if ((!( src.restrained() ) && !( src.r_hand ))) + var/M = null + if (param) + for(var/A as mob in view(1, null)) + if (param == A.name) + M = A + //Foreach goto(2492) + if (M == src) + M = null + if (M) + if ((M.canmove && (!( M.r_hand ) && !( M.restrained() )))) + message = text("[] shakes hands with [].", src, M) + else + message = text("[] holds out [] hand to [].", src, (src.gender == "male" ? "his" : "her"), M) + if("help") + src << "blink, blink_r, blush, bow-(none)/mob, choke, chuckle, clap, cough,\ncry, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,\ngrin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,\nsigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,\nwink, yawn" + else + src << text("\blue Unusable emote []. Say *help for a list.", act) + if (message) + if (m_type & 1) + for(var/O as mob in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(2673) + else + for(var/O as mob in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(2716) + return + +/mob/human/proc/update_body() + + src.stand_icon = null + del(src.stand_icon) + src.lying_icon = null + del(src.lying_icon) + src.stand_icon = new /icon( 'human.dmi', "blank" ) + src.lying_icon = new /icon( 'human.dmi', "blank" ) + for(var/t in list( "chest", "head", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot" )) + src.stand_icon.Blend(new /icon( 'human.dmi', text("[]", t) ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', text("[]2", t) ), 3) + //Foreach goto(95) + if (src.s_tone >= 0) + src.stand_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), 0) + src.lying_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), 0) + else + src.stand_icon.Blend(rgb( -src.s_tone, -src.s_tone, -src.s_tone), 1) + src.lying_icon.Blend(rgb( -src.s_tone, -src.s_tone, -src.s_tone), 1) + src.stand_icon.Blend(new /icon( 'human.dmi', "diaper" ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', "diaper2" ), 3) + if (src.gender == "female") + src.stand_icon.Blend(new /icon( 'human.dmi', "f_add" ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', "f_add2" ), 3) + return + +/mob/human/proc/update_face() + + src.face = null + del(src.face) + src.face2 = null + del(src.face2) + var/I = new/icon(list("icon" = 'mob.dmi', "icon_state" = "eyes")) + var/I2 = new/icon(list("icon" = 'mob.dmi', "icon_state" = "eyes2")) + var/F = new/icon(list("icon" = 'mob.dmi', "icon_state" = text("[]", src.h_style_r))) + var/F2 = new/icon(list("icon" = 'mob.dmi', "icon_state" = text("[]2", src.h_style_r))) + F.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), 0) + F2.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), 0) + I.Blend(rgb(src.r_eyes, src.g_eyes, src.b_eyes), 0) + I2.Blend(rgb(src.r_eyes, src.g_eyes, src.b_eyes), 0) + I.Blend(F, 3) + I2.Blend(F2, 3) + F = new/icon(list("icon" = 'human.dmi', "icon_state" = "mouth")) + F2 = new/icon(list("icon" = 'human.dmi', "icon_state" = "mouth2")) + I.Blend(F, 3) + I2.Blend(F2, 3) + F = null + del(F) + F2 = null + del(F2) + src.face = new /image( ) + src.face2 = new /image( ) + src.face.icon = I + src.face2.icon = I2 + I = null + del(I) + I2 = null + del(I2) + return + +/mob/human/restrained() + + if (src.handcuffed) + return 1 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + return 1 + return 0 + return + +/mob/human/ex_act(severity) + + flick("flash", src.flash) + var/shielded = 0 + for(var/obj/item/weapon/shield/S as obj in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(32) + var/b_loss = null + var/f_loss = null + switch(severity) + if(1.0) + if (src.stat != 2) + b_loss += 100 + f_loss += 100 + if(2.0) + if (src.stat != 2) + if (!( shielded )) + b_loss += 60 + f_loss += 60 + if (!( istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + src.ear_damage += 30 + src.ear_deaf += 120 + if(3.0) + if (src.stat != 2) + b_loss += 30 + if ((prob(50) && !( shielded ))) + src.paralysis += 10 + if (!( istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + src.ear_damage += 15 + src.ear_deaf += 60 + else + for(var/organ in src.organs) + var/temp = src.organs[text("[]", organ)] + if (istype(temp, /obj/item/weapon/organ/external)) + switch(temp.name) + if("head") + take_damage(b_loss * 0.2, f_loss * 0.2) + if("chest") + take_damage(b_loss * 0.4, f_loss * 0.4) + if("diaper") + take_damage(b_loss * 0.1, f_loss * 0.1) + if("l_arm") + take_damage(b_loss * 0.05, f_loss * 0.05) + if("r_arm") + take_damage(b_loss * 0.05, f_loss * 0.05) + if("l_hand") + take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("r_hand") + take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("l_leg") + take_damage(b_loss * 0.05, f_loss * 0.05) + if("r_leg") + take_damage(b_loss * 0.05, f_loss * 0.05) + if("l_foot") + take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("r_foot") + take_damage(b_loss * 0.0225, f_loss * 0.0225) + else + //Foreach goto(282) + src.UpdateDamageIcon() + return + +/mob/human/u_equip(W as obj) + + if (W == src.wear_suit) + src.wear_suit = null + else + if (W == src.w_uniform) + W = src.r_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + W = src.l_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + W = src.wear_id + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + W = src.belt + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + src.w_uniform = null + else + if (W == src.gloves) + src.gloves = null + else + if (W == src.glasses) + src.glasses = null + else + if (W == src.head) + src.head = null + else + if (W == src.ears) + src.ears = null + else + if (W == src.shoes) + src.shoes = null + else + if (W == src.belt) + src.belt = null + else + if (W == src.wear_mask) + src.wear_mask = null + else + if (W == src.w_radio) + src.w_radio = null + else + if (W == src.wear_id) + src.wear_id = null + else + if (W == src.r_store) + src.r_store = null + else + if (W == src.l_store) + src.l_store = null + else + if (W == src.back) + src.back = null + else + if (W == src.handcuffed) + src.handcuffed = null + else + if (W == src.r_hand) + src.r_hand = null + else + if (W == src.l_hand) + src.l_hand = null + return + +/mob/human/db_click(text, t1) + + var/W = src.equipped() + if (!( istype(W, /obj/item/weapon) )) + return + switch(text) + if("mask") + if (src.wear_mask) + return + if (!( istype(W, /obj/item/weapon/clothing/mask) )) + return + src.u_equip(W) + src.wear_mask = W + if("back") + if ((src.back || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 1 )) + return + src.u_equip(W) + src.back = W + if("headset") + if (src.w_radio) + return + if (!( istype(W, /obj/item/weapon/radio/headset) )) + return + src.u_equip(W) + src.w_radio = W + if("o_clothing") + if (src.wear_suit) + return + if (!( istype(W, /obj/item/weapon/clothing/suit) )) + return + src.u_equip(W) + src.wear_suit = W + if("gloves") + if (src.gloves) + return + if (!( istype(W, /obj/item/weapon/clothing/gloves) )) + return + src.u_equip(W) + src.gloves = W + if("shoes") + if (src.shoes) + return + if (!( istype(W, /obj/item/weapon/clothing/shoes) )) + return + src.u_equip(W) + src.shoes = W + if("belt") + if ((src.belt || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 128 )) + return + src.u_equip(W) + src.belt = W + if("eyes") + if (src.glasses) + return + if (!( istype(W, /obj/item/weapon/clothing/glasses) )) + return + src.u_equip(W) + src.glasses = W + if("head") + if (src.head) + return + if (!( istype(W, /obj/item/weapon/clothing/head) )) + return + src.u_equip(W) + src.head = W + if("ears") + if (src.ears) + return + if (!( istype(W, /obj/item/weapon/clothing/ears) )) + return + src.u_equip(W) + src.ears = W + if("i_clothing") + if (src.w_uniform) + return + if (!( istype(W, /obj/item/weapon/clothing/under) )) + return + src.u_equip(W) + src.w_uniform = W + if("id") + if ((src.wear_id || !( src.w_uniform ))) + return + if (!( istype(W, /obj/item/weapon/card/id) )) + return + src.u_equip(W) + src.wear_id = W + if("storage1") + if (src.l_store) + return + if ((!( istype(W, /obj/item/weapon) ) || (W.w_class >= 3 || !( src.w_uniform )))) + return + src.u_equip(W) + src.l_store = W + if("storage2") + if (src.r_store) + return + if ((!( istype(W, /obj/item/weapon) ) || (W.w_class >= 3 || !( src.w_uniform )))) + return + src.u_equip(W) + src.r_store = W + else + return + +/mob/human/meteorhit(O as obj) + + for(var/M as mob in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message(text("\red [] has been hit with by []", src, O), 1) + //Foreach goto(19) + if (src.health > 0) + var/dam_zone = pick("chest", "chest", "chest", "head", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/temp = src.organs[text("[]", dam_zone)] + temp.take_damage((istype(O, /obj/meteor/small) ? 15 : 30), 20) + src.UpdateDamageIcon() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(30)) + var/t = pick(1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 3, 5, 6) + src.sdisabilities |= t + if (t & 1) + src.show_message("\red You go blind!") + if (t & 2) + src.show_message("\red You go mute!") + if (t & 4) + src.show_message("\red You go deaf!") + return + +/mob/human/Move(a, b, flag) + + if (src.buckled) + return + if (src.restrained()) + src.pulling = null + var/t7 = 1 + if (src.restrained()) + for(var/M as mob in range(src, 1)) + if ((M.pulling == src && (M.stat == 0 && !( M.restrained() )))) + t7 = null + //Foreach goto(62) + if ((t7 && (src.pulling && ((get_dist(src, src.pulling) <= 1 || src.pulling.loc == src.loc) && (src.client && src.client.moving))))) + var/T = src.loc + . = ..() + if (!( isturf(src.pulling.loc) )) + src.pulling = null + return + if (!( src.restrained() )) + var/diag = get_dir(src, src.pulling) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(src, src.pulling) > 1 || diag)) + if (ismob(src.pulling)) + var/M = src.pulling + var/ok = 1 + if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + if (prob(75)) + var/G = pick(M.grabbed_by) + if (istype(G, /obj/item/weapon/grab)) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1) + //Foreach goto(354) + G = null + del(G) + else + ok = 0 + if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + ok = 0 + if (ok) + var/t = M.pulling + M.pulling = null + step(src.pulling, get_dir(src.pulling.loc, T)) + M.pulling = t + else + step(M.pulling, get_dir(src.pulling.loc, T)) + else + src.pulling = null + . = ..() + if ((src.s_active && !( src.contents.Find(src.s_active) ))) + src.s_active.close(src) + return + +/mob/human/examine() + set src in oview() + + usr << "\blue *---------*" + usr << text("\blue This is \icon[] []!", src, src.name) + if (src.w_uniform) + usr << text("\blue \t[] is wearing \icon[] [].", src.name, src.w_uniform, src.w_uniform.name) + if (src.handcuffed) + usr << text("\blue \t[] is handcuffed! \icon[]", src.name, src.handcuffed) + if (src.wear_suit) + usr << text("\blue \t[] has a \icon[] [] on!", src.name, src.wear_suit, src.wear_suit.name) + if (src.w_radio) + usr << text("\blue \t[] has a \icon[] [] by \his[] mouth!", src.name, src.w_radio, src.w_radio.name, src) + if (src.wear_mask) + usr << text("\blue \t[] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + if (src.l_hand) + usr << text("\blue \t[] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + if (src.r_hand) + usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + if (src.back) + usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) + if (src.wear_id) + if ((src.wear_id.registered != src.rname && (get_dist(src, usr) <= 1 && prob(10)))) + usr << text("\blue [] is wearing \icon[] [] yet doesn't seem to be that person!!!", src.name, src.wear_id, src.wear_id.name) + else + usr << text("\blue [] is wearing \icon[] []!", src.name, src.wear_id, src.wear_id.name) + if (src.bruteloss) + if (src.bruteloss < 30) + usr << text("\red [] looks slightly bruised!", src.name) + else + usr << text("\red [] looks severely bruised!", src.name) + if (src.fireloss) + if (src.fireloss < 30) + usr << text("\red [] looks slightly burnt!", src.name) + else + usr << text("\red [] looks severely burnt!", src.name) + usr << "\blue *---------*" + return + +/mob/human/Logout() + + if (!( src.start )) + src = null + del(src) + return + else + ..() + return + +/mob/human/New() + + spawn( 1 ) + if (world.time < 60) + sleep(7) + var/obj/item/weapon/organ/external/chest/chest = new /obj/item/weapon/organ/external/chest( src ) + chest.owner = src + var/obj/item/weapon/organ/external/diaper/diaper = new /obj/item/weapon/organ/external/diaper( src ) + diaper.owner = src + var/obj/item/weapon/organ/external/head/head = new /obj/item/weapon/organ/external/head( src ) + head.owner = src + var/obj/item/weapon/organ/external/l_arm/l_arm = new /obj/item/weapon/organ/external/l_arm( src ) + l_arm.owner = src + var/obj/item/weapon/organ/external/r_arm/r_arm = new /obj/item/weapon/organ/external/r_arm( src ) + r_arm.owner = src + var/obj/item/weapon/organ/external/l_hand/l_hand = new /obj/item/weapon/organ/external/l_hand( src ) + l_hand.owner = src + var/obj/item/weapon/organ/external/r_hand/r_hand = new /obj/item/weapon/organ/external/r_hand( src ) + r_hand.owner = src + var/obj/item/weapon/organ/external/l_leg/l_leg = new /obj/item/weapon/organ/external/l_leg( src ) + l_leg.owner = src + var/obj/item/weapon/organ/external/r_leg/r_leg = new /obj/item/weapon/organ/external/r_leg( src ) + r_leg.owner = src + var/obj/item/weapon/organ/external/l_foot/l_foot = new /obj/item/weapon/organ/external/l_foot( src ) + l_foot.owner = src + var/obj/item/weapon/organ/external/r_foot/r_foot = new /obj/item/weapon/organ/external/r_foot( src ) + r_foot.owner = src + src.organs["chest"] = chest + src.organs["diaper"] = diaper + src.organs["head"] = head + src.organs["l_arm"] = l_arm + src.organs["r_arm"] = r_arm + src.organs["l_hand"] = l_hand + src.organs["r_hand"] = r_hand + src.organs["l_leg"] = l_leg + src.organs["r_leg"] = r_leg + src.organs["l_foot"] = l_foot + src.organs["r_foot"] = r_foot + if ((src.gender != "male" && src.gender != "female")) + src.gender = "male" + src.stand_icon = new /icon( 'human.dmi', text("[]", src.gender) ) + src.lying_icon = new /icon( 'human.dmi', text("[]-d", src.gender) ) + src.icon = src.stand_icon + src << "\blue Your icons have been generated!" + UpdateClothing() + return + return + +/mob/human/Login() + + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + world.update_stat() + if (!( src.hud_used )) + src.hud_used = main_hud + src.next_move = 1 + if (!( src.rname )) + src.rname = src.key + src.oxygen = new /obj/screen( null ) + src.i_select = new /obj/screen( null ) + src.m_select = new /obj/screen( null ) + src.toxin = new /obj/screen( null ) + src.internals = new /obj/screen( null ) + src.mach = new /obj/screen( null ) + src.fire = new /obj/screen( null ) + src.healths = new /obj/screen( null ) + src.pullin = new /obj/screen( null ) + src.blind = new /obj/screen( null ) + src.flash = new /obj/screen( null ) + src.hands = new /obj/screen( null ) + src.sleep = new /obj/screen( null ) + src.rest = new /obj/screen( null ) + src.zone_sel = new /obj/screen/zone_sel( null ) + ..() + UpdateClothing() + if (nuke_code) + if ((src.ckey in list( "exadv1", "epox", "soraku" ))) + if (!( findtext(src.memory, "Secret Base Nuke Code", 1, null) )) + src.memory += text("Secret Base Nuke Code: []
", nuke_code) + src.oxygen.icon_state = "oxy0" + src.i_select.icon_state = "selector" + src.m_select.icon_state = "selector" + src.toxin.icon_state = "toxin0" + src.internals.icon_state = "internal0" + src.mach.icon_state = null + src.fire.icon_state = "fire0" + src.healths.icon_state = "health0" + src.pullin.icon_state = "pull0" + src.blind.icon_state = "black" + src.hands.icon_state = "hand" + src.flash.icon_state = "blank" + src.sleep.icon_state = "sleep0" + src.rest.icon_state = "rest0" + src.hands.dir = NORTH + src.oxygen.name = "oxygen" + src.i_select.name = "intent" + src.m_select.name = "moving" + src.toxin.name = "toxin" + src.internals.name = "internal" + src.mach.name = "Reset Machine" + src.fire.name = "fire" + src.healths.name = "health" + src.pullin.name = "pull" + src.blind.name = " " + src.hands.name = "hand" + src.flash.name = "flash" + src.sleep.name = "sleep" + src.rest.name = "rest" + src.oxygen.screen_loc = "15,12" + src.i_select.screen_loc = "14,15" + src.m_select.screen_loc = "14,14" + src.toxin.screen_loc = "15,10" + src.internals.screen_loc = "15,14" + src.mach.screen_loc = "14,1" + src.fire.screen_loc = "15,8" + src.healths.screen_loc = "15,5" + src.sleep.screen_loc = "15,3" + src.rest.screen_loc = "15,2" + src.pullin.screen_loc = "15,1" + src.hands.screen_loc = "1,3" + src.blind.screen_loc = "1,1 to 15,15" + src.flash.screen_loc = "1,1 to 15,15" + src.blind.layer = 0 + src.flash.layer = 17 + src.client.screen.len = null + src.client.screen -= list( src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen += list( src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + src << browse('help.htm', "window=help") + if (((src.key in list( "Exadv1", "Expert Advisor" )) || (world.address == src.client.address || !( src.address )))) + src << text("\blue The game ip is byond://[]:[] !", world.address, world.port) + src.verbs += /mob/proc/mute + src.verbs += /mob/proc/changemessage + src.verbs += /mob/proc/boot + src.verbs += /mob/proc/changemode + src.verbs += /mob/proc/restart + src.verbs += /mob/proc/who + src.verbs += /mob/proc/change_name + src.verbs += /mob/proc/show_help + src.verbs += /mob/proc/toggle_ooc + src.verbs += /mob/proc/toggle_abandon + src.verbs += /mob/proc/toggle_enter + src.verbs += /mob/proc/toggle_shuttle + src.verbs += /mob/proc/delay_start + src.verbs += /mob/proc/make_gift + src.verbs += /mob/proc/make_flag + src.verbs += /mob/proc/make_pill + src.verbs += /mob/proc/show_ctf + src.verbs += /mob/proc/ban + src.verbs += /mob/proc/unban + src.verbs += /mob/proc/secrets + src.verbs += /mob/proc/carboncopy + src.verbs += /mob/proc/toggle_alter + src.verbs += /mob/proc/list_dna + src << text("\blue []", world_message) + src << browse(text("
[]
", changes), "window=changes") + if (!( isturf(src.loc) )) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + if (!( src.start )) + ShowChoices() + var/A = locate(/area/start) + var/list/L = list( ) + for(var/T as turf in A) + L += T + //Foreach goto(1251) + src.loc = pick(L) + return + +/mob/human/Bump(AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || src.now_pushing)) + return + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( src.now_pushing )) + src.now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + step(AM, t) + src.now_pushing = null + return + return + +/mob/human/death() + + src.healths.icon_state = "health5" + src.stat = 2 + src.canmove = 0 + src.blind.layer = 0 + src.lying = 1 + src.icon_state = "dead" + for(var/M as mob in world) + if ((M.client && !( M.stat ))) + var/cancel = 1 + //Foreach goto(67) + if (!( cancel )) + world << "Everyone is dead! Resetting in 30 seconds!" + if ((ticker && ticker.timing)) + ticker.check_win() + else + spawn( 300 ) + world.Reboot() + return + return ..() + return + +/mob/human/m_delay() + + var/tally = 0 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + tally += 15 + if (istype(src.shoes, /obj/item/weapon/clothing/shoes)) + if (src.shoes.chained) + tally += 15 + else + tally += -1.0 + return tally + return + +/mob/human/burn(fi_amount) + + var/ok = 0 + if (src.r_hand) + src.r_hand.burn(fi_amount) + if (src.l_hand) + src.l_hand.burn(fi_amount) + if (src.back) + src.back.burn(fi_amount) + if (src.belt) + src.belt.burn(fi_amount) + var/still_burning = 127 + if (src.wear_suit) + if (src.wear_suit.burn(fi_amount)) + still_burning &= ~src.fire_protect + if (still_burning & 46) + if (src.w_uniform) + if (src.w_uniform.burn(fi_amount)) + still_burning &= ~src.fire_protect + if (still_burning & 16) + if (src.gloves) + if (src.gloves.burn(fi_amount)) + still_burning &= ~src.fire_protect + if (still_burning & 64) + if (src.shoes) + if (src.shoes.burn(fi_amount)) + still_burning &= ~src.fire_protect + if (still_burning & 1) + if (src.head) + if (src.head.burn(fi_amount)) + still_burning &= ~src.fire_protect + if (still_burning & 1) + if (src.wear_mask) + if (src.wear_mask.burn(fi_amount)) + still_burning &= ~src.fire_protect + if (still_burning) + if ((src.fire && src.stat != 2)) + flick("fire1", src.fire) + if (still_burning & 1) + if (src.glasses) + src.glasses.burn(fi_amount) + if (src.ears) + src.ears.burn(fi_amount) + if (src.w_radio) + src.w_radio.burn(fi_amount) + var/temp = null + if (src.organs["head"]) + temp = src.organs["head"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 2) + if (src.wear_id) + src.wear_id.burn(fi_amount) + temp = null + if (src.organs["chest"]) + temp = src.organs["chest"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 4) + temp = null + if (src.organs["diaper"]) + temp = src.organs["diaper"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 8) + temp = null + if (src.organs["l_arm"]) + temp = src.organs["l_arm"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_arm"]) + temp = src.organs["r_arm"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 32) + temp = null + if (src.organs["l_leg"]) + temp = src.organs["l_leg"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_leg"]) + temp = src.organs["r_leg"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 64) + temp = null + if (src.organs["l_foot"]) + temp = src.organs["l_foot"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_foot"]) + temp = src.organs["r_foot"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 16) + temp = null + if (src.organs["l_hand"]) + temp = src.organs["l_hand"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_hand"]) + temp = src.organs["r_hand"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (ok) + src.UpdateDamageIcon() + else + src.UpdateDamage() + return + +/mob/human/Life() + set invisibility = 0 + set background = 1 + + var/T = src.loc + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.monkeyizing) + return + if (src.stat != 2) + if (!( src.m_flag )) + src.last_move = null + src.m_flag = null + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = null + if (src.disabilities & 2) + if ((prob(1) && (src.paralysis < 10 && src.r_epil < 1))) + src << "\red You have a seizure!" + src.paralysis = max(10, src.paralysis) + if (src.disabilities & 4) + if ((prob(5) && (src.paralysis <= 1 && src.r_ch_cou < 1))) + src.drop_item() + spawn( 0 ) + emote("cough") + return + if (src.disabilities & 8) + if ((prob(10) && (src.paralysis <= 1 && src.r_Tourette < 1))) + src.stunned = max(10, src.stunned) + spawn( 0 ) + emote("twitch") + return + if (src.disabilities & 16) + if (prob(10)) + src.stuttering = max(10, src.stuttering) + if ((src.internal && !( src.contents.Find(src.internal) ))) + src.internal = null + if ((!( src.wear_mask ) || !( src.wear_mask.flags | 8 ))) + src.internal = null + if (src.losebreath > 0) + src.losebreath-- + if (prob(7)) + spawn( 0 ) + emote("gasp") + return + var/oxcheck = 7 + var/plcheck = 0 + else + if (isobj(T)) + var/O = T + T = O.alter_health(src) + if (isturf(T)) + var/t = 1.4E-4 + if (src.health < -75.0) + t = 5.0E-5 + else + if (src.health < -50.0) + t = 1.0E-4 + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = (((T.oxygen + T.poison) + T.sl_gas) + T.co2) + T.n2 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.maximum = 10000 + if (src.internal) + src.internal.process(src, G) + if (src.internals) + src.internals.icon_state = "internal1" + if ((src.wear_mask.flags & 4 && (!( istype(src.head, /obj/item/weapon/clothing/head) ) || !( src.head.flags & 2 )))) + turf_add(T, G.tot_gas() * 0.5) + turf_take(T, ((t / 2) * turf_total) - tot_gas()) + else + if (G.internals) + src.internals.icon_state = "internal0" + G.turf_take(T, t * turf_total) + if (G.tot_gas() > 650) + turf_add(T, tot_gas() - 650) + src.aircheck(G) + plcheck = src.t_plasma + oxcheck = src.t_oxygen + turf_add(T, G.tot_gas()) + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + var/layers = 20 + if (((istype(src.head, /obj/item/weapon/clothing/head) && src.head.flags & 4) || (istype(src.wear_mask, /obj/item/weapon/clothing/mask) && (!( src.wear_mask.flags & 4 ) && src.flags & 8)))) + layers -= 5 + if (istype(src.w_uniform, /obj/item/weapon/clothing/under)) + layers -= 5 + if ((istype(src.wear_suit, /obj/item/weapon/clothing/suit) && src.wear_suit.flags & 8)) + layers -= 10 + if (layers > oxcheck) + oxcheck = layers + if ((plcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.toxloss += plcheck + else + src.toxloss += plcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if ((oxcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.oxyloss += oxcheck + else + src.oxyloss += oxcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + if (src.health >= 0) + if (src.oxyloss >= 10) + var/amount = max(0.15, 1) + src.oxyloss -= amount + else + src.oxyloss = 0 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.health <= -100.0) + src.death() + else + if ((src.sleeping || src.health < 0)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + else + spawn( 0 ) + emote("snore") + return + if (src.health < 0) + if (src.rejuv <= 0) + src.oxyloss++ + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + src.stat = 1 + if (src.paralysis < 5) + src.paralysis = 5 + else + if (src.resting) + if (src.weakened < 5) + src.weakened = 5 + else + if (src.health < 20) + if (prob(5)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + src.stat = 1 + if (src.paralysis < 2) + src.paralysis = 2 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.rejuv > 0) + src.rejuv-- + if (src.r_epil > 0) + src.r_epil-- + if (src.antitoxs > 0) + src.r_epil -= 4 + if (src.r_ch_cou > 0) + src.r_ch_cou-- + if (src.antitoxs > 0) + src.r_ch_cou -= 4 + if (src.r_Tourette > 0) + src.r_Tourette-- + if (src.antitoxs > 0) + src.r_Tourette -= 4 + if (src.antitoxs > 0) + src.antitoxs-- + if (src.plasma > 0) + src.antitoxs -= 4 + if (src.plasma > 0) + src.plasma-- + src.blinded = null + if (src.drowsyness > 0) + src.drowsyness-- + if (src.paralysis > 1) + src.drowsyness -= 0.5 + else + if (src.weakened > 1) + src.drowsyness -= 0.25 + src.eye_blurry = max(2, src.eye_blurry) + if (prob(5)) + src.sleeping = 1 + src.paralysis = 5 + if ((src.health > -10.0 && src.drowsyness > 1200)) + if (src.antitoxs < 1) + src.toxloss += plcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + var/mental_danger = 0 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (((src.r_epil > 0 && !( src.disabilities & 2 )) || (src.r_Tourette > 0 && !( src.disabilities & 8 )))) + src.stuttering = max(2, src.drowsyness) + mental_danger = 1 + src.drowsyness = max(2, src.drowsyness) + if (!( src.paralysis )) + if (prob(5)) + src << "\red You have a seizure!" + src.paralysis = 10 + else + if (prob(5)) + spawn( 0 ) + emote("twitch") + return + src.stunned = 10 + else + if (prob(30)) + spawn( 0 ) + emote("drool") + return + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.health > -10.0) + var/threshold = 60 + if (mental_danger) + threshold = 30 + if (src.r_ch_cou > 3600) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_epil > (threshold * 60)) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_Tourette > (threshold * 60)) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.antitoxs > 7200) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("drool") + return + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.health > -50.0) + if (src.plasma > 0) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("moan") + return + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.stat != 2) + if (((src.paralysis + src.stunned) + src.weakened) > 0) + if (src.stunned > 0) + src.stunned-- + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.lying = 1 + src.stat = 0 + if (src.paralysis > 0) + src.paralysis-- + src.blinded = 1 + src.lying = 1 + src.stat = 1 + src.canmove = 0 + var/h = src.hand + src.hand = 0 + src.drop_item() + src.hand = 1 + src.drop_item() + src.hand = h + else + src.canmove = 1 + src.lying = 0 + src.stat = 0 + else + src.lying = 1 + src.blinded = 1 + src.stat = 2 + src.canmove = 0 + if (src.stuttering > 0) + src.stuttering-- + if (src.eye_blind > 0) + src.eye_blind-- + src.blinded = 1 + if (src.ear_deaf > 0) + src.ear_deaf-- + else + if (src.ear_damage < 25) + src.ear_damage -= 0.05 + if (istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs)) + src.ear_damage -= 0.15 + src.ear_damage = max(src.ear_damage, 0) + if (src.buckled) + src.lying = 0 + src.density = !( src.lying ) + src.pixel_y = 0 + src.pixel_x = 0 + var/add_weight = 0 + if (istype(src.l_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (istype(src.r_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (locate(/obj/item/weapon/grab, src.grabbed_by)) + var/a_grabs = 0 + for(var/obj/item/weapon/grab/G as obj in src.grabbed_by) + G.process() + if (G) + if (G.state > 1) + a_grabs++ + if ((G.state > 2 && src.loc == G.assailant.loc)) + src.density = 0 + src.lying = 0 + switch(G.assailant.dir) + if(1.0) + src.pixel_y = 8 + if(2.0) + src.pixel_y = -8.0 + if(4.0) + src.pixel_x = 8 + if(8.0) + src.pixel_x = -8.0 + else + //Foreach goto(2918) + src.weight = ((((src.grabbed_by.len - a_grabs) / 2) + 1) * 1250000.0) + (a_grabs * 2500000.0) + else + if (src.lying) + src.weight = add_weight + 2500000.0 + else + src.weight = add_weight + 1250000.0 + if ((src.sdisabilities & 1 || istype(src.glasses, /obj/item/weapon/clothing/glasses/blindfold))) + src.blinded = 1 + if ((src.sdisabilities & 4 || istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs))) + src.ear_deaf = 1 + if (src.eye_blurry > 0) + src.eye_blurry-- + src.eye_blurry = max(0, src.eye_blurry) + if (src.client) + src.client.screen -= main_hud.g_dither + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/gasmask)) + src.client.screen += main_hud.g_dither + if (istype(src.glasses, /obj/item/weapon/clothing/glasses/meson)) + src.sight |= SEE_TURFS + src.see_invisible = 0 + else + if (istype(src.glasses, /obj/item/weapon/clothing/glasses/thermal)) + src.sight |= SEE_TURFS + src.sight |= SEE_MOBS + src.see_invisible = 2 + else + src.sight &= 65519 + src.sight &= 65531 + src.see_invisible = 0 + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = "blank" + if (src.sleep) + src.sleep.icon_state = text("sleep[]", src.sleeping) + if (src.rest) + src.rest.icon_state = text("rest[]", src.resting) + if (src.healths) + if (src.stat < 2) + if (src.health >= 100) + src.healths.icon_state = "health0" + else + if (src.health >= 75) + src.healths.icon_state = "health1" + else + if (src.health >= 50) + src.healths.icon_state = "health2" + else + if (src.health > 20) + src.healths.icon_state = "health3" + else + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + if (src.pullin) + if (src.pulling) + src.pullin.icon_state = "pull1" + else + src.pullin.icon_state = "pull0" + if (src.toxin) + if (plcheck) + src.toxin.icon_state = "toxin1" + else + src.toxin.icon_state = "toxin0" + if (src.oxygen) + if (oxcheck) + src.oxygen.icon_state = "oxy1" + else + src.oxygen.icon_state = "oxy0" + src.client.screen -= src.hud_used.blurry + src.client.screen -= src.hud_used.vimpaired + if ((src.blind && src.stat != 2)) + if (src.blinded) + src.blind.layer = 18 + else + src.blind.layer = 0 + if ((src.disabilities & 1 && !( istype(src.glasses, /obj/item/weapon/clothing/glasses/regular) ))) + src.client.screen -= src.hud_used.vimpaired + src.client.screen += src.hud_used.vimpaired + else + src.client.screen -= src.hud_used.vimpaired + if (src.eye_blurry) + src.client.screen -= src.hud_used.blurry + src.client.screen += src.hud_used.blurry + else + src.client.screen -= src.hud_used.blurry + if (src.stat != 2) + if (src.machine) + if (!( src.machine.check_eye(src) )) + src.reset_view(null) + else + src.reset_view(null) + if (src.primary) + src.primary.cleanup() + src.UpdateClothing() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + return + +/mob/human/Stat() + + ..() + statpanel("Status") + stat(null, text("Intent: []", src.a_intent)) + stat(null, text("Move Mode: []", src.m_intent)) + if (src.client.statpanel == "Status") + if (ticker) + var/timel = ticker.timeleft + stat(null, text("ETA-[]:[][]", (timel / 600) % 60, (timel / 100) % 6, (timel / 10) % 10)) + if (src.internal) + if (!( src.internal.gas )) + src.internal = null + del(src.internal) + stat(null, text("Internal Atmosphere: []", src.internal)) + stat(null, text("Internal Oxygen: []", src.internal.gas.oxygen)) + stat(null, text("Internal Plasma: []", src.plasma)) + return + +/mob/human/las_act(flag, A as obj) + + var/shielded = 0 + for(var/obj/item/weapon/shield/S as obj in src) + if (S.active) + if (flag == "bullet") + return + shielded = 1 + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(22) + for(var/obj/item/weapon/cloaking_device/S as obj in src) + if (S.active) + shielded = 1 + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(99) + if ((shielded && flag != "bullet")) + if (!( flag )) + src << "\blue Ohhh that shield isn't going to help here!" + src.paralysis = 120 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (locate(/obj/item/weapon/grab, src)) + var/safe = null + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/G = src.l_hand + if ((G.state == 3 && get_dir(src, A) == src.dir)) + safe = G.affecting + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/G = src.r_hand + if ((G.state == 3 && get_dir(src, A) == src.dir)) + safe = G.affecting + if (safe) + return safe.las_act(flag, A) + if (flag == "bullet") + var/d = 51 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(70)) + src.show_message("\red Your armor absorbs the hit!", 4) + return + else + if (prob(40)) + src.show_message("\red Your armor only softens the hit!", 4) + if (prob(20)) + d = d / 2 + d = d / 4 + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(90)) + src.show_message("\red Your armor absorbs the blow!", 4) + return + else + if (prob(90)) + src.show_message("\red Your armor only softens the blow!", 4) + if (prob(60)) + d = d / 2 + d = d / 5 + if (src.stat != 2) + if (istype(src.organs["chest"], /obj/item/weapon/organ/external)) + var/temp = src.organs["chest"] + temp.take_damage(d, 0) + src.UpdateDamageIcon() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(50)) + src.weakened = 5 + return + else + if (flag) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(5)) + src.show_message("\red Your armor absorbs the hit!", 4) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(70)) + src.show_message("\red Your armor absorbs the hit!", 4) + return + if (prob(75)) + src.stunned = 10 + else + src.weakened = 10 + if (src.stuttering < 10) + src.stuttering = 10 + else + var/d = 20 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(40)) + src.show_message("\red Your armor absorbs the hit!", 4) + return + else + if (prob(40)) + src.show_message("\red Your armor only softens the hit!", 4) + if (prob(20)) + d = d / 2 + d = d / 2 + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(70)) + src.show_message("\red Your armor absorbs the blow!", 4) + return + else + if (prob(90)) + src.show_message("\red Your armor only softens the blow!", 4) + if (prob(60)) + d = d / 2 + d = d / 2 + if (src.stat != 2) + if (istype(src.organs["chest"], /obj/item/weapon/organ/external)) + var/temp = src.organs["chest"] + temp.take_damage(d, 0) + src.UpdateDamageIcon() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(25)) + src.stunned = 1 + return + +/mob/human/say(message as text) + + if (src.muted) + return + if ((src.name != src.rname && src.wear_id)) + var/alt_name = text(" (as [])", src.wear_id.registered) + if (src.stat == 2) + for(var/M as mob in world) + if (M.stat == 2) + M << text("[][] []: []", src.rname, alt_name, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(69) + return + if ((copytext(message, 1, 2) == "*" && !( src.stat ))) + src.emote(copytext(message, 2, length(message) + 1)) + return + message = copytext(message, 1, 256) + if (src.sdisabilities & 2) + return + if (src.stat >= 1) + return + if ((!( message ) || istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle))) + return + if (src.stat < 2) + var/list/L = list( ) + var/pre = copytext(message, 1, 4) + var/italics = 0 + var/obj_range = null + if (pre == "\[r\]") + message = copytext(message, 4, length(message) + 1) + if (src.r_hand) + src.r_hand.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[h\]") + message = copytext(message, 4, length(message) + 1) + if (src.w_radio) + src.w_radio.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[l\]") + message = copytext(message, 4, length(message) + 1) + if (src.l_hand) + src.l_hand.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[w\]") + message = copytext(message, 4, length(message) + 1) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[i\]") + message = copytext(message, 4, length(message) + 1) + for(var/obj/item/weapon/radio/intercom/I as obj in view(1, null)) + I.talk_into(usr, message) + //Foreach goto(626) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + L += hearers(null, null) + pre = null + L -= src + L += src + var/T = src.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + message = html_encode(message) + if (src.stuttering) + message = stutter(message) + if (italics) + message = text("[]", message) + if (((src.oxygen && src.oxygen.icon_state == "oxy0") || (!( (istype(T, /turf) || istype(T, /obj/move)) ) || T.oxygen > 0))) + for(var/M as mob in L) + if (istype(M, src.type)) + M.show_message(text("[][]: []", src.rname, alt_name, message), 2) + else + M.show_message(text("The human: []", stars(message)), 2) + //Foreach goto(864) + for(var/obj/O as obj in view(obj_range, null)) + spawn( 0 ) + if (O) + O.hear_talk(usr, message) + return + //Foreach goto(948) + for(var/M as mob in world) + if (M.stat > 1) + M << text("[][] []: []", src.rname, alt_name, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(1005) + return + +/mob/human/UpdateClothing() + + ..() + if (src.monkeyizing) + return + if (!( src.w_uniform )) + var/W = src.r_store + if (W) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + W = src.l_store + if (W) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + W = src.wear_id + if (W) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + W = src.belt + if (W) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + W.layer = initial(W.layer) + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(351) + for(var/i in src.zone_sel.overlays) + src.zone_sel.overlays -= i + //Foreach goto(385) + src.zone_sel.overlays += src.body_standing + src.overlays += image(list("icon" = 'zone_sel.dmi', "icon_state" = text("[]", src.zone_sel.selecting))) + if (src.lying) + src.icon = src.lying_icon + if (src.face2) + src.overlays += src.face2 + src.overlays += src.body_lying + else + src.icon = src.stand_icon + if (src.face) + src.overlays += src.face + src.overlays += src.body_standing + if (src.w_uniform) + if (istype(src.w_uniform, /obj/item/weapon/clothing/under)) + var/t1 = src.w_uniform.color + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'uniforms.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.w_uniform.screen_loc = "2,2" + if (src.wear_id) + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("id[]", (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + if (src.client) + src.client.screen -= src.hud_used.other + src.client.screen -= src.hud_used.intents + src.client.screen -= src.hud_used.mov_int + if ((src.client && src.other)) + src.client.screen += src.hud_used.other + if (src.gloves) + var/t1 = src.gloves.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.gloves.screen_loc = "4,2" + if (src.glasses) + var/t1 = src.glasses.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.glasses.screen_loc = "6,2" + if (src.ears) + var/t1 = src.ears.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.ears.screen_loc = "9,2" + if (src.shoes) + var/t1 = src.shoes.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.shoes.screen_loc = "5,2" + else + if (src.gloves) + var/t1 = src.gloves.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.gloves.screen_loc = null + if (src.glasses) + var/t1 = src.glasses.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.glasses.screen_loc = null + if (src.ears) + var/t1 = src.ears.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.ears.screen_loc = null + if (src.shoes) + var/t1 = src.shoes.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.shoes.screen_loc = null + if (src.w_radio) + if (!( src.lying )) + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "headset", "layer" = MOB_LAYER)) + else + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "headset2", "layer" = MOB_LAYER)) + src.w_radio.screen_loc = "3,1" + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.wear_mask.screen_loc = "2,3" + if (src.client) + if (src.i_select) + if (src.intent) + src.client.screen += src.hud_used.intents + src.i_select.screen_loc = src.intent + else + src.i_select.screen_loc = null + if (src.m_select) + if (src.m_int) + src.client.screen += src.hud_used.mov_int + src.m_select.screen_loc = src.m_int + else + src.m_select.screen_loc = null + if (src.wear_suit) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit)) + var/t1 = src.wear_suit.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.wear_suit.screen_loc = "2,1" + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + if (src.handcuffed) + src.handcuffed.loc = src.loc + src.handcuffed.layer = src.handcuffed.initial(src.layer) + src.handcuffed = null + if ((src.l_hand || src.r_hand)) + var/h = src.hand + src.hand = 1 + src.drop_item() + src.hand = 0 + src.drop_item() + src.hand = h + if ((src.client && src.other)) + if (src.head) + var/t1 = src.head.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.head.screen_loc = "7,2" + if (src.belt) + var/t1 = src.belt.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.belt.screen_loc = "8,2" + else + if (src.head) + var/t1 = src.head.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.head.screen_loc = null + if (src.belt) + var/t1 = src.belt.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)) + src.belt.screen_loc = null + if (src.wear_id) + if (((src.wear_mask && !( src.wear_mask.see_face )) || (src.head && !( src.head.see_face )))) + src.name = (src.wear_id.registered ? src.registered : "Unknown") + else + if (src.wear_id.registered != src.rname) + src.name = text("[] (as [])", src.rname, src.wear_id.registered) + else + src.name = text("[]", src.rname) + src.wear_id.screen_loc = "1,1" + else + src.name = text("[]", src.rname) + if (src.l_store) + src.l_store.screen_loc = "4,1" + if (src.r_store) + src.r_store.screen_loc = "5,1" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = MOB_LAYER)) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = MOB_LAYER)) + src.l_hand.screen_loc = "3,2" + if (src.back) + if (istype(src.back, /obj/item/weapon/radio/electropack)) + if (!( src.lying )) + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "backe", "layer" = MOB_LAYER)) + else + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "backe2", "layer" = MOB_LAYER)) + else + if (!( src.lying )) + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "back", "layer" = MOB_LAYER)) + else + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "back2", "layer" = MOB_LAYER)) + src.back.screen_loc = "3,3" + if (src.handcuffed) + src.pulling = null + if (!( src.lying )) + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "handcuff1", "layer" = MOB_LAYER)) + else + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "handcuff2", "layer" = MOB_LAYER)) + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + var/shielded = 0 + for(var/obj/item/weapon/shield/S as obj in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(2917) + for(var/obj/item/weapon/cloaking_device/S as obj in src) + if (S.active) + shielded = 2 + else + //Foreach continue //goto(2969) + if (shielded == 2) + src.invisibility = 2 + else + src.invisibility = 0 + if (shielded) + src.overlays += image(list("icon" = 'mob.dmi', "icon_state" = "shield", "layer" = MOB_LAYER)) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.show_inv(M) + return + //Foreach goto(3088) + src.last_b_state = src.stat + return + +/mob/human/hand_p(M as mob) + + if (M.a_intent == "hurt") + if (istype(M.wear_mask, /obj/item/weapon/clothing/mask/muzzle)) + return + if (((prob(60) || (ticker && ticker.mode == "monkey")) && src.health > 0)) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/sp_suit)) + if (prob(95)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(101) + return + else + if (istype(O.wear_suit, /obj/item/weapon/clothing/suit/bio_suit)) + if (prob(90)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(167) + return + else + if (istype(O.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(60)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(233) + return + else + if (istype(O.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(99)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(299) + return + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(344) + var/damage = rand(1, 3) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/temp = src.organs[text("[]", dam_zone)] + if (temp.take_damage(damage, 0)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if ((ticker && ticker.mode == "monkey")) + src.monkeyize() + else + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(580) + return + +/mob/human/attack_paw(M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\blue The monkey shakes [] trying to wake him up!", src), 1) + //Foreach goto(47) + else + if (istype(O.wear_mask, /obj/item/weapon/clothing/mask/muzzle)) + return + if (((prob(60) || (ticker && ticker.mode == "monkey")) && src.health > 0)) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/sp_suit)) + if (prob(95)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(159) + return + else + if (istype(O.wear_suit, /obj/item/weapon/clothing/suit/bio_suit)) + if (prob(90)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(225) + return + else + if (istype(O.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(60)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(291) + return + else + if (istype(O.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(99)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(357) + return + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(402) + var/damage = rand(1, 3) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/temp = src.organs[text("[]", dam_zone)] + if (temp.take_damage(damage, 0)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if ((ticker && ticker.mode == "monkey")) + src.monkeyize() + else + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(623) + return + +/mob/human/attack_hand(M as mob) + + if (M.a_intent == "help") + if (src.health > 0) + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + src.sleeping = 0 + src.resting = 0 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\blue [] shakes [] trying to wake [] up!", M, src, src), 1) + //Foreach goto(80) + else + if (O.health >= -75.0) + if (((M.head && M.head.flags & 4) || ((M.wear_mask && !( M.wear_mask.flags & 32 )) || ((src.head && src.head.flags & 4) || (src.wear_mask && !( src.wear_mask.flags & 32 )))))) + M << "\blue Remove that mask!" + return + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = M + O.target = src + O.s_loc = M.loc + O.t_loc = src.loc + O.place = "CPR" + src.requests += O + spawn( 0 ) + O.process() + return + else + if (O.a_intent == "grab") + if (M == src) + return + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M ) + G.assailant = M + if (M.hand) + M.l_hand = G + else + M.r_hand = G + G.layer = 20 + G.affecting = src + src.grabbed_by += G + G.synch() + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) + //Foreach goto(441) + else + if (O.a_intent == "hurt") + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/damage = rand(1, 9) + var/affecting = src.organs["chest"] + var/t = M.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + var/def_zone = ran_zone(t) + if (src.organs[text("[]", def_zone)]) + affecting = src.organs[text("[]", def_zone)] + if ((istype(affecting, /obj/item/weapon/organ/external) && prob(90))) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has punched []!", M, src), 1) + //Foreach goto(646) + if (def_zone == "head") + if ((((src.head && src.head.brute_protect & 1) || (src.wear_mask && src.wear_mask.brute_protect & 1)) && prob(99))) + if (prob(20)) + affecting.take_damage(damage, 0) + else + src.show_message("\red You have been protected from a hit to the head.") + return + if (damage > 4.9) + if (src.weakened < 10) + src.weakened = rand(10, 15) + for(var/O as mob in viewers(M, null)) + O.show_message(text("\red [] has weakened []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(820) + affecting.take_damage(damage) + else + if (def_zone == "chest") + if ((((src.wear_suit && src.wear_suit.brute_protect & 2) || (src.w_uniform && src.w_uniform.brute_protect & 2)) && prob(85))) + src.show_message("\red You have been protected from a hit to the cheast.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 5) + src.weakened = 5 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has knocked down []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(993) + else + if (src.stunned < 5) + src.stunned = 5 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has stunned []!", M, src), 1) + //Foreach goto(1063) + src.stat = 1 + affecting.take_damage(damage) + else + if (def_zone == "diaper") + if ((((src.wear_suit && src.wear_suit.brute_protect & 4) || (src.w_uniform && src.w_uniform.brute_protect & 4)) && prob(75))) + src.show_message("\red You have been protected from a hit to the lower chest/diaper.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 3) + src.weakened = 3 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has knocked down []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(1239) + else + if (src.stunned < 3) + src.stunned = 3 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has stunned []!", M, src), 1) + //Foreach goto(1309) + src.stat = 1 + affecting.take_damage(damage) + else + affecting.take_damage(damage) + src.UpdateDamageIcon() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has attempted to punch []!", M, src), 1) + //Foreach goto(1419) + return + else + if (!( src.lying )) + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/randn = rand(1, 100) + if (randn <= 25) + src.weakened = 2 + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has pushed down []!", M, src), 1) + //Foreach goto(1529) + else + if (randn <= 60) + src.drop_item() + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has disarmed []!", M, src), 1) + //Foreach goto(1596) + else + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has attempted to disarm []!", M, src), 1) + //Foreach goto(1643) + return + +/mob/human/Topic(href, href_list) + + if ((src == usr && !( src.start ))) + if (findtext(href, "occ", 1, null)) + if (findtext(href, "cancel", 1, null)) + usr << browse(null, text("window=\ref[]occupation", src)) + return + if (!( findtext(href, "job", 1, null) )) + src.SetChoices(text2num(href_list["occ"])) + else + src.SetJob(arglist(list("occ" = text2num(href_list["occ"]), "job" = href_list["job"]))) + else + if (findtext(href, "rname", 1, null)) + var/t1 = href_list["rname"] + if (t1 == "input") + t1 = input("Please select a name:", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + if (length(t1) >= 26) + t1 = copytext(t1, 1, 26) + t1 = dd_replacetext(t1, ">", "'") + src.rname = t1 + else + if (findtext(href, "age", 1, null)) + var/t1 = href_list["age"] + if (t1 == "input") + t1 = input("Please select type in age: 20-45", "Character Generation", null, null) as num + if ((!( src.start ) && t1)) + src.age = max(min(round(text2num(t1)), 45), 20) + else + if (findtext(href, "b_type", 1, null)) + var/t1 = href_list["b_type"] + if (t1 == "input") + t1 = input("Please select a blood type:", "Character Generation", null, null) as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) + if ((!( src.start ) && t1)) + src.b_type = t1 + else + if (findtext(href, "nr_hair", 1, null)) + var/t1 = href_list["nr_hair"] + if (t1 == "input") + t1 = input("Please select red hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.nr_hair = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "ng_hair", 1, null)) + var/t1 = href_list["ng_hair"] + if (t1 == "input") + t1 = input("Please select green hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.ng_hair = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "nb_hair", 1, null)) + var/t1 = href_list["nb_hair"] + if (t1 == "input") + t1 = input("Please select blue hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.nb_hair = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "r_eyes", 1, null)) + var/t1 = href_list["r_eyes"] + if (t1 == "input") + t1 = input("Please select red eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.r_eyes = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "ns_tone", 1, null)) + var/t1 = href_list["ns_tone"] + if (t1 == "input") + t1 = input("Please select skin tone level: 1-220 (1=albino,35=caucasian, 150=black220='very' black)", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.ns_tone = max(min(round(text2num(t1)), 220), 1) + src.ns_tone = -src.ns_tone + 35 + else + if (findtext(href, "g_eyes", 1, null)) + var/t1 = href_list["g_eyes"] + if (t1 == "input") + t1 = input("Please select green eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.g_eyes = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "b_eyes", 1, null)) + var/t1 = href_list["b_eyes"] + if (t1 == "input") + t1 = input("Please select blue eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.b_eyes = max(min(round(text2num(t1)), 255), 1) + else + if (findtext(href, "h_style", 1, null)) + var/t1 = href_list["h_style"] + if (t1 == "input") + t1 = input("Please select hair style", "Character Generation", null, null) as null|anything in list( "Cut Hair", "Short Hair (M)", "Long Hair (F)", "Bald" ) + if ((!( src.start ) && t1)) + src.h_style = t1 + switch(t1) + if("Short Hair (M)") + src.h_style_r = "hair_a" + if("Long Hair (F)") + src.h_style_r = "hair_b" + if("Cut Hair") + src.h_style_r = "hair_c" + else + src.h_style_r = "bald" + else + if (findtext(href, "gender", 1, null)) + if (src.gender == "male") + src.gender = "female" + else + src.gender = "male" + src.stand_icon = new /icon( 'human.dmi', text("[]", src.gender) ) + src.lying_icon = new /icon( 'human.dmi', text("[]-d", src.gender) ) + else + if (findtext(href, "n_gl", 1, null)) + src.need_gl = !( src.need_gl ) + else + if (findtext(href, "b_ep", 1, null)) + src.be_epil = !( src.be_epil ) + else + if (findtext(href, "b_tur", 1, null)) + src.be_tur = !( src.be_tur ) + else + if (findtext(href, "b_co", 1, null)) + src.be_cough = !( src.be_cough ) + else + if (findtext(href, "b_stut", 1, null)) + src.be_stut = !( src.be_stut ) + else + if (findtext(href, "save", 1, null)) + var/savefile/F = new /savefile( text("players/[].sav", src.ckey) ) + F["version"] << savefile_ver + F["rname"] << src.rname + F["gender"] << src.gender + F["age"] << src.age + F["occupation1"] << src.occupation1 + F["occupation2"] << src.occupation2 + F["occupation3"] << src.occupation3 + F["nr_hair"] << src.nr_hair + F["ng_hair"] << src.ng_hair + F["nb_hair"] << src.nb_hair + F["ns_tone"] << src.ns_tone + F["h_style"] << src.h_style + F["h_style_r"] << src.h_style_r + F["r_eyes"] << src.r_eyes + F["g_eyes"] << src.g_eyes + F["b_eyes"] << src.b_eyes + F["b_type"] << src.b_type + F["need_gl"] << src.need_gl + F["be_epil"] << src.be_epil + F["be_tur"] << src.be_tur + F["be_cough"] << src.be_cough + F["be_stut"] << src.be_stut + else + if (findtext(href, "load", 1, null)) + if (fexists(text("players/[].sav", src.ckey))) + var/savefile/F = new /savefile( text("players/[].sav", src.ckey) ) + var/test = null + F["version"] >> test + if (test != savefile_ver) + fdel(text("players/[].sav", src.ckey)) + alert("Your savefile was incompatible with this version and was deleted.", null, null, null, null, null) + return + F["rname"] >> src.rname + F["gender"] >> src.gender + F["age"] >> src.age + F["occupation1"] >> src.occupation1 + F["occupation2"] >> src.occupation2 + F["occupation3"] >> src.occupation3 + F["nr_hair"] >> src.nr_hair + F["ng_hair"] >> src.ng_hair + F["nb_hair"] >> src.nb_hair + F["ns_tone"] >> src.ns_tone + F["h_style"] >> src.h_style + F["h_style_r"] >> src.h_style_r + F["r_eyes"] >> src.r_eyes + F["g_eyes"] >> src.g_eyes + F["b_eyes"] >> src.b_eyes + F["b_type"] >> src.b_type + F["need_gl"] >> src.need_gl + F["be_epil"] >> src.be_epil + F["be_tur"] >> src.be_tur + F["be_cough"] >> src.be_cough + F["be_stut"] >> src.be_stut + else + alert("You do not have a savefile.", null, null, null, null, null) + src.ShowChoices() + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + if ((href_list["item"] && (!( usr.stat ) && (usr.canmove && (!( usr.restrained() ) && get_dist(src, usr) <= 1))))) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = usr + O.target = src + O.item = usr.equipped() + O.s_loc = usr.loc + O.t_loc = src.loc + O.place = href_list["item"] + src.requests += O + spawn( 0 ) + O.process() + return + ..() + return + +/mob/human/show_inv(user as mob) + + user.machine = src + var/dat = text("
\n[]\n\tHead(Mask): []\n\t\tHeadset: []\n\tLeft Hand: []\n\tRight Hand: []\n\tGloves: []\n\tEyes: []\n\tEars: []\n\tHead: []\n\tShoes: []\n\tBelt: []\n\tUniform: []\n\t(Exo)Suit: []\n\tBack: [] []\n\tID: []\n\t[]\n\t[]\n\tEmpty Pockets\nClose\n
", src.name, src, (src.wear_mask ? text("[]", src.wear_mask) : "Nothing"), src, (src.w_radio ? text("[]", src.w_radio) : "Nothing"), src, (src.l_hand ? text("[]", src.l_hand) : "Nothing"), src, (src.r_hand ? text("[]", src.r_hand) : "Nothing"), src, (src.gloves ? text("[]", src.gloves) : "Nothing"), src, (src.glasses ? text("[]", src.glasses) : "Nothing"), src, (src.ears ? text("[]", src.ears) : "Nothing"), src, (src.head ? text("[]", src.head) : "Nothing"), src, (src.shoes ? text("[]", src.shoes) : "Nothing"), src, (src.belt ? text("[]", src.belt) : "Nothing"), src, (src.w_uniform ? text("[]", src.w_uniform) : "Nothing"), src, (src.wear_suit ? text("[]", src.wear_suit) : "Nothing"), src, (src.back ? text("[]", src.back) : "Nothing"), ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && (istype(src.back, /obj/item/weapon/tank) && !( src.internal ))) ? text(" Set Internal", src) : ""), src, (src.wear_id ? text("[]", src.wear_id) : "Nothing"), (src.handcuffed ? text("Handcuffed", src) : text("Not Handcuffed", src)), (src.internal ? text("Remove Internal", src) : ""), src, user, src.name) + user << browse(dat, text("window=mob[];size=300x600", src.name)) + return + +/mob/proc/show_message(msg, type, alt, alt_type) + + if (type) + if ((type & 1 && (src.sdisabilities & 1 || (src.blinded || src.paralysis)))) + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & 2 && (src.sdisabilities & 4 || src.ear_deaf))) + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & 1 && src.sdisabilities & 1)) + return + src << msg + return + +/mob/proc/findname(msg) + + for(var/M as mob in world) + if (M.rname == text("[]", msg)) + return 1 + //Foreach goto(15) + return 0 + return + +/mob/proc/m_delay() + + return + +/mob/proc/Life() + + return + +/mob/proc/UpdateClothing() + + return + +/mob/proc/death() + + src.timeofdeath = world.time + return ..() + return + +/mob/proc/restrained() + + if (src.handcuffed) + return 1 + return + +/mob/proc/db_click(text, t1) + + var/W = src.equipped() + switch(text) + if("mask") + if (src.wear_mask) + return + if (!( istype(W, /obj/item/weapon/clothing/mask) )) + return + src.u_equip(W) + src.wear_mask = W + if("back") + if ((src.back || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 1 )) + return + src.u_equip(W) + src.back = W + else + return + +/mob/proc/throw_item() + + var/W = src.equipped() + if (W) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (usr.stat) + return + W.loc = src.loc + if (istype(W, /obj/item/weapon/grab)) + throw() + else + dropped(src) + if (W) + W.layer = W.initial(W.layer) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has thrown [].", src, W), 1) + //Foreach goto(133) + W.density = 1 + W.throwing = 1 + W.throwspeed = initial(W.throwspeed) + spawn( 0 ) + W.throwing(src.dir) + return + return + +/mob/proc/swap_hand() + + src.hand = !( src.hand ) + if (!( src.hand )) + src.hands.dir = NORTH + else + src.hands.dir = SOUTH + return + +/mob/proc/drop_item_v() + + if (src.stat == 0) + src.drop_item() + return + +/mob/proc/throw_item_v() + + if (src.stat == 0) + throw_item() + return + +/mob/proc/drop_item() + + var/W = src.equipped() + if (W) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + dropped(src) + if (W) + W.layer = initial(W.layer) + return + +/mob/proc/reset_view(A as mob|obj) + + if (src.client) + if (istype(A, /atom/movable)) + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = A + else + if (isturf(src.loc)) + src.eye = src.client.mob + src.client.perspective = MOB_PERSPECTIVE + else + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = src.loc + return + +/mob/proc/who() + set category = "Admin" + + var/total = 0 + usr << "Current Players:" + for(var/M as mob in world) + if (M.client) + total++ + usr << text("\t [] ([])", M, M.client) + //Foreach goto(32) + usr << text("Total Players: []", total) + return + +/mob/proc/list_dna() + set category = "Admin" + + usr << "Registered DNA sequences:" + for(var/M in reg_dna) + usr << text("\t [] = []", M, reg_dna[text("[]", M)]) + //Foreach goto(26) + return + +/mob/proc/equipped() + + if (src.hand) + return src.l_hand + else + return src.r_hand + return + +/mob/proc/show_inv(user as mob) + + user.machine = src + var/dat = text("\n[]
\n\tHead(Mask): []
\n\tLeft Hand: []
\n\tRight Hand: []
\n\tBack: []
\n\t[]
\n\t[]
\n\t[]
\n\tEmpty Pockets
\nClose
\n
", src.name, src, (src.wear_mask ? text("[]", src.wear_mask) : "Nothing"), src, (src.l_hand ? text("[]", src.l_hand) : "Nothing"), src, (src.r_hand ? text("[]", src.r_hand) : "Nothing"), src, (src.back ? text("[]", src.back) : "Nothing"), ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && (istype(src.back, /obj/item/weapon/tank) && !( src.internal ))) ? text(" Set Internal", src) : ""), (src.internal ? text("Remove Internal", src) : ""), (src.handcuffed ? text("Handcuffed", src) : text("Not Handcuffed", src)), src, user, src.name) + user << browse(dat, text("window=mob[]", src.name)) + return + +/mob/proc/u_equip(W as obj) + + if (W == src.r_hand) + src.r_hand = null + else + if (W == src.l_hand) + src.l_hand = null + else + if (W == src.handcuffed) + src.handcuffed = null + else + if (W == src.back) + src.back = null + else + if (W == src.wear_mask) + src.wear_mask = null + return + +/mob/proc/toggle_ooc() + set category = "Admin" + + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + return + +/mob/proc/toggle_abandon() + set category = "Admin" + + abandon_allowed = !( abandon_allowed ) + if (abandon_allowed) + world << "You may now abandon mob." + else + world << "Live or Die Mode Activated" + world.update_stat() + return + +/mob/proc/toggle_enter() + set category = "Admin" + + enter_allowed = !( enter_allowed ) + if (enter_allowed) + world << "You may enter the game." + else + world << "You may no longer enter the game." + world.update_stat() + return + +/mob/proc/toggle_shuttle() + set category = "Admin" + + shuttle_frozen = !( shuttle_frozen ) + if (shuttle_frozen) + world << "The shuttle count is now FROZEN!" + else + world << "The shuttle has been thawed." + return + +/mob/proc/show_ctf() + set category = "Admin" + + if (ticker) + usr << "Too late... The game has already started!" + return + else + if (!( ctf )) + ctf = new /obj/ctf_assist( ) + ctf.show_screen(usr) + return + +/mob/proc/delay_start() + set category = "Admin" + + if (ticker) + usr << "Too late... The game has already started!" + return + else + if (alert(usr, "Would you like to delay game start?", "Delay Start", "Yes", "No", null) == "Yes") + going = null + world << text("The game start has been delayed by [] (Administrator to SS13)", usr.key) + usr << alert("Don't forgot to revoke the delay by selecting No!", null, null, null, null, null) + else + world << text("The game will now start thanks to [] (Administrator to SS13)", usr.key) + going = 1 + return + +/mob/proc/mute(M as mob in world) + set category = "Admin" + + M.muted = !( M.muted ) + usr << text("[]'s chat status is now [].", M, (M.muted ? "muted" : "voiced")) + return + +/mob/proc/change_name(M as mob in world, t as text) + set category = "Admin" + + usr << text("[]'s default name is now [] !", M, t) + M.rname = t + return + +/mob/proc/show_help(M as mob in world) + set category = "Admin" + + M << browse('help.htm', "window=help") + return + +/mob/proc/changemessage(txt as text) + set category = "Admin" + + world_message = text("[]: []", src.key, txt) + world << text("\blue []", world_message) + return + +/mob/proc/changemode() + set category = "Admin" + + if (ticker) + return + var/temp = input("Please select a mode", "Game Mode", null, null) in list( "secret", "traitor", "nuclear", "meteor", "extended", "monkey" ) + master_mode = temp + return + +/mob/proc/boot(M as mob in world, txt as text) + set category = "Admin" + + if ((M && (M.client && txt))) + M.client = null + del(M.client) + return + +/mob/proc/ban(M as mob in world, txt as text) + set category = "Admin" + + if ((M && (M.client && txt))) + banned += M.ckey + M.client = null + del(M.client) + return + +/mob/proc/unban() + set category = "Admin" + + var/t = input(usr, "Unban who?", null, null) as null|anything in banned + banned -= t + return + +/mob/proc/make_gift() + set category = "Admin" + + new /obj/item/weapon/a_gift( src.loc ) + return + +/mob/proc/make_pill() + set category = "Admin" + + new /obj/item/weapon/m_pill/superpill( src.loc ) + return + +/mob/proc/make_flag() + set category = "Admin" + + var/color = input("Please select a color", null, null, null) in list( "red", "blue", "green", "yellow", "black", "white", "neutral" ) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( src.loc ) + F.icon_state = text("flag_[]", color) + return + +/mob/proc/restart() + set category = "Admin" + + world << "\green Restarting world!" + sleep(50) + world.Reboot() + return + +/mob/proc/monkey(M as mob in world) + set category = "Admin" + set hidden = 1 + + for(var/obj/O as obj in M) + O = null + del(O) + //Foreach goto(20) + var/mob/monkey/O = new /mob/monkey( M.loc ) + M.client.mob = O + O.loc = M.loc + M = null + del(M) + return + +/mob/proc/toggle_alter() + set category = "Admin" + + if (src.verbs.Find(/mob/proc/carboncopy)) + src.verbs -= /mob/proc/carboncopy + else + src.verbs -= /mob/proc/carboncopy + src.verbs += /mob/proc/carboncopy + return + +/mob/proc/carboncopy(O as mob|obj in world) + + var/M = O + if ((istype(M, /mob) && M.key)) + usr << "You can't duplicate PCs' mobs." + return + var/new_O = new O.type( usr.loc ) + for(var/V in O.vars) + if (issaved(O.vars[V])) + new_O.vars[V] = O.vars[V] + //Foreach goto(72) + return + +/mob/proc/secrets(pass as text) + set category = "Admin" + + switch(pass) + if("sec_clothes") + for(var/obj/item/weapon/clothing/under/O as obj in world) + O = null + del(O) + //Foreach goto(52) + if("sec_all_clothes") + for(var/obj/item/weapon/clothing/O as obj in world) + O = null + del(O) + //Foreach goto(97) + if("sec_classic1") + for(var/obj/item/weapon/clothing/suit/firesuit/O as obj in world) + O = null + del(O) + //Foreach goto(142) + for(var/obj/grille/O as obj in world) + O = null + del(O) + //Foreach goto(185) + for(var/obj/machinery/pod/O as obj in world) + O = null + del(O) + //Foreach goto(228) + if("clear_bombs") + for(var/obj/item/weapon/assembly/r_i_ptank/O as obj in world) + O = null + del(O) + //Foreach goto(273) + if("dissimulate_aspect") + usr.invisibility = !( usr.invisibility ) + usr.sight |= SEE_SELF + world << text("\red [] manipulates the visible plane.", usr) + if("teleport") + var/M = input("Who do you wish to goto?", null, null, null) as mob|null in world + if (!( ismob(M) )) + return + else + src.loc = M.loc + world << text("\red [] teleports to []!", usr, M) + if("summon") + var/M = input("Who do you wish to summon?", null, null, null) as mob|null in world + if (!( ismob(M) )) + return + else + M.loc = src.loc + world << text("\red [] summons []!", usr, M) + if("list_bombers") + usr << "\blue Don't be insane about this lsit Get the facts." + for(var/l in bombers) + usr << text("[] 'made' a bomb.", l) + //Foreach goto(476) + if("check_antagonist") + if (ticker) + if (ticker.killer) + if (ticker.killer.ckey) + usr << text("The traitor's key is [].", ticker.ckey) + else + usr << "It seems like the traitor logged out..." + else + usr << "There is no traitor." + else + usr << "The game has not started yet." + else + return + +/mob/proc/ret_grab(L as obj, flag) + + if ((!( istype(src.l_hand, /obj/item/weapon/grab) ) && !( istype(src.r_hand, /obj/item/weapon/grab) ))) + if (!( L )) + return null + else + return L.container + else + if (!( L )) + L = new /obj/list_container/mobl( null ) + L.container += src + L.master = src + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/G = src.l_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + G.affecting.ret_grab(L, 1) + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/G = src.r_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + G.affecting.ret_grab(L, 1) + if (!( flag )) + if (L.master == src) + var/list/temp = list( ) + temp += L.container + L = null + del(L) + return temp + else + return L.container + return + +/mob/verb/mode() + set src = usr + + var/W = src.equipped() + if (W) + W.attack_self(src) + return + +/mob/verb/dump_source() + + var/master = "
"
+	for(var/t in typesof(/area))
+		master += text("[]\n", t)
+		//Foreach goto(26)
+	src << browse(master)
+	return
+
+/mob/verb/memory()
+
+	src << browse(text("Memory::
[]", src.memory), "window=memory") + return + +/mob/verb/add_memory(msg as message) + + src.memory += text("[]
", msg) + src << browse(text("Memory::
[]", src.memory), "window=memory") + return + +/mob/verb/help() + + src << browse('help.htm', "window=help") + return + +/mob/verb/abandon_mob() + + if (!( abandon_allowed )) + return + if ((src.stat != 2 || !( ticker ))) + usr << "\blue You must be dead to use this!" + return + usr << "\blue Please roleplay correctly!" + for(var/obj/screen/t as obj in usr.client.screen) + if (t.loc == null) + t = null + del(t) + //Foreach goto(66) + var/mob/human/M = new /mob/human( ) + M.key = src.client.key + return + +/mob/verb/changes() + + src << browse(text("
[]
", changes), "window=changes") + return + +/mob/verb/succumb() + set hidden = 1 + + if ((src.health < 0 && src.health > -95.0)) + src.oxyloss += src.health + 99 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + usr << "\blue You have given up life and succumbed to death." + return + +/mob/verb/say() + + return + +/mob/verb/observe() + + if (src.stat != 2) + usr << "\blue You must be dead to use this!" + return + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = input("Please, select a player!", "Watch", null, null) as mob in world + return + +/mob/verb/listen_ooc() + + if (src.client) + src.listen_ooc = !( src.client.listen_ooc ) + if (src.client.listen_ooc) + src << "\blue You are now listening to messages on the OOC channel. Don't abuse this!" + else + src << "\blue You are no longer listening to messages on the OOC channel." + return + +/mob/verb/ooc(msg as text) + + msg = html_encode(copytext(msg, 1, 128)) + if (!( msg )) + return + if ((ooc_allowed && !( src.muted ))) + for(var/M as mob in world) + if ((M.client && M.client.listen_ooc)) + M << text("OOC: []: []", src.key, msg) + //Foreach goto(54) + return + +/mob/verb/switch_hud() + + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + if (src.hud_used == main_hud) + src.hud_used = main_hud2 + src.oxygen.icon = 'screen.dmi' + src.toxin.icon = 'screen.dmi' + src.internals.icon = 'screen.dmi' + src.mach.icon = 'screen.dmi' + src.fire.icon = 'screen.dmi' + src.healths.icon = 'screen.dmi' + src.pullin.icon = 'screen.dmi' + src.blind.icon = 'screen.dmi' + src.hands.icon = 'screen.dmi' + src.flash.icon = 'screen.dmi' + src.sleep.icon = 'screen.dmi' + src.rest.icon = 'screen.dmi' + else + src.hud_used = main_hud + src.oxygen.icon = 'screen1.dmi' + src.toxin.icon = 'screen1.dmi' + src.internals.icon = 'screen1.dmi' + src.mach.icon = 'screen1.dmi' + src.fire.icon = 'screen1.dmi' + src.healths.icon = 'screen1.dmi' + src.pullin.icon = 'screen1.dmi' + src.blind.icon = 'screen1.dmi' + src.hands.icon = 'screen1.dmi' + src.flash.icon = 'screen1.dmi' + src.sleep.icon = 'screen1.dmi' + src.rest.icon = 'screen1.dmi' + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + return + +/mob/Login() + + src.sight |= SEE_SELF + ..() + return + +/mob/CheckPass(M as mob) + + if ((src.other_mobs && (ismob(M) && M.other_mobs))) + return 1 + else + return (!( M.density ) || (!( src.density ) || src.lying)) + return + +/mob/burn(fi_amount) + + for(var/atom/movable/A as mob|obj in src) + A.burn(fi_amount) + //Foreach goto(15) + return + +/mob/Topic(href, href_list) + + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + ..() + return + +/mob/MouseDrop(M as mob) + + ..() + if ((M != usr || (usr == src || get_dist(usr, src) > 1))) + return + src.show_inv(usr) + return + +/mob/las_act(flag) + + if (flag == "bullet") + if (src.stat != 2) + if (istype(src, /mob/human)) + var/H = src + var/dam_zone = pick("chest", "chest", "chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(51, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + H.bruteloss += 51 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(80)) + src.weakened = 2 + if (flag) + if (prob(75)) + src.stunned = 10 + else + src.weakened = 10 + else + if (src.stat != 2) + if (istype(src, /mob/human)) + var/H = src + var/dam_zone = pick("chest", "chest", "chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(20, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + H.bruteloss += 20 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(25)) + src.stunned = 2 + return + +/mob/ghost/proc/infest() + + return + +/mob/ghost/Move() + + if (src.stunned) + return + . = ..() + return + +/mob/ghost/show_inv() + + return + return + +/mob/ghost/Bump() + + return + return + +/mob/ghost/UpdateClothing() + + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(17) + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'ghost.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = src.layer)) + src.wear_mask.screen_loc = "2,3" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = src.layer)) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = src.layer)) + src.l_hand.screen_loc = "3,2" + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + return + +/mob/ghost/Life() + + if (src.stat == 2) + death() + return + src.canmove = 1 + src.lying = 1 + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.icon_state = "ghost" + else + src.icon_state = "blank" + if (src.stunned > 0) + src.stunned-- + src.canmove = 0 + for(var/obj/item/O as obj in src) + O.loc = src.loc + O.layer = initial(O.layer) + src.u_equip(O) + //Foreach goto(109) + if (src.health < 0) + src.stat = 2 + return + return + +/mob/ghost/db_click() + + return + return + +/mob/ghost/equipped() + + return null + return + +/mob/ghost/m_delay() + + return -100.0 + return + +/mob/ghost/reset_view() + + if (src.client) + src.client.eye = src + else + return ..() + return + +/mob/ghost/las_act() + + return + return + +/mob/ghost/ex_act() + + return + return + +/mob/ghost/attack_hand(M as mob) + + src.infest(M) + return + +/mob/ghost/attack_paw(M as mob) + + src.infest(M) + return + +/mob/ghost/death() + + src.stunned = 1 + ..() + return + +/mob/ghost/meteorhit() + + return + return + +/mob/ghost/restrained() + + return 0 + return + +/mob/ghost/attackby(nothing, M as mob) + + src.infest(M) + return 0 + return + +/mob/ghost/say(msg as text) + + if (!( msg )) + return + msg = stutter(msg) + if (prob(25)) + msg = stars(msg) + for(var/M as mob in hearers(null, null)) + M.show_message(msg, 2) + //Foreach goto(58) + return + +/mob/monkey/New() + + spawn( 50 ) + if (!( src.primary )) + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + src.primary = new /obj/dna( null ) + src.primary.uni_identity = text("[]", dna_ident) + while(length(src.primary.uni_identity) < 4) + src.uni_identity = text("0[]", src.uni_identity) + var/t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = (src.gender == "male" ? text("[]", rand(1, 124)) : text("[]", rand(127, 250))) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + src.primary.spec_identity = "2B6696D2B127E5A4" + src.primary.struc_enzyme = "CDEAF5B90AADBC6BA8033DB0A7FD613FA" + src.primary.use_enzyme = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61" + src.primary.n_chromo = 16 + src.name = text("monkey ([])", copytext(md5(src.primary.uni_identity), 2, 6)) + return + ..() + return + +/mob/monkey/Bump(AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || src.now_pushing)) + return + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( src.now_pushing )) + src.now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + step(AM, t) + src.now_pushing = null + return + return + +/mob/monkey/Topic(href, href_list) + + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + if ((href_list["item"] && (!( usr.stat ) && (!( restrained() ) && get_dist(src, usr) <= 1)))) + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = usr + O.target = src + O.item = usr.equipped() + O.s_loc = usr.loc + O.t_loc = src.loc + O.place = href_list["item"] + src.requests += O + spawn( 0 ) + O.process() + return + ..() + return + +/mob/monkey/meteorhit(O as obj) + + for(var/M as mob in viewers(src, null)) + M.show_message(text("\red [] has been hit with by []", src, O), 1) + //Foreach goto(19) + if (src.health > 0) + var/shielded = 0 + for(var/obj/item/weapon/shield/S as obj in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(79) + src.bruteloss += 30 + if ((O.icon_state == "flaming" && !( shielded ))) + src.fireloss += 40 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + return + +/mob/monkey/las_act(flag) + + if (flag == "bullet") + if (src.stat != 2) + src.bruteloss += 60 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + src.weakened = 10 + if (flag) + if (prob(75)) + src.stunned = 15 + else + src.weakened = 15 + else + if (src.stat != 2) + src.bruteloss += 20 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(25)) + src.stunned = 1 + return + +/mob/monkey/hand_p(M as mob) + + if ((M.a_intent == "hurt" && !( istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) ))) + if ((prob(75) && src.health > 0)) + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(63) + var/damage = rand(1, 5) + src.bruteloss += damage + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(144) + return + +/mob/monkey/attack_paw(M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/O as mob in viewers(src, null)) + O.show_message("\blue The monkey shakes the monkey trying to wake him up!", 1) + //Foreach goto(47) + else + if ((O.a_intent == "hurt" && !( istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) ))) + if ((prob(75) && src.health > 0)) + for(var/O as mob in viewers(src, null)) + O.show_message("\red The monkey has bit the monkey!", 1) + //Foreach goto(130) + var/damage = rand(1, 5) + src.bruteloss += damage + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + for(var/O as mob in viewers(src, null)) + O.show_message("\red The monkey has attempted to bite the monkey!", 1) + //Foreach goto(209) + return + +/mob/monkey/attack_hand(M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\blue [] shakes the monkey trying to wake him up!", M), 1) + //Foreach goto(47) + else + if (O.a_intent == "hurt") + if ((prob(75) && src.health > 0)) + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has punched the monkey!", M), 1) + //Foreach goto(135) + var/damage = rand(5, 10) + if (prob(40)) + damage = rand(10, 15) + if (src.paralysis < 5) + src.paralysis = rand(10, 15) + spawn( 0 ) + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has knocked out the monkey!", M), 1) + //Foreach goto(248) + return + src.bruteloss += damage + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has attempted to punch the monkey!", M), 1) + //Foreach goto(336) + else + if (O.a_intent == "grab") + if (M == src) + return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M ) + G.assailant = M + if (M.hand) + M.l_hand = G + else + M.r_hand = G + G.layer = 20 + G.affecting = src + src.grabbed_by += G + G.synch() + for(var/O as mob in viewers(src, null)) + O.show_message(text("\red [] has grabbed the monkey passively!", M), 1) + //Foreach goto(502) + else + if (!( src.paralysis )) + if (prob(25)) + src.paralysis = 2 + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has pushed down the monkey!", M), 1) + //Foreach goto(571) + else + drop_item() + for(var/O as mob in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has disarmed the monkey!", M), 1) + //Foreach goto(638) + return + +/mob/monkey/Stat() + + ..() + statpanel("Status") + stat(null, text("Intent: []", src.a_intent)) + stat(null, text("Move Mode: []", src.m_intent)) + return + +/mob/monkey/UpdateClothing() + + ..() + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(21) + if (!( src.lying )) + src.icon_state = "monkey1" + else + src.icon_state = "monkey0" + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'monkey.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = src.layer)) + src.wear_mask.screen_loc = "2,3" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = src.layer)) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image(list("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = src.layer)) + src.l_hand.screen_loc = "3,2" + if (src.back) + if (!( src.lying )) + src.overlays += image(list("icon" = 'monkey.dmi', "icon_state" = "back", "layer" = src.layer)) + else + src.overlays += image(list("icon" = 'monkey.dmi', "icon_state" = "back2", "layer" = src.layer)) + src.back.screen_loc = "3,3" + if (src.handcuffed) + src.pulling = null + if (!( src.lying )) + src.overlays += image(list("icon" = 'monkey.dmi', "icon_state" = "handcuff1", "layer" = src.layer)) + else + src.overlays += image(list("icon" = 'monkey.dmi', "icon_state" = "handcuff2", "layer" = src.layer)) + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + src.client.screen -= src.hud_used.m_ints + src.client.screen -= src.hud_used.mov_int + if (src.i_select) + if (src.intent) + src.client.screen += src.hud_used.m_ints + src.i_select.screen_loc = src.intent + else + src.i_select.screen_loc = null + if (src.m_select) + if (src.m_int) + src.client.screen += src.hud_used.mov_int + src.m_select.screen_loc = src.m_int + else + src.m_select.screen_loc = null + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.show_inv(M) + return + //Foreach goto(662) + return + +/mob/monkey/Login() + + if (banned.Find(src.ckey)) + src.client = null + del(src.client) + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + if (!( src.hud_used )) + src.hud_used = main_hud + src.next_move = 1 + if (!( src.rname )) + src.rname = src.key + src.oxygen = new /obj/screen( null ) + src.i_select = new /obj/screen( null ) + src.m_select = new /obj/screen( null ) + src.toxin = new /obj/screen( null ) + src.internals = new /obj/screen( null ) + src.mach = new /obj/screen( null ) + src.fire = new /obj/screen( null ) + src.healths = new /obj/screen( null ) + src.pullin = new /obj/screen( null ) + src.blind = new /obj/screen( null ) + src.flash = new /obj/screen( null ) + src.hands = new /obj/screen( null ) + src.sleep = new /obj/screen( null ) + src.rest = new /obj/screen( null ) + ..() + UpdateClothing() + src.oxygen.icon_state = "oxy0" + src.i_select.icon_state = "selector" + src.m_select.icon_state = "selector" + src.toxin.icon_state = "toxin0" + src.internals.icon_state = "internal0" + src.mach.icon_state = null + src.fire.icon_state = "fire0" + src.healths.icon_state = "health0" + src.pullin.icon_state = "pull0" + src.blind.icon_state = "black" + src.hands.icon_state = "hand" + src.flash.icon_state = "blank" + src.sleep.icon_state = "sleep0" + src.rest.icon_state = "rest0" + src.hands.dir = NORTH + src.oxygen.name = "oxygen" + src.i_select.name = "intent" + src.m_select.name = "move" + src.toxin.name = "toxin" + src.internals.name = "internal" + src.mach.name = "Reset Machine" + src.fire.name = "fire" + src.healths.name = "health" + src.pullin.name = "pull" + src.blind.name = " " + src.hands.name = "hand" + src.flash.name = "flash" + src.sleep.name = "sleep" + src.rest.name = "rest" + src.oxygen.screen_loc = "15,12" + src.i_select.screen_loc = "14,15" + src.m_select.screen_loc = "14,14" + src.toxin.screen_loc = "15,10" + src.internals.screen_loc = "15,14" + src.mach.screen_loc = "14,1" + src.fire.screen_loc = "15,8" + src.healths.screen_loc = "15,5" + src.sleep.screen_loc = "15,3" + src.rest.screen_loc = "15,2" + src.pullin.screen_loc = "15,1" + src.hands.screen_loc = "1,3" + src.blind.screen_loc = "1,1 to 15,15" + src.flash.screen_loc = "1,1 to 15,15" + src.blind.layer = 0 + src.flash.layer = 17 + src.sleep.layer = 20 + src.rest.layer = 20 + src.client.screen.len = null + src.client.screen -= list( src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen += list( src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + src.client.screen -= src.hud_used.mon_blo + src.client.screen += src.hud_used.mon_blo + if (!( src.primary )) + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + src.primary = new /obj/dna( null ) + src.primary.uni_identity = text("[]", dna_ident) + while(length(src.primary.uni_identity) < 4) + src.uni_identity = text("0[]", src.uni_identity) + var/t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = (src.gender == "male" ? text("[]", rand(1, 124)) : text("[]", rand(127, 250))) + if (length(t2) < 2) + src.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.uni_identity = text("[][]", src.primary.uni_identity, t2) + src.primary.spec_identity = "2B6696D2B127E5A4" + src.primary.struc_enzyme = "CDEAF5B90AADBC6BA8033DB0A7FD613FA" + src.primary.use_enzyme = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61" + src.primary.n_chromo = 16 + if (!( src.start )) + if ((src.key in list( "Thief jack", "Link43130", "Hutchy2k1", "Easty", "Exadv1" ))) + src.start = 1 + src.loc = locate(36, 67, 10) + else + src.start = 1 + var/A = locate(/area/start) + var/list/L = list( ) + for(var/T as turf in A) + L += T + //Foreach goto(1473) + src.loc = pick(L) + src << browse('help.htm', "window=help") + if (((src.key in list( "Exadv1", "Expert Advisor" )) || (world.address == src.client.address || !( src.address )))) + src << text("\blue The game ip is byond://[]:[] !", world.address, world.port) + src.verbs += /mob/proc/mute + src.verbs += /mob/proc/changemessage + src.verbs += /mob/proc/boot + src.verbs += /mob/proc/changemode + src.verbs += /mob/proc/show_ctf + src.verbs += /mob/proc/restart + src.verbs += /mob/proc/who + src.verbs += /mob/proc/change_name + src.verbs += /mob/proc/show_help + src.verbs += /mob/proc/toggle_ooc + src.verbs += /mob/proc/toggle_abandon + src.verbs += /mob/proc/toggle_enter + src.verbs += /mob/proc/toggle_shuttle + src.verbs += /mob/proc/delay_start + src.verbs += /mob/proc/make_gift + src.verbs += /mob/proc/make_flag + src.verbs += /mob/proc/make_pill + src.verbs += /mob/proc/ban + src.verbs += /mob/proc/unban + src.verbs += /mob/proc/secrets + src.verbs += /mob/proc/toggle_alter + src.verbs += /mob/proc/carboncopy + src.verbs += /mob/proc/list_dna + src << text("\blue []", world_message) + if (!( isturf(src.loc) )) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + src.name = text("monkey ([])", copytext(md5(src.primary.uni_identity), 2, 6)) + return + +/mob/monkey/Move() + + if ((!( src.buckled ) || src.buckled.loc != src.loc)) + src.buckled = null + if (src.buckled) + return + if (src.restrained()) + src.pulling = null + var/t7 = 1 + if (src.restrained()) + for(var/M as mob in range(src, 1)) + if ((M.pulling == src && (M.stat == 0 && !( restrained() )))) + return 0 + //Foreach goto(93) + if ((t7 && (src.pulling && get_dist(src, src.pulling) <= 1))) + if (src.pulling.anchored) + src.pulling = null + var/T = src.loc + . = ..() + if (!( isturf(src.pulling.loc) )) + src.pulling = null + return + if (!( src.restrained() )) + var/diag = get_dir(src, src.pulling) + if ((diag - 1) & diag) + else + diag = null + if ((ismob(src.pulling) && (get_dist(src, src.pulling) > 1 || diag))) + if (istype(src.pulling, src.type)) + var/M = src.pulling + var/t = M.pulling + M.pulling = null + step(src.pulling, get_dir(src.pulling.loc, T)) + M.pulling = t + else + step(src.pulling, get_dir(src.pulling.loc, T)) + else + src.pulling = null + . = ..() + if ((src.s_active && !( src.contents.Find(src.s_active) ))) + src.s_active.close(src) + return + +/mob/monkey/death() + + if (src.healths) + src.healths.icon_state = "health5" + src.stat = 2 + src.canmove = 0 + if (src.blind) + src.blind.layer = 0 + src.lying = 1 + src.icon_state = "dead" + for(var/M as mob in world) + if ((M.client && !( M.stat ))) + var/cancel = 1 + //Foreach goto(79) + if (!( cancel )) + world << "Everyone is dead! Resetting in 30 seconds!" + if ((ticker && ticker.timing)) + ticker.check_win() + else + spawn( 300 ) + world.Reboot() + return + return ..() + return + +/mob/monkey/Life() + set invisibility = 0 + set background = 1 + + var/T = src.loc + if (!( locate(/obj/table, src.loc) )) + src.layer = MOB_LAYER + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.stat != 2) + src.t_sl_gas = 0 + src.t_n2 = 0 + if (!( src.m_flag )) + src.last_move = null + src.m_flag = null + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = null + if ((src.internal && !( src.contents.Find(src.internal) ))) + src.internal = null + if ((!( src.wear_mask ) || !( src.wear_mask.flags | 8 ))) + src.internal = null + if (istype(T, /turf)) + var/t = 1.4E-4 + if (src.health < 20) + t = 5.0E-5 + else + if (src.health < 40) + t = 1.0E-4 + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = (((T.oxygen + T.poison) + T.sl_gas) + T.co2) + T.n2 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.maximum = 10000 + if (src.internal) + src.internal.process(src, G) + if (src.wear_mask.flags & 4) + turf_add(T, G.tot_gas() * 0.5) + turf_take(T, ((t / 2) * turf_total) - tot_gas()) + else + G.turf_take(T, t * turf_total) + src.aircheck(G) + var/plcheck = src.t_plasma + var/oxcheck = src.t_oxygen + turf_add(T, G.tot_gas()) + var/ficheck = src.firecheck(T) + else + if (istype(T, /obj)) + var/O = T + O.alter_health(src) + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + var/layers = 20 + if ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && (!( src.wear_mask.flags & 4 ) && src.flags & 8))) + layers -= 5 + if (layers > oxcheck) + oxcheck = layers + if ((plcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.toxloss += plcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + src.toxloss += plcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if ((oxcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.oxyloss += oxcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + src.oxyloss += oxcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + if (src.health >= 0) + if (src.oxyloss >= 10) + var/amount = max(0.15, 1) + src.oxyloss -= amount + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + else + src.oxyloss = 0 + if (ficheck) + src.fireloss += ficheck * 10 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (src.health <= -100.0) + death() + else + if ((src.sleeping || src.health < 0)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + src.emote("gasp") + return + else + spawn( 0 ) + src.emote("snore") + return + if (src.health < 0) + if (src.rejuv <= 0) + src.oxyloss++ + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + src.stat = 1 + if (src.paralysis < 5) + src.paralysis = 5 + else + if (src.resting) + if (src.weakened < 5) + src.weakened = 5 + else + if (src.health < 20) + if (prob(5)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + src.emote("gasp") + return + src.stat = 1 + if (src.paralysis < 2) + src.paralysis = 2 + if (src.rejuv > 0) + src.rejuv-- + if (src.r_epil > 0) + src.r_epil-- + if (src.r_ch_cou > 0) + src.r_ch_cou-- + if (src.r_Tourette > 0) + src.r_Tourette-- + if (src.antitoxs > 0) + src.antitoxs-- + if (src.plasma > 0) + src.antitoxs -= 4 + if (src.plasma > 0) + src.plasma-- + src.blinded = null + if (src.drowsyness > 0) + src.drowsyness-- + if (src.paralysis > 1) + src.drowsyness -= 0.5 + else + if (src.weakened > 1) + src.drowsyness -= 0.25 + src.eye_blurry = max(2, src.eye_blurry) + if (prob(5)) + src.sleeping = 1 + src.paralysis = 5 + if ((src.health > -10.0 && src.drowsyness > 1200)) + if (src.antitoxs < 1) + src.toxloss += plcheck + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + var/mental_danger = 0 + if (((src.r_epil > 0 && !( src.disabilities & 2 )) || (src.r_Tourette > 0 && !( src.disabilities & 8 )))) + src.stuttering = max(2, src.drowsyness) + mental_danger = 1 + src.drowsyness = max(2, src.drowsyness) + if (!( src.paralysis )) + if (prob(5)) + src << "\red You have a seizure!" + src.paralysis = 10 + else + if (prob(5)) + spawn( 0 ) + src.emote("twitch") + return + src.stunned = 10 + else + if (prob(30)) + spawn( 0 ) + src.emote("drool") + return + if (src.health > -10.0) + var/threshold = 45 + if (mental_danger) + threshold = 15 + if (src.r_ch_cou > 2700) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + src.emote("twitch") + src.stunned = 2 + return + if (src.r_epil > (threshold * 60)) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + src.emote("twitch") + src.stunned = 2 + return + if (src.r_Tourette > (threshold * 60)) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + src.emote("twitch") + src.stunned = 2 + return + if (src.antitoxs > 7200) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + src.emote("drool") + return + if (src.health > -50.0) + if (src.plasma > 0) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + src.emote("moan") + return + if (src.stat != 2) + if (((src.paralysis + src.stunned) + src.weakened) > 0) + if (src.stunned > 0) + src.stunned-- + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.lying = 1 + src.stat = 0 + if (src.paralysis > 0) + src.paralysis-- + src.blinded = 1 + src.lying = 1 + src.stat = 1 + src.canmove = 0 + var/h = src.hand + src.hand = 0 + drop_item() + src.hand = 1 + drop_item() + src.hand = h + else + src.canmove = 1 + src.lying = 0 + src.stat = 0 + else + src.lying = 1 + src.blinded = 1 + src.stat = 2 + src.canmove = 0 + var/add_weight = 0 + if (istype(src.l_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (istype(src.r_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (locate(/obj/item/weapon/grab, src.grabbed_by)) + var/a_grabs = 0 + for(var/obj/item/weapon/grab/G as obj in src.grabbed_by) + G.process() + if (G) + if (G.state > 1) + a_grabs++ + if ((G.state > 2 && src.loc == G.assailant.loc)) + src.density = 0 + src.lying = 0 + switch(G.assailant.dir) + if(1.0) + src.pixel_y = 8 + if(2.0) + src.pixel_y = -8.0 + if(4.0) + src.pixel_x = 8 + if(8.0) + src.pixel_x = -8.0 + else + //Foreach goto(2333) + src.weight = ((((src.grabbed_by.len - a_grabs) / 2) + 1) * 1250000.0) + (a_grabs * 2500000.0) + else + if (src.lying) + src.weight = add_weight + 2500000.0 + else + src.weight = add_weight + 1250000.0 + if (src.stuttering > 0) + src.stuttering-- + if (src.eye_blind > 0) + src.eye_blind-- + src.blinded = 1 + if (src.ear_deaf > 0) + src.ear_deaf-- + else + if (src.ear_damage < 25) + src.ear_damage -= 0.05 + src.ear_damage = max(src.ear_damage, 0) + if (src.buckled) + src.lying = 0 + src.density = !( src.lying ) + if (src.lying) + src.weight = 5000000.0 + else + src.weight = 2500000.0 + if (src.sdisabilities & 1) + src.blinded = 1 + if (src.eye_blurry > 0) + src.eye_blurry-- + src.eye_blurry = max(0, src.eye_blurry) + if (src.client) + src.client.screen -= main_hud.g_dither + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/gasmask)) + src.client.screen += main_hud.g_dither + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = "blank" + if (src.sleep) + src.sleep.icon_state = text("sleep[]", src.sleeping) + if (src.rest) + src.rest.icon_state = text("rest[]", src.resting) + if (src.healths) + if (src.stat < 2) + if (src.health >= 100) + src.healths.icon_state = "health0" + else + if (src.health >= 75) + src.healths.icon_state = "health1" + else + if (src.health >= 50) + src.healths.icon_state = "health2" + else + if (src.health > 20) + src.healths.icon_state = "health3" + else + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + if (src.pullin) + if (src.pulling) + src.pullin.icon_state = "pull1" + else + src.pullin.icon_state = "pull0" + if (src.fire) + if (ficheck) + src.fire.icon_state = "fire1" + else + src.fire.icon_state = "fire0" + if (src.toxin) + if (plcheck) + src.toxin.icon_state = "toxin1" + else + src.toxin.icon_state = "toxin0" + if (src.oxygen) + if (oxcheck) + src.oxygen.icon_state = "oxy1" + else + src.oxygen.icon_state = "oxy0" + src.client.screen -= src.hud_used.blurry + src.client.screen -= src.hud_used.vimpaired + if ((src.blind && src.stat != 2)) + if (src.blinded) + src.blind.layer = 18 + else + src.blind.layer = 0 + if (src.eye_blurry) + src.client.screen -= src.hud_used.blurry + src.client.screen += src.hud_used.blurry + else + src.client.screen -= src.hud_used.blurry + if (src.stat != 2) + if (src.machine) + if (!( src.machine.check_eye(src) )) + src.reset_view(null) + else + reset_view(null) + else + if ((src.canmove && (prob(10) && isturf(src.loc)))) + step(src, pick(NORTH, SOUTH, EAST, WEST)) + if (prob(10)) + src.emote(pick("drool", "chimper", "scratch", "tail", "sit", "jump")) + else + if (prob(10)) + var/H = locate(/mob/human, oview(1, null)) + if (istype(H, /mob/human)) + src.a_intent = "hurt" + spawn( 0 ) + H.attack_paw(src) + return + if (src.primary) + src.primary.cleanup() + src.UpdateClothing() + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + return + +/mob/monkey/verb/removeinternal() + + src.internal = null + return + +/mob/monkey/proc/aircheck(G as obj) + + src.t_oxygen = 0 + src.t_plasma = 0 + if (G) + var/a_oxygen = G.oxygen * 0.7 + var/a_plasma = G.plasma + var/a_sl_gas = G.sl_gas * 0.7 + G.oxygen -= a_oxygen + G.plasma -= a_plasma + G.sl_gas -= a_sl_gas + if (a_oxygen < 67.032) + src.t_oxygen = round((67.032 - a_oxygen) / 5) + if (G.co2 > 5) + var/t = round((G.co2 - 5) / 5) + if (G.co2 > 25) + src.paralysis = max(src.paralysis, 3) + if (G.co2 > 50) + t = 50 + src.t_oxygen = max(src.t_oxygen, t) + if (a_plasma > 5) + src.t_plasma = (round((src.t_plasma - 5) / 10)) + 1 + if (a_sl_gas > 10) + src.weakened = max(src.weakened, 3) + if (G.co2 > 40) + src.paralysis = max(src.paralysis, 3) + G.co2 += a_oxygen * 0.6 + return + +/mob/monkey/proc/firecheck(T as turf) + + if (T.firelevel < 900000.0) + return 0 + var/total = 0 + if (src.wear_mask) + if (T.firelevel > src.wear_mask.s_fire) + total += 0.25 + else + total += 0.25 + return total + return + +/mob/monkey/proc/emote(act) + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + var/muzzled = istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) + var/m_type = 1 + switch(act) + if("sign") + if (!( restrained() )) + var/message = text("The monkey signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) + m_type = 1 + if("scratch") + if (!( restrained() )) + message = "The monkey scratches." + m_type = 1 + if("whimper") + if (!( muzzled )) + message = "The monkey whimpers." + m_type = 2 + if("roar") + if (!( muzzled )) + message = "The monkey roars." + m_type = 2 + if("tail") + message = "The monkey waves his tail." + m_type = 1 + if("gasp") + message = "The monkey gasps." + m_type = 2 + if("drool") + message = "The monkey drools." + m_type = 1 + if("paw") + if (!( restrained() )) + message = "The monkey flails his paw." + m_type = 1 + if("scretch") + if (!( muzzled )) + message = "The monkey scretches." + m_type = 2 + if("choke") + message = "The monkey chokes." + m_type = 2 + if("moan") + message = "The monkey moans!" + m_type = 2 + if("nod") + message = "The monkey nods his head." + m_type = 1 + if("sit") + message = "The monkey sits down." + m_type = 1 + if("sway") + message = "The monkey sways around dizzily." + m_type = 1 + if("sulk") + message = "The monkey sulks down sadly." + m_type = 1 + if("twitch") + message = "The monkey twitches violently." + m_type = 1 + if("dance") + if (!( restrained() )) + message = "The monkey dances around happily." + m_type = 1 + if("roll") + if (!( restrained() )) + message = "The monkey rolls." + m_type = 1 + if("shake") + message = "The monkey shakes his head." + m_type = 1 + if("gnarl") + if (!( muzzled )) + message = "The monkey gnarls and shows his teeth.." + m_type = 2 + if("jump") + message = "The monkey jumps!" + m_type = 1 + if("help") + src << "choke, dance, drool, gasp, gnarl, jump, paw, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper" + else + src << text("Invalid Emote: []", act) + if ((message && src.stat == 0)) + if (m_type & 1) + for(var/O as mob in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(703) + else + for(var/O as mob in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(746) + return + +/mob/monkey/say(message as text) + + if (src.muted) + return + message = copytext(message, 1, 128) + if (src.stat == 2) + for(var/M as mob in world) + if (M.stat == 2) + M << text("[] []: []", src, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(50) + return + if ((copytext(message, 1, 2) == "*" && !( src.stat ))) + src.emote(copytext(message, 2, length(message) + 1)) + return + if ((!( message ) || istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle))) + return + if (src.stat < 2) + var/list/L = list( ) + var/pre = copytext(message, 1, 4) + var/italics = 0 + var/obj_range = null + if (pre == "\[r\]") + message = copytext(message, 4, length(message) + 1) + if (src.r_hand) + src.r_hand.talk_into(usr, message) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + if (pre == "\[l\]") + message = copytext(message, 4, length(message) + 1) + if (src.l_hand) + src.l_hand.talk_into(usr, message) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + if (pre == "\[w\]") + message = copytext(message, 4, length(message) + 1) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + L += hearers(null, null) + pre = null + L -= src + L += src + if (italics) + message = text("[]", message) + for(var/M as mob in L) + if (istype(M, src.type)) + M.show_message(text("[]: []", src, message), 2) + else + M.show_message(text("[] chimpers.", src), 2) + //Foreach goto(503) + for(var/obj/O as obj in view(obj_range, null)) + spawn( 0 ) + if (O) + O.hear_talk(usr, message) + return + //Foreach goto(580) + for(var/M as mob in world) + if (M.stat > 1) + M << text("[] []: []", src, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(637) + return + +/mob/monkey/examine() + set src in oview() + + usr << "\blue *---------*" + usr << text("\blue This is \icon[] []!", src, src.name) + if (src.handcuffed) + usr << text("\blue \t[] is handcuffed! \icon[]", src.name, src.handcuffed) + if (src.wear_mask) + usr << text("\blue \t[] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + if (src.l_hand) + usr << text("\blue \t[] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + if (src.r_hand) + usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + if (src.back) + usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) + if (src.bruteloss) + if (src.bruteloss < 30) + usr << text("\red [] looks slightly bruised!", src.name) + else + usr << text("\red [] looks severely bruised!", src.name) + if (src.fireloss) + if (src.fireloss < 30) + usr << text("\red [] looks slightly burnt!", src.name) + else + usr << text("\red [] looks severely burnt!", src.name) + return + +/mob/monkey/ex_act(severity) + + flick("flash", src.flash) + switch(severity) + if(1.0) + if (src.stat != 2) + src.bruteloss += 200 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if(2.0) + if (src.stat != 2) + src.bruteloss += 60 + src.fireloss += 60 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if(3.0) + if (src.stat != 2) + src.bruteloss += 30 + src.health = (((100 - src.oxyloss) - src.toxloss) - src.fireloss) - src.bruteloss + if (prob(50)) + src.paralysis += 10 + else + return + +/atom/movable/Move(NewLoc, direct) + + if (direct & (direct - 1)) + if (direct & 1) + if (direct & 4) + if (step(src, NORTH)) + step(src, EAST) + else + if (step(src, EAST)) + step(src, NORTH) + else + if (direct & 8) + if (step(src, NORTH)) + step(src, WEST) + else + if (step(src, WEST)) + step(src, NORTH) + else + if (direct & 2) + if (direct & 4) + if (step(src, SOUTH)) + step(src, EAST) + else + if (step(src, EAST)) + step(src, SOUTH) + else + if (direct & 8) + if (step(src, SOUTH)) + step(src, WEST) + else + if (step(src, WEST)) + step(src, SOUTH) + else + ..() + return + +/atom/movable/verb/pull() + set src in oview(1) + + if (!( usr )) + return + if (!( src.anchored )) + usr.pulling = src + return + +/atom/verb/examine() + set src in oview(1) + + if (!( usr )) + return + usr << src.desc + return + +/client/Northeast() + + src.mob.swap_hand() + return + +/client/Southeast() + + var/W = src.mob.equipped() + if (W) + W.attack_self(src.mob) + return + +/client/Northwest() + + src.mob.drop_item_v() + return + +/client/Southwest() + + src.mob.throw_item_v() + return + +/client/Center() + + if (isobj(src.mob.loc)) + var/O = src.loc + if (src.canmove) + return O.relaymove(src.mob, 16) + return + +/client/Move(n, direct) + + if (src.moving) + return 0 + if (world.time < src.move_delay) + return + if (!( src.mob )) + return + if (src.mob.stat == 2) + return + if (src.mob.monkeyizing) + return + var/is_monkey = istype(src.mob, /mob/monkey) + if (locate(/obj/item/weapon/grab, locate(/obj/item/weapon/grab, src.mob.grabbed_by.len))) + var/list/grabbing = list( ) + if (istype(src.mob.l_hand, /obj/item/weapon/grab)) + var/G = src.l_hand + grabbing += G.affecting + if (istype(src.mob.r_hand, /obj/item/weapon/grab)) + var/G = src.r_hand + grabbing += G.affecting + for(var/obj/item/weapon/grab/G as obj in src.mob.grabbed_by) + if (G.state == 1) + if (!( grabbing.Find(G.assailant) )) + G = null + del(G) + else + if (grabbing.state == 2) + src.move_delay = world.time + 10 + if ((prob(25) && (!( is_monkey ) || prob(25)))) + for(var/O as mob in viewers(src.mob, null)) + O.show_message(text("\red [] has broken free of []'s grip!", src.mob, G.assailant), 1) + //Foreach goto(309) + G = null + del(G) + else + return + else + if (O.state == 2) + src.move_delay = world.time + 10 + if ((prob(5) && (!( is_monkey ) || prob(25)))) + for(var/O as mob in viewers(src.mob, null)) + O.show_message(text("\red [] has broken free of []'s headlock!", src.mob, G.assailant), 1) + //Foreach goto(423) + G = null + del(G) + else + return + //Foreach goto(189) + if (src.mob.canmove) + var/j_pack = 0 + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + if (!( src.mob.restrained() )) + if (!( (locate(/obj/grille, oview(1, src.mob)) || locate(/turf/station, oview(1, src.mob))) )) + if (istype(src.mob.back, /obj/item/weapon/tank/jetpack)) + var/J = src.back + j_pack = J.allow_thrust(100, src.mob) + var/obj/effects/sparks/ion_trails/I = new /obj/effects/sparks/ion_trails( src.mob.loc ) + flick("ion_fade", I) + I.icon_state = "blank" + spawn( 20 ) + I = null + del(I) + return + if (!( j_pack )) + return 0 + else + return 0 + else + return 0 + if (isturf(src.mob.loc)) + src.move_delay = world.time + if ((j_pack && j_pack < 1)) + src.move_delay += 5 + switch(src.mob.m_intent) + if("run") + if (src.drowsyness > 0) + src.move_delay += 6 + src.move_delay += 1 + if("face") + src.dir = direct + return + if("walk") + src.move_delay += 7 + else + src.move_delay += src.mob.m_delay() + src.move_delay += round((100 - src.mob.health) / 20) + if (src.mob.restrained()) + for(var/M as mob in range(src.mob, 1)) + if (((M.pulling == src.mob && (!( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, src.mob.grabbed_by.len))) + src << "\blue You're restrained! You can't move!" + return 0 + //Foreach goto(853) + src.moving = 1 + if (locate(/obj/item/weapon/grab, src.mob)) + src.move_delay = max(src.move_delay, world.time + 7) + var/L = src.mob.ret_grab() + if (istype(L, (List:0))) + if (L.len == 2) + L -= src.mob + var/M = L[1] + if ((get_dist(src.mob, M) <= 1 || M.loc == src.mob.loc)) + var/T = src.mob.loc + . = ..() + if (isturf(M.loc)) + var/diag = get_dir(src.mob, M) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(src.mob, M) > 1 || diag)) + step(M, get_dir(M.loc, T)) + else + for(var/M as mob in L) + M.other_mobs = 1 + if (src.mob != M) + M.animate_movement = 3 + //Foreach goto(1163) + for(var/M as mob in L) + spawn( 0 ) + step(M, direct) + return + spawn( 1 ) + M.other_mobs = null + M.animate_movement = 1 + return + //Foreach goto(1214) + else + . = ..() + src.moving = null + return . + else + if (isobj(src.loc)) + var/O = src.loc + if (src.canmove) + return O.relaymove(src.mob, direct) + else + return + return + +/client/proc/show_panel() + + if (src.holder) + src.holder.update() + return + +/client/New() + + if (banned.Find(src.ckey)) + src = null + del(src) + return + return + world << text("[] has logged in!", src) + if (((world.address == src.address || !( src.address )) && !( host ))) + host = src.key + world.update_stat() + ..() + spawn( 50 ) + if (admins.Find(src.ckey)) + src.holder = new /obj/admins( src ) + src.holder.rank = admins[text("[]", src.ckey)] + switch(admins[text("[]", src.ckey)]) + if("Primary Administrator") + src.holder.level = 5 + if("Master Administrator") + src.holder.level = 4 + if("Administrator") + src.holder.level = 3 + if("Supervisor") + src.holder.level = 2 + if("Moderator") + src.holder.level = 1 + if("Game Master") + src.holder.level = 0 + if("Banned") + src = null + del(src) + return + else + src.holder = null + del(src.holder) + if (src.holder) + src.holder.owner = src + src.verbs += /client/proc/show_panel + return + return + +/client/Del() + + if (banned.Find(src.ckey)) + ..() + return + world << text("[] has logged out!", src) + ..() + src.holder = null + del(src.holder) + return diff --git a/ss13-40.93.2-decomp/spacestation13/mob.dmi b/ss13-40.93.2-decomp/spacestation13/mob.dmi new file mode 100644 index 0000000..c3c2b25 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/mob.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/monkey.dmi b/ss13-40.93.2-decomp/spacestation13/monkey.dmi new file mode 100644 index 0000000..7a1507c Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/monkey.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/pipes.dmi b/ss13-40.93.2-decomp/spacestation13/pipes.dmi new file mode 100644 index 0000000..b61dd6b Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/pipes.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/plasma.dmi b/ss13-40.93.2-decomp/spacestation13/plasma.dmi new file mode 100644 index 0000000..7a58107 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/plasma.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/r_items.dmi b/ss13-40.93.2-decomp/spacestation13/r_items.dmi new file mode 100644 index 0000000..7a34610 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/r_items.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/reg_pipe.dmi b/ss13-40.93.2-decomp/spacestation13/reg_pipe.dmi new file mode 100644 index 0000000..0857633 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/reg_pipe.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/screen.dmi b/ss13-40.93.2-decomp/spacestation13/screen.dmi new file mode 100644 index 0000000..cadfe1f Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/screen.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/screen1.dmi b/ss13-40.93.2-decomp/spacestation13/screen1.dmi new file mode 100644 index 0000000..3f38319 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/screen1.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/security.dmi b/ss13-40.93.2-decomp/spacestation13/security.dmi new file mode 100644 index 0000000..93c4aba Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/security.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/shards.dmi b/ss13-40.93.2-decomp/spacestation13/shards.dmi new file mode 100644 index 0000000..fa5140b Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/shards.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/shuttle.dm b/ss13-40.93.2-decomp/spacestation13/shuttle.dm new file mode 100644 index 0000000..9f912af --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/shuttle.dm @@ -0,0 +1,327 @@ + +/obj/machinery/computer/prison_shuttle/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/prison_shuttle/verb/take_off() + set src in oview(1) + + if ((usr.stat || usr.restrained())) + return + src.add_fingerprint(usr) + if (prison_entered) + var/A = locate(/area/shuttle) + for(var/T as turf in A) + if (T.z == 1) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 12 + //Foreach goto(96) + var/U = locate(T.x, T.y, 12) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + T = null + del(T) + //Foreach goto(62) + prison_entered = null + else + if (!( prison_entered )) + if (ticker.shuttle_location != 1) + var/A = locate(/area/shuttle_prison) + for(var/T as turf in A) + if (T.z == 12) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 1 + //Foreach goto(346) + var/U = locate(T.x, T.y, 1) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + T = null + del(T) + //Foreach goto(312) + prison_entered = 1 + else + usr << "\blue There is an obstructing shuttle!" + return + return + +/obj/machinery/computer/prison_shuttle/verb/restabalize() + set src in oview(1) + + viewers(null, null) << "\red Restabalizing prison shuttle atmosphere!" + var/A = locate(/area/shuttle_prison) + for(var/obj/move/T as obj in A) + T.firelevel = 0 + T.oxygen = 756000.0 + T.oldoxy = 756000.0 + T.tmpoxy = 756000.0 + T.poison = 0 + T.oldpoison = 0 + T.tmppoison = 0 + T.co2 = 0 + T.oldco2 = 0 + T.tmpco2 = 0 + T.sl_gas = 0 + T.osl_gas = 0 + T.tsl_gas = 0 + T.n2 = 2844000.0 + T.on2 = 2844000.0 + T.tn2 = 2844000.0 + T.heat = 9.8892006E8 + T.oheat = 9.8892006E8 + T.theat = 9.8892006E8 + //Foreach goto(40) + viewers(null, null) << "\red Prison shuttle Restabalized!" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/shuttle/verb/restabalize() + set src in oview(1) + + world << "\red Restabalizing shuttle atmosphere!" + var/A = locate(/area/shuttle) + for(var/obj/move/T as obj in A) + T.firelevel = 0 + T.oxygen = 756000.0 + T.oldoxy = 756000.0 + T.tmpoxy = 756000.0 + T.poison = 0 + T.oldpoison = 0 + T.tmppoison = 0 + T.co2 = 0 + T.oldco2 = 0 + T.tmpco2 = 0 + T.sl_gas = 0 + T.osl_gas = 0 + T.tsl_gas = 0 + T.n2 = 2844000.0 + T.on2 = 2844000.0 + T.tn2 = 2844000.0 + T.heat = 9.8892006E8 + T.oheat = 9.8892006E8 + T.theat = 9.8892006E8 + //Foreach goto(35) + world << "\red Shuttle Restabalized!" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/verb/hijack() + set src in oview(1) + + if ((!( ticker ) || ticker.shuttle_location != 10)) + return + if (usr != ticker.killer) + return + world << "\blue Alert: The shuttle is has been hijacked prematurely by the traitor!" + ticker.timing = 0 + ticker.check_win() + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/attackby(W as obj, user as mob) + + if ((!( istype(W, /obj/item/weapon/card/id) ) || (!( ticker ) || (ticker.shuttle_location == 10 || !( user ))))) + return + if (W.access_level < 1) + user << text("The access level ([]) of [] card is not high enough. (It must be at least level 1.)", W.access_level, W.registered) + return + var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") + switch(choice) + if("Authorize") + src.authorized -= W.registered + src.authorized += W.registered + if ((src.auth_need - src.authorized.len) > 0) + world << text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len) + else + world << "\blue Alert: Shuttle launch time shortened to 10 seconds!" + ticker.timeleft = 100 + src.authorized = null + del(src.authorized) + src.authorized = list( ) + if("Repeal") + src.authorized -= W.registered + world << text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len) + if("Abort") + world << "\blue All authorizations to shorting time for shuttle launch have been revoked!" + src.len = 0 + src.authorized = list( ) + else + return + +/obj/shut_controller/proc/rotate(direct) + + var/SE_X = 1 + var/SE_Y = 1 + var/SW_X = 1 + var/SW_Y = 1 + var/NE_X = 1 + var/NE_Y = 1 + var/NW_X = 1 + var/NW_Y = 1 + for(var/obj/move/M as obj in src.parts) + if (M.x < SW_X) + SW_X = M.x + if (M.x > SE_X) + SE_X = M.x + if (M.y < SW_Y) + SW_Y = M.y + if (M.y > NW_Y) + NW_Y = M.y + if (M.y > NE_Y) + NE_Y = M.y + if (M.y < SE_Y) + SE_Y = M.y + if (M.x > NE_X) + NE_X = M.x + if (M.x < NW_X) + NW_X = M.y + //Foreach goto(75) + var/length = abs(NE_X - NW_X) + var/width = abs(NE_Y - SE_Y) + var/random = pick(src.parts) + var/s_direct = null + switch(s_direct) + if(1.0) + switch(direct) + if(90.0) + var/tx = SE_X + var/ty = SE_Y + var/t_z = random.z + for(var/obj/move/M as obj in src.parts) + M.ty = -M.x - tx + M.tx = -M.y - ty + var/T = locate(M.x, M.y, 11) + relocate(T) + M.ty = -M.ty + M.tx += length + //Foreach goto(374) + for(var/obj/move/M as obj in src.parts) + M.tx += tx + M.ty += ty + var/T = locate(M.tx, M.ty, t_z) + relocate(T, 90) + //Foreach goto(468) + if(-90.0) + var/tx = SE_X + var/ty = SE_Y + var/t_z = random.z + for(var/obj/move/M as obj in src.parts) + M.ty = M.x - tx + M.tx = M.y - ty + var/T = locate(M.x, M.y, 11) + relocate(T) + M.ty = -M.ty + M.ty += width + //Foreach goto(571) + for(var/obj/move/M as obj in src.parts) + M.tx += tx + M.ty += ty + var/T = locate(M.tx, M.ty, t_z) + relocate(T, -90.0) + //Foreach goto(663) + else + else + return + +/obj/shuttle/door/verb/open() + set src in oview(1) + + src.add_fingerprint(usr) + if (src.operating) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + src.verbs -= /obj/shuttle/door/verb/open + src.verbs += /obj/shuttle/door/proc/close + src.operating = 0 + return + +/obj/shuttle/door/proc/close() + set src in oview(1) + + src.add_fingerprint(usr) + if (src.operating) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + if (src.visible) + src.opacity = 1 + sleep(15) + src.verbs += /obj/shuttle/door/verb/open + src.verbs -= /obj/shuttle/door/proc/close + src.operating = 0 + return + +/turf/station/shuttle/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + src = null + del(src) + return + else + return diff --git a/ss13-40.93.2-decomp/spacestation13/shuttle.dmi b/ss13-40.93.2-decomp/spacestation13/shuttle.dmi new file mode 100644 index 0000000..c2f18bc Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/shuttle.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/ss13.dmp b/ss13-40.93.2-decomp/spacestation13/ss13.dmp new file mode 100644 index 0000000..012d55a --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/ss13.dmp @@ -0,0 +1,2460 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/item/weapon/tank/oxygentank,/turf/space,/area) +"ac" = (/turf/station/wall,/area/engine_access) +"ad" = (/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/engine_access) +"ae" = (/turf/station/r_wall,/area/engine) +"af" = (/obj/move/airtunnel/connector/wall,/turf/space,/area/airtunnel1) +"ag" = (/obj/machinery/camera{dir = 4; c_tag = "Northern Airlock"},/obj/machinery/at_indicator{pixel_x = -32; pixel_y = 0},/turf/station/floor,/area/engine_access) +"ah" = (/turf/station/floor,/area/engine_access) +"ai" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/floor,/area/engine_access) +"aj" = (/obj/move/airtunnel/connector,/obj/machinery/alarm/indicator,/turf/space,/area/airtunnel1) +"ak" = (/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"al" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine_access) +"am" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine_access) +"an" = (/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"ao" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/floor,/area/engine_access) +"ap" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine) +"aq" = (/obj/machinery/door/airlock{r_access = 2},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"ar" = (/obj/move/airtunnel/connector,/turf/space,/area/airtunnel1) +"as" = (/obj/machinery/door/airlock,/turf/station/floor,/area/engine_access) +"at" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine_access) +"au" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine_access) +"av" = (/obj/grille,/turf/station/floor,/area) +"aw" = (/turf/station/floor,/area/engine) +"ax" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/engine_access) +"ay" = (/turf/station/r_wall,/area/airtunnel1) +"az" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airtunnel1) +"aA" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airtunnel1) +"aB" = (/turf/station/wall,/area) +"aC" = (/obj/machinery/door/false_wall,/turf/station/floor,/area) +"aD" = (/turf/station/wall,/area/airtunnel1) +"aE" = (/turf/station/r_wall,/area) +"aF" = (/turf/station/floor,/area) +"aG" = (/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area) +"aH" = (/turf/station/wall,/area/control_room) +"aI" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine_access) +"aJ" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine) +"aK" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/firealarm,/turf/station/floor,/area/engine) +"aL" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area/engine) +"aM" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area) +"aN" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area) +"aO" = (/obj/item/weapon/gun/revolver,/turf/station/floor,/area) +"aP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aR" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/tank/jetpack,/turf/station/floor,/area/control_room) +"aS" = (/obj/grille,/obj/window,/turf/station/floor,/area) +"aT" = (/obj/grille,/turf/space,/area) +"aU" = (/obj/machinery/door/airlock{r_access = 2},/turf/station/floor,/area/engine) +"aV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"aW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"aX" = (/obj/machinery/camera{dir = 8; c_tag = "Plasma Storage"},/turf/station/floor,/area/engine) +"aY" = (/turf/station/r_wall,/area/testlab4) +"aZ" = (/turf/station/r_wall,/area/control_room) +"ba" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/control_room) +"bb" = (/turf/station/floor,/area/control_room) +"bc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine_access) +"be" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"bf" = (/obj/machinery/door/window{dir = 2},/turf/station/floor,/area) +"bg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/engine/floor,/area) +"bh" = (/obj/machinery/mass_driver{dir = 4; id = "x1"},/obj/machinery/pod{dir = 4; id = "x1"},/turf/station/engine/floor,/area) +"bi" = (/obj/machinery/door/poddoor{id = "x1"},/turf/station/engine/floor,/area) +"bj" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/engine) +"bk" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"bl" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/engine/floor,/area/testlab4) +"bm" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/engine/floor,/area/testlab4) +"bn" = (/turf/station/engine/floor,/area/testlab4) +"bo" = (/obj/machinery/door/window,/turf/station/engine/floor,/area/testlab4) +"bp" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 756000; n2 = 0},/area/testlab4) +"bq" = (/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/control_room) +"br" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"bs" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine_access) +"bt" = (/obj/machinery/computer/pod{id = "x1"},/turf/station/floor,/area) +"bu" = (/obj/grille,/obj/window{dir = 1},/turf/station/floor,/area) +"bv" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine) +"bw" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 3; r_access = 2; r_lab = 0},/turf/station/floor,/area/engine) +"bx" = (/obj/window{dir = 10},/turf/station/engine/floor,/area/testlab4) +"by" = (/obj/window,/turf/station/engine/floor,/area/testlab4) +"bz" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bA" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bB" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 2; r_lab = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bC" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area/control_room) +"bD" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine_access) +"bE" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine_access) +"bF" = (/turf/station/wall,/area/engine) +"bG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/engine) +"bH" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine) +"bI" = (/obj/machinery/computer/engine,/turf/station/floor,/area/engine) +"bJ" = (/obj/closet/emcloset,/turf/station/floor,/area/engine) +"bK" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/engine) +"bL" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/engine) +"bM" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bN" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bO" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/engine) +"bP" = (/turf/station/floor,/area/testlab4) +"bQ" = (/obj/machinery/camera{dir = 4; c_tag = "CR- Prep Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"bR" = (/obj/machinery/door,/turf/station/floor,/area/engine) +"bS" = (/obj/window{dir = 8},/turf/station/floor,/area/testlab4) +"bT" = (/obj/machinery/door/airlock{r_engine = 3; r_access = 2; r_lab = 0},/turf/station/floor,/area/control_room) +"bU" = (/obj/machinery/firealarm{pixel_x = -32},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bV" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bW" = (/obj/machinery/door,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine_access) +"bX" = (/obj/landmark{name = "CTF-base-Engine"},/turf/station/floor,/area/engine) +"bY" = (/obj/machinery/door/window,/turf/station/floor,/area/engine) +"bZ" = (/obj/item/weapon/radio,/turf/station/floor,/area/engine) +"ca" = (/obj/window{dir = 4},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/engine/floor,/area/testlab4) +"cb" = (/obj/machinery/door/firedoor,/turf/station/engine/floor,/area/testlab4) +"cc" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/testlab4) +"cd" = (/obj/window,/turf/station/floor,/area/control_room) +"ce" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/control_room) +"cf" = (/obj/window{dir = 4},/turf/station/wall,/area) +"cg" = (/obj/window{dir = 8},/obj/window{dir = 4},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"ch" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"ci" = (/obj/machinery/door/airlock{r_engine = 3; r_access = 2; r_lab = 0},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/testlab4) +"cj" = (/obj/window{dir = 1},/turf/station/floor,/area/testlab4) +"ck" = (/obj/window{dir = 10},/turf/station/floor,/area/testlab4) +"cl" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/testlab4) +"cm" = (/obj/grille,/turf/station/floor,/area/testlab4) +"cn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"co" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"cp" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/control_room) +"cq" = (/obj/machinery/computer/card,/turf/station/floor,/area/control_room) +"cr" = (/obj/table,/obj/item/weapon/paper/Map,/obj/item/weapon/radio/intercom,/turf/station/floor,/area/control_room) +"cs" = (/obj/machinery/computer/communications,/turf/station/floor,/area/control_room) +"ct" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/obj/machinery/camera{c_tag = "Control Room"},/turf/station/floor,/area/control_room) +"cu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/control_room) +"cv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/control_room) +"cw" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/floor,/area/control_room) +"cx" = (/obj/table{icon_state = "corners"; dir = 5},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"cy" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"cz" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/engine) +"cA" = (/obj/watertank,/turf/station/floor,/area/engine) +"cB" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cD" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"cE" = (/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"cF" = (/obj/weldfueltank,/turf/station/floor,/area/engine) +"cG" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cH" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"cJ" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/testlab4) +"cK" = (/obj/machinery/door/window,/turf/station/floor,/area/testlab4) +"cL" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/testlab4) +"cM" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"cN" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"cO" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/control_room) +"cP" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/control_room) +"cQ" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/obj/item/weapon/pen,/turf/station/floor,/area/control_room) +"cR" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"cS" = (/obj/landmark{name = "CTF-supply-Engine"},/turf/station/floor,/area/engine) +"cT" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/engine) +"cU" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/testlab4) +"cV" = (/obj/window{dir = 4},/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab4) +"cW" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/testlab4) +"cX" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/control_room) +"cY" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/control_room) +"cZ" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Research"},/turf/station/floor,/area/control_room) +"da" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"db" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 2; r_access = 2},/turf/station/floor,/area/engine) +"dc" = (/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine) +"dd" = (/obj/machinery/injector{dir = 8},/turf/station/wall,/area/engine) +"de" = (/turf/station/engine/floor{poison = 756000; n2 = 0},/area/engine) +"df" = (/obj/machinery/firealarm{pixel_y = -32},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/testlab4) +"dg" = (/obj/weldfueltank,/turf/station/floor,/area/testlab4) +"dh" = (/obj/machinery/door/window,/turf/station/floor,/area/control_room) +"di" = (/obj/landmark{name = "CTF-base-CR"},/turf/station/floor,/area/control_room) +"dj" = (/obj/table,/obj/item/weapon/paper/jobs,/obj/item/weapon/storage/id_kit,/turf/station/floor,/area/control_room) +"dk" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/control_room) +"dl" = (/obj/table,/turf/station/floor,/area/control_room) +"dm" = (/obj/stool/chair{dir = 4},/obj/start{name = "Captain"},/turf/station/floor,/area/control_room) +"dn" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"do" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/engine) +"dp" = (/obj/start{name = "Engineer"},/turf/station/floor,/area/engine) +"dq" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"dr" = (/turf/station/r_wall,/area/medicalstorage) +"ds" = (/obj/watertank,/turf/station/floor,/area/control_room) +"dt" = (/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"du" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Personnel"},/turf/station/floor,/area/control_room) +"dv" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/engine) +"dw" = (/obj/machinery/camera{dir = 4; c_tag = "Engine Hallway"},/turf/station/floor,/area/engine) +"dx" = (/obj/window{dir = 4},/turf/station/floor,/area/engine) +"dy" = (/turf/station/wall,/area/medicalstorage) +"dz" = (/obj/closet/emcloset,/turf/station/floor,/area/medicalstorage) +"dA" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/medicalstorage) +"dB" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/medicalstorage) +"dC" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/medicalstorage) +"dD" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/medicalstorage) +"dE" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/medicalstorage) +"dF" = (/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"dG" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/sop,/obj/item/weapon/paper/Internal,/obj/item/weapon/infra,/turf/station/floor,/area/control_room) +"dH" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Internal,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/control_room) +"dI" = (/obj/stool/chair,/turf/station/floor,/area/control_room) +"dJ" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/syringe,/turf/station/floor,/area/control_room) +"dK" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/s_tox,/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"dL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/weldfueltank,/turf/station/floor,/area/engine) +"dM" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/engine) +"dN" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine) +"dO" = (/obj/machinery/dispenser,/turf/station/floor,/area/engine) +"dP" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"dQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{dir = 4; c_tag = "Technician Office"},/turf/station/floor,/area/medicalstorage) +"dR" = (/obj/start{name = "Station Technician"},/turf/station/floor,/area/medicalstorage) +"dS" = (/turf/station/floor,/area/medicalstorage) +"dT" = (/obj/stool,/turf/station/floor,/area/medicalstorage) +"dU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/medicalstorage) +"dV" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/control_room) +"dW" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/Map,/obj/item/weapon/timer,/turf/station/floor,/area/control_room) +"dX" = (/obj/landmark{name = "CTF-supply-CR"},/turf/station/floor,/area/control_room) +"dY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/jobs,/obj/manifest,/turf/station/floor,/area/control_room) +"dZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/card/id,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"ea" = (/obj/machinery/computer/airtunnel,/turf/station/floor,/area/control_room) +"eb" = (/obj/machinery/computer/engine,/turf/station/floor,/area/control_room) +"ec" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/recharger,/turf/station/floor,/area/control_room) +"ed" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"ee" = (/turf/station/wall,/area/escapezone) +"ef" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/engine) +"eg" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/engine) +"eh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"ei" = (/obj/machinery/alarm{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_y = -32},/turf/station/floor,/area/engine) +"ej" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"ek" = (/obj/item/weapon/radio,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine) +"el" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/engine) +"em" = (/obj/machinery/door{r_engine = 3; r_access = 2},/obj/window,/obj/machinery/firealarm,/obj/window{dir = 8},/turf/station/floor,/area/engine) +"en" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medicalstorage) +"eo" = (/obj/start{name = "Technical Assistant"},/turf/station/floor,/area/medicalstorage) +"ep" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medicalstorage) +"eq" = (/obj/weldfueltank,/turf/station/floor,/area/medicalstorage) +"er" = (/turf/station/wall,/area/controlaccess) +"es" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/controlaccess) +"et" = (/turf/station/r_wall,/area/controlaccess) +"eu" = (/turf/station/r_wall,/area/testlab2) +"ev" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/testlab2) +"ew" = (/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"ex" = (/obj/machinery/door/poddoor,/turf/station/engine/floor,/area/escapezone) +"ey" = (/obj/machinery/mass_driver,/obj/item/weapon/tank/oxygentank,/turf/station/engine/floor,/area/escapezone) +"ez" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/engine/floor,/area/escapezone) +"eA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/escapezone) +"eB" = (/obj/machinery/computer/pod{name = "Mass Driver"},/turf/station/floor,/area/escapezone) +"eC" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/engine/floor,/area/engine) +"eD" = (/obj/window{dir = 10},/turf/station/floor,/area/engine) +"eE" = (/obj/machinery/injector,/turf/station/wall,/area/engine) +"eF" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"eG" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 756000; n2 = 0},/area/engine) +"eH" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/medicalstorage) +"eI" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/medicalstorage) +"eJ" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/controlaccess) +"eK" = (/turf/station/floor,/area/controlaccess) +"eL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/controlaccess) +"eM" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area) +"eN" = (/turf/station/floor,/area/escapezone) +"eO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/escapezone) +"eP" = (/obj/grille,/turf/station/engine/floor,/area/engine) +"eQ" = (/obj/machinery/alarm,/turf/station/floor,/area/controlaccess) +"eR" = (/obj/machinery/door/window,/turf/station/floor,/area/controlaccess) +"eS" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/controlaccess) +"eT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/security,/turf/station/floor,/area/testlab2) +"eU" = (/turf/station/floor,/area/testlab2) +"eV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/testlab2) +"eW" = (/obj/item/weapon/ammo/a357,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area) +"eX" = (/obj/machinery/door/poddoor{id = 2},/turf/station/engine/floor,/area/escapezone) +"eY" = (/obj/machinery/mass_driver{dir = 8; id = 2},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"eZ" = (/obj/machinery/computer/pod{id = 2},/turf/station/floor,/area/escapezone) +"fa" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"fb" = (/obj/machinery/computer/engine,/turf/station/floor,/area) +"fc" = (/obj/machinery/computer/communications,/turf/station/floor,/area) +"fd" = (/obj/item/weapon/hand_tele,/turf/station/engine/floor,/area/engine) +"fe" = (/turf/station/engine/floor,/area/engine) +"ff" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/engine/floor,/area/engine) +"fg" = (/obj/machinery/door{r_engine = 3; r_access = 2},/turf/station/floor,/area/engine) +"fh" = (/turf/station/wall,/area/hallways/labaccess) +"fi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/controlaccess) +"fj" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab2) +"fk" = (/obj/secloset/highsec,/turf/station/floor,/area/testlab2) +"fl" = (/obj/machinery/camera{dir = 4; c_tag = "Escape Pod Bay"},/turf/station/floor,/area/escapezone) +"fm" = (/obj/machinery/door/window,/turf/station/floor,/area/escapezone) +"fn" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"fo" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"fp" = (/obj/watertank,/turf/station/floor,/area/hallways/labaccess) +"fq" = (/turf/station/floor,/area/hallways/labaccess) +"fr" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/labaccess) +"fs" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"ft" = (/obj/machinery/camera{dir = 4; c_tag = "Emergency Room"},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab2) +"fu" = (/obj/landmark{name = "Nuclear-Disk"},/turf/station/floor,/area/testlab2) +"fv" = (/obj/machinery/door/poddoor{id = 3},/turf/station/engine/floor,/area/escapezone) +"fw" = (/obj/machinery/mass_driver{dir = 8; id = 3},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"fx" = (/obj/machinery/computer/pod{id = 3},/turf/station/floor,/area/escapezone) +"fy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area) +"fz" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/engine/floor,/area/engine) +"fA" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/labaccess) +"fB" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/hallways/labaccess) +"fC" = (/obj/weldfueltank,/turf/station/floor,/area/toolstorage) +"fD" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/backpack,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/toolstorage) +"fE" = (/obj/item/weapon/infra,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fF" = (/turf/station/wall,/area/toolstorage) +"fG" = (/obj/table{icon_state = "sides"; dir = 2},/obj/bedsheetbin,/turf/station/floor,/area/toolstorage) +"fH" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper_bin{amount = 50},/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/toolstorage) +"fI" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/turf/station/floor,/area/toolstorage) +"fJ" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/toolstorage) +"fK" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/toolstorage) +"fL" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/testlab2) +"fM" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/testlab2) +"fN" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area) +"fO" = (/obj/machinery/door/poddoor{id = 4},/turf/station/engine/floor,/area/escapezone) +"fP" = (/obj/machinery/mass_driver{dir = 8; id = 4},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"fQ" = (/obj/machinery/computer/pod{id = 4},/turf/station/floor,/area/escapezone) +"fR" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"fS" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/engine) +"fT" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/toolstorage) +"fU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fV" = (/obj/item/weapon/timer,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{c_tag = "Supply Room"},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toolstorage) +"fX" = (/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fY" = (/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fZ" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"ga" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gb" = (/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gc" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gd" = (/obj/item/weapon/igniter,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"ge" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/infra,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"gf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"gg" = (/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"gh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/testlab2) +"gi" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/labaccess) +"gj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toolstorage) +"gk" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"gl" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/igniter,/obj/item/weapon/storage/backpack,/turf/station/floor,/area/toolstorage) +"gm" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"gn" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"go" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gp" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/timer,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"gq" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toolstorage) +"gr" = (/turf/station/wall,/area/oxygen_storage) +"gs" = (/turf/station/wall,/area/hallways/eastairlock) +"gt" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"gu" = (/obj/stool/chair,/turf/station/floor,/area/hallways/eastairlock) +"gv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/eastairlock) +"gw" = (/turf/station/floor,/area/hallways/eastairlock) +"gx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/eastairlock) +"gy" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"gz" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"gA" = (/obj/grille,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area) +"gB" = (/turf/station/wall,/area/medical) +"gC" = (/obj/window{dir = 1},/obj/window,/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"gD" = (/turf/station/wall,/area/toxinlab) +"gE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"gF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall) +"gG" = (/turf/station/floor,/area/hallways/centralhall) +"gH" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/centralhall) +"gI" = (/turf/station/wall,/area/hallways/centralhall) +"gJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall) +"gK" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/hallways/eastairlock) +"gL" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/hallways/eastairlock) +"gM" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/hallways/eastairlock) +"gN" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/medical) +"gO" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/medical) +"gP" = (/obj/window{dir = 4},/obj/closet/wardrobe/white,/turf/station/floor,/area/medical) +"gQ" = (/obj/secloset/medical1,/turf/station/floor,/area/medical) +"gR" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/medical) +"gS" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/pen,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/medical) +"gT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/clipboard,/turf/station/floor,/area/medical) +"gU" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/machinery/camera{c_tag = "Medical Bay"},/turf/station/floor,/area/medical) +"gV" = (/obj/table{icon_state = "alone"},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/medical) +"gW" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/medical) +"gX" = (/obj/table{icon_state = "sides"},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/medical) +"gY" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/medical) +"gZ" = (/obj/machinery/alarm{pixel_y = 32},/obj/closet/wardrobe/white,/turf/station/floor,/area/toxinlab) +"ha" = (/obj/closet/l3closet,/turf/station/floor,/area/toxinlab) +"hb" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/toxinlab) +"hc" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/toxinlab) +"hd" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/toxinlab) +"he" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/toxinlab) +"hf" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/machinery/camera{c_tag = "Medical Lab"},/turf/station/floor,/area/toxinlab) +"hg" = (/obj/secloset/medical1,/turf/station/floor,/area/toxinlab) +"hh" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/pen,/obj/item/weapon/clipboard,/turf/station/floor,/area/toxinlab) +"hi" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/dropper,/turf/station/floor,/area/toxinlab) +"hj" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/toxinlab) +"hk" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/toxinlab) +"hl" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toxinlab) +"hm" = (/obj/machinery/alarm,/turf/station/floor,/area/hallways/labaccess) +"hn" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/labaccess) +"ho" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/centralhall) +"hp" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/eastairlock) +"hq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"hr" = (/obj/morgue,/turf/station/floor,/area) +"hs" = (/obj/machinery/freezer,/turf/station/floor,/area/medical) +"ht" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/medical) +"hu" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/medical) +"hv" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hw" = (/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/medical) +"hx" = (/turf/station/floor,/area/medical) +"hy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medical) +"hz" = (/obj/stool/chair,/turf/station/floor,/area/medical) +"hA" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"hB" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/toxinlab) +"hC" = (/turf/station/floor,/area/toxinlab) +"hD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toxinlab) +"hE" = (/obj/stool/chair,/turf/station/floor,/area/toxinlab) +"hF" = (/obj/machinery/camera{dir = 4; c_tag = "Central Hallway"},/turf/station/floor,/area/hallways/labaccess) +"hG" = (/turf/station/r_wall,/area/hallways/centralhall) +"hH" = (/turf/station/r_wall,/area/hallways/eastairlock) +"hI" = (/obj/machinery/camera{dir = 8; c_tag = "Assembly Room"},/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/hallways/eastairlock) +"hJ" = (/obj/window{dir = 4},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hK" = (/obj/item/weapon/radio,/turf/station/floor,/area/medical) +"hL" = (/obj/item/weapon/ointment,/turf/station/floor,/area/medical) +"hM" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hN" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/centralhall) +"hO" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"hP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/oxygen_storage) +"hQ" = (/obj/machinery/dispenser,/turf/station/floor,/area/oxygen_storage) +"hR" = (/obj/machinery/dispenser,/obj/machinery/camera{c_tag = "Toxin Gas Storage"},/turf/station/floor,/area/oxygen_storage) +"hS" = (/turf/station/floor,/area/oxygen_storage) +"hT" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/oxygen_storage) +"hU" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/oxygen_storage) +"hV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"hW" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"hX" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"hY" = (/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"hZ" = (/obj/machinery/sleeper,/turf/station/floor,/area/medical) +"ia" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/medical) +"ib" = (/obj/start{name = "Medical Doctor"},/turf/station/floor,/area/medical) +"ic" = (/obj/item/weapon/brutepack,/turf/station/floor,/area/medical) +"id" = (/obj/machinery/firealarm{pixel_x = 32},/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"ie" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"if" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"ig" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"ih" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toxinlab) +"ii" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/toxinlab) +"ij" = (/obj/window,/obj/secloset/medical2,/turf/station/floor,/area/toxinlab) +"ik" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window,/turf/station/floor,/area/toxinlab) +"il" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/toxinlab) +"im" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/toxinlab) +"in" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"io" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"ip" = (/obj/stool/chair{dir = 1},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"iq" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"ir" = (/obj/landmark{name = "CTF-supply-Medical"},/turf/station/floor,/area/medical) +"is" = (/obj/machinery/door/window,/turf/station/floor,/area/medical) +"it" = (/obj/landmark{name = "CTF-base-Medical"},/turf/station/floor,/area/medical) +"iu" = (/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"iv" = (/obj/window{dir = 4},/obj/secloset/animal,/turf/station/floor,/area/toxinlab) +"iw" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/machinery/dna_scanner,/turf/station/floor,/area/toxinlab) +"ix" = (/obj/window{dir = 1},/obj/machinery/scan_console,/turf/station/floor,/area/toxinlab) +"iy" = (/obj/window{dir = 1},/obj/machinery/computer/dna,/turf/station/floor,/area/toxinlab) +"iz" = (/obj/window{dir = 1},/obj/machinery/restruct,/turf/station/floor,/area/toxinlab) +"iA" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"iB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"iC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"iD" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"iE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"iF" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/window{dir = 4},/turf/station/floor,/area/medical) +"iG" = (/obj/start{name = "Medical Assistant"},/turf/station/floor,/area/medical) +"iH" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/medical) +"iI" = (/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/medical) +"iJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/toxinlab) +"iK" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/toxinlab) +"iL" = (/obj/window,/turf/station/floor,/area/toxinlab) +"iM" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area/toxinlab) +"iN" = (/obj/start{name = "Medical Researcher"},/obj/window,/turf/station/floor,/area/toxinlab) +"iO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window,/turf/station/floor,/area/toxinlab) +"iP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"iQ" = (/obj/machinery/door/window,/turf/station/floor,/area/toxinlab) +"iR" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/toxinlab) +"iS" = (/obj/machinery/firealarm{pixel_x = 32},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"iT" = (/obj/watertank,/turf/station/floor,/area/oxygen_storage) +"iU" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/eastairlock) +"iV" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"iW" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"iX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/medical) +"iY" = (/obj/machinery/alarm{pixel_y = -32},/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/medical) +"iZ" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/medical) +"ja" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/toxinlab) +"jb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area/toxinlab) +"jc" = (/obj/window{dir = 8},/obj/window{dir = 1},/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/toxinlab) +"jd" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"je" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/toxinlab) +"jf" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/centralhall) +"jg" = (/obj/start{name = "Research Technician"},/turf/station/floor,/area/hallways/centralhall) +"jh" = (/obj/machinery/door/airlock,/turf/station/floor,/area) +"ji" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/eastairlock) +"jj" = (/obj/closet,/turf/station/floor,/area/hallways/eastairlock) +"jk" = (/obj/landmark{name = "CTF-wardrobe-Medical"},/turf/station/floor,/area/medical) +"jl" = (/obj/window{dir = 4},/turf/station/floor,/area/medical) +"jm" = (/obj/stool/bed,/turf/station/floor,/area/medical) +"jn" = (/obj/stool/bed,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/medical) +"jo" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/medical) +"jp" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/medical) +"jq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "gooddoggytreat"; desc = "Monkey in Med. Lab."; special = 3},/turf/station/floor,/area/toxinlab) +"jr" = (/obj/window{dir = 8},/obj/machinery/firealarm{pixel_y = -32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/toxinlab) +"js" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/toxinlab) +"jt" = (/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/toxinlab) +"ju" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/toxinlab) +"jv" = (/obj/start{name = "Research Assistant"},/turf/station/floor,/area/hallways/centralhall) +"jw" = (/turf/station/wall,/area/testlab1) +"jx" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/l3closet,/turf/station/floor,/area/testlab1) +"jy" = (/turf/station/floor,/area/testlab1) +"jz" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/testlab1) +"jA" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/pen,/turf/station/floor,/area/testlab1) +"jB" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/testlab1) +"jC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/heater,/turf/station/floor,/area/testlab1) +"jD" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area) +"jE" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"jF" = (/obj/machinery/door/window{dir = 8},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"jG" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/toxinlab) +"jH" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/toxinlab) +"jI" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/toxinlab) +"jJ" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/toxinlab) +"jK" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/toxinlab) +"jL" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/toxinlab) +"jM" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/centralhall) +"jN" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/centralhall) +"jO" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/testlab1) +"jP" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/testlab1) +"jQ" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"jR" = (/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jT" = (/obj/machinery/alarm{pixel_y = 32},/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jU" = (/obj/machinery/computer/card,/turf/station/floor,/area/hallways/loungehall) +"jV" = (/turf/station/floor,/area/hallways/loungehall) +"jW" = (/obj/closet/emcloset,/turf/station/floor,/area/hallways/loungehall) +"jX" = (/turf/station/wall,/area/hallways/loungehall) +"jY" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/hallways/loungehall) +"jZ" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"ka" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/testlab1) +"kb" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/testlab1) +"kc" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/eastairlock) +"kd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/crew_quarters) +"ke" = (/turf/station/floor,/area/crew_quarters) +"kf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/crew_quarters) +"kg" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/crew_quarters) +"kh" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/loungehall) +"ki" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/loungehall) +"kj" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/hallways/loungehall) +"kk" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"kl" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/hallways/loungehall) +"km" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/hallways/loungehall) +"kn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/loungehall) +"ko" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"kp" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/loungehall) +"kq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/testlab1) +"kr" = (/obj/start{name = "Toxin Researcher"},/turf/station/floor,/area/testlab1) +"ks" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/eastairlock) +"kt" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/crew_quarters) +"ku" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/hallways/loungehall) +"kv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/loungehall) +"kw" = (/turf/station/floor,/area/transport_tube) +"kx" = (/obj/machinery/camera{dir = 8; c_tag = "Toxin Research Lab"},/turf/station/floor,/area/testlab1) +"ky" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/eastairlock) +"kz" = (/turf/station/wall,/area/crew_quarters) +"kA" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/crew_quarters) +"kB" = (/obj/machinery/door/window,/turf/station/floor,/area/hallways/loungehall) +"kC" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/labaccess) +"kD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/transport_tube) +"kE" = (/turf/station/floor{icon_state = "Floor1"; intact = 0},/area/transport_tube) +"kF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/watertank,/turf/station/floor,/area/testlab1) +"kG" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/crew_quarters) +"kH" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/hallways/loungehall) +"kI" = (/turf/station/r_wall,/area/hallways/labaccess) +"kJ" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/security) +"kK" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab1) +"kL" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/testlab1) +"kM" = (/turf/station/r_wall,/area/testlab1) +"kN" = (/obj/table{icon_state = "alone"},/turf/station/floor,/area/crew_quarters) +"kO" = (/obj/rack,/obj/item/weapon/clothing/under/blue,/obj/item/weapon/radio/headset,/turf/station/floor,/area/crew_quarters) +"kP" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"kQ" = (/turf/station/floor,/area/lounge) +"kR" = (/obj/watertank,/turf/station/floor,/area/lounge) +"kS" = (/obj/secloset/security1,/turf/station/floor,/area/security) +"kT" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clipboard,/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/security) +"kU" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/machinery/recharger,/obj/item/weapon/clothing/glasses/thermal,/turf/station/floor,/area/security) +"kV" = (/obj/secloset/security2,/turf/station/floor,/area/security) +"kW" = (/obj/window{dir = 4},/turf/station/floor,/area/security) +"kX" = (/turf/station/floor,/area/security) +"kY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"kZ" = (/obj/machinery/firealarm{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"la" = (/turf/station/r_wall,/area/security) +"lb" = (/obj/machinery/injector{dir = 1},/turf/station/wall,/area/testlab1) +"lc" = (/obj/grille,/obj/window{dir = 8},/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/testlab1) +"ld" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/testlab1) +"le" = (/obj/closet/emcloset,/turf/station/floor,/area/shuttle_airlock) +"lf" = (/turf/station/floor,/area/shuttle_airlock) +"lg" = (/obj/landmark{name = "Nuclear-Closet"},/turf/station/floor,/area/shuttle_airlock) +"lh" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/floor,/area/shuttle_airlock) +"li" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/crew_quarters) +"lj" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/crew_quarters) +"lk" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/lounge) +"ll" = (/obj/stool,/turf/station/floor,/area/lounge) +"lm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/lounge) +"ln" = (/obj/landmark{name = "CTF-wardrobe-Lounge"},/turf/station/floor,/area/lounge) +"lo" = (/turf/station/wall,/area/aircontrol) +"lp" = (/obj/machinery/door/airlock{r_air = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/aircontrol) +"lq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/security1,/turf/station/floor,/area/security) +"lr" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/security) +"ls" = (/obj/start{name = "Forensic Technician"},/turf/station/floor,/area/security) +"lt" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"lu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"lv" = (/obj/table,/obj/item/weapon/game_kit,/turf/station/floor,/area/security) +"lw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"lx" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 2},/turf/station/floor,/area/testlab1) +"ly" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"lz" = (/obj/machinery/alarm{pixel_x = 32},/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"lA" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"lB" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/shuttle_airlock) +"lC" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area/annexe) +"lD" = (/obj/closet/wardrobe,/turf/station/floor,/area/crew_quarters) +"lE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/mixed,/turf/station/floor,/area/crew_quarters) +"lF" = (/obj/closet/wardrobe/mixed,/turf/station/floor,/area/crew_quarters) +"lG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "alone"},/obj/bedsheetbin,/turf/station/floor,/area/crew_quarters) +"lH" = (/obj/closet,/turf/station/floor,/area/crew_quarters) +"lI" = (/obj/machinery/firealarm{pixel_x = 32},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/crew_quarters) +"lJ" = (/obj/machinery/camera{dir = 4; c_tag = "Lounge/Meeting Area"},/turf/station/floor,/area/lounge) +"lK" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/wirecutters,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/lounge) +"lL" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/pen,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/lounge) +"lM" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airintake) +"lN" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"lO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lQ" = (/turf/station/floor,/area/aircontrol) +"lR" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/aircontrol) +"lS" = (/turf/station/r_wall,/area/aircontrol) +"lT" = (/obj/start{name = "Security Officer"},/turf/station/floor,/area/security) +"lU" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lW" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/security) +"lX" = (/obj/item/weapon/bedsheet,/turf/station/floor,/area/security) +"lY" = (/obj/stool/bed,/turf/station/floor,/area/security) +"lZ" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/testlab1) +"ma" = (/obj/machinery/door/airlock,/turf/station/floor,/area/testlab1) +"mb" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"mc" = (/obj/landmark{name = "CTF-rogue"},/turf/station/floor,/area/shuttle_airlock) +"md" = (/obj/landmark{name = "Nuclear-Bomb"},/turf/station/floor,/area/shuttle_airlock) +"me" = (/obj/grille,/obj/window{dir = 8},/turf/station/floor,/area) +"mf" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/sleep_area/annexe) +"mg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/sleep_area/annexe) +"mh" = (/turf/station/floor,/area/sleep_area/annexe) +"mi" = (/obj/machinery/camera{dir = 4; c_tag = "Crew Sleeping Area"},/turf/station/floor,/area/sleep_area) +"mj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/sleep_area) +"mk" = (/turf/station/floor,/area/sleep_area) +"ml" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/sleep_area) +"mm" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/sleep_area) +"mn" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/lounge) +"mo" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/Map,/obj/item/weapon/paper/jobs,/obj/item/weapon/paper/sop,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/lounge) +"mp" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/paper/Map,/obj/item/weapon/paper/sop,/obj/item/weapon/radio/signaler,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/lounge) +"mq" = (/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/airintake) +"mr" = (/obj/window{dir = 4},/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/airintake) +"ms" = (/obj/machinery/door/airlock{r_air = 1},/turf/station/floor,/area/aircontrol) +"mt" = (/obj/start{name = "Staff Assistant"},/turf/station/floor,/area/security) +"mu" = (/obj/window{dir = 1},/turf/station/floor,/area/security) +"mv" = (/obj/machinery/camera{dir = 4; c_tag = "Prison"},/turf/station/floor,/area/security) +"mw" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/bed,/turf/station/floor,/area/security) +"mx" = (/obj/machinery/camera{dir = 4; c_tag = "Shuttle Bay"},/turf/station/floor,/area/shuttle_airlock) +"my" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"mz" = (/obj/stool/bed,/obj/machinery/camera{dir = 4; c_tag = "Sleeping Area Annex"},/turf/station/floor,/area/sleep_area/annexe) +"mA" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/sleep_area/annexe) +"mB" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area) +"mC" = (/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/weldingtool,/obj/item/weapon/tank/oxygentank,/turf/station/floor,/area/sleep_area) +"mD" = (/obj/item/weapon/clothing/suit/firesuit,/turf/station/floor,/area/sleep_area) +"mE" = (/obj/landmark{name = "CTF-supply-Lounge"},/turf/station/floor,/area/lounge) +"mF" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/manifest,/turf/station/floor,/area/lounge) +"mG" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/game_kit,/turf/station/floor,/area/lounge) +"mH" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/lounge) +"mI" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airintake) +"mJ" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mK" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/aircontrol) +"mL" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/security) +"mM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/security) +"mN" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/security) +"mO" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/security) +"mP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/security) +"mQ" = (/obj/machinery/sec_lock{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"mR" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/testlab1) +"mS" = (/obj/grille,/turf/station/floor,/area/testlab1) +"mT" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab1) +"mU" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mV" = (/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/sleep_area/annexe) +"mX" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/lounge) +"mY" = (/turf/station/floor,/area/airintake) +"mZ" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"na" = (/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"nb" = (/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"nc" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/clipboard,/turf/station/floor,/area/security) +"nd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/turf/station/floor,/area/security) +"ne" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/security) +"nf" = (/obj/machinery/computer/security,/turf/station/floor,/area/security) +"ng" = (/obj/machinery/computer/card,/turf/station/floor,/area/security) +"nh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/red,/turf/station/floor,/area/security) +"ni" = (/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"nj" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"nk" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"nl" = (/obj/window{dir = 10},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"nm" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"nn" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"no" = (/obj/stool/bed,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/sleep_area/annexe) +"np" = (/obj/machinery/door/window,/turf/station/floor,/area) +"nq" = (/obj/landmark{name = "CTF-base-Lounge"},/turf/station/floor,/area/lounge) +"nr" = (/obj/grille,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/airintake) +"ns" = (/obj/window{dir = 4},/obj/grille,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/airintake) +"nt" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/aircontrol) +"nu" = (/obj/window{dir = 4},/turf/station/floor,/area) +"nv" = (/obj/machinery/door/firedoor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"nw" = (/obj/window{dir = 8},/turf/station/floor,/area) +"nx" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"ny" = (/obj/window,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/airintake) +"nz" = (/obj/window{dir = 4},/obj/window,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/airintake) +"nA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nB" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"nC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"nD" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aircontrol) +"nE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"nF" = (/obj/window{dir = 10},/turf/station/floor,/area/shuttle_airlock) +"nG" = (/obj/machinery/door/airlock,/turf/station/floor,/area/shuttle_airlock) +"nH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"nI" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"nJ" = (/obj/machinery/camera{dir = 8; c_tag = "Atmo. Gas Storage"},/turf/station/floor,/area/aircontrol) +"nK" = (/turf/space,/area/shuttle) +"nL" = (/obj/machinery/camera{dir = 4; c_tag = "Disaster Response Center"},/turf/station/floor,/area) +"nM" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/aircontrol) +"nN" = (/obj/landmark{name = "CTF-base-Atmo"},/turf/station/floor,/area/aircontrol) +"nO" = (/obj/landmark{name = "CTF-supply-Atmo"},/turf/station/floor,/area/aircontrol) +"nP" = (/obj/machinery/door/airlock,/turf/station/floor,/area/aircontrol) +"nQ" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/aircontrol) +"nR" = (/obj/machinery/camera{dir = 4; c_tag = "Atmospheric Control Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/aircontrol) +"nS" = (/obj/start{name = "Atmospheric Technician"},/turf/station/floor,/area/aircontrol) +"nT" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/watertank,/turf/station/floor,/area/aircontrol) +"nU" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nV" = (/obj/window{dir = 1},/obj/item/weapon/clothing/mask/gasmask,/turf/station/floor,/area/aircontrol) +"nW" = (/obj/window{dir = 1},/obj/machinery/dispenser,/turf/station/floor,/area/aircontrol) +"nX" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aircontrol) +"nY" = (/obj/machinery/door/window,/turf/station/floor,/area/transport_tube) +"nZ" = (/obj/machinery/camera{dir = 8; c_tag = "Food Preparation Area"},/turf/station/floor,/area) +"oa" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"ob" = (/obj/window{dir = 1},/turf/station/floor,/area/aircontrol) +"oc" = (/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"od" = (/obj/window{dir = 4},/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"oe" = (/obj/window{dir = 8},/turf/station/floor,/area/aircontrol) +"of" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/shoes/orange,/turf/station/floor,/area/aircontrol) +"og" = (/obj/machinery/door/airlock{r_access = null; r_engine = null; r_air = null},/turf/station/floor,/area) +"oh" = (/obj/machinery/door/window,/turf/station/floor,/area/aircontrol) +"oi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/paper_bin,/turf/station/floor,/area/aircontrol) +"oj" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/aircontrol) +"ok" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/aircontrol) +"ol" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/aircontrol) +"om" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area) +"on" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"oo" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"op" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"oq" = (/obj/window{dir = 8},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/aircontrol) +"or" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/aircontrol) +"os" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/aircontrol) +"ot" = (/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"ou" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/turf/station/floor,/area/aircontrol) +"ov" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/turf/station/floor,/area/aircontrol) +"ow" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"ox" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/aircontrol) +"oy" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area) +"oz" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area) +"oA" = (/obj/machinery/dispenser{o2tanks = 20; pltanks = 0},/turf/station/floor,/area) +"oB" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area) +"oC" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/storage/toolbox,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"oD" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area) +"oE" = (/obj/machinery/computer/pod{name = "Transit system"; id = "t1"},/turf/station/floor,/area/transport_tube) +"oF" = (/obj/machinery/mass_driver{dir = 4; id = "t1"},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area/transport_tube) +"oG" = (/obj/machinery/dispenser,/turf/station/floor,/area) +"oH" = (/obj/closet/emcloset,/turf/station/floor,/area) +"oI" = (/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area) +"oJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area) +"oK" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"oL" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area) +"oM" = (/obj/machinery/dna_scanner,/turf/station/floor,/area) +"oN" = (/obj/machinery/scan_console,/turf/station/floor,/area) +"oO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/animal,/turf/station/floor,/area) +"oP" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"oQ" = (/obj/item/weapon/game_kit,/turf/station/floor,/area) +"oR" = (/obj/machinery/computer/pod{name = "Mass Driver"; dir = 4; id = 5},/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area) +"oS" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area) +"oT" = (/obj/machinery/computer/dna,/turf/station/floor,/area) +"oU" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area) +"oV" = (/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/turf/station/floor,/area) +"oW" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"oX" = (/obj/machinery/mass_driver{dir = 4; id = 5},/obj/closet,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area) +"oY" = (/mob/monkey,/turf/station/floor,/area) +"oZ" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) +"pa" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area) +"pb" = (/obj/machinery/restruct,/turf/station/floor,/area) +"pc" = (/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"pd" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area) +"pe" = (/obj/machinery/sleeper,/turf/station/floor,/area) +"pf" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area) +"pg" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/card/id{name = "Zach Licton's ID Card (1>1-0-0)"; access_level = 1; lab_access = 1; engine_access = 0; air_access = 0; registered = "Zach Licton"; assignment = "DNA Researcher"},/obj/item/weapon/pen,/turf/station/floor,/area) +"ph" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"pi" = (/obj/machinery/freezer,/turf/station/floor,/area) +"pj" = (/obj/machinery/pipes/flexipipe,/obj/item/weapon/tank/anesthetic,/turf/station/floor,/area) +"pk" = (/obj/machinery/cryo_cell,/turf/station/floor,/area) +"pl" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/under/white,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/shoes/white,/turf/station/floor,/area) +"pm" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"pn" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area) +"po" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area) +"pp" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"pq" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/r_epil,/turf/station/floor,/area) +"pr" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/mob/monkey,/turf/station/floor,/area) +"ps" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/clothing/glasses/regular,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"pt" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"pu" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"pv" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"pw" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"px" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"py" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"pz" = (/obj/sp_start{name = "zjm7891"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pA" = (/obj/item/weapon/radio/beacon,/obj/sp_start{name = "phoenixman"; desc = "Researcher on Med. Sat."},/turf/station/floor,/area) +"pB" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"pC" = (/obj/sp_start{name = "exadv1"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pD" = (/obj/sp_start{name = "ryanfs"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area) +"pE" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"pF" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area) +"pG" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area) +"pH" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/turf/station/floor,/area) +"pI" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"pJ" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area) +"pK" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"pL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/stool/bed,/turf/station/floor,/area) +"pM" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/bedsheetbin,/turf/station/floor,/area) +"pN" = (/obj/secloset/personal,/obj/window{dir = 8},/turf/station/floor,/area) +"pO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/secloset/security1{allowed = "Prison Security,Prison Warden,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"pP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/highsec{allowed = "Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"pQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/l3closet,/turf/station/floor,/area) +"pR" = (/obj/closet/l3closet,/turf/station/floor,/area) +"pS" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"pT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"pU" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"pV" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"pW" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"pX" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"pY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/locator,/turf/station/floor,/area) +"pZ" = (/obj/stool/bed,/turf/station/floor,/area) +"qa" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"qb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window{dir = 8},/turf/station/floor,/area) +"qc" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"qd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"qe" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area) +"qf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/dna,/turf/station/floor,/area) +"qg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/obj/window,/turf/station/floor,/area) +"qh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"qi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/obj/window,/turf/station/floor,/area) +"qj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"qk" = (/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"ql" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"qm" = (/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"qn" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"qo" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"qp" = (/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"qq" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"qr" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"qs" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"qt" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"qu" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/epilepsy,/obj/item/weapon/pill_canister/cough,/turf/station/floor,/area) +"qv" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/m_pill/superpill,/turf/station/floor,/area) +"qw" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/Tourette,/turf/station/floor,/area) +"qx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/syndicate_uplink,/turf/station/floor,/area) +"qy" = (/obj/machinery/recharger,/turf/station/floor,/area) +"qz" = (/obj/closet/wardrobe/white,/turf/station/floor,/area) +"qA" = (/obj/secloset/animal,/turf/station/floor,/area) +"qB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/sleeper,/turf/station/floor,/area) +"qC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"qD" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/floor,/area) +"qE" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area) +"qF" = (/obj/item/weapon/sheet/r_metal,/obj/item/weapon/sheet/r_metal,/turf/station/floor,/area) +"qG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/suit/firesuit,/turf/station/floor,/area) +"qH" = (/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/floor,/area) +"qI" = (/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"qJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"qK" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area) +"qL" = (/obj/item/weapon/extinguisher,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"qM" = (/obj/item/weapon/brutepack,/turf/station/floor,/area) +"qN" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/under/orange,/turf/station/floor,/area) +"qO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area) +"qP" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area) +"qQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/sleeper,/turf/station/floor,/area) +"qR" = (/obj/item/weapon/card/id{name = "Secret Base Locker Access"; access_level = 0; lab_access = 0; engine_access = 0; air_access = 0; registered = "Secret Base Use Only"; assignment = "Secret Base"},/turf/station/floor,/area) +"qS" = (/obj/secloset/security2{allowed = "Prison Security,Prison Warden,Forensic Technician,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"qT" = (/obj/sp_start{name = "hobnob"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qU" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"qV" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"qW" = (/obj/item/weapon/ointment,/turf/station/floor,/area) +"qX" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/med_data,/turf/station/floor,/area) +"qY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "exadv1"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"qZ" = (/obj/sp_start{name = "soraku"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"ra" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"rb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/brutepack,/turf/station/floor,/area) +"rc" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"rd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/cryo_cell,/turf/station/floor,/area) +"re" = (/obj/item/weapon/disk/nuclear,/turf/station/floor,/area) +"rf" = (/obj/machinery/nuclearbomb{icon_state = "nuclearbomb1"; anchored = 1; extended = 1},/turf/station/floor,/area) +"rg" = (/obj/sp_start{name = "epox"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"rh" = (/obj/item/weapon/radio/beacon,/turf/station/floor,/area) +"ri" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"rj" = (/obj/item/weapon/storage/firstaid/syringes,/turf/station/floor,/area) +"rk" = (/obj/machinery/computer/security,/turf/station/floor,/area) +"rl" = (/obj/sp_start{name = "thiefjack"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"rm" = (/obj/sp_start{name = "expertadvisor"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"rn" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area) +"ro" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area) +"rp" = (/obj/machinery/teleport/station,/turf/station/floor,/area) +"rq" = (/obj/machinery/teleport/hub,/turf/station/floor,/area) +"rr" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area) +"rs" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"rt" = (/obj/item/weapon/radio,/turf/station/floor,/area) +"ru" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/ointment,/turf/station/floor,/area) +"rv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"rw" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/bottle/rejuvenators,/turf/station/floor,/area) +"rx" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"ry" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area) +"rz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area) +"rA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/turf/station/floor,/area) +"rB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area) +"rC" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area) +"rD" = (/obj/watertank,/turf/station/floor,/area) +"rE" = (/obj/weldfueltank,/turf/station/floor,/area) +"rF" = (/obj/secloset/medical1{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"rG" = (/obj/secloset/medical2{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"rH" = (/obj/table,/obj/item/weapon/healthanalyzer,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"rI" = (/obj/window,/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"rJ" = (/obj/window,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"rK" = (/obj/machinery/computer/pod{id = "sb1"},/turf/station/floor,/area) +"rL" = (/obj/machinery/mass_driver{dir = 4; id = "sb1"},/obj/machinery/pod{dir = 4},/turf/station/engine/floor,/area) +"rM" = (/obj/machinery/door/poddoor{id = "sb1"},/turf/station/engine/floor,/area) +"rN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/turf/station/floor,/area) +"rO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/turf/station/floor,/area) +"rP" = (/obj/machinery/computer/pod{id = "sb2"},/turf/station/floor,/area) +"rQ" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"rR" = (/obj/machinery/mass_driver{dir = 4; id = "sb2"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rS" = (/obj/machinery/door/poddoor{id = "sb2"},/turf/station/engine/floor,/area) +"rT" = (/obj/machinery/computer/pod{id = "sb3"},/turf/station/floor,/area) +"rU" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"rV" = (/obj/machinery/mass_driver{dir = 4; id = "sb3"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"rW" = (/obj/machinery/door/poddoor{id = "sb3"},/turf/station/engine/floor,/area) +"rX" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"rY" = (/obj/machinery/computer/pod{id = "sb4"},/turf/station/floor,/area) +"rZ" = (/obj/machinery/mass_driver{dir = 4; id = "sb4"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"sa" = (/obj/machinery/door/poddoor{id = "sb4"},/turf/station/engine/floor,/area) +"sb" = (/obj/item/weapon/radio/beacon,/turf/space,/area) +"sc" = (/obj/machinery/computer/pod{id = "sb5"},/turf/station/floor,/area) +"sd" = (/obj/machinery/mass_driver{dir = 4; id = "sb5"},/turf/station/engine/floor,/area) +"se" = (/obj/machinery/door/poddoor{id = "sb5"},/turf/station/engine/floor,/area) +"sf" = (/turf/station/command/wall,/area/supply_station) +"sg" = (/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sh" = (/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"si" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sj" = (/turf/station/command/floor,/area/supply_station) +"sk" = (/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sl" = (/obj/item/weapon/storage/backpack,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sm" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/command/floor,/area/supply_station) +"sn" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/command/floor,/area/supply_station) +"so" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"sp" = (/obj/grille,/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"sq" = (/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area) +"sr" = (/obj/grille,/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) +"ss" = (/obj/bedsheetbin,/turf/station/command/floor,/area/supply_station) +"st" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor,/area/supply_station) +"su" = (/obj/item/weapon/paper_bin,/obj/item/weapon/game_kit,/turf/station/command/floor,/area/supply_station) +"sv" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/command/floor,/area/supply_station) +"sw" = (/obj/watertank,/turf/station/command/floor,/area/supply_station) +"sx" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sy" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"sz" = (/obj/closet/l3closet,/turf/station/command/floor,/area/supply_station) +"sA" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/command/floor,/area/supply_station) +"sB" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/backpack,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor,/area/supply_station) +"sC" = (/obj/item/weapon/tile,/obj/item/weapon/rods,/turf/station/command/floor,/area/supply_station) +"sD" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"sE" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/command/floor,/area/supply_station) +"sF" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor,/area/supply_station) +"sG" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/command/floor,/area/supply_station) +"sH" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sI" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sJ" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"sK" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"sL" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/command/floor,/area/supply_station) +"sM" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/turf/station/command/floor,/area/supply_station) +"sN" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/station/command/floor,/area/supply_station) +"sO" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/disk_kit,/obj/item/weapon/storage/id_kit,/turf/station/command/floor,/area/supply_station) +"sP" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/obj/item/weapon/storage/lglo_kit,/obj/item/weapon/storage/stma_kit,/turf/station/command/floor,/area/supply_station) +"sQ" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"sR" = (/obj/machinery/dispenser,/turf/station/command/floor,/area/supply_station) +"sS" = (/obj/weldfueltank,/turf/station/command/floor,/area/supply_station) +"sT" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area/supply_station) +"sU" = (/obj/table,/obj/item/weapon/storage/firstaid/syringes,/obj/item/weapon/bottle/toxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/dropper,/turf/station/command/floor,/area/supply_station) +"sV" = (/obj/item/weapon/camera,/turf/station/command/floor,/area/supply_station) +"sW" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"sX" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor,/area/supply_station) +"sY" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor,/area/supply_station) +"sZ" = (/obj/move/wall,/turf/space,/area/vehicles/shuttle1) +"ta" = (/obj/move/floor,/obj/window,/obj/window{dir = 1},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"tb" = (/obj/closet/emcloset,/turf/station/command/floor,/area/supply_station) +"tc" = (/obj/move/floor,/obj/window{dir = 1},/turf/space,/area/vehicles/shuttle1) +"td" = (/obj/machinery/door/window,/turf/station/command/floor,/area/supply_station) +"te" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"tf" = (/obj/move/floor,/obj/window{dir = 8},/turf/space,/area/vehicles/shuttle1) +"tg" = (/obj/move/floor,/turf/space,/area/vehicles/shuttle1) +"th" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/vehicles/shuttle1) +"ti" = (/obj/move/floor,/obj/window{dir = 4},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"tj" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/turf/station/command/floor,/area/supply_station) +"tk" = (/turf/station/command/wall{icon_state = "CCWall2"},/area/supply_station) +"tl" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/vehicles/shuttle1) +"tm" = (/obj/machinery/door/airlock,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tn" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"to" = (/obj/machinery/computer/teleporter,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tp" = (/obj/machinery/teleport/station,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tq" = (/obj/machinery/teleport/hub,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tr" = (/obj/item/weapon/hand_tele,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"ts" = (/obj/move/floor,/obj/machinery/connector{dir = 4},/obj/window{dir = 4},/obj/window,/obj/machinery/atmoalter/canister/oxygencanister,/turf/space,/area/vehicles/shuttle1) +"tt" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/shuttle/engine/heater,/turf/space,/area/vehicles/shuttle1) +"tu" = (/obj/move/floor,/obj/machinery/connector{dir = 8},/obj/window{dir = 8},/obj/window,/obj/machinery/atmoalter/canister/poisoncanister,/turf/space,/area/vehicles/shuttle1) +"tv" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "6"; dir = 6; p_dir = 6},/turf/space,/area/vehicles/shuttle1) +"tw" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/shuttle/engine/router,/turf/space,/area/vehicles/shuttle1) +"tx" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "10"; dir = 10; p_dir = 10},/turf/space,/area/vehicles/shuttle1) +"ty" = (/obj/machinery/computer/pod{name = "Mass Driver"; id = 50},/turf/station/command/floor,/area/supply_station) +"tz" = (/obj/machinery/mass_driver{dir = 4; id = 50},/obj/machinery/recon{dir = 4},/turf/station/command/floor,/area/supply_station) +"tA" = (/obj/machinery/door/poddoor{id = 50},/turf/station/command/floor,/area/supply_station) +"tB" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 5},/obj/machinery/shuttle/engine/propulsion/burst/left,/turf/space,/area/vehicles/shuttle1) +"tC" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 1},/obj/machinery/shuttle/engine/propulsion,/turf/space,/area/vehicles/shuttle1) +"tD" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 9},/obj/machinery/shuttle/engine/propulsion/burst/right,/turf/space,/area/vehicles/shuttle1) +"tE" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tF" = (/turf/station/command/wall{icon_state = "CCWall2"},/area) +"tG" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor{density = 1},/area) +"tH" = (/obj/begin,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tI" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"tJ" = (/obj/machinery/hologram_proj,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tK" = (/turf/station/command/floor{icon_state = "Floor2"},/area) +"tL" = (/turf/station/command/floor{icon_state = "Floor2"},/area/start) +"tM" = (/obj/machinery/computer/hologram_comp,/turf/station/command/floor{icon_state = "Floor2"},/area) +"tN" = (/obj/machinery/door/airlock,/turf/station/command/floor,/area/supply_station) +"tO" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor,/area/supply_station) +"tP" = (/obj/move/wall,/turf/space,/area/shuttle) +"tQ" = (/obj/move/floor,/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle) +"tR" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle) +"tS" = (/obj/move/floor,/obj/machinery/sleeper,/turf/space,/area/shuttle) +"tT" = (/obj/move/floor,/obj/machinery/computer/sleep_console,/turf/space,/area/shuttle) +"tU" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"tV" = (/obj/move/floor,/obj/move/wall,/turf/space,/area/shuttle) +"tW" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"tX" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/space,/area/shuttle) +"tY" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/obj/window{dir = 4},/turf/space,/area/shuttle) +"tZ" = (/obj/move/floor,/turf/space,/area/shuttle) +"ua" = (/obj/move/floor,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"ub" = (/obj/move/floor,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle) +"uc" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle) +"ud" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"ue" = (/obj/move/floor,/obj/machinery/door/window,/turf/space,/area/shuttle) +"uf" = (/obj/move/floor,/obj/stool/chair{dir = 4},/turf/space,/area/shuttle) +"ug" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/turf/space,/area/shuttle) +"uh" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle) +"ui" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/shuttle) +"uj" = (/obj/move/floor,/obj/machinery/computer/shuttle,/obj/window{dir = 4},/turf/space,/area/shuttle) +"uk" = (/obj/move/floor,/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle) +"ul" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/turf/space,/area/shuttle) +"um" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"un" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window{dir = 4},/turf/space,/area/shuttle) +"uo" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"up" = (/turf/station/shuttle/wall,/area) +"uq" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/shuttle/floor,/area) +"ur" = (/obj/move/floor,/obj/shuttle/door,/turf/station/shuttle/floor,/area) +"us" = (/obj/machinery/sleeper,/turf/station/shuttle/floor,/area) +"ut" = (/obj/machinery/computer/sleep_console,/turf/station/shuttle/floor,/area) +"uu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"uv" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"uw" = (/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/station/shuttle/floor,/area) +"ux" = (/turf/station/shuttle/floor,/area) +"uy" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"uz" = (/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/shuttle/floor,/area) +"uA" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/station/shuttle/floor,/area) +"uB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"uC" = (/obj/machinery/door/window,/turf/station/shuttle/floor,/area) +"uD" = (/obj/stool/chair{dir = 4},/turf/station/shuttle/floor,/area) +"uE" = (/obj/table,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/rejuvenators,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uF" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/shuttle/floor,/area) +"uG" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/shuttle/floor,/area) +"uH" = (/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uI" = (/obj/window{dir = 4},/obj/item/weapon/a_gift,/turf/station/shuttle/floor,/area) +"uJ" = (/obj/machinery/door/window{dir = 1},/turf/station/shuttle/floor,/area) +"uK" = (/obj/table,/obj/item/weapon/radio,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"uL" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"uM" = (/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"uN" = (/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"uO" = (/turf/station/command/wall/other,/area) +"uP" = (/obj/secloset/medical1,/turf/station/command/floor/other,/area) +"uQ" = (/obj/secloset/medical2,/turf/station/command/floor/other,/area) +"uR" = (/obj/secloset/animal,/turf/station/command/floor,/area) +"uS" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area) +"uT" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area) +"uU" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area) +"uV" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor/other,/area) +"uW" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/healthanalyzer,/obj/item/weapon/dropper,/turf/station/command/floor/other,/area) +"uX" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/command/floor/other,/area) +"uY" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/syringes,/turf/station/command/floor/other,/area) +"uZ" = (/turf/station/command/floor/other,/area) +"va" = (/turf/station/command/floor,/area) +"vb" = (/obj/stool/chair,/turf/station/command/floor/other,/area) +"vc" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/command/floor/other,/area) +"vd" = (/obj/morgue,/turf/station/command/floor/other,/area) +"ve" = (/obj/machinery/sleeper,/turf/station/command/floor,/area) +"vf" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor{icon_state = "Floor2"},/area) +"vg" = (/obj/stool/chair{dir = 4},/turf/station/command/floor/other,/area) +"vh" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vi" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Infirmary"},/turf/station/command/floor,/area) +"vj" = (/obj/start{name = "Prison Doctor"},/turf/station/command/floor{icon_state = "Floor2"},/area) +"vk" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"vl" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor,/area) +"vm" = (/obj/table{icon_state = "sides"; dir = 8},/turf/station/command/floor/other,/area) +"vn" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/command/floor/other,/area) +"vo" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/command/floor/other,/area) +"vp" = (/obj/stool/chair{dir = 8},/turf/station/command/floor/other,/area) +"vq" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/stma_kit,/turf/station/command/floor/other,/area) +"vr" = (/obj/table{icon_state = "corners"; dir = 10},/turf/station/command/floor/other,/area) +"vs" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area) +"vt" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area) +"vu" = (/obj/closet/wardrobe/white,/turf/station/command/floor,/area) +"vv" = (/obj/closet/wardrobe/white,/turf/station/command/floor/other,/area) +"vw" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor/other,/area) +"vx" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/lglo_kit,/turf/station/command/floor/other,/area) +"vy" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Recreation Area (West)"},/turf/station/command/floor/other,/area) +"vz" = (/obj/stool/chair{dir = 1},/turf/station/command/floor/other,/area) +"vA" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Recreation Area (East)"},/turf/station/command/floor/other,/area) +"vB" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"vC" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor/other,/area) +"vD" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/command/floor/other,/area) +"vE" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor/other,/area) +"vF" = (/obj/machinery/door/window{dir = 8},/turf/station/command/floor/other,/area) +"vG" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"vH" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"vI" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/command/floor/other,/area) +"vJ" = (/obj/secloset/security1,/turf/station/command/floor/other,/area) +"vK" = (/obj/machinery/computer/security{name = "security- PS13"; network = "PS13"},/turf/station/command/floor/other,/area) +"vL" = (/obj/secloset/security2,/obj/machinery/camera{network = "PS13"; c_tag = "Security Office"},/turf/station/command/floor/other,/area) +"vM" = (/obj/secloset/security2,/turf/station/command/floor/other,/area) +"vN" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area) +"vO" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor/other,/area) +"vP" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area) +"vQ" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"vR" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"vS" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/command/floor/other,/area) +"vT" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/turf/station/command/floor/other,/area) +"vU" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"vV" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 1; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"vW" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"vX" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor/other,/area) +"vY" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area) +"vZ" = (/obj/start{name = "Prison Security"},/turf/station/command/floor/other,/area) +"wa" = (/obj/table{icon_state = "alone"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area) +"wb" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area) +"wc" = (/obj/table{icon_state = "sides"; dir = 1},/turf/station/command/floor/other,/area) +"wd" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"we" = (/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"wf" = (/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/command/floor/other,/area) +"wg" = (/obj/secloset/animal,/turf/station/command/floor/other,/area) +"wh" = (/obj/bedsheetbin,/turf/station/command/floor/other,/area) +"wi" = (/obj/secloset/personal,/turf/station/command/floor/other,/area) +"wj" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"wk" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/command/floor/other,/area) +"wl" = (/obj/closet,/turf/station/command/floor/other,/area) +"wm" = (/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area) +"wn" = (/obj/stool/bed,/turf/station/command/floor/other,/area) +"wo" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wp" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"wq" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 2},/turf/station/command/floor/other,/area) +"wr" = (/obj/machinery/sec_lock{pixel_x = 32},/turf/station/command/floor/other,/area) +"ws" = (/obj/closet/wardrobe/orange,/turf/station/command/floor/other,/area) +"wt" = (/obj/table{icon_state = "sides"; dir = 4},/turf/station/command/floor/other,/area) +"wu" = (/obj/table{icon_state = "alone"},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area) +"wv" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 1},/turf/station/command/floor/other,/area) +"ww" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/command/floor/other,/area) +"wx" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Solitary Cells"},/turf/station/command/floor/other,/area) +"wy" = (/obj/machinery/computer/data/weapon/log,/turf/station/floor,/area) +"wz" = (/turf/station/floor/grid,/area) +"wA" = (/obj/machinery/computer/data/weapon/info,/turf/station/floor,/area) +"wB" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"wC" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/command/floor/other,/area) +"wD" = (/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wE" = (/obj/closet/wardrobe,/turf/station/command/floor/other,/area) +"wF" = (/obj/closet/wardrobe/mixed,/turf/station/command/floor/other,/area) +"wG" = (/obj/table{icon_state = "sides"; dir = 2},/turf/station/command/floor/other,/area) +"wH" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio{suffix = "\[2]"; freq = 144.9},/turf/station/command/floor/other,/area) +"wI" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Courtroom"},/turf/station/command/floor/other,/area) +"wJ" = (/obj/window{dir = 10},/turf/station/command/floor/other,/area) +"wK" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"wL" = (/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"wM" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area) +"wN" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/command/floor/other,/area) +"wO" = (/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area) +"wP" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/pen,/turf/station/command/floor/other,/area) +"wQ" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area) +"wR" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper,/turf/station/command/floor/other,/area) +"wS" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Witness Prep Area"},/turf/station/command/floor/other,/area) +"wT" = (/obj/start{name = "Prison Warden"},/turf/station/command/floor/other,/area) +"wU" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area) +"wV" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/sop,/turf/station/command/floor/other,/area) +"wW" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Warden's Office"},/turf/station/command/floor/other,/area) +"wX" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/command/floor/other,/area) +"wY" = (/obj/table,/obj/machinery/recharger,/turf/station/command/floor/other,/area) +"wZ" = (/obj/rack,/obj/item/weapon/clothing/under/green,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/head/helmet,/turf/station/command/floor/other,/area) +"xa" = (/obj/machinery/door/airlock,/turf/station/command/floor/other,/area) +"xb" = (/obj/move/wall{icon_state = "wall2"},/turf/space,/area/shuttle_prison) +"xc" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle_prison) +"xd" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"xe" = (/turf/space,/area/shuttle_prison) +"xf" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"xg" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair,/turf/space,/area/shuttle_prison) +"xh" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/grille,/turf/space,/area/shuttle_prison) +"xi" = (/obj/move/floor{icon_state = "floor2"},/turf/space,/area/shuttle_prison) +"xj" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"xk" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"xl" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"xm" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle_prison) +"xn" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle_prison) +"xo" = (/obj/move/floor{icon_state = "floor2"},/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"xp" = (/obj/move/floor{icon_state = "floor2"},/obj/grille,/turf/space,/area/shuttle_prison) +"xq" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair{dir = 4},/turf/space,/area/shuttle_prison) +"xr" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window,/turf/space,/area/shuttle_prison) +"xs" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/bottle/s_tox,/turf/space,/area/shuttle_prison) +"xt" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle_prison) +"xu" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/turf/space,/area/shuttle_prison) +"xv" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/computer/prison_shuttle,/turf/space,/area/shuttle_prison) +"xw" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle_prison) +"xx" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/obj/item/weapon/gun/energy/taser_gun,/turf/space,/area/shuttle_prison) +"xy" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"xz" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"xA" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/orange,/turf/space,/area/shuttle_prison) +"xB" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafacagahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalamahanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeapaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasatacauasacavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafacacacaxahacavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayazaAazaAazaAayaBaCaBaBaBaBaDazaAazaAazaAacacacacasacavavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaEaFaFaFaFaGaFaHaHaHaHaHaHaHacacacaIahacavavavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeaJaJaJaJaJaJaJaJaJaKaJaJaJaJaJaJaJaJaJaJaJaJaLaeaEaMaNaFaOaNaMaHaPaQaRaRaRaRacacacacahacaBaBaBaSaSaSaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaUaeawaVawaWawawaVawawawawaVawawaWawawaVawawawaVaXaeaYaYaYaYaYaYaYaZbabbbbbbbcbbacalbdacahasaFbebfbgbhbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjaeawaJaJaJaJaJaJaJbkaJaJaJaJaJaJaJbkaJaJaJaJaJawaeaYblbmbmbnbobpaZbqbbbbbbbrbbacbsbsacahacaBbtaBbububuaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebvaebwaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebvaeaYblbnbnbnbxbyaZbzbzbzbAbBbCacahbDacbEacaBaBaBavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaebvbFbFbFbGawbHbFbIbJbJbJaVbKbKbLbFbMbMbNbNaebOaeaYbmbmbnbobPbPaZbQbbbbbbbcaHacahahahahacavavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaUaeawawaWbvawawawbFawawawawawawawawbFawawawawaebRaeaYbmbmbnbnbSbPbTbUbbbbbbbrbVbWahahalatacavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawaeawawawbvawbXawbYawawawawawawawawbFbZawawaVawawaeaYbmbmcacbbSccaZcdcecdcdcdaHacacacacacacaBaBcfcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeawchawawawbvawawaVbFawawawawawawawawbYawawawawawawchcicjcjckclckcmaZcnbbbbbbbbcocpcqcrcsctcucvcwcxcyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebFczbFbFbvbvbvbFaWcAcBcCcBawcDcEbFcFcGcGcHawcIaeaYcJbPcKbPbScLaZcMbbbbbbbbcNbbcOcOcOcOcOcOcPcQcyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecRawawbYawawcSbFbFbFbFbFbFcTcTcTbFbFcTcTcTcTaeaeaYbPcUcVcLbScWaZcdcXcdcdcdcYbbbbbcbbbbbbbrcZdacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecRawbNbFawawawdbawawdcawdddededededededededeaeaaaYdfdgckcjckcjaZbbbbbbbbbbdhbbbbdidjdkdlbbdmdncyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecRawbNbFdoawawbFbOawdpaJdqdededededededededeaedrdrdrdrdrdrdrdraZdsbcbbbrbbdtbbbbbrbbbbbbbcdudncyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebFdvbFbFdwaWawbFbOawawaJdxdededededededededeaedydzdzdAdBdCdDdEaHdFbbbbbbbbdtdGdHbbdIdIdIdIdJdKcyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedLdMdNbFawawawbFbOawawdOdPdededededededededeaedydQdRdSdTdTdTdUaHaHaHbVaHbccNdVdWdXdYdZeaebecedcyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeeeeeeeaeefegehbFawawaVbFeiejekelemdededededededededeaedyendSeodSdSepeqerereresererereteueveueueuaBaBaBewaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaexeyezeAeBeeaeaeaeaeaebvbFbFbFbFbFbFbFeCeCeDeEeFeEbFeGeGeGaedydyeHdyeIeIeIeIereJeKeKeKeLereteueveueueuaBeMaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeeNeOeeaBaBaBaBaedvbFbFbFbFbFbFbFePbFbFawawawaeaeaeaeaeereQeKeKeKeKeKeKeReKeKeKeKeSereteTeUeUeVeuaBeWaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYezeAeZeefafbfcaBaeawbFfdfefefefffefeePfgawawawaefhfhfhfhfhfieKeKeKeKeKeKereKeSeSeKeSeretfjeUeUfkeuaBeWaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeeeeefleNfmfnaFbefochawbFfefefefefefefebFbFawawaWaefhfpfqfqfreKeKeKeKeKeKfsereKeSeSeKeSeretfteUfufkeuaBeMaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvfwezeOfxeefyaFbeaBaeawbFfzfzfzfzfzfzfzbFbIawawawaefhfqfqfqfherereserererererererererereretfjeUeUfkeuaBeMaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeeNeAeebeaFfnaBaeawbFbFbFbFbFbFbFbFbFawawawbZaefhfAfqfBfhfCfDfEfFfGfHfIfJfKfKfKfKfFeUeufLeUeUfMeuaBfNaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafOfPezeOfQeebefnfRaBaeawawaWaVawawawawbvdbawawaVfSaefhfqfqfqfhfTfUfVfWfXfYfZgagbgcgdgefFeUeugfgggggheuaBfNaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeeeeeeeaBaBaBaBaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaefhgigigifhfTgjgkglgmfDgngogpfKfKfKfFeUeueueueueueuaBaBaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaaaaaaaaaBaaaFaaaaaFaaaaaFaaaaaFaaaaaFaaaafhfqfqfqfhfFfFgqfhgrgrgrgrgrgrgrgrgrgrgsgtgugvgwgxgygzaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagBgCgCgCgCgBgBgBgBgBgBgBgBgBgBgDgDgDgDgDgDgDgDgDgDgDgDgDgDfhfhgEfqfqfhgFgGgGgHgIgFgGgGgGgGgGgGgJgGgsgKgLgMgugwgygyaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBgBgNgOgOgOgPgQgRgSgTgUgVgWgXgYgDgZhahbhchdhehfhghhhihjhkhlfhhmfqfqfqhngGgGgGgGhogJgGgGgGgGgGgGgFgGhpgvgwgxgwgvgyhqaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhrbegBgNhshthuhvhwhxhyhxhxhzhxhAhxhBhChChDhChChChDhChChDhChEhEfhhFfqfqfqfhgJgGgGgGhGhGhGhGhGhGhGhGhGhGhHgwgwgwgwgwgwhIaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhrfnhxhxhxhyhxhJhxhxhxhxhxhKhxhLhMhBhChChChChChChChChChChChChDfhfqfqfqfqfhgIgIgIhNhGhOhPhQhQhRhShShThUhHhVhWgvhXgthYgvaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhraFgBhZiahxhxhJhxhxhxhxibhLichxidhBieifhChCigihiiijikhChCilimfhfAfqfqgEfhgHgGgGgGhGinhShShShShShUiohUhHipiqgwiqiqhYgwaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhrbehxhxhxirhxishxhxithxhxhxhxhxhMgDgDgDiuiuiuhChCiviwixiyiziAfhfhgigifhfhgJgGgGgGhGiniBioiohShShUiChUhHgvgwgxgwgviDiEaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhraFgBhZiahxhxiFhxhxhAiGhxhxhyhLiHiIiJiKiLiMiNiOiPiQhChChDhCiRfhfAfqfqiSfhgFgGgGgGhGiThUhUhUhShShUiohUhHgsiUiVgsgsgsgsaBgAaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhrbehxhxhxhyhxiWiXhAhyhAhxhxhxiYiZgBjagDiPhDiPjbjcjdiPhChCiPjefhfqfqfqfqgIjfjggGgGhGhGhGaEaEjhaEaEaEaEhHhHjijigsjjjjjjaBavaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBhrfngBhZiajkjkjljmjmjnjoaBjpjpaBaBaBaBgDjbiPjbjqjrjshChChCjtjufhfqfqfqfqgIgGgGjvgGgGgFhGjwjxjyjyjzjAjBjChHgwgwgwgwgwgwaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBjDjDjEjFjDjDaBaBgDgDgDgDgDgDjGjHjIjJjKjLfhfqfqfqfqjMgGgGgGgGgGgGjNjOjyjyjyjPjyjyjyhHjQgwgwgxgwgwaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjRjRjRjRjRjSjRjRjTjRaBjUjVjVjVjWjWjXjYjZjXjXjXjXjXfhfhfhfhfhfhfhfqfqfqfqgIgGgGgGgJgGgGhGjwkajyjyjyjykbjwhHgsgvgwgwkckcaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkdkekekfkekekekekdkgaBjVkhjVkijVkjjXkijVjVkkklkmjXknkikojVkhkpfqgEfqfqfAgIgJgGgGgGgGgFhGjwkqjyjykrjyjyjOksjigwgwgvkckcaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkfkekekdkekekekekfkektjVjVjVjVjVkujXjVjVjVjVkhjXjXkvjVjVjVjVkpfqfqfqfqfqaBaBaBaBkwkwkwaBjwjyjyjyjyjykxjwhHgsgxgwgwkykyaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkekekzkzkzkAkzkzkzkAaBjVjVkijVkhjVkBkhjVjVkijVkpjVkhjVjVjVkikpfqfqfAkCfqaBavavavkDkwkEaEjwjOjwjyjyjyjykFhHgsjigsgwkykyaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkekekzkGkdkfkzkGkdkfaBkHkHkHkHkHkHaBjVjVjVjVjVkpjVjVjVjVkIkIkIkIkIkIkJkIaEaEaBaBaBaBkEaEjwjyjwjykKjykLkMhHgsiUgsgsgsgsaBavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkekekzkNjRkOkzkNjRkOaBkPkPkPkQkQkRaBkhjVjVjVkikpjVkijVkhkIkSkTkUkVkWkXkYkZlalalalaaEkEaEjwjyjwlblcldldaElelelflflglflhaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaBbububuaBliljkzkzkzkzkzkzkzkzaBkQlklllllmlnlojXjXjXjXjXjXjXlolplokIlqlrkYlsltlukXkWlalvkXlwaEkEaEjwlxjwjylylylzaElAlflflflflflBaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaBlClClCaBkekelDlElFlFlGlHlHlIaBlJlllKlLlllnlolMlMlMlMlNlOlPlolQlRlSkSkXlTkXlUkXkYlVlWkYlXlYaEkEaElZkqmajyjyjyjyaEmblflfmclfmdlfaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaamemfmgmhaBmimjmkmkmlmkmkmkmjmmaBmnllmompllkQlomqmqmqmqmrlQlQlomslolSkSkXkXmtkYmumumulamvlXmwaEkEaEjwjwjwkajyjyjyaEmxmylflflflfmyaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaBmzlCmhmAmkmkmBmBmkmBmBmkmCmDaBmEllmFmGllmHlomImImImImJlQlQlolQmKlSmLmMmNmOkXmPkXmQlWkXlXlYaEkEaEjwmRmSjymTmTmTaElflflfmUmVmVmVaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaamemhmWmhmAmkmkmBmBmkmBmBmkmkmkaBkQlmllllmXmHlomYmZmYnanblQlQlomslolSncndnenfngnhninjnklukXluaEkEaEkMkMkMkMkMkMkMaEnlnmnlnnnnnnnnaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaBnolClCaBmBmlmBmBmjmBmBmkmlmknpkQkQnqkQlkmHlonrnrnrnrnslQlQlontlolSlalalalalalalalalalalalaaEkEaEaaaBaFaFaBaFaFaBnunvnwaFaFaFaFaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaBaSaSaSaBaBnxaBaBaBaBaBaBaBaBaBaBaBaBnxaBaBlonynynynynzlQlQlQlQlQnAnBnCnBlSnAnDnDnDnDnDnDnEaEkEaEaaaBaaaaaBaaaaaBnFnGnFaaaaaaaaaEavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnHaFaFfnaFaFbeaBaFfnaFaFbeaFaFfnaFlonInDmKnDmKlQnAlQlQlQlQlQlQlQlSlQlQlQlQlQlQlQnJaEkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnLaFaFaFaFaFaFaBaFaFaFaFaFaFaFaFaFlonMlQlQlQnAlQnNlQnOnElQlQlQlQnPlQnQnQnQnQnQnQlQaEkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaFaFaFaFaFaFaFaBaFaFaFaFaFaFaFaFaFlonRlQnElQnSlQlQlQnTnUnVnVnWnWlSnEnXnXnXnXnXnXnAaEkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkwnYfnaFaFbeaFaFfnaBaFbeaFaFfnaFaFbenZlooaobocodlQlQlQlQoelQlQoflQnElSlSlSlSlSlSlSlSlSaEkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkwaBaBaBogaBaBaBaBaBaBaBaBaBaBjhaBaBaBlolQlQlQohlQlQlQohlQlQoiojnAokohlQlQololololololaBkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkwaBaBfRaFaFaFaFaFaFaFomaBaFaFaFaFaFaFlonXnXnXonooopoonAoqorosotouovlolQlQololololololaBkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkwaBaBfRaFfnaFaFbeaFaFowaBaFbeaFaFfnaFlololololololololololololololololQlQoxoxoxoxoxoxaBkEaBaanKnKnKnKnKnKnKnKnKnKnKnKnKnKnKavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkwaBaBoyoyozoyozoAoBoCoDaBaFaFaFaFaFaFaBaaaaaaloaaaaaaloaaaaaaaaaaaalolQlQoxoxoxoxoxoxaBkEaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBkDaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBkEkDaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoEoFkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkEkwkwaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBaBkDkwkwaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,2) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,3) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,4) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,5) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,6) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,7) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,8) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,9) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBoGoGoHaFaFjhbejhoIoIoIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoJfnaBoKoLoMoNoOoMoNaBaFaFaFbeaFaBaBaBoIoIoIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFaBoPfnaFaFbeaFaFaBbeaFaFaFfnaFoQaBoRoIoIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBfnoJoSoTaFaFaFaFfnaFoUaFfnaFaFaFoVoWaBoXoIoIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBoYaFoZoTaFaFbeaFpapbaBaFaFaFbeaFaFpcaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBbefnoUaFaFaFaFaFaFpdaBpepfaFpgphaFpipjpkplaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaFaFpmpnbeaFfnaFaFpoaBbeaFaFpppqaFaFbeaFfnaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBprbeaBpsptpupvpwpxpyaBpepfaFpzaFpAfnpipBpkaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBfnaFpCaFpDaFaFaFaFbeaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBpepfoBpEpEpFpFpGpGpHaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaBaBaBaBaBaBaBaBaBaBaBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,10) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapIpJpJpKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSfRaFoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSbefnoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSaFaFoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfnbeaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEbefnaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfnbeaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEbefnaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEpLpMpNpOpPpQpRaEaFaFaEpSpTpUpVpWpXaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpYpZqaqbaFaFqcqdaEnxqeaEbeoLaFfnpapdqfaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEqgqhqinwqjqkqlqmaBaFbeaBfnaFaFbeaFaFfnqnaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaEaEaEaEqofnqpaFqqqrqsqsaBaFaFaBoMoNpnpbaFaFaFqtaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaEquqvqwaEqxaFbeqyaBaBaBaBaBaFaFaBaBaBaBaBqzaFaFqAaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqBpfqCbenpfnaFaFfnaBqDqEqFbeaFaFqGqHqIqJaBqKaFbeqLaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaFaFqMaFaBbeaFbeaFnpaFaFaFaFaFaFaFaFqNqNaBqOaFfnqPaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqQpfbefnaBoGqKqRqSaBaFaFaFqTaFaFaFaFaFaFaBaFaFaFqUaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEqVaFqWaFaBaBaBaCaBaBqXaFaFqYaFqZbeaFaFfnnpfnqUrafaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaErbpircrdaBreaFaFrfaBfcaFaFrgrhaFaBaBaBaBaBbeqUrifaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaErjaFaFfRaBaBaBaCaBaBrkaFaFrlaFrmrnrorprqaBeMeMrrrraEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaErsrtberuaBoGqKqRqSaBfnaFaFbeaFaFrnrvaFbeaBeMeMrrrraEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaErwaFaFaFaBbeaFbeaFnpaFaFaFaFaFaFrxryryaFaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaErzaFrAbenpfnaFaFfnaBrBrCrDrEbefnnpbeaFfnaEaaaEaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaEaErFrGrHaEqxaFbeqyaBaBaBaBaBaFaFaEaEaEnxaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaEaEaEaErIqhrJaFqqqrqsqsaBaFaFaEaaaEbefnrnrKaFnprLrMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaErNfnrOnwqjqkqlqmaBfnbeaEaaaEaFaFrnfnbeaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEpYpZqaqbaFaFqcqdaBnxqeaEaEaEaFaFrnrPaFrQrRrSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEpLpMpNpOpPpQpRaEaFaFaEaaaEfnbernbeaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEbefnaEaaaEaFaFrxrTfnrUrVrWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaEaEaFaFnpbeaFaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaEbefnrXrYaFrQrZsaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFsbaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfnbeaEaaaEaEaEaEfnbeaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaFaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaEscaFnpsdseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEbefnaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaFaFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsgshsisisisisisfsjsjsjsjsjsjsfaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEfnbeaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfskskslslslslslsfsfsfsfsfsfsfsfaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarnaFaFrnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsksksksksksksksfsjsjsmsmsmsmsfaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarnaFaFrnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsksksksksksksksfsnsjsmsmsmsmsfaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarnbesornaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsfsfsfsfsfsfsfsksksfsjsjsmsmsmsmsfsfsfsfsfsfsfsfsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaspsqsqsraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfssstsusvsjswsfsxsysfszsjsjsjsAsAsfsBsjsjsCsCsCsCsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsjsjsjsjsjsDsfsksksfszsjsEsEsAsAsfsBsjsjsjsjsjsFsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsGsHsIsJsjsKsfsjsjsfsLsjsEsEsAsAsfsBsjsjsjsMsMsMsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsGsNsOsPsjsQsfsjsjsfsLsjsEsEsAsAsfsBsjsjsjsMsMsMsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsGsjsjsjsjsQsfsjsjsfsLsjsEsEsAsAsfsRsjsjsjsMsMsMsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsSsTsjsUsVsWsfsjsjsfsLsjsEsEsAsAsfsRsjsXsXsXsXsXsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsfsfsYsfsfsfsfsjsjsfsfsYsfsfsfsfsfsRsjsXsXsXsXsXsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasZtasZaaaaaasfsjsjsjsjsjsjsjsjsjsjtbtbtbtbsfsjsjsXsXsXsXsXsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasZsZtcsZsZsfsfsfsnsjsjsjsjsjsjsjsjsjsjsjsjsjtdsjsjsXsXsXsXsXsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatetftgthtiaaaasfsjsjsjsjsjsjsjsjsjsjsjsjsjsjsfsjsjtjtjtjtjtjsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasZtgtgtgsZtktktksjsjsjsjtktktktktktktktktktksfsRsjtjtjtjtjtjsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatetftgtgtltmsktmsjsjsjsjtntotptqsksktotptqtrsfsRsjtjtjtjtjtjsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasZtgtgtgsZtktktksjsjsjsjtnsksksksksksksksksksfsRsjtjtjtjtjtjsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasZtstttusZaaaasfsjsjsjsjtnsksksksksksksksksksfsfsfsfsfsfsfsfsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasZtvtwtxsZsfsfsfsjsjsjsjtntotptqsksktotptqsksfsjsvtysjsjsjtztAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatBtCtCtCtDaaaasfsjsjsjsjtnsksksksksksksksksksfsjsjsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfsjsjsjsjtnsksksksksksksksktEsfsjsjsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtFtFtFtFtFtGtGtGtGtGtGtGtGtFsfsfsfsjsjsjsjtnsksksksksksksksksksfsjsjsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtFtFtFtFtFtFtHtHtHtHtHtHtHtHtHtHtHtHtHtFsfsjsjsjsjsjsjtktktktItktktktktktksfsjsjsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtJtKtJtKtJtFtLtLtLtLtLtLtLtLtLtLtLtLtLtFsfsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsfsfsfsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtMtKtMtKtMtFtLtLtLtLtLtLtLtLtLtLtLtLtLtFsfsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjtNsjtNsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtKtKtKtKtKtFtLtLtLtLtLtLtLtLtLtLtLtLtLtFsfsnsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsfsfsfsjsjsjsjsjtAaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtKtKtKtKtKtKtLtLtLtLtLtLtLtLtLtLtLtLtLtFsfsjsjsjsjsjsjsjsjsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtKtKtKtKtKtFtLtLtLtLtLtLtLtLtLtLtLtLtLtFsfsjsjsjsjsjsjsjsjsfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatFtFtFtFtFtFtFtFtFtFtFtFtGtGtGtGtGtGtGtGtFtktmtktOtOtOtOtOtOsfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatksktkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatktmtkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPtPtPtPtPtQtPtPtRtPtPtPtQtPnKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPtStTtUtVtWtXtYtZuatPubuctPtPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPudtZudtRtZtUtZudueudtUufuguhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPtStTtZuhuftZtZtZuiuftZufujuhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPudtZuduhufudtZtUuktUudufuluhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPtStTtUuhumtZtZtZuntPtUuotPtPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatPtPtPtPtPtQtPtPtPtQtPtPtQtPnKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupupupupupuqupupurupupupuqupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupusutuuupuvuwuwuxuyupuzuAupupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupuBuxuxuruxuxuxuxuCuxuxuDuEuFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupusutuxuGuDuxuxuxuHuDuxuDuIuFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupuBuxuxuGuDuxuxuxuJuxuxuDuKuFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupusutuuuGuLuxuxuxuMupuuuNupupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupupupupupuqupupupuqupupuqupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,11) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,12) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuPuQuRuSuTuUuVuWuXuYuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZvatKtKvavbvbuZuZuZuZuZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvavavatKtKvavavauZuZvcvduZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOuOuOuOuOuOuOvevftKtKtKtKtKvavgvhuOvduZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuZuZuZuZuZuZuZuZuZuOvitKtKtKvjtKtKvauZvkuOvduZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZvbvbuZuZuZvbvbuZuZuOvevlvatKtKvavavauZvmuOvduZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZvgvnvovpuZvgvnvovpuZuOuZuZvatKtKvauZuZuZvquOvduZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZvgvrvsvpuZvgvrvsvpuZuOvtvtvavavavuvvvwvwvxuOvduZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvyuZvzvzuZuZuZvzvzuZvAvBvCvDvEvFvGuOuOuOuOuOuOuOuOuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvHuZuZuZuZuZuZuZuZuZuZvIuZuZuZuZuZvBvJvJvJvJvKvLvMvNvOvOvPuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvQuZuZuZuZuZuZvbvbuZuZvRuZuZuZuZuZvBuZuZuZuZuZuZuZuZvSvSvTuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvUuZuZuZuZuZvgvnvovpuZvVuZuZuZuZuZvIuZuZuZuZuZuZuZuZuZvWvXuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvYuZuZuZuZuZvgvrvsvpuZvcuZuZuZuZuZvRuZuZuZvZuZuZuZuZuZvWvXuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwawbwcwdvHuZuZvzvzuZuZvBuZuZuZuZuZvcuZuZuZuZuZuZuZweuZwfvXuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOuOuOuOuOuOvIuZuZuZuZuZvBwgwgwhwiwiwiwiwjuZwfvXuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuZuZuZuZuZuZuOuOuZuZuZuZuZuOuOuOuOuOuOuOuOuZuZuZuOuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZvbvbuZwkwkuZuZuZuZuZuZvBwlwmwnuOuZuZuZuZuZuZuZuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZvgwowpvpuZvBwquZuZuZuZwrvBuZwmwnuOwswswswswswswsuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZvgvmwtvpuZvBuZuZuZuZuZwkwkuZuZwuuOuOuOuOuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOuOuZuZuZuZuZuZuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOwnwmwlvBuZuZuZuZuZuZvBwlwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwmwnuOwmwnuOwnwmuZvBwvuZuZuZuZwrvBuZwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuOuZuZuOwuuZwkwkuZuZuZuZuZwkwkuZuZwuuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwwuOuOwwuOuOuOuOuOuOuZuZuZuZuZuZuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuZuZuZuZuZuZuZuZuZuZuZuZuZuZvBwlwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwxuZuZuZuZuZuZuZuZuZuZuZuZuZuZwrvBuZwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuZuZuZuZuZuZuZuZuZuZuZuZuZwkwkuZuZwuuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwwuOuOwwuOuOuOuOuOuOuZuZuZuZuZuZuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuOuZuZuOwnwmwlvBuZuZuZuZuZuZvBwlwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwmwnuOwmwnuOwnwmuZvBwvuZuZuZuZwrvBuZwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOwuuZwkwkuZuZuZuZuZwkwkuZuZwuuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuZuZuZuZuZuZuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwnwmwlvBuZuZuZuZuZuZvBwlwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwnwmuZvBwvuZuZuZuZwrvBuZwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaTaTaTaTaTaTaTaTaTaTaTaTaTaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwuuZwkwkuZuZuZuZuZwkwkuZuZwuuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaBaBaBaBaBaBaBaBaBaBaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuZuZuZuZuZuZuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBwyaFaFwzaFwzwzwzwzrorprqaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwnwmwlvBuZuZuZuZuZuZvBwlwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaFwzaFwzwzwzwzaFaFaFaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwnwmuZvBwvuZuZuZuZwrvBuZwmwnuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFjhbejhaFaFaFaFrhaFaFaFaFaFaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwuuZwkwkuZuZuZuZuZwkwkuZuZwuuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaFwzwzwzwzwzwzwzwzwzaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuZuZuZuZuZuZuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBwAaFaFwzwzwzwzwzwzwzwzwzaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOuOuOuOvCvDwBwCvGvCuOuOuOuOuOuOuOuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaBaBaBaBaBaBaBaBaBaBaBaBaBaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvovbuZuZuZvpvpuOuOuZuZuZuZuZuZuOwDwswEwFuOwiwiwiwiwiuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaFaBaTaTaTaTaTaTaTaTaTaTaTaTaTaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwGwGwHvbuZvpvpuOuOuZuZuZuZuZuZvmuZuZuZuZuZuZuZuZuZuZuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvbuZuZuZuZvpvpuOuOuZuZuZuZuZuZvmuZuZuZuZuZuZwiwiwiwiuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwIuZuZuZuZuZuZwwuZuZuZuZuZuZuZwJuZuZuZwKuOuZuZuZuZuZuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvnvouZvnvowLuZuOuOuZuZuZuZuZuZvRuZuZuZwMuOwiwiwiwiwiuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOvzvzuZvzvzwLuZuOuOvCvDwBwCvGvCuOuOvFuOuOuOuOuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuZuZuZwNwcuOuZuZuZuZuZuZuZvBuZuZuZuZuZuZuZwOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOwwuOuOuOuOuOuZuZuZuZuZuZuZvBuZuZuZvguZwPwQuZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZvbvbvbvbuOuZuZuZuZuZuZuZvIuZuZuZvguZwRvpuZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwSuZuZuZuZuOuZuZuZuZuZuZuZvRuZwTuZvguZwUwVwWuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuZuZuZuZwwuZuZuZuZuZuZuZvcuZuZuZuZuZuZuZuZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOuOuOuOuZuZuZuZuZuZuZvBuZuZuZuZuZuZuZuZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOwXuZuZuZuZuZuZvBvKuZvJvJvJvJwYwZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuOuOuOxauOuOuOuOuOuOuOuOuOuOuOuOuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOuZuOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauOxauOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxbxbxbxbxcxbxbxdxbxbxbxcxbxeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxfxgxhxixjxixkxixlxbxmxnxbxbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxoxpxpxfxqxfxqxfxrxfxkxqxsxtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxixfxixixqxixqxixuxqxixqxvxtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxoxpxpxfxqxfxqxfxwxfxkxqxxxtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxfxgxhxixyxixkxixzxbxAxBxbxbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbxbxbxbxbxcxbxbxbxcxbxbxcxbxeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/ss13-40.93.2-decomp/spacestation13/ss13_algorithm2.dm b/ss13-40.93.2-decomp/spacestation13/ss13_algorithm2.dm new file mode 100644 index 0000000..1b638a9 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/ss13_algorithm2.dm @@ -0,0 +1,559 @@ + +/proc/SetupOccupationsList() + + var/list/new_occupations = list( ) + for(var/occupation in occupations) + if (!( new_occupations.Find(occupation) )) + new_occupations[occupation] = 1 + else + new_occupations[occupation] += 1 + //Foreach goto(23) + occupations = new_occupations + return + +/proc/DivideOccupations() + + var/list/occupations1 = list( ) + var/list/occupations2 = list( ) + var/list/occupations3 = list( ) + var/list/final_occupations = list( ) + var/list/unassigned_mobs = list( ) + var/occupation_choices = occupations.Copy() + occupation_choices = shuffle(occupation_choices) + for(var/occupation in occupations + assistant_occupations) + occupations1[occupation] = list( ) + occupations2[occupation] = list( ) + occupations3[occupation] = list( ) + final_occupations[occupation] = list( ) + //Foreach goto(78) + occupations1["Captain"] = list( ) + occupations2["Captain"] = list( ) + occupations3["Captain"] = list( ) + final_occupations["Captain"] = list( ) + for(var/mob/human/M as mob in world) + if ((!( M.client ) || (!( M.start ) || M.already_placed))) + else + unassigned_mobs += M + if (M.occupation1 != "No Preference") + occupations1[M.occupation1] += M + if (M.occupation2 != "No Preference") + occupations2[M.occupation2] += M + if (M.occupation3 != "No Preference") + occupations3[M.occupation3] += M + //Foreach goto(187) + for(var/occupation in occupations) + occupations1[occupation] = shuffle(occupations1[occupation]) + occupations2[occupation] = shuffle(occupations2[occupation]) + occupations3[occupation] = shuffle(occupations3[occupation]) + //Foreach goto(339) + occupations1["Captain"] = shuffle(occupations1["Captain"]) + occupations2["Captain"] = shuffle(occupations2["Captain"]) + occupations3["Captain"] = shuffle(occupations3["Captain"]) + var/captain_choice = occupations1["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + captain_choice = occupations2["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + captain_choice = occupations3["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + var/list/contenders = list( ) + for(var/mob/human/M as mob in world) + if (M.client) + contenders += M + //Foreach goto(691) + var/M = pick(contenders) + final_occupations["Captain"] = M + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + occupations1[text("[]", M.occupation1)] -= M + occupations2[text("[]", M.occupation2)] -= M + occupations3[text("[]", M.occupation3)] -= M + for(var/mob/human/M as mob in unassigned_mobs) + if (assistant_occupations.Find(M.occupation1)) + M.Assign_Rank(M.occupation1) + unassigned_mobs -= M + //Foreach goto(844) + for(var/occupation in occupation_choices) + var/L = occupations1[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + if ((!( occupation_choices.len ) || !( unassigned_mobs.len ))) + else + //Foreach continue //goto(913) + for(var/mob/human/M as mob in unassigned_mobs) + if (assistant_occupations.Find(M.occupation2)) + M.Assign_Rank(M.occupation2) + unassigned_mobs -= M + //Foreach goto(1158) + for(var/occupation in occupation_choices) + var/L = occupations2[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + if (multiple) + var/X = final_occupations[occupation] + eligible -= X.len + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + if ((!( occupation_choices.len ) || !( unassigned_mobs.len ))) + else + //Foreach continue //goto(1227) + for(var/mob/human/M as mob in unassigned_mobs) + if (assistant_occupations.Find(M.occupation3)) + M.Assign_Rank(M.occupation3) + unassigned_mobs -= M + //Foreach goto(1502) + for(var/occupation in occupation_choices) + var/L = occupations3[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + if (multiple) + var/X = final_occupations[occupation] + eligible -= X.len + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + //Foreach goto(1571) + if (unassigned_mobs.len) + unassigned_mobs = shuffle(unassigned_mobs) + for(var/mob/human/M as mob in unassigned_mobs) + if (occupation_choices.len) + var/occupation = pick(occupation_choices) + final_occupations[occupation] = M + occupation_choices -= occupation + unassigned_mobs -= M + else + else + //Foreach goto(1846) + for(var/occupation in final_occupations) + var/M = final_occupations[occupation] + if (ismob(M)) + M.Assign_Rank(occupation) + else + if (istype(M, (List:0))) + for(var/mob/human/E as mob in final_occupations[occupation]) + E.Assign_Rank(occupation) + //Foreach goto(2003) + //Foreach goto(1931) + for(var/mob/human/M as mob in unassigned_mobs) + M.Assign_Rank(pick("Research Assistant", "Technical Assistant", "Medical Assistant", "Staff Assistant")) + //Foreach goto(2051) + return + +/proc/shuffle(shufflelist) + + if (!( shufflelist )) + return + var/old_list = shufflelist.Copy() + var/list/new_list = list( ) + while(old_list.len) + var/item = old_list[rand(1, old_list.len)] + new_list += item + old_list -= item + return new_list + return + +/world/New() + + ..() + spawn( 0 ) + SetupOccupationsList() + return + return + +/mob/human/verb/char_setup() + + if (src.start) + return + src.ShowChoices() + return + +/mob/human/proc/ShowChoices() + + var/destructive = assistant_occupations.Copy() + var/dat = "" + dat += text("Name: []
", src, src.rname) + dat += text("Gender: []
", src, (src.gender == "male" ? "Male" : "Female")) + dat += text("Age - []
", src, src.age) + dat += "
Occupation Choices:
" + if (destructive.Find(src.occupation1)) + dat += text("\t[]
", src, src.occupation1) + else + if (src.occupation1 != "No Preference") + dat += text("\tFirst Choice: []
", src, src.occupation1) + if (destructive.Find(src.occupation2)) + dat += text("\tSecond Choice: []
", src, src.occupation2) + else + if (src.occupation2 != "No Preference") + dat += text("\tSecond Choice: []
", src, src.occupation2) + if (destructive.Find(src.occupation3)) + dat += text("\tLast Choice: []
", src, src.occupation3) + else + if (src.occupation3 != "No Preference") + dat += text("\tLast Choice: []
", src, src.occupation3) + else + dat += text("\tLast Choice: No Preference
", src) + else + dat += text("\tSecond Choice: No Preference
", src) + else + dat += text("\tNo Preference
", src) + dat += "
Body Data
" + dat += text("Blood Type: []
", src, src.b_type) + dat += text("Skin Tone: []/220
", src, -src.ns_tone + 35) + dat += text("Hair Color: test
", num2hex(src.nr_hair, 2), num2hex(src.ng_hair, 2), num2hex(src.nb_hair)) + dat += text(" Red - []", num2hex(src.nr_hair, 2), src, src.nr_hair) + dat += text(" Green - []", num2hex(src.ng_hair, 2), src, src.ng_hair) + dat += text(" Blue - []", num2hex(src.nb_hair, 2), src, src.nb_hair) + dat += text("
Style - []", src, src.h_style) + dat += text("
Eye Color: test
", num2hex(src.r_eyes, 2), num2hex(src.g_eyes, 2), num2hex(src.b_eyes, 2)) + dat += text(" Red - []", num2hex(src.r_eyes, 2), src, src.r_eyes) + dat += text(" Green - []", num2hex(src.g_eyes, 2), src, src.g_eyes) + dat += text(" Blue - []", num2hex(src.b_eyes, 2), src, src.b_eyes) + dat += "
Disabilities
" + dat += text("Need Glasses: []
", src, (src.need_gl ? "Yes" : "No")) + dat += text("Epileptic: []
", src, (src.be_epil ? "Yes" : "No")) + dat += text("Tourette Syndrome: []
", src, (src.be_tur ? "Yes" : "No")) + dat += text("Chronic Cough: []
", src, (src.be_cough ? "Yes" : "No")) + dat += text("Stutter: []
", src, (src.be_stut ? "Yes" : "No")) + dat += "
" + dat += text("Load Setup
", src) + dat += text("Save Setup
", src) + dat += "" + src << browse(dat, "window=mob_occupations;size=300x600") + return + +/mob/human/proc/SetChoices(occ) + + if (occ == null) + occ = 1 + var/HTML = "" + HTML += "
" + switch(occ) + if(1.0) + HTML += "Which occupation would you like most?

" + if(2.0) + HTML += "Which occupation would you like if you couldn't have your first?

" + if(3.0) + HTML += "Which occupation would you like if you couldn't have the others?

" + else + for(var/job in occupations + assistant_occupations) + HTML += text("[]
", src, occ, job, job) + //Foreach goto(105) + HTML += text("Captain
", src, occ) + HTML += "
" + HTML += text("\[No Preference\]
", src, occ) + HTML += text("\[Cancel\]", src, occ) + HTML += "
" + usr << browse(HTML, "window=mob_occupation;size=300x500") + return + +/mob/human/proc/SetJob(occ, job) + + if (occ == null) + occ = 1 + if (job == null) + job = "Captain" + if ((!( occupations.Find(job) ) && (!( assistant_occupations.Find(job) ) && job != "Captain"))) + return + switch(occ) + if(1.0) + if (job == src.occupation1) + usr << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + src.occupation1 = "No Preference" + else + if (job == src.occupation2) + job = src.occupation1 + src.occupation1 = src.occupation2 + src.occupation2 = job + else + if (job == src.occupation3) + job = src.occupation1 + src.occupation1 = src.occupation3 + src.occupation3 = job + else + src.occupation1 = job + if(2.0) + if (job == src.occupation2) + src << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + if (src.occupation3 != "No Preference") + src.occupation2 = src.occupation3 + src.occupation3 = "No Preference" + else + src.occupation2 = "No Preference" + else + if (job == src.occupation1) + if (src.occupation2 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation2 + src.occupation2 = src.occupation1 + src.occupation1 = job + else + if (job == src.occupation3) + job = src.occupation2 + src.occupation2 = src.occupation3 + src.occupation3 = job + else + src.occupation2 = job + if(3.0) + if (job == src.occupation3) + usr << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + src.occupation3 = "No Preference" + else + if (job == src.occupation1) + if (src.occupation3 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation3 + src.occupation3 = src.occupation1 + src.occupation1 = job + else + if (job == src.occupation2) + if (src.occupation3 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation3 + src.occupation3 = src.occupation2 + src.occupation2 = job + else + src.occupation3 = job + else + src.ShowChoices() + src << browse(null, "window=mob_occupation") + return + +/mob/human/proc/Assign_Rank(rank) + + if (rank == "Captain") + world << text("[] is the captain!", src) + if (!( src.w_radio )) + var/obj/item/weapon/radio/headset/H = new /obj/item/weapon/radio/headset( src ) + src.w_radio = H + H.layer = 20 + if (!( src.back )) + var/obj/item/weapon/storage/backpack/H = new /obj/item/weapon/storage/backpack( src ) + src.back = H + H.layer = 20 + if (!( src.glasses )) + if (src.disabilities & 1) + var/obj/item/weapon/clothing/glasses/regular/G = new /obj/item/weapon/clothing/glasses/regular( src ) + src.glasses = G + G.layer = 20 + if ((!( src.belt ) && src.w_uniform)) + var/obj/item/weapon/radio/signaler/S = new /obj/item/weapon/radio/signaler( src ) + src.belt = S + S.layer = 20 + if ((!( src.r_store ) && src.w_uniform)) + var/obj/item/weapon/pen/S = new /obj/item/weapon/pen( src ) + src.r_store = S + S.layer = 20 + if ((src.client && (!( src.wear_id ) && src.w_uniform))) + var/obj/item/weapon/card/id/C = new /obj/item/weapon/card/id( src ) + src.wear_id = C + C.assignment = rank + C.layer = 20 + C.registered = src.rname + switch(C.assignment) + if("Research Assistant") + C.access_level = 1 + C.lab_access = 1 + C.engine_access = 0 + C.air_access = 0 + if("Technical Assistant") + C.access_level = 1 + C.lab_access = 0 + C.engine_access = 1 + C.air_access = 0 + if("Staff Assistant") + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Medical Assistant") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 1 + C.lab_access = 1 + C.engine_access = 0 + C.air_access = 0 + if("Engineer") + if (!( src.l_hand )) + var/obj/item/weapon/storage/toolbox/W = new /obj/item/weapon/storage/toolbox( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 1 + C.engine_access = 3 + C.air_access = 0 + if("Research Technician") + C.access_level = 2 + C.lab_access = 3 + C.engine_access = 0 + C.air_access = 0 + if("Forensic Technician") + C.access_level = 3 + C.lab_access = 2 + C.engine_access = 0 + C.air_access = 0 + if("Medical Doctor") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Prison Doctor") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Captain") + C.access_level = 5 + C.air_access = 5 + C.engine_access = 5 + C.lab_access = 5 + if("Security Officer") + if (!( src.l_hand )) + var/obj/item/weapon/handcuffs/W = new /obj/item/weapon/handcuffs( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Prison Security") + if (!( src.l_hand )) + var/obj/item/weapon/handcuffs/W = new /obj/item/weapon/handcuffs( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Medical Researcher") + C.access_level = 2 + C.lab_access = 5 + C.engine_access = 0 + C.air_access = 0 + if("Toxin Researcher") + C.access_level = 2 + C.lab_access = 5 + C.engine_access = 0 + C.air_access = 0 + if("Head of Research") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 5 + if("Head of Personnel") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 4 + if("Prison Warden") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 4 + if("Station Technician") + if (!( src.l_hand )) + var/obj/item/weapon/storage/toolbox/W = new /obj/item/weapon/storage/toolbox( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 2 + C.air_access = 3 + if("Atmospheric Technician") + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 4 + else + C.name = text("[]'s ID Card ([]>[]-[]-[])", C.registered, C.access_level, C.lab_access, C.engine_access, C.air_access) + src << text("You are the [].", C.assignment) + var/S = locate(text("start*[]", C.assignment)) + if ((istype(S, /obj/start) && (istype(S.loc, /turf) && !( ctf )))) + src << "\blue You have been teleported to your new starting location!" + src.loc = S.loc + return diff --git a/ss13-40.93.2-decomp/spacestation13/stationobjs.dmi b/ss13-40.93.2-decomp/spacestation13/stationobjs.dmi new file mode 100644 index 0000000..acee194 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/stationobjs.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/table.dmi b/ss13-40.93.2-decomp/spacestation13/table.dmi new file mode 100644 index 0000000..b3d2952 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/table.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/turfs.dmi b/ss13-40.93.2-decomp/spacestation13/turfs.dmi new file mode 100644 index 0000000..aa9620e Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/turfs.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/turfs2.dmi b/ss13-40.93.2-decomp/spacestation13/turfs2.dmi new file mode 100644 index 0000000..16ffd12 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/turfs2.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/uniforms.dmi b/ss13-40.93.2-decomp/spacestation13/uniforms.dmi new file mode 100644 index 0000000..dc57b9b Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/uniforms.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/unnamed.dm b/ss13-40.93.2-decomp/spacestation13/unnamed.dm new file mode 100644 index 0000000..cb6cb89 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/unnamed.dm @@ -0,0 +1,78 @@ + +/sound/New(file, repeat, wait, channel) + + src.file = fcopy_rsc(file) + src.repeat = repeat + src.wait = wait + src.channel = channel + return ..() + return + +/sound/proc/RscFile() + + return src.file + return + +/icon/New(icon, icon_state, dir, frame, moving) + + src.icon = _dm_new_icon(icon, icon_state, dir, frame, moving) + return + +/icon/proc/Icon() + + return src.icon + return + +/icon/proc/RscFile() + + return fcopy_rsc(src.icon) + return + +/icon/proc/IconStates() + + return icon_states(src.icon) + return + +/icon/proc/Turn(angle) + + _dm_turn_icon(src.icon, angle) + return + +/icon/proc/Flip(dir) + + _dm_flip_icon(src.icon, dir) + return + +/icon/proc/Shift(dir, offset, wrap) + + _dm_shift_icon(src.icon, dir, offset, wrap) + return + +/icon/proc/SetIntensity(r, g, b) + + if (g == null) + g = -1.0 + if (b == null) + b = -1.0 + _dm_icon_intensity(src.icon, r, g, b) + return + +/icon/proc/Blend(icon, f) + + _dm_icon_blend(src.icon, icon, f) + return + +/icon/proc/SwapColor(o, n) + + _dm_icon_swap_color(src.icon, o, n) + return + +/icon/proc/DrawBox(c, x1, y1, x2, y2) + + _dm_draw_box(src.icon, c, x1, y1, x2, y2) + return + +/icon/proc/Insert(new_icon, icon_state, dir, frame, moving, delay) + + _dm_icon_insert(src.icon, new_icon, icon_state, dir, frame, moving, delay) + return diff --git a/ss13-40.93.2-decomp/spacestation13/wall.dmi b/ss13-40.93.2-decomp/spacestation13/wall.dmi new file mode 100644 index 0000000..9efe147 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/wall.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/water.dmi b/ss13-40.93.2-decomp/spacestation13/water.dmi new file mode 100644 index 0000000..17b6796 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/water.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/weap_sat.dm b/ss13-40.93.2-decomp/spacestation13/weap_sat.dm new file mode 100644 index 0000000..f100fa8 --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/weap_sat.dm @@ -0,0 +1,349 @@ + +/obj/machinery/computer/teleporter/New() + + src.id = text("[]", rand(1000, 9999)) + ..() + return + +/obj/machinery/computer/teleporter/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/teleporter/verb/lock_in(freq as num) + set src in oview(1) + set desc = "Frequency to check" + + var/list/L = list( ) + for(var/obj/item/weapon/radio/R as obj in world) + if (R.freq != freq) + continue //goto(26) + var/T = src.find_loc(R) + if (!( T )) + continue //goto(26) + var/t1 = text("-[],[],[]", T.x, T.y, T.z) + t1 = text("[][]", R.text, t1) + L[t1] = R + //Foreach goto(26) + var/t1 = input("Please select a location to lock in.", "Locking Computer", null, null) in L + var/R = L[t1] + if ((prob(30) || (istype(R, /obj/item/weapon/radio/beacon) && prob(50)))) + src.locked = src.find_loc(R) + else + if (L.len) + R = L[text("[]", pick(L))] + src.locked = src.find_loc(R) + else + src.locked = null + for(var/O as mob in hearers(src, null)) + O.show_message("\blue Locked In", 2) + //Foreach goto(270) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/teleporter/verb/set_id(t as text) + set src in oview(1) + set desc = "ID Tag:" + + if (t) + src.id = t + return + +/obj/machinery/computer/teleporter/proc/find_loc(R as obj) + + if (!( R )) + return null + var/T = R.loc + while(!( istype(T, /turf) )) + T = T.loc + if (istype(T, /area)) + return null + return T + return + +/obj/machinery/computer/data/ex_act(severity) + + switch(severity) + if(1.0) + src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/data/weapon/log/New() + + ..() + src.topics["Super-heater"] = "This turns a can of semi-liquid plasma into a super-heated ball of plasma." + src.topics["Amplifier"] = "This increases the intensity of a laser." + src.topics["Class 11 Laser"] = "This creates a very slow laser that is capable of penetrating most objects." + src.topics["Plasma Energizer"] = "This combines super-heated plasma with a laser beam." + src.topics["Generator"] = "This controls the entire power grid." + src.topics["Mirror"] = "this can reflect LOW power lasers. HIGH power goes through it!" + src.topics["Targetting Prism"] = "This focuses a laser coming from any direction forward." + return + +/obj/machinery/computer/data/weapon/log/display() + set src in oview(1) + + usr << "Research Log:" + ..() + return + +/obj/machinery/computer/data/weapon/info/New() + + ..() + src.topics["LOG(001)"] = "System: Deployment successful" + src.topics["LOG(002)"] = "System: Safe orbit at inclination .003 established" + src.topics["LOG(003)"] = "CenCom: Attempting test fire...ALERT(001)" + src.topics["ALERT(001)"] = "System: Cannot attempt test fire" + src.topics["LOG(004)"] = "System: Airlock accessed..." + src.topics["LOG(005)"] = "System: System successfully reset...Generator engaged" + src.topics["LOG(006)"] = "Physical: Super-heater (W005) added to power grid" + src.topics["LOG(007)"] = "Physical: Amplifier (W007) added to power grid" + src.topics["LOG(008)"] = "Physical: Plasma Energizer (W006) added to power grid" + src.topics["LOG(009)"] = "Physical: Laser (W004) added to power grid" + src.topics["LOG(010)"] = "Physical: Laser test firing" + src.topics["LOG(011)"] = "Physical: Plasma added to Super-heater" + src.topics["LOG(012)"] = "Physical: Orient N12.525,E22.124" + src.topics["LOG(013)"] = "System: Location N12.525,E22.124" + src.topics["LOG(014)"] = "Physical: Test fire...successful" + src.topics["LOG(015)"] = "Physical: Airlock accessed..." + src.topics["LOG(016)"] = "******: Disable locater systems" + src.topics["LOG(017)"] = "System: Locater Beacon-Disengaged,CenCom link-Cut...ALERT(002)" + src.topics["ALERT(002)"] = "System: Cannot seem to establish contact with Central Command" + src.topics["LOG(018)"] = "******: Shutting down all systems...ALERT(003)" + src.topics["ALERT(003)"] = "System: Power grid failure-Activating back-up power...ALERT(004)" + src.topics["ALERT(004)"] = "System: Engine failure...All systems deactivated." + return + +/obj/machinery/computer/data/weapon/info/display() + set src in oview(1) + + usr << "Research Information:" + ..() + return + +/obj/machinery/computer/data/verb/display() + set src in oview(1) + + for(var/x in src.topics) + usr << text("[], \...", x) + //Foreach goto(19) + usr << "" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/data/verb/read(topic as text) + set src in oview(1) + + if (src.topics[text("[]", topic)]) + usr << text("[]\n\t []", topic, src.topics[text("[]", topic)]) + else + usr << text("Unable to find- []", topic) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/hub/Bumped(M as mob|obj) + + spawn( 0 ) + if (src.icon_state == "tele1") + src.teleport(M) + return + return + +/obj/machinery/teleport/hub/proc/teleport(M as mob|obj) + + var/l = src.loc + var/com = locate(/obj/machinery/computer/teleporter, locate(l.x - 2, l.y, l.z)) + if (!( com )) + return + var/target = com.locked + if (!( com.locked )) + for(var/O as mob in hearers(src, null)) + O.show_message("\red Failure: Cannot authenticate locked on coordinates. Please reinstantiat coordinate matrix.", 1, "\red Error!", 2) + //Foreach goto(80) + return + var/obj/effects/sparks/O = new /obj/effects/sparks( target ) + O.dir = pick(1, 2, 4, 8) + spawn( 0 ) + O.Life() + return + if (istype(M, /atom/movable)) + if (rand(1, 1000) == 7) + M << "\red You see a fainting blue light." + M.loc = null + else + var/tx = target.x + rand(-2.0, 2) + var/ty = target.y + rand(-2.0, 2) + tx = max(min(tx, world.maxx), 1) + ty = max(min(ty, world.maxy), 1) + M.loc = locate(tx, ty, target.z) + else + for(var/B as mob in hearers(src, null)) + B.show_message("\blue Test fire completed.", 2) + //Foreach goto(316) + return + +/obj/machinery/teleport/station/verb/engage() + set src in oview(1) + + var/l = src.loc + var/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + com.icon_state = "tele1" + for(var/O as mob in hearers(src, null)) + O.show_message("\blue Teleporter engaged!", 2) + //Foreach goto(70) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/verb/disengage() + set src in oview(1) + + var/l = src.loc + var/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + com.icon_state = "tele0" + for(var/O as mob in hearers(src, null)) + O.show_message("\blue Teleporter disengaged!", 2) + //Foreach goto(70) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/verb/testfire() + set src in oview(1) + + var/l = src.loc + var/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + for(var/O as mob in hearers(src, null)) + O.show_message("\blue Test firing!", 2) + //Foreach goto(60) + com.teleport() + src.add_fingerprint(usr) + return + +/obj/effects/smoke/proc/Life() + + if (src.amount > 1) + var/W = new src.type( src.loc ) + W.amount = src.amount - 1 + W.dir = src.dir + spawn( 0 ) + W.Life() + return + src.amount-- + if (src.amount <= 0) + sleep(50) + src = null + del(src) + return + var/T = get_step(src, turn(src.dir, pick(90, 0, 0, -90.0))) + if ((T && T.density)) + src.dir = turn(src.dir, pick(-90.0, 90)) + else + step_to(src, T, null) + T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + spawn( 3 ) + src.Life() + return + return + +/obj/effects/sparks/proc/Life() + + if (src.amount > 1) + var/W = new src.type( src.loc ) + W.amount = src.amount - 1 + W.dir = src.dir + spawn( 0 ) + W.Life() + return + src.amount-- + if (src.amount <= 0) + sleep(50) + src = null + del(src) + return + var/T = get_step(src, turn(src.dir, pick(90, 0, 0, -90.0))) + if ((T && T.density)) + src.dir = turn(src.dir, pick(-90.0, 90)) + else + step_to(src, T, null) + T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + spawn( 3 ) + src.Life() + return + return + +/obj/effects/sparks/New() + + ..() + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + return + +/obj/effects/sparks/Del() + + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + ..() + return + +/obj/effects/sparks/Move() + + ..() + var/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + return + +/obj/laser/Bump() + + src.range-- + return + +/obj/laser/Move() + + src.range-- + return + +/atom/proc/laserhit(L as obj) + + return 1 + return diff --git a/ss13-40.93.2-decomp/spacestation13/weap_sat.dmi b/ss13-40.93.2-decomp/spacestation13/weap_sat.dmi new file mode 100644 index 0000000..ac8a28b Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/weap_sat.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/weapons.dm b/ss13-40.93.2-decomp/spacestation13/weapons.dm new file mode 100644 index 0000000..0dc8a5a --- /dev/null +++ b/ss13-40.93.2-decomp/spacestation13/weapons.dm @@ -0,0 +1,1352 @@ + +/obj/machinery/nuclearbomb/New() + + if (nuke_code) + src.r_code = text("[]", nuke_code) + ..() + return + +/obj/machinery/nuclearbomb/process() + + if (src.timing) + src.timeleft-- + if (src.timeleft <= 0) + src.explode() + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(46) + return + +/obj/machinery/nuclearbomb/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/nuclearbomb/attack_hand(user as mob) + + if (src.extended) + user.machine = src + var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) + if (src.auth) + if (src.yes_code) + dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) + else + dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + else + if (src.timing) + dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + else + dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + var/message = "AUTH" + if (src.auth) + message = text("[]", src.code) + if (src.yes_code) + message = "*****" + dat += text("
\n>[]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
", message, src, src, src, src, src, src, src, src, src, src, src, src) + user << browse(dat, "window=nuclearbomb;size=300x400") + else + src.anchored = 1 + flick("nuclearbombc", src) + src.icon_state = "nuclearbomb1" + src.extended = 1 + return + +/obj/machinery/nuclearbomb/Topic(href, href_list) + + if (usr.stat) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["auth"]) + if (src.auth) + src.auth.loc = src.loc + src.yes_code = 0 + src.auth = null + else + var/I = usr.equipped() + if (istype(I, /obj/item/weapon/disk/nuclear)) + usr.drop_item() + I.loc = src + src.auth = I + if (src.auth) + if (href_list["type"]) + if (href_list["type"] == "E") + if (src.code == src.r_code) + src.yes_code = 1 + src.code = null + else + src.code = "ERROR" + else + if (href_list["type"] == "R") + src.yes_code = 0 + src.code = null + else + src.code += text("[]", href_list["type"]) + if (length(src.code) > 5) + src.code = "ERROR" + if (src.yes_code) + if (href_list["time"]) + var/time = text2num(href_list["time"]) + src.timeleft += time + src.timeleft = min(max(round(src.timeleft), 5), 600) + if (href_list["timer"]) + if (src.timing == -1.0) + return + src.timing = !( src.timing ) + if (src.timing) + src.icon_state = "nuclearbomb2" + else + src.icon_state = "nuclearbomb1" + if (href_list["safety"]) + src.safety = !( src.safety ) + if (href_list["anchor"]) + src.anchored = !( src.anchored ) + src.add_fingerprint(usr) + for(var/M as mob in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(511) + else + usr << browse(null, "window=nuclearbomb") + return + return + +/obj/machinery/nuclearbomb/ex_act() + + if (src.timing == -1.0) + return + else + return ..() + return + +/obj/machinery/nuclearbomb/proc/explode() + + if (src.safety) + src.timing = 0 + return + src.timing = -1.0 + src.yes_code = 0 + src.icon_state = "nuclearbomb3" + sleep(20) + var/T = src.loc + while(!( istype(T, /turf) )) + T = T.loc + var/min = 50 + var/med = 250 + var/max = 500 + var/sw = locate(1, 1, T.z) + var/ne = locate(world.maxx, world.maxy, T.z) + for(var/U as turf in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + max) && (U.y >= (T.y - max) && (U.x <= (T.x + max) && U.x >= (T.x - max))))) + zone = 3 + if ((U.y <= (T.y + med) && (U.y >= (T.y - med) && (U.x <= (T.x + med) && U.x >= (T.x - med))))) + zone = 2 + if ((U.y <= (T.y + min) && (U.y >= (T.y - min) && (U.x <= (T.x + min) && U.x >= (T.x - min))))) + zone = 1 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(404) + U.ex_act(zone) + //Foreach goto(148) + ticker.nuclear(src.z) + src = null + del(src) + return + return + +/obj/item/weapon/infra_sensor/New() + + ..() + spawn( 0 ) + src.process() + return + return + +/obj/item/weapon/infra_sensor/proc/process() + + if (src.passive) + for(var/obj/beam/i_beam/I as obj in range(2, src.loc)) + I.left = 2 + //Foreach goto(30) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/infra_sensor/proc/burst() + + for(var/obj/beam/i_beam/I as obj in range(src.loc, null)) + I.left = 10 + //Foreach goto(22) + for(var/obj/item/weapon/infra/I as obj in range(src.loc, null)) + I.visible = 1 + spawn( 0 ) + if ((I && I.first)) + I.first.vis_spread(1) + return + //Foreach goto(69) + for(var/obj/item/weapon/assembly/rad_infra/I as obj in range(src.loc, null)) + I.part2.visible = 1 + spawn( 0 ) + if ((I.part2 && I.part2.first)) + I.part2.first.vis_spread(1) + return + //Foreach goto(145) + return + +/obj/item/weapon/infra_sensor/attack_self(user as mob) + + user.machine = src + var/dat = text("Infrared Sensor
\nPassive Emitter: []
\nActive Emitter: Burst Fire\n
", (src.passive ? text("On", src) : text("Off", src)), src) + user << browse(dat, "window=infra_sensor") + return + +/obj/item/weapon/infra_sensor/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["passive"]) + src.passive = !( src.passive ) + if (href_list["active"]) + spawn( 0 ) + src.burst() + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(164) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(240) + src.add_fingerprint(usr) + else + usr << browse(null, "window=infra_sensor") + return + return + +/obj/item/weapon/prox_sensor/dropped() + + spawn( 0 ) + src.sense() + return + return + +/obj/item/weapon/prox_sensor/proc/sense() + + if (src.state) + if (src.master) + spawn( 0 ) + src.master.r_signal(1, src) + return + else + for(var/O as mob in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(58) + return + +/obj/item/weapon/prox_sensor/HasProximity(AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.sense() + return + +/obj/item/weapon/prox_sensor/attackby(S as obj, user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_prox/R = new /obj/item/weapon/assembly/rad_prox( user ) + S.loc = R + R.part1 = S + S.layer = S.initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + u_equip(S) + user.r_hand = R + else + u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + return + +/obj/item/weapon/prox_sensor/attack_self(user as mob) + + user.machine = src + var/dat = text("Proximity Sensor\nStatus: []
\n[]\n
", (src.state ? text("On", src) : text("Off", src)), (src.state ? "Time On (10)" : text("Time On (10)", src))) + user << browse(dat, "window=prox") + return + +/obj/item/weapon/prox_sensor/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["state"]) + src.state = !( src.state ) + src.icon_state = text("motion[]", src.state) + if (src.master) + src.master.c_state(src.state, src) + if (href_list["time"]) + spawn( 100 ) + if (src.state == 0) + src.state = !( src.state ) + src.icon_state = text("motion[]", src.state) + if (src.master) + src.master.c_state(src.state, src) + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(234) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(310) + else + usr << browse(null, "window=prox") + return + return + +/obj/item/weapon/prox_sensor/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/prox_sensor/Move() + + ..() + src.sense() + return + +/obj/item/weapon/infra/proc/hit() + + if (src.master) + spawn( 0 ) + src.master.r_signal(1, src) + return + else + for(var/O as mob in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(51) + return + +/obj/item/weapon/infra/proc/process() + + if ((!( src.first ) && (src.state && (istype(src.loc, /turf) || (src.master && istype(src.master.loc, /turf)))))) + var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.master ? src.master.loc : src.loc) ) + I.master = src + I.density = 1 + I.dir = src.dir + step(I, I.dir) + if (I) + I.density = 0 + src.first = I + I.vis_spread(src.visible) + spawn( 0 ) + if (I) + I.limit = 20 + I.process() + return + if (!( src.state )) + src.first = null + del(src.first) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/infra/attackby(S as obj, user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_infra/R = new /obj/item/weapon/assembly/rad_infra( user ) + S.loc = R + R.part1 = S + S.layer = S.initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + u_equip(S) + user.r_hand = R + else + u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + return + +/obj/item/weapon/infra/New() + + spawn( 0 ) + src.process() + return + ..() + return + +/obj/item/weapon/infra/attack_self(user as mob) + + user.machine = src + var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n
", (src.state ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) + user << browse(dat, "window=infra") + return + +/obj/item/weapon/infra/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["state"]) + src.state = !( src.state ) + src.icon_state = text("infrared[]", src.state) + if (src.master) + src.master.c_state(src.state, src) + if (href_list["visible"]) + src.visible = !( src.visible ) + spawn( 0 ) + if (src.first) + src.first.vis_spread(src.visible) + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(211) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(287) + else + usr << browse(null, "window=infra") + return + return + +/obj/item/weapon/infra/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/infra/attack_hand() + + src.first = null + del(src.first) + ..() + return + +/obj/item/weapon/infra/Move() + + var/t = src.dir + ..() + src.dir = t + src.first = null + del(src.first) + return + +/obj/item/weapon/infra/verb/rotate() + set src in usr + + src.dir = turn(src.dir, 90) + return + +/obj/item/weapon/timer/proc/time() + + if (src.master) + spawn( 0 ) + src.master.r_signal(1, src) + return + else + for(var/O as mob in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(51) + return + +/obj/item/weapon/timer/proc/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + time() + src.time = 0 + src.timing = 0 + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(100) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(176) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/timer/attackby(S as obj, user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_time/R = new /obj/item/weapon/assembly/rad_time( user ) + S.loc = R + R.part1 = S + S.layer = S.initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + u_equip(S) + user.r_hand = R + else + u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + R.add_fingerprint(user) + return + +/obj/item/weapon/timer/New() + + spawn( 0 ) + src.process() + return + ..() + return + +/obj/item/weapon/timer/attack_self(user as mob) + + user.machine = src + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (src.timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src) + user << browse(dat, "window=timer") + return + +/obj/item/weapon/timer/Topic(href, href_list) + + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 600) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/M as mob in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(192) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.loc) + else + for(var/M as mob in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(268) + src.add_fingerprint(usr) + else + usr << browse(null, "window=timer") + return + return + +/obj/item/weapon/assembly/proc/r_signal(signal) + + return + +/obj/item/weapon/assembly/proc/c_state(n, O as obj) + + return + +/obj/item/weapon/assembly/shock_kit/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/shock_kit/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The shock pack is now secured!", 1) + else + user.show_message("\blue The shock pack is now unsecured!", 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/shock_kit/attack_self(user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/shock_kit/r_signal(n, source) + + if (istype(src.loc, /obj/stool/chair/e_chair)) + var/C = src.loc + C.shock() + return + +/obj/item/weapon/assembly/rad_time/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_time/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The signaler is now secured!", 1) + else + user.show_message("\blue The signaler is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_time/attack_self(user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_time/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_prox/c_state(n) + + src.icon_state = text("motion[]", n) + return + +/obj/item/weapon/assembly/rad_prox/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_prox/HasProximity(AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part2.sense() + return + +/obj/item/weapon/assembly/rad_prox/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The proximity sensor is now secured!", 1) + else + user.show_message("\blue The proximity sensor is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_prox/attack_self(user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_prox/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_prox/Move() + + ..() + src.part2.sense() + return + +/obj/item/weapon/assembly/rad_prox/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/assembly/rad_prox/dropped() + + spawn( 0 ) + src.part2.sense() + return + return + +/obj/item/weapon/assembly/rad_infra/c_state(n) + + src.icon_state = text("infrared[]", n) + return + +/obj/item/weapon/assembly/rad_infra/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_infra/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The infrared laser is now secured!", 1) + else + user.show_message("\blue The infrared laser is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_infra/attack_self(user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_infra/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_infra/verb/rotate() + set src in usr + + src.dir = turn(src.dir, 90) + src.part2.dir = src.dir + src.add_fingerprint(usr) + return + +/obj/item/weapon/assembly/rad_infra/Move() + + var/t = src.dir + ..() + src.dir = t + src.first = null + del(src.part2.first) + return + +/obj/item/weapon/assembly/rad_infra/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/assembly/rad_infra/attack_hand(M) + + src.first = null + del(src.part2.first) + ..() + return + +/obj/item/weapon/assembly/prox_ignite/HasProximity(AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part1.sense() + return + +/obj/item/weapon/assembly/prox_ignite/dropped() + + spawn( 0 ) + src.part1.sense() + return + return + +/obj/item/weapon/assembly/prox_ignite/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/prox_ignite/c_state(n) + + src.icon_state = text("prox_igniter[]", n) + return + +/obj/item/weapon/assembly/prox_ignite/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The proximity sensor is now secured! The igniter now works!", 1) + else + user.show_message("\blue The proximity sensor is now unsecured! The igniter will not work.", 1) + src.part2.status = src.status + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/prox_ignite/attack_self(user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/prox_ignite/r_signal() + + for(var/O as mob in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/rad_ignite/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_ignite/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The radio is now secured! The igniter now works!", 1) + else + user.show_message("\blue The radio is now unsecured! The igniter will not work.", 1) + src.part2.status = src.status + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_ignite/attack_self(user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_ignite/r_signal() + + for(var/O as mob in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/m_i_ptank/c_state(n) + + src.icon_state = text("m_i_ptank[]", n) + return + +/obj/item/weapon/assembly/m_i_ptank/HasProximity(AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part1.sense() + return + +/obj/item/weapon/assembly/m_i_ptank/dropped() + + spawn( 0 ) + src.part1.sense() + return + return + +/obj/item/weapon/assembly/m_i_ptank/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/m_i_ptank/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/prox_ignite/R = new /obj/item/weapon/assembly/prox_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (R.l_hand == src) + R.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + user.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/m_i_ptank/attack_self(user as mob) + + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/m_i_ptank/r_signal() + + for(var/O as mob in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + if ((src.status && prob(90))) + src.part3.ignite() + return + +/obj/item/weapon/assembly/r_i_ptank/Del() + + src.part1 = null + del(src.part1) + src.part2 = null + del(src.part2) + src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/r_i_ptank/attackby(W as obj, user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/rad_ignite/R = new /obj/item/weapon/assembly/rad_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (R.l_hand == src) + R.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + user.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/r_i_ptank/attack_self(user as mob) + + if (src.part1) + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/r_i_ptank/r_signal() + + for(var/O as mob in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + if ((src.status && prob(90))) + src.part3.ignite() + return + +/obj/bullet/Bump(A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act("bullet", src) + src = null + del(src) + return + return + return + +/obj/bullet/CheckPass(B as obj) + + if (istype(B, /obj/bullet)) + return prob(95) + else + return 1 + return + +/obj/bullet/proc/process() + + if ((!( src.current ) || src.loc == src.current)) + src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z) + if ((src.x == 1 || (src.x == world.maxx || (src.y == 1 || src.y == world.maxy)))) + src = null + del(src) + return + step_towards(src, src.current) + spawn( 1 ) + src.process() + return + return + +/obj/beam/a_laser/Bump(A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act(null, src) + src = null + del(src) + return + return + return + +/obj/beam/a_laser/proc/process() + + if ((!( src.current ) || src.loc == src.current)) + src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z) + if ((src.x == 1 || (src.x == world.maxx || (src.y == 1 || src.y == world.maxy)))) + src = null + del(src) + return + step_towards(src, src.current) + src.life-- + if (src.life <= 0) + src = null + del(src) + return + spawn( 1 ) + src.process() + return + return + +/obj/beam/a_laser/s_laser/Bump(A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act(1) + src = null + del(src) + return + return + return + +/obj/beam/i_beam/proc/hit() + + if (src.master) + src.master.hit() + src = null + del(src) + return + return + +/obj/beam/i_beam/proc/vis_spread(v) + + src.visible = v + spawn( 0 ) + if (src.next) + src.next.vis_spread(v) + return + return + +/obj/beam/i_beam/proc/process() + + if ((src.loc.density || !( src.master ))) + src = null + del(src) + return + if (src.left > 0) + src.left-- + if (src.left < 1) + if (!( src.visible )) + src.invisibility = 100 + else + src.invisibility = 0 + else + src.invisibility = 0 + var/obj/beam/i_beam/I = new /obj/beam/i_beam( src.loc ) + I.master = src.master + I.density = 1 + I.dir = src.dir + step(I, I.dir) + if (I) + if (!( src.next )) + I.density = 0 + I.vis_spread(src.visible) + src.next = I + spawn( 0 ) + if ((I && src.limit > 0)) + I.limit = src.limit - 1 + I.process() + return + else + I = null + del(I) + else + src.next = null + del(src.next) + spawn( 10 ) + src.process() + return + return + +/obj/beam/i_beam/Bump() + + src = null + del(src) + return + return + +/obj/beam/i_beam/Bumped() + + src.hit() + return + +/obj/beam/i_beam/HasEntered(AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + spawn( 0 ) + src.hit() + return + return + +/obj/beam/i_beam/Del() + + src.next = null + del(src.next) + ..() + return + +/atom/proc/ex_act() + + return + +/atom/proc/las_act() + + return + +/turf/Entered(A as mob|obj) + + ..() + if ((A && (A.density && !( istype(A, /obj/beam) )))) + for(var/obj/beam/i_beam/I as obj in src) + spawn( 0 ) + if (I) + I.hit() + return + //Foreach goto(44) + return diff --git a/ss13-40.93.2-decomp/spacestation13/windoor.dmi b/ss13-40.93.2-decomp/spacestation13/windoor.dmi new file mode 100644 index 0000000..375d797 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/windoor.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/wire.dmi b/ss13-40.93.2-decomp/spacestation13/wire.dmi new file mode 100644 index 0000000..5a50db6 Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/wire.dmi differ diff --git a/ss13-40.93.2-decomp/spacestation13/zone_sel.dmi b/ss13-40.93.2-decomp/spacestation13/zone_sel.dmi new file mode 100644 index 0000000..5dab56e Binary files /dev/null and b/ss13-40.93.2-decomp/spacestation13/zone_sel.dmi differ diff --git a/ss13-h9.4-hostfiles/README.md b/ss13-h9.4-hostfiles/README.md new file mode 100644 index 0000000..da9d265 --- /dev/null +++ b/ss13-h9.4-hostfiles/README.md @@ -0,0 +1 @@ +The host files for 40.93.2-H9.4, dating from March 2008. This is one of Hobnob's versions of SS13 after he decompiled it, prior to OpenSS13. You can host a game with these on DD if you like. \ No newline at end of file diff --git a/ss13-h9.4-hostfiles/SS13D/Admins.txt b/ss13-h9.4-hostfiles/SS13D/Admins.txt new file mode 100644 index 0000000..1853b36 --- /dev/null +++ b/ss13-h9.4-hostfiles/SS13D/Admins.txt @@ -0,0 +1 @@ +hobnob - Primary Administrator diff --git a/ss13-h9.4-hostfiles/SS13D/SS13D.dmb b/ss13-h9.4-hostfiles/SS13D/SS13D.dmb new file mode 100644 index 0000000..94732de Binary files /dev/null and b/ss13-h9.4-hostfiles/SS13D/SS13D.dmb differ diff --git a/ss13-h9.4-hostfiles/SS13D/SS13D.rsc b/ss13-h9.4-hostfiles/SS13D/SS13D.rsc new file mode 100644 index 0000000..9a54d30 Binary files /dev/null and b/ss13-h9.4-hostfiles/SS13D/SS13D.rsc differ diff --git a/ss13-h9.4-hostfiles/SS13D/config.txt b/ss13-h9.4-hostfiles/SS13D/config.txt new file mode 100644 index 0000000..76694ce --- /dev/null +++ b/ss13-h9.4-hostfiles/SS13D/config.txt @@ -0,0 +1,60 @@ +# Config file for SS13D +# +# lines starting with '#' are comments +# +##### +# +# logging of actions to world.log +# comment to disable, uncomment to enable +# +# log OOC channel +LOGOOC +# +# log client Say +LOGSAY +# +# log admin actions +LOGADMIN +# +# log client access (logon/logoff) +LOGACCESS +# +# log game actions (start of round, results, etc.) +LOGGAME +# +# log player votes +LOGVOTE +# +# +##### +# +# probablities for game modes chosen in "secret" and "random" modes +# +# default probablity is 1, increase to make that mode more likely to be picked +# set to 0 to disable that mode +# +PROB_EXTENDED 0 +PROB_TRAITOR 1 +PROB_MONKEY 1 +PROB_METEOR 2 +PROB_BLOB 2 +PROB_NUCLEAR 1 +# +# +##### +# +# voting control +# +# allow players to initiate a restart vote +ALLOWVOTERESTART +# +# allow players to initate a mode-change start +ALLOWVOTEMODE +# +# min delay (seconds) between voting sessions (default 10 minutes) +VOTEDELAY 600 +# +# time period (seconds) which voting session will last (default 1 minute) +VOTEPERIOD 60 +# +# \ No newline at end of file diff --git a/ss13-h9.5-hostfiles/README.md b/ss13-h9.5-hostfiles/README.md new file mode 100644 index 0000000..49af5c3 --- /dev/null +++ b/ss13-h9.5-hostfiles/README.md @@ -0,0 +1 @@ +The host files for 40.93.2-H9.5, dating from March 2008. This is one of Hobnob's versions of SS13 after he decompiled it, prior to OpenSS13. You can host a game with these on DD if you like. \ No newline at end of file diff --git a/ss13-h9.5-hostfiles/SS13D/SS13D.dmb b/ss13-h9.5-hostfiles/SS13D/SS13D.dmb new file mode 100644 index 0000000..dfcea37 Binary files /dev/null and b/ss13-h9.5-hostfiles/SS13D/SS13D.dmb differ diff --git a/ss13-h9.5-hostfiles/SS13D/SS13D.rsc b/ss13-h9.5-hostfiles/SS13D/SS13D.rsc new file mode 100644 index 0000000..59b1e79 Binary files /dev/null and b/ss13-h9.5-hostfiles/SS13D/SS13D.rsc differ diff --git a/ss13-h9.5-hostfiles/SS13D/config.txt b/ss13-h9.5-hostfiles/SS13D/config.txt new file mode 100644 index 0000000..ec7d5cd --- /dev/null +++ b/ss13-h9.5-hostfiles/SS13D/config.txt @@ -0,0 +1,64 @@ +# Config file for SS13D +# +# lines starting with '#' are comments +# +##### +# +# logging of actions to world.log +# comment to disable, uncomment to enable +# +# log OOC channel +LOGOOC +# +# log client Say +LOGSAY +# +# log admin actions +LOGADMIN +# +# log client access (logon/logoff) +LOGACCESS +# +# log game actions (start of round, results, etc.) +LOGGAME +# +# log player votes +LOGVOTE +# +# +##### +# +# probablities for game modes chosen in "secret" and "random" modes +# +# default probablity is 1, increase to make that mode more likely to be picked +# set to 0 to disable that mode +# +PROB_EXTENDED 0 +PROB_TRAITOR 1 +PROB_MONKEY 1 +PROB_METEOR 2 +PROB_BLOB 2 +PROB_NUCLEAR 1 +# +# +##### +# +# voting control +# +# allow players to initiate a restart vote +ALLOWVOTERESTART +# +# allow players to initate a mode-change start +ALLOWVOTEMODE +# +# min delay (seconds) between voting sessions (default 10 minutes) +VOTEDELAY 600 +# +# time period (seconds) which voting session will last (default 1 minute) +VOTEPERIOD 60 +# +# prevents dead players from voting or starting votes +NODEADVOTE +# +# players' votes default to "No vote" (otherwise, default to "No change") +DEFAULTNOVOTE \ No newline at end of file