{"ctor":"BitburnerSaveObject","data":{"PlayerSave":"{\"ctor\":\"PlayerObject\",\"data\":{\"hp\":{\"current\":10,\"max\":10},\"skills\":{\"hacking\":1024,\"strength\":2,\"defense\":3,\"dexterity\":2,\"agility\":1,\"charisma\":2,\"intelligence\":0},\"exp\":{\"hacking\":31869861.379829694,\"strength\":0,\"defense\":0,\"dexterity\":0,\"agility\":0,\"charisma\":0,\"intelligence\":0},\"mults\":{\"hacking_chance\":1.9013363051154817,\"hacking_speed\":1.8918404690899213,\"hacking_money\":3.177056239311913,\"hacking_grow\":1.9026567488992172,\"hacking\":2.901930693334414,\"strength\":2.6340684456840586,\"defense\":3.206692020832767,\"dexterity\":2.668727241022007,\"agility\":1.5982316690753424,\"charisma\":2.1653207962728533,\"hacking_exp\":5.36365248779338,\"strength_exp\":2.310586355863209,\"defense_exp\":2.310586355863209,\"dexterity_exp\":2.310586355863209,\"agility_exp\":2.310586355863209,\"charisma_exp\":2.07509909642815,\"company_rep\":2.739130807285159,\"faction_rep\":2.075099096428151,\"crime_money\":1.8044339968940444,\"crime_success\":2.050493178288687,\"hacknet_node_money\":3.838942955835226,\"hacknet_node_purchase_cost\":0.5025852045073843,\"hacknet_node_ram_cost\":0.6569741235390641,\"hacknet_node_core_cost\":0.6569741235390641,\"hacknet_node_level_cost\":0.5584280050082047,\"work_money\":2.9752985176586395,\"bladeburner_max_stamina\":1,\"bladeburner_stamina_gain\":1,\"bladeburner_analysis\":1,\"bladeburner_success_chance\":1},\"augmentations\":[{\"level\":1,\"name\":\"Hacknet Node NIC Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Core Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node Kernel Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node CPU Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Cache Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Neurotrainer II\"},{\"level\":1,\"name\":\"CashRoot Starter Kit\"},{\"level\":1,\"name\":\"BitWire\"},{\"level\":27,\"name\":\"NeuroFlux Governor\"},{\"level\":1,\"name\":\"Neural-Retention Enhancement\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen I\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen II\"},{\"level\":1,\"name\":\"Embedded Netburner Module\"},{\"level\":1,\"name\":\"Artificial Synaptic Potentiation\"},{\"level\":1,\"name\":\"DataJack\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen III\"},{\"level\":1,\"name\":\"CRTX42-AA Gene Modification\"},{\"level\":1,\"name\":\"Synaptic Enhancement Implant\"},{\"level\":1,\"name\":\"Neurotrainer I\"},{\"level\":1,\"name\":\"Embedded Netburner Module Core Implant\"},{\"level\":1,\"name\":\"Neuralstimulator\"},{\"level\":1,\"name\":\"Enhanced Myelin Sheathing\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen IV\"},{\"level\":1,\"name\":\"The Black Hand\"},{\"level\":1,\"name\":\"PCMatrix\"},{\"level\":1,\"name\":\"Speech Processor Implant\"},{\"level\":1,\"name\":\"Wired Reflexes\"},{\"level\":1,\"name\":\"Neuroreceptor Management Implant\"},{\"level\":1,\"name\":\"Neuregen Gene Modification\"},{\"level\":1,\"name\":\"Nanofiber Weave\"},{\"level\":1,\"name\":\"Social Negotiation Assistant (S.N.A)\"},{\"level\":1,\"name\":\"Nuoptimal Nootropic Injector Implant\"},{\"level\":1,\"name\":\"ADR-V1 Pheromone Gene\"},{\"level\":1,\"name\":\"Speech Enhancement\"},{\"level\":1,\"name\":\"NutriGen Implant\"},{\"level\":1,\"name\":\"INFRARET Enhancement\"},{\"level\":1,\"name\":\"Combat Rib I\"},{\"level\":1,\"name\":\"Augmented Targeting I\"},{\"level\":1,\"name\":\"Combat Rib II\"},{\"level\":1,\"name\":\"DermaForce Particle Barrier\"},{\"level\":1,\"name\":\"Augmented Targeting II\"}],\"queuedAugmentations\":[{\"level\":1,\"name\":\"Embedded Netburner Module Core V2 Upgrade\"},{\"level\":1,\"name\":\"BitRunners Neurolink\"},{\"level\":1,\"name\":\"Artificial Bio-neural Network Implant\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen V\"},{\"level\":1,\"name\":\"Neural Accelerator\"},{\"level\":28,\"name\":\"NeuroFlux Governor\"},{\"level\":29,\"name\":\"NeuroFlux Governor\"},{\"level\":30,\"name\":\"NeuroFlux Governor\"},{\"level\":31,\"name\":\"NeuroFlux Governor\"}],\"city\":\"Ishima\",\"bitNodeN\":1,\"corporation\":null,\"gang\":null,\"bladeburner\":null,\"currentServer\":\"home\",\"factions\":[\"BitRunners\"],\"factionInvitations\":[\"Netburners\",\"CyberSec\",\"NiteSec\",\"The Black Hand\",\"Aevum\",\"Sector-12\",\"Volhaven\",\"Tian Di Hui\",\"New Tokyo\",\"Ishima\"],\"hacknetNodes\":[{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73993.39999948468,\"ram\":64,\"totalMoneyGenerated\":2354041108.65471,\"name\":\"hacknet-node-0\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73992.3999994847,\"ram\":64,\"totalMoneyGenerated\":2352326379.997467,\"name\":\"hacknet-node-1\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73991.39999948471,\"ram\":64,\"totalMoneyGenerated\":2351009357.2023587,\"name\":\"hacknet-node-2\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73990.39999948473,\"ram\":64,\"totalMoneyGenerated\":2349195171.7662487,\"name\":\"hacknet-node-3\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73989.39999948474,\"ram\":64,\"totalMoneyGenerated\":2348154373.07489,\"name\":\"hacknet-node-4\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73988.39999948475,\"ram\":64,\"totalMoneyGenerated\":2347146717.3151193,\"name\":\"hacknet-node-5\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73987.39999948477,\"ram\":64,\"totalMoneyGenerated\":2345686076.060569,\"name\":\"hacknet-node-6\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73986.39999948478,\"ram\":64,\"totalMoneyGenerated\":2344907516.728391,\"name\":\"hacknet-node-7\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":73111.99999949751,\"ram\":64,\"totalMoneyGenerated\":2343731347.681352,\"name\":\"hacknet-node-8\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":72469.99999950685,\"ram\":64,\"totalMoneyGenerated\":2342478057.597891,\"name\":\"hacknet-node-9\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":72007.79999951358,\"ram\":64,\"totalMoneyGenerated\":2341193935.1763673,\"name\":\"hacknet-node-10\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":71742.39999951744,\"ram\":64,\"totalMoneyGenerated\":2340220592.538184,\"name\":\"hacknet-node-11\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":71526.39999952058,\"ram\":64,\"totalMoneyGenerated\":2339314048.040846,\"name\":\"hacknet-node-12\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":69614.19999954841,\"ram\":64,\"totalMoneyGenerated\":2335931361.096522,\"name\":\"hacknet-node-13\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":67849.99999957408,\"ram\":64,\"totalMoneyGenerated\":2329988726.417302,\"name\":\"hacknet-node-14\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":67247.79999958284,\"ram\":64,\"totalMoneyGenerated\":2323330336.029702,\"name\":\"hacknet-node-15\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":66956.59999958708,\"ram\":64,\"totalMoneyGenerated\":2316803980.474901,\"name\":\"hacknet-node-16\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":66355.99999959582,\"ram\":64,\"totalMoneyGenerated\":2302291551.911348,\"name\":\"hacknet-node-17\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":65801.39999960389,\"ram\":64,\"totalMoneyGenerated\":2287644177.2807093,\"name\":\"hacknet-node-18\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":64282.99999962599,\"ram\":64,\"totalMoneyGenerated\":2244627041.4564095,\"name\":\"hacknet-node-19\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":62566.39999965041,\"ram\":64,\"totalMoneyGenerated\":2191592610.049895,\"name\":\"hacknet-node-20\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":58721.399999706366,\"ram\":64,\"totalMoneyGenerated\":2063851932.6279209,\"name\":\"hacknet-node-21\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":57309.59999972691,\"ram\":64,\"totalMoneyGenerated\":2014271005.9354975,\"name\":\"hacknet-node-22\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":55002.999999760475,\"ram\":64,\"totalMoneyGenerated\":1933062691.9574351,\"name\":\"hacknet-node-23\"}}],\"has4SData\":false,\"has4SDataTixApi\":false,\"hashManager\":{\"ctor\":\"HashManager\",\"data\":{\"capacity\":0,\"hashes\":0,\"upgrades\":{\"Sell for Money\":0,\"Sell for Corporation Funds\":0,\"Reduce Minimum Security\":0,\"Increase Maximum Money\":0,\"Improve Studying\":0,\"Improve Gym Training\":0,\"Exchange for Corporation Research\":0,\"Exchange for Bladeburner Rank\":0,\"Exchange for Bladeburner SP\":0,\"Generate Coding Contract\":0,\"Company Favor\":0}}},\"hasTixApiAccess\":false,\"hasWseAccount\":true,\"jobs\":{},\"karma\":-30.300000000000008,\"numPeopleKilled\":0,\"location\":\"Travel Agency\",\"money\":11483434519.427025,\"moneySourceA\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-8301568,\"codingcontract\":0,\"corporation\":0,\"crime\":0,\"gang\":0,\"hacking\":38300345811.304596,\"hacknet\":54842800095.1859,\"hacknet_expenses\":-7903523222.888864,\"hospitalization\":0,\"infiltration\":0,\"sleeves\":0,\"stock\":0,\"total\":11482434519.426384,\"work\":0,\"servers\":-44000000,\"other\":-315400000,\"augmentations\":-73389486604.0903}},\"moneySourceB\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-180784240,\"codingcontract\":0,\"corporation\":0,\"crime\":24717636.172864918,\"gang\":0,\"hacking\":78185294876.3184,\"hacknet\":245077113804.90115,\"hacknet_expenses\":-84307005899.00201,\"hospitalization\":-3678000,\"infiltration\":0,\"sleeves\":0,\"stock\":-200000000,\"total\":70922340460.80086,\"work\":6256069.41311641,\"servers\":-396000000,\"other\":-1562199973.8107805,\"augmentations\":-165721373863.3689}},\"playtimeSinceLastAug\":75348800,\"playtimeSinceLastBitnode\":546999200,\"lastAugReset\":1693737435816,\"lastNodeReset\":1693265783929,\"purchasedServers\":[\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"scriptProdSinceLastAug\":38300345811.304596,\"sleeves\":[],\"sleevesFromCovenant\":0,\"sourceFiles\":{\"ctor\":\"JSONMap\",\"data\":[[1,1]]},\"exploits\":[\"N00dles\",\"UndocumentedFunctionCall\",\"Bypass\",\"Unclickable\",\"RealityAlteration\",\"INeedARainbow\"],\"achievements\":[{\"ID\":\"NS2\",\"unlockedOn\":1662595895471},{\"ID\":\"FIRST_HACKNET_NODE\",\"unlockedOn\":1662596015477},{\"ID\":\"FROZE\",\"unlockedOn\":1662606229026},{\"ID\":\"BRUTESSH.EXE\",\"unlockedOn\":1662608449026},{\"ID\":\"FTPCRACK.EXE\",\"unlockedOn\":1662632539212},{\"ID\":\"CYBERSEC\",\"unlockedOn\":1662654522875},{\"ID\":\"WORKOUT\",\"unlockedOn\":1662654762877},{\"ID\":\"HACKNET_NODE_10M\",\"unlockedOn\":1662699713290},{\"ID\":\"INSTALL_1\",\"unlockedOn\":1662736673277},{\"ID\":\"NITESEC\",\"unlockedOn\":1662820759873},{\"ID\":\"TOR\",\"unlockedOn\":1662827397785},{\"ID\":\"HOSPITALIZED\",\"unlockedOn\":1662832140786},{\"ID\":\"RELAYSMTP.EXE\",\"unlockedOn\":1662845880787},{\"ID\":\"HTTPWORM.EXE\",\"unlockedOn\":1662845880789},{\"ID\":\"TRAVEL\",\"unlockedOn\":1662862621580},{\"ID\":\"MAX_HACKNET_NODE\",\"unlockedOn\":1662949451779},{\"ID\":\"SQLINJECT.EXE\",\"unlockedOn\":1662949691784},{\"ID\":\"THE_BLACK_HAND\",\"unlockedOn\":1662965892986},{\"ID\":\"FORMULAS.EXE\",\"unlockedOn\":1663053707392},{\"ID\":\"BITRUNNERS\",\"unlockedOn\":1663226317042},{\"ID\":\"DONATION\",\"unlockedOn\":1663453433269},{\"ID\":\"DRAIN_SERVER\",\"unlockedOn\":1663459433299},{\"ID\":\"REPUTATION_10M\",\"unlockedOn\":1664194330396},{\"ID\":\"DAEDALUS\",\"unlockedOn\":1664194510488},{\"ID\":\"SF1.1\",\"unlockedOn\":1693265834474},{\"ID\":\"N00DLES\",\"unlockedOn\":1693405977626},{\"ID\":\"UNDOCUMENTEDFUNCTIONCALL\",\"unlockedOn\":1693571157628},{\"ID\":\"BYPASS\",\"unlockedOn\":1693571277636},{\"ID\":\"UNCLICKABLE\",\"unlockedOn\":1693781222084},{\"ID\":\"REALITYALTERATION\",\"unlockedOn\":1693781368207},{\"ID\":\"RAINBOW\",\"unlockedOn\":1693781668091}],\"terminalCommandHistory\":[\"buy -l\",\"backdoor1CSEC \",\"connect harakiri-sushi; connect CSEC; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor2NiteSec \",\"connect hong-fang-tea; connect zer0; connect omega-net; connect avmnite-02h; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor3BlackHand \",\"connect hong-fang-tea; connect max-hardware; connect neo-net; connect netlink; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"connect hong-fang-tea; connect max-hardware; connect neo-net; connect netlink; connect I.I.I.I; connect lexo-corp; connect galactic-cyber; connect omnia; connect zeus-med; connect nova-med; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"startAll \",\"./start-hack-course.js \",\"cat start-hack-course.js \",\"./start-hack-course.js \",\"startAll \",\"buy-all \",\"backdoor1CSEC \",\"connect foodnstuff; connect CSEC; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor2NiteSec \",\"connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor3BlackHand \",\"connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"home\",\"./start-hack-course.js \",\"buy-all \",\"buy -l\",\"backdoor3BlackHand \",\"connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy-all \",\"backdoor4BitRunners \",\"connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy-all \",\"scan-analyze \",\"home\",\"./scan-network.js \",\"nano scan\",\"nano scan.txt \",\"./alter-reality.js \",\"ls\"],\"lastUpdate\":1693812784484,\"lastSave\":1693812770086,\"totalPlaytime\":31217617200,\"currentWork\":{\"ctor\":\"FactionWork\",\"data\":{\"type\":\"FACTION\",\"singularity\":false,\"cyclesWorked\":335763,\"factionWorkType\":\"hacking\",\"factionName\":\"BitRunners\"}},\"focus\":false,\"entropy\":0,\"identifier\":\"38aadbdb6216\"}}","AllServersSave":"{\"home\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"home\",\"httpPortOpen\":true,\"ip\":\"75.8.0.0\",\"isConnectedTo\":true,\"maxRam\":32,\"messages\":[\"hackers-starting-handbook.lit\",\"j0.msg\",\"j1.msg\",\"csec-test.msg\",\"j2.msg\",\"nitesec-test.msg\",\"j3.msg\",\"j4.msg\",\"19dfj3l1nd.msg\"],\"organizationName\":\"Home PC\",\"programs\":[\"NUKE.exe\",\"b1t_flum3.exe\",\"BruteSSH.exe\",\"DeepscanV1.exe\",\"AutoLink.exe\",\"fl1ght.exe\",\"FTPCrack.exe\",\"ServerProfiler.exe\",\"relaySMTP.exe\",\"HTTPWorm.exe\",\"SQLInject.exe\",\"DeepscanV2.exe\"],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"home\"}}],[\"run-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    let host = ns.args[0];\\n    let remote = ns.args[1];\\n    let script = 'simple-hack.js';\\n\\n    if (!ns.serverExists(host)) {\\n        ns.print(`Host '${host}'' doesn't exist!`);\\n        return 1;\\n    }\\n\\n    if (!ns.serverExists(remote)) {\\n        ns.print(`Remote '${remote}'' doesn't exist!`);\\n        return 2;\\n    }\\n\\n    if (!ns.fileExists(script, host)) {\\n        if (!ns.fileExists(script, 'home')) {\\n            ns.print(`Script '${script}' doesn't exist!`);\\n            return 3;\\n        }\\n\\n        ns.scp(script, host, 'home');\\n    }\\n\\n    let serverMaxRam = ns.getServerMaxRam(host);\\n    let serverUsedRam = ns.getServerUsedRam(host);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, host);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    if(maxThreads == 0)\\n    {\\n        ns.print(`Not enough ram to run '${script}', ${scriptRam}/${serverFreeRam}!`)\\n    }\\n\\n    ns.scriptKill(script, host);\\n\\n    if (!ns.exec(script, host, maxThreads, remote)) {\\n        ns.tprint(`Exec error running script '${script} on '${host}!`);\\n    }\\n\\n    \\n}\\n\",\"filename\":\"run-simple-hack.js\",\"server\":\"home\"}}],[\"auto-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    /**\\n     * @constant\\n     * @default\\n     */\\n    const EXPLOITS = [\\n        'BruteSSH.exe',\\n        'FTPCrack.exe',\\n        'relaySMTP.exe',\\n        'HTTPWorm.exe',\\n        'SQLInject.exe'\\n    ];\\n\\n    /** @function maxPortsToHack\\n     * Calculate how many ports you're able to open\\n     * @returns {number} number of ports you're able to open\\n     */\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        EXPLOITS.forEach(exploit => {\\n            if (ns.fileExists(exploit)) ++maxPorts;\\n        });\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n\\n    /** @function analyzeServer\\n     * Analyze server requirements\\n     * @param {string} server \\n     * @returns {object} object containing server information\\n     */\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts)\\n        };\\n    }\\n\\n    /** @function runHack\\n     * Recursively scan, try to nuke and hack servers in the network\\n     * @param {string} server server to nuke and hack\\n     * @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running\\n     */\\n    async function runNuke(server) {\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            ns.print(`\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n            for (let i = 0; i < maxPortsToHack(); ++i) {\\n                switch (EXPLOITS[i]) {\\n                    case 'BruteSSH.exe':\\n                        ns.brutessh(server);\\n                        break;\\n\\n                    case 'FTPCrack.exe':\\n                        ns.ftpcrack(server);\\n                        break;\\n\\n                    case 'relaySMTP.exe':\\n                        ns.relaysmtp(server);\\n                        break;\\n\\n                    case 'HTTPWorm.exe':\\n                        ns.httpworm(server);\\n                        break;\\n\\n                    case 'SQLInject.exe':\\n                        ns.sqlinject(server);\\n                        break;\\n\\n                }\\n            }\\n            ns.nuke(server);\\n        }\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            if (!ns.fileExists(script, 'home')) {\\n                ns.print(`ERROR Script '${script}' doesn't exist!`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await runNuke(nextServer);\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) {\\n                    let hackExitCode = await runHack(nextServer);\\n\\n                    // if (hackExitCode == 0) {\\n                    //     ns.print('INFO ' + `\\\"Hack already running on ${nextServer}\\\"`);\\n                    // } else if (hackExitCode == -6) {\\n                    //     ns.print('ERROR ' + `\\\"No root access to ${nextServer}!\\\"`);\\n                    // } else if (hackExitCode == -4) {\\n                    //     ns.print('WARN ' + `\\\"Not enough RAM to run script on ${nextServer}!\\\"`);\\n                    // } else {\\n                    //     if (hackExitCode < 0) {\\n                    //         ns.print('ERROR ' + `\\\"Hack exec ERROR on '${nextServer}': ${hackExitCode}!\\\"`);\\n                    //     } else {\\n                    //         ns.print('INFO ' + `\\\"Hack started on '${nextServer}'\\\"`);\\n                    //     }\\n                    // }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n        await ns.sleep(10);\\n    }\\n\\n    ns.write('nuke-log.js', '', 'w');\\n    if (!ns.scriptRunning('simple-hack.js', 'n00dles')) ns.write('hack-log.js', '', 'w');\\n    ns.tprint(`TERMINAL = \\\"Running scan\\\"`);\\n\\n    while (true) {\\n        ns.print(`INFO Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(60000);\\n    }\\n}\\n\",\"filename\":\"auto-nuke.js\",\"server\":\"home\"}}],[\"hacknet-bot.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    const nodeCostThreshold = ns.args.length > 0 ? ns.args[0] : 0.2;\\n    const upgradeCostThreshold = ns.args.length > 1 ? ns.args[1] : 0.1;\\n    const upgradeCount = ns.args.length > 2 ? ns.args[2] : 1;\\n    const helperBuyThreshold = ns.args.length > 3 ? ns.args[3] : 0.2;\\n    const nodeCap = 24;\\n    const levelCap = 200;\\n    const ramCap = 64;\\n    const coreCap = 16;\\n    const serverRAM = 32;\\n    ns.tprint(`Bot started {nodeCostThreshold: ${nodeCostThreshold}, upgradeCostThreshold: ${upgradeCostThreshold}, upgradeCount: ${upgradeCount}}`);\\n\\n    \\n\\n    while (true) {\\n        let currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n\\n        let nodePurchaseCost = ns.hacknet.getPurchaseNodeCost();\\n        let nodeCount = ns.hacknet.numNodes();\\n\\n        if (nodeCount < nodeCap && nodePurchaseCost / Math.abs(currentMoney) < nodeCostThreshold) {\\n            ns.hacknet.purchaseNode();\\n            currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            ++nodeCount;\\n        }\\n\\n        for (let index = 0; index < nodeCount; ++index) {\\n            let nodeStats = ns.hacknet.getNodeStats(index);\\n\\n            if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeLevel(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeRam(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeCore(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n        }\\n\\n        let serverCost = ns.getPurchasedServerCost(serverRAM);\\n\\n        if (serverCost < currentMoney * helperBuyThreshold) {\\n            let newServer = ns.purchaseServer('home', serverRAM);\\n            if (newServer != '') {\\n                ns.tprint(`Bought a server`);\\n                ns.scp('grow-helper.js', newServer);\\n                ns.scp('constants.js', newServer);\\n                let execExitCode = ns.exec('grow-helper.js', newServer, 10, 20);\\n                ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n            }\\n        }\\n\\n\\n\\n\\n        // let logFiles = ['hack-log.js', 'nuke-log.js'];\\n\\n        // for (let index = 0; index < logFiles.length; index++) {\\n        //     const logFile = logFiles[index];\\n        //     let portData = ns.readPort(index + 1);\\n        //     if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');\\n        // }\\n\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"hacknet-bot.js\",\"server\":\"home\"}}],[\"kill-all-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) ns.scriptKill('simple-hack.js', nextServer);\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    scanServer('home');\\n}\\n\",\"filename\":\"kill-all-simple-hack.js\",\"server\":\"home\"}}],[\"kill-hacknet.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    ns.scriptKill('hacknet-bot.js', 'home');\\n}\",\"filename\":\"kill-hacknet.js\",\"server\":\"home\"}}],[\"hack-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"hack-log.js\",\"server\":\"home\"}}],[\"kill-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    ns.scriptKill('auto-nuke.js', 'home');\\n}\",\"filename\":\"kill-nuke.js\",\"server\":\"home\"}}],[\"nuke-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"nuke-log.js\",\"server\":\"home\"}}],[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home\"}}],[\"buy-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.get\\n    if(ns.getPurchasedServerCost(16)\\n}\",\"filename\":\"buy-server.js\",\"server\":\"home\"}}],[\"buy-grow-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.getServerMoneyAvailable('home');\\n\\n    if (serverCost < 0.1 * currentMoney) {\\n        let newServer = ns.purchaseServer('home', 16);\\n        if (newServer != '') {\\n            ns.tprint(`Bought a server`);\\n            ns.scp('grow-helper.js', newServer);\\n            let execExitCode = ns.exec('grow-helper.js', newServer, 5, 20);\\n            ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n        }\\n    }\\n}\",\"filename\":\"buy-grow-server.js\",\"server\":\"home\"}}],[\"start-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    let script = 'grow-helper.js';\\n\\n\\n    let serverMaxRam = ns.getServerMaxRam(`home`);\\n    let serverUsedRam = ns.getServerUsedRam(`home`);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, `home`);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    ns.scp(script, `home`, 'home');\\n    ns.exec(script, `home`, maxThreads);\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        let serverMaxRam = ns.getServerMaxRam(`home-${server}`);\\n        let serverUsedRam = ns.getServerUsedRam(`home-${server}`);\\n        let serverFreeRam = serverMaxRam - serverUsedRam;\\n        let scriptRam = ns.getScriptRam(script, `home-${server}`);\\n        let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n        ns.scp(script, `home-${server}`, 'home');\\n        ns.exec(script, `home-${server}`, maxThreads);\\n    }\\n}\",\"filename\":\"start-grow-helpers.js\",\"server\":\"home\"}}],[\"backdoor-command.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    backdoorCommand = 'run BruteSSH.exe; ';\\n    backdoorCommand += 'run FTPCrack.exe; ';\\n    backdoorCommand += 'run relaySMTP.exe; ';\\n    backdoorCommand += 'run HTTPWorm.exe; ';\\n    backdoorCommand += 'run SQLInject.exe; ';\\n    backdoorCommand += 'run NUKE.exe; ';\\n    backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-command.js\",\"server\":\"home\"}}],[\"download-all-lit.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let litFiles = ns.ls(nextServer, 'lit');\\n                ns.tprint(`Download from '${nextServer}': ${litFiles}`);\\n                if (ns.args[0] && litFiles.length) {\\n                    ns.scp(litFiles, 'home', nextServer);\\n                }\\n\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    scanServer('home');\\n}\",\"filename\":\"download-all-lit.js\",\"server\":\"home\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home\"}}],[\"auto-nuke-v2.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\n\\n\\n/**\\n * loop\\n *  get all servers\\n *  nuke if possible\\n *      send scripts hack, grow weaken\\n *  buy grow servers\\n *  start helpers if not running include home //remove from hacknet\\n *      grow if needed\\n *      weaken if needed\\n *      hack if no grow or weaken\\n *  do simple hack\\n *      check if money available\\n *      check threads\\n *      run hack \\n *      run grow to recover\\n *      run weaken if security too high\\n *  buy hack tools\\n */\\n\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        await writeLog('ANALYZE', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess) {\\n            if (serverStatus.nukeAvailable) {\\n                await writeLog('NUKE', `\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n                for (let i = 0; i < maxPortsToHack(); ++i) {\\n                    switch (EXPLOITS[i]) {\\n                        case 'BruteSSH.exe':\\n                            ns.brutessh(server);\\n                            break;\\n\\n                        case 'FTPCrack.exe':\\n                            ns.ftpcrack(server);\\n                            break;\\n\\n                        case 'relaySMTP.exe':\\n                            ns.relaysmtp(server);\\n                            break;\\n\\n                        case 'HTTPWorm.exe':\\n                            ns.httpworm(server);\\n                            break;\\n\\n                        case 'SQLInject.exe':\\n                            ns.sqlinject(server);\\n                            break;\\n\\n                    }\\n                }\\n                ns.nuke(server);\\n            }\\n        }\\n\\n        serverStatus = analyzeServer(server);\\n\\n        if (serverStatus.rootAccess) {\\n            if (!ns.fileExists(script, 'home')) {\\n                await writeLog('ERROR', `\\\"Script '${script}' doesn't exist!\\\"`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n        let result = [];\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                result.concat(scanServer(nextServer, currentServer));\\n            }\\n        }\\n\\n        return [currentServer].concat(result);\\n    }\\n\\n    while (true) {\\n        let network = scanServer('home');\\n\\n        await ns.sleep(100);\\n    }\\n}\",\"filename\":\"auto-nuke-v2.js\",\"server\":\"home\"}}],[\"grow.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    await ns.grow(ns.args.length > 0 ? ns.args[0] : '');\\n}\",\"filename\":\"grow.js\",\"server\":\"home\"}}],[\"hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    await ns.hack(ns.args.length > 0 ? ns.args[0] : '');\\n}\",\"filename\":\"hack.js\",\"server\":\"home\"}}],[\"weaken.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    await ns.weaken(ns.args.length > 0 ? ns.args[0] : '')\\n}\",\"filename\":\"weaken.js\",\"server\":\"home\"}}],[\"kill-all-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        ns.scriptKill('grow-helper.js', `home-${server}`);\\n    }\\n}\\n\\n\\n\\n\\n\",\"filename\":\"kill-all-grow-helpers.js\",\"server\":\"home\"}}],[\"scan-network.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n        ns.tprint(`${'┃  '.repeat(scanLevel)}┣${currentServer}: ${nextConnectString}`);\\n        ns.write('scan.txt', `${'┃  '.repeat(scanLevel)}┣━${currentServer}: ${nextConnectString}`+'\\\\n', 'a');\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, nextConnectString, scanLevel+1);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    ns.write('scan.txt', ``, 'w');\\n    scanServer('home');\\n}\\n\",\"filename\":\"scan-network.js\",\"server\":\"home\"}}],[\"connect-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // backdoorCommand = 'run BruteSSH.exe; ';\\n    // backdoorCommand += 'run FTPCrack.exe; ';\\n    // backdoorCommand += 'run relaySMTP.exe; ';\\n    // backdoorCommand += 'run HTTPWorm.exe; ';\\n    // backdoorCommand += 'run SQLInject.exe; ';\\n    // backdoorCommand += 'run NUKE.exe; ';\\n    // backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    // terminalInput.value = backdoorCommand;\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"connect-server.js\",\"server\":\"home\"}}],[\"backdoor-all.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    async function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n\\n        let backdoorCommand = nextConnectString;\\n        backdoorCommand += 'run BruteSSH.exe; ';\\n        backdoorCommand += 'run FTPCrack.exe; ';\\n        backdoorCommand += 'run relaySMTP.exe; ';\\n        backdoorCommand += 'run HTTPWorm.exe; ';\\n        backdoorCommand += 'run SQLInject.exe; ';\\n        backdoorCommand += 'run NUKE.exe; ';\\n        backdoorCommand += 'backdoor';\\n\\n        terminalInput.value = backdoorCommand;\\n        terminalInput[handler].onChange({ target: terminalInput });\\n        terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n        await ns.sleep(60000)\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await scanServer(nextServer, currentServer, nextConnectString, scanLevel + 1);\\n            }\\n        }\\n    }\\n    \\n    await scanServer('home');\\n    terminalInput.value = 'home';\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-all.js\",\"server\":\"home\"}}],[\"test.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    // const handler = Object.keys(terminalInput)[1];\\n\\n    // terminalInput.value = \\\"COMMAND\\\";\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n    doc.querySelector('#root > div.MuiBox-root.css-1ik4laa > div.MuiDrawer-root.MuiDrawer-docked.css-v3syqg > div > ul > div:nth-child(8) > div > div > div:nth-child(2)').click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.MuiBox-root.css-1ik4laa > div.jss1.MuiBox-root.css-0 > div > p:nth-child(16) > span\\\").click(); // Travel\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"body > div.jss19.MuiModal-root.css-8ndowl > div.jss20 > div > button\\\").click(); // Aevum\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"body > div.jss19.MuiModal-root.css-8ndowl > div.jss20 > button\\\").click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.MuiBox-root.css-1ik4laa > div.jss1.MuiBox-root.css-0 > p:nth-child(9) > span:nth-child(1)\\\").click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.MuiBox-root.css-1ik4laa > div.jss1.MuiBox-root.css-0 > div > button:nth-child(4)\\\").click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.jss1.MuiBox-root.css-0 > div > div.MuiPaper-root.MuiPaper-elevation.MuiPaper-rounded.MuiPaper-elevation1.css-6vzjud > div.MuiBox-root.css-lqt4hu > button:nth-child(2)\\\").click();\\n}\",\"filename\":\"test.js\",\"server\":\"home\"}}],[\"document-bypass.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    terminalInput.value = \\\"COMMAND\\\";\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"document-bypass.js\",\"server\":\"home\"}}],[\"auto-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\n\\n\\n/**\\n * remove write log ✓\\n * loop\\n *  get all servers\\n *  nuke if possible\\n *      send scripts hack, grow weaken\\n *  backdoor factions\\n *  buy grow servers\\n *  start helpers if not running include home //remove from hacknet\\n *      grow if needed\\n *      weaken if needed\\n *      hack if no grow or weaken\\n *  do simple hack\\n *      check if money available\\n *      check threads\\n *      run hack \\n *      run grow to recover\\n *      run weaken if security too high\\n *  buy hack tools\\n */\\n\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}.${month}.${day}_${hour}:${minute}:${second}`;\\n        ns.print(`${type}_${timestamp} = ${obj};`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${type}_${timestamp} = ${obj};`);\\n    }\\n\\n    async function runNuke(server) {\\n        let serverStatus = analyzeServer(server);\\n        await writeLog('ANALYZE', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess) {\\n            if (serverStatus.nukeAvailable) {\\n                await writeLog('NUKE', `\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n                for (let i = 0; i < maxPortsToHack(); ++i) { // TODO: change to try/catch\\n                    switch (EXPLOITS[i]) {\\n                        case 'BruteSSH.exe':\\n                            ns.brutessh(server);\\n                            break;\\n\\n                        case 'FTPCrack.exe':\\n                            ns.ftpcrack(server);\\n                            break;\\n\\n                        case 'relaySMTP.exe':\\n                            ns.relaysmtp(server);\\n                            break;\\n\\n                        case 'HTTPWorm.exe':\\n                            ns.httpworm(server);\\n                            break;\\n\\n                        case 'SQLInject.exe':\\n                            ns.sqlinject(server);\\n                            break;\\n\\n                    }\\n                }\\n                ns.nuke(server);\\n            }\\n            // TODO: if faction > backdoor\\n        }\\n    }\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n\\n        if (serverStatus.rootAccess) {\\n            if (!ns.fileExists(script, 'home')) {\\n                await writeLog('ERROR', `\\\"Script '${script}' doesn't exist!\\\"`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n        let result = [];\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                result.concat(scanServer(nextServer, currentServer));\\n            }\\n        }\\n\\n        return [currentServer].concat(result);\\n    }\\n\\n    while (true) {\\n        let network = scanServer('home');\\n\\n        await ns.sleep(100);\\n    }\\n}\",\"filename\":\"auto-hack.js\",\"server\":\"home\"}}],[\"start-hack-course.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    // const handler = Object.keys(terminalInput)[1];\\n\\n    // terminalInput.value = \\\"COMMAND\\\";\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // const terminalButton = doc.querySelector();\\n    let terminal;\\n    let city;\\n    let travel;\\n    for (const elem of doc.querySelectorAll('div.MuiDrawer-root.MuiDrawer-docked p')) {\\n        if (elem.textContent == 'Terminal') {\\n            terminal = elem;\\n        }\\n        if (elem.textContent == 'City') {\\n            city = elem;\\n        }\\n        if (elem.textContent == 'Travel') {\\n            travel = elem;\\n        }\\n    }\\n\\n\\n    travel.click(); await ns.sleep(100);\\n\\n    for (const aevum of doc.querySelectorAll('div#root span')) {\\n        if (aevum.textContent == 'A') {\\n            aevum.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const travelConfirm of doc.querySelectorAll('div[role=\\\"presentation\\\"] p')) {\\n        if (travelConfirm.textContent == 'Travel') {\\n            travelConfirm.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    const closeButton = doc.querySelector('div[role=\\\"presentation\\\"] button');\\n    if(!closeButton == undefined) closeButton.click();\\n\\n    city.click(); await ns.sleep(100);\\n\\n    for (const uni of doc.querySelectorAll('div#root span')) {\\n        if (uni.textContent == 'U') {\\n            uni.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const course of doc.querySelectorAll('div#root button')) {\\n        if (course.textContent == 'Take Algorithms course ($-1.280k / sec)') {\\n            course.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const closeCourse of doc.querySelectorAll('div#root button')) {\\n        if (closeCourse.textContent == 'Do something else simultaneously') {\\n            closeCourse.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n    await ns.sleep(1000);\\n    console.log(terminal)\\n    terminal.click(); await ns.sleep(100);\\n}\",\"filename\":\"start-hack-course.js\",\"server\":\"home\"}}],[\"alter-reality.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    ns.alterReality();\\n    ns.rainbow('noodles');\\n    ns.DevMenuRoot();\\n}\",\"filename\":\"alter-reality.js\",\"server\":\"home\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"foodnstuff\",\"sigma-cosmetics\",\"joesguns\",\"hong-fang-tea\",\"harakiri-sushi\",\"iron-gym\",\"darkweb\",\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[[\"INFO.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"INFO.txt\",\"text\":\"{server: \\\"the-hub\\\", status: {\\\"rootAccess\\\":true,\\\"requiredHacking\\\":313,\\\"requiredPorts\\\":2,\\\"nukeAvailable\\\":false}}\"}}],[\"scan.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"scan.txt\",\"text\":\"┣━home: connect home; \\n┃  ┣━n00dles: connect home; connect n00dles; \\n┃  ┃  ┣━max-hardware: connect home; connect n00dles; connect max-hardware; \\n┃  ┃  ┃  ┣━phantasy: connect home; connect n00dles; connect max-hardware; connect phantasy; \\n┃  ┃  ┃  ┃  ┣━avmnite-02h: connect home; connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; \\n┃  ┃  ┃  ┃  ┃  ┣━I.I.I.I: connect home; connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; connect I.I.I.I; \\n┃  ┣━foodnstuff: connect home; connect foodnstuff; \\n┃  ┃  ┣━nectar-net: connect home; connect foodnstuff; connect nectar-net; \\n┃  ┃  ┃  ┣━omega-net: connect home; connect foodnstuff; connect nectar-net; connect omega-net; \\n┃  ┃  ┃  ┃  ┣━computek: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect computek; \\n┃  ┃  ┃  ┃  ┣━johnson-ortho: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; \\n┃  ┃  ┃  ┃  ┃  ┣━zb-institute: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect zb-institute; \\n┃  ┃  ┃  ┃  ┃  ┣━catalyst: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━rho-construction: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; connect rho-construction; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━aerocorp: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; connect rho-construction; connect aerocorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━aevum-police: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; connect aevum-police; \\n┃  ┃  ┣━CSEC: connect home; connect foodnstuff; connect CSEC; \\n┃  ┃  ┃  ┣━neo-net: connect home; connect foodnstuff; connect CSEC; connect neo-net; \\n┃  ┃  ┃  ┃  ┣━the-hub: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect the-hub; \\n┃  ┃  ┃  ┃  ┃  ┣━rothman-uni: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect the-hub; connect rothman-uni; \\n┃  ┃  ┃  ┃  ┣━netlink: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; \\n┃  ┃  ┃  ┃  ┃  ┣━summit-uni: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━alpha-ent: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━snap-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnia: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━univ-energy: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━taiyang-digital: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━titan-labs: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect titan-labs; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━applied-energetics: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━helios: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━.: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━clarkinc: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect clarkinc; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━ecorp: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect clarkinc; connect ecorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━megacorp: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect clarkinc; connect megacorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━powerhouse-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect powerhouse-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━vitalife: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect vitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━unitalife: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect unitalife; \\n┃  ┃  ┃  ┃  ┣━crush-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; \\n┃  ┃  ┃  ┃  ┃  ┣━syscore: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━lexo-corp: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect lexo-corp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━global-pharm: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect lexo-corp; connect global-pharm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━millenium-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━galactic-cyber: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━deltaone: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━defcomm: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect defcomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━icarus: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━infocomm: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━run4theh111z: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumtech: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnitek: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━b-and-a: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; connect b-and-a; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumassets: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; connect b-and-a; connect fulcrumassets; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━blade: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; connect blade; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zb-def: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect zb-def; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━solaris: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nova-med: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━microdyne: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━stormtech: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━4sigma: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect 4sigma; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nwo: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect 4sigma; connect nwo; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━The-Cave: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect 4sigma; connect nwo; connect The-Cave; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━kuai-gong: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect kuai-gong; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zeus-med: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect zeus-med; \\n┃  ┃  ┃  ┣━silver-helix: connect home; connect foodnstuff; connect CSEC; connect silver-helix; \\n┃  ┣━sigma-cosmetics: connect home; connect sigma-cosmetics; \\n┃  ┣━joesguns: connect home; connect joesguns; \\n┃  ┣━hong-fang-tea: connect home; connect hong-fang-tea; \\n┃  ┣━harakiri-sushi: connect home; connect harakiri-sushi; \\n┃  ┣━iron-gym: connect home; connect iron-gym; \\n┃  ┃  ┣━zer0: connect home; connect iron-gym; connect zer0; \\n┃  ┣━darkweb: connect home; connect darkweb; \\n┃  ┣━home-0: connect home; connect home-0; \\n┃  ┣━home-1: connect home; connect home-1; \\n┃  ┣━home-2: connect home; connect home-2; \\n┃  ┣━home-3: connect home; connect home-3; \\n┃  ┣━home-4: connect home; connect home-4; \\n┃  ┣━home-5: connect home; connect home-5; \\n┃  ┣━home-6: connect home; connect home-6; \\n┃  ┣━home-7: connect home; connect home-7; \\n┃  ┣━home-8: connect home; connect home-8; \\n┃  ┣━home-9: connect home; connect home-9; \\n┃  ┣━home-10: connect home; connect home-10; \\n┃  ┣━home-11: connect home; connect home-11; \\n┃  ┣━home-12: connect home; connect home-12; \\n┃  ┣━home-13: connect home; connect home-13; \\n┃  ┣━home-14: connect home; connect home-14; \\n┃  ┣━home-15: connect home; connect home-15; \\n┃  ┣━home-16: connect home; connect home-16; \\n┃  ┣━home-17: connect home; connect home-17; \\n┃  ┣━home-18: connect home; connect home-18; \\n┃  ┣━home-19: connect home; connect home-19; \\n┃  ┣━home-20: connect home; connect home-20; \\n┃  ┣━home-21: connect home; connect home-21; \\n┃  ┣━home-22: connect home; connect home-22; \\n┃  ┣━home-23: connect home; connect home-23; \\n┃  ┣━home-24: connect home; connect home-24; \\n\"}}]]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.016,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"hacknet-bot.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":73993.40999948469,\"ramUsage\":10.1,\"server\":\"home\",\"scriptKey\":\"hacknet-bot.js*[]\",\"title\":\"hacknet-bot.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"auto-nuke.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":73993.40999948469,\"ramUsage\":5.6,\"server\":\"home\",\"scriptKey\":\"auto-nuke.js*[]\",\"title\":\"auto-nuke.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,3,0],\"foodnstuff\":[0,0,63,0],\"nectar-net\":[0,0,60,0],\"neo-net\":[0,0,63,0],\"sigma-cosmetics\":[0,0,60,0],\"joesguns\":[0,0,51,0],\"hong-fang-tea\":[0,0,54,0],\"harakiri-sushi\":[0,0,48,0],\"iron-gym\":[0,0,60,0],\"zer0\":[0,0,57,0],\"max-hardware\":[0,0,51,0],\"phantasy\":[0,0,21,0],\"omega-net\":[0,0,24,0],\"the-hub\":[0,0,24,0],\"silver-helix\":[0,0,21,0],\"rothman-uni\":[0,0,15,0],\"netlink\":[0,0,15,0],\"summit-uni\":[0,0,15,0],\"alpha-ent\":[0,0,15,0],\"lexo-corp\":[0,0,12,0],\"millenium-fitness\":[0,0,12,0],\"catalyst\":[0,0,12,0],\"rho-construction\":[0,0,12,0],\"aevum-police\":[0,0,12,0],\"univ-energy\":[0,0,12,0],\"titan-labs\":[0,0,12,0],\"helios\":[0,0,9,0],\"vitalife\":[0,0,9,0],\"unitalife\":[0,0,9,0],\"global-pharm\":[0,0,9,0],\"solaris\":[0,0,9,0],\"microdyne\":[0,0,9,0],\"zb-institute\":[0,0,9,0],\"omnia\":[0,0,9,0],\"powerhouse-fitness\":[0,0,3,0],\"blade\":[0,0,3,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":60051.4532533347,\"onlineMoneyMade\":0,\"onlineRunningTime\":73993.40999948469,\"ramUsage\":3.15,\"server\":\"home\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":3,\"temporary\":false}}]}},\"ecorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-294820.cct\",\"type\":\"Array Jumping Game II\",\"data\":[2,1,2,3,4,1,3,0,5,7,3,3,7,2,2,5,4,4,5,2,1,6,2],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"ecorp\",\"httpPortOpen\":false,\"ip\":\"26.6.1.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"ECorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"clarkinc\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":34045414705,\"moneyMax\":851135367625,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1167,\"serverGrowth\":99,\"runningScripts\":[]}},\"megacorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-268758.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[156,105,120,21,2,53,64,70,22,53,58,93,166,170,158,12,193,134,1,119,142,193,197,81,86,26,79,158,97,92,64,163,157,74,13,24,147,113,185,195,87,165,24,19,57,45,58,115,126],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"megacorp\",\"httpPortOpen\":false,\"ip\":\"45.6.6.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"MegaCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"clarkinc\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":41153639395,\"moneyMax\":1028840984875,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1176,\"serverGrowth\":99,\"runningScripts\":[]}},\"b-and-a\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"b-and-a\",\"httpPortOpen\":true,\"ip\":\"7.5.8.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Bachman & Associates\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"b-and-a\"}}]]},\"serversOnNetwork\":[\"omnitek\",\"fulcrumassets\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":75,\"hackDifficulty\":75,\"minDifficulty\":25,\"moneyAvailable\":28341748670,\"moneyMax\":708543716750,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":905,\"serverGrowth\":64,\"runningScripts\":[]}},\"blade\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-894433-BitRunners.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"0110000010010000\",\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-278852.cct\",\"type\":\"Find All Valid Math Expressions\",\"data\":[\"75039\",78],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"blade\",\"httpPortOpen\":true,\"ip\":\"5.3.2.1\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Blade Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"blade\"}}]]},\"serversOnNetwork\":[\"omnitek\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":95,\"hackDifficulty\":89.82400000000017,\"minDifficulty\":32,\"moneyAvailable\":36804067146.58109,\"moneyMax\":817182291700,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":995,\"serverGrowth\":58,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"blade\"],\"dataMap\":{\"blade\":[0,0,78,130]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":35142.65110002222,\"onlineMoneyMade\":0,\"onlineRunningTime\":18581.81000003254,\"ramUsage\":2.4,\"server\":\"blade\",\"scriptKey\":\"simple-hack.js*[\\\"blade\\\"]\",\"title\":\"simple-hack.js blade\",\"threads\":26,\"temporary\":false}}]}},\"nwo\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"nwo\",\"httpPortOpen\":false,\"ip\":\"80.9.9.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"NWO\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"4sigma\",\"The-Cave\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":37505261330,\"moneyMax\":937631533250,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1059,\"serverGrowth\":67,\"runningScripts\":[]}},\"clarkinc\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-526937.cct\",\"type\":\"Array Jumping Game II\",\"data\":[1,4,2,4,2,2,4,2,2,0,2,4,6,1,3,1,5,2],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"clarkinc\",\"httpPortOpen\":false,\"ip\":\"81.3.2.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"beyond-man.lit\",\"cost-of-immortality.lit\"],\"organizationName\":\"Clarke Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\".\",\"ecorp\",\"megacorp\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":62,\"hackDifficulty\":62,\"minDifficulty\":21,\"moneyAvailable\":17773669619,\"moneyMax\":444341740475,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1144,\"serverGrowth\":52,\"runningScripts\":[]}},\"omnitek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"omnitek\",\"httpPortOpen\":false,\"ip\":\"63.7.0.0\",\"isConnectedTo\":false,\"maxRam\":256,\"messages\":[\"coded-intelligence.lit\",\"history-of-synthoids.lit\"],\"organizationName\":\"OmniTek Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"fulcrumtech\",\"b-and-a\",\"blade\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":96,\"hackDifficulty\":96,\"minDifficulty\":32,\"moneyAvailable\":15246252527,\"moneyMax\":381156313175,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1027,\"serverGrowth\":95,\"runningScripts\":[]}},\"4sigma\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"4sigma\",\"httpPortOpen\":true,\"ip\":\"19.6.2.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Four Sigma\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"4sigma\"}}]]},\"serversOnNetwork\":[\"stormtech\",\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":70,\"minDifficulty\":23,\"moneyAvailable\":16601720225,\"moneyMax\":415043005625,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":979,\"serverGrowth\":85,\"runningScripts\":[]}},\"kuai-gong\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"kuai-gong\",\"httpPortOpen\":false,\"ip\":\"88.4.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"KuaiGong International\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"stormtech\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":27700644813,\"moneyMax\":692516120325,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1106,\"serverGrowth\":90,\"runningScripts\":[]}},\"fulcrumtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"fulcrumtech\",\"httpPortOpen\":false,\"ip\":\"40.0.3.9\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"run4theh111z\",\"omnitek\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":89,\"hackDifficulty\":89,\"minDifficulty\":30,\"moneyAvailable\":1619507444,\"moneyMax\":40487686100,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1197,\"serverGrowth\":82,\"runningScripts\":[]}},\"fulcrumassets\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-272247.cct\",\"type\":\"Unique Paths in a Grid II\",\"data\":[[0,1,1,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,0,0,1],[0,0,0,0],[0,1,0,1],[0,0,1,0],[0,1,0,0]],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"fulcrumassets\",\"httpPortOpen\":false,\"ip\":\"60.5.9.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"b-and-a\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":1000000,\"moneyMax\":25000000,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1178,\"serverGrowth\":1,\"runningScripts\":[]}},\"stormtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"stormtech\",\"httpPortOpen\":true,\"ip\":\"97.5.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Storm Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"stormtech\"}}]]},\"serversOnNetwork\":[\"microdyne\",\"4sigma\",\"kuai-gong\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":78,\"minDifficulty\":26,\"moneyAvailable\":1030468207,\"moneyMax\":25761705175,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":967,\"serverGrowth\":75,\"runningScripts\":[]}},\"defcomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"defcomm\",\"httpPortOpen\":true,\"ip\":\"46.7.1.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DefComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"defcomm\"}}]]},\"serversOnNetwork\":[\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":91,\"minDifficulty\":30,\"moneyAvailable\":896099037,\"moneyMax\":22402475925,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":879,\"serverGrowth\":57,\"runningScripts\":[]}},\"infocomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"infocomm\",\"httpPortOpen\":true,\"ip\":\"51.7.1.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"InfoComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"infocomm\"}}]]},\"serversOnNetwork\":[\"icarus\",\"run4theh111z\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":81,\"hackDifficulty\":81,\"minDifficulty\":27,\"moneyAvailable\":764732521,\"moneyMax\":19118313025,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":948,\"serverGrowth\":63,\"runningScripts\":[]}},\"helios\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-403231.cct\",\"type\":\"Subarray with Maximum Sum\",\"data\":[-6,-6,-9,10,1,-8,-10,3,2],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"helios\",\"httpPortOpen\":true,\"ip\":\"64.3.9.4\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Helios Labs\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"helios\"}}]]},\"serversOnNetwork\":[\"applied-energetics\",\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":59.374000000000315,\"minDifficulty\":30,\"moneyAvailable\":2345067964.7716575,\"moneyMax\":18740000650,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":880,\"serverGrowth\":72,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"helios\"],\"dataMap\":{\"helios\":[148832203.7774613,106,1219,795]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":353153.07073604316,\"onlineMoneyMade\":148832203.7774613,\"onlineRunningTime\":55816.00999974865,\"ramUsage\":2.4,\"server\":\"helios\",\"scriptKey\":\"simple-hack.js*[\\\"helios\\\"]\",\"title\":\"simple-hack.js helios\",\"threads\":53,\"temporary\":false}}]}},\"vitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"vitalife\",\"httpPortOpen\":true,\"ip\":\"40.3.3.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"VitaLife\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"vitalife\"}}]]},\"serversOnNetwork\":[\"applied-energetics\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":68.86600000000044,\"minDifficulty\":27,\"moneyAvailable\":1345622876.0392287,\"moneyMax\":19113653875,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":826,\"serverGrowth\":78,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"vitalife\"],\"dataMap\":{\"vitalife\":[0,0,195,299]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71540.39688218814,\"onlineMoneyMade\":0,\"onlineRunningTime\":57039.409999730844,\"ramUsage\":2.4,\"server\":\"vitalife\",\"scriptKey\":\"simple-hack.js*[\\\"vitalife\\\"]\",\"title\":\"simple-hack.js vitalife\",\"threads\":13,\"temporary\":false}}]}},\"icarus\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"icarus\",\"httpPortOpen\":true,\"ip\":\"58.6.2.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Icarus Microsystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"icarus\"}}]]},\"serversOnNetwork\":[\"deltaone\",\"infocomm\",\"zb-def\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":91,\"minDifficulty\":30,\"moneyAvailable\":936874236,\"moneyMax\":23421855900,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":852,\"serverGrowth\":87,\"runningScripts\":[]}},\"univ-energy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-646882.cct\",\"type\":\"Find Largest Prime Factor\",\"data\":308546037,\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"univ-energy\",\"httpPortOpen\":true,\"ip\":\"53.4.4.0\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Universal Energy\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"univ-energy\"}}]]},\"serversOnNetwork\":[\"omnia\",\"taiyang-digital\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":83.02800000000059,\"minDifficulty\":28,\"moneyAvailable\":1998983128.6874166,\"moneyMax\":29008487450,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":856,\"serverGrowth\":86,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"univ-energy\"],\"dataMap\":{\"univ-energy\":[0,0,90,114]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":31184.275564030737,\"onlineMoneyMade\":0,\"onlineRunningTime\":59360.80999969706,\"ramUsage\":2.4,\"server\":\"univ-energy\",\"scriptKey\":\"simple-hack.js*[\\\"univ-energy\\\"]\",\"title\":\"simple-hack.js univ-energy\",\"threads\":6,\"temporary\":false}}]}},\"titan-labs\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"titan-labs\",\"httpPortOpen\":true,\"ip\":\"94.9.8.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"coded-intelligence.lit\"],\"organizationName\":\"Titan Laboratories\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"titan-labs\"}}]]},\"serversOnNetwork\":[\"taiyang-digital\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":71.2000000000006,\"minDifficulty\":25,\"moneyAvailable\":1360072932.9135795,\"moneyMax\":21253995400,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":807,\"serverGrowth\":63,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"titan-labs\"],\"dataMap\":{\"titan-labs\":[0,0,108,132]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":32439.370246174363,\"onlineMoneyMade\":0,\"onlineRunningTime\":57039.409999730844,\"ramUsage\":2.4,\"server\":\"titan-labs\",\"scriptKey\":\"simple-hack.js*[\\\"titan-labs\\\"]\",\"title\":\"simple-hack.js titan-labs\",\"threads\":6,\"temporary\":false}}]}},\"microdyne\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"microdyne\",\"httpPortOpen\":true,\"ip\":\"73.8.5.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"Microdyne Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"microdyne\"}}]]},\"serversOnNetwork\":[\"nova-med\",\"stormtech\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":71,\"hackDifficulty\":58.12400000000018,\"minDifficulty\":24,\"moneyAvailable\":1070861082.8706615,\"moneyMax\":13041170850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":807,\"serverGrowth\":80,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"microdyne\"],\"dataMap\":{\"microdyne\":[0,0,247,338]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":76247.00194022676,\"onlineMoneyMade\":0,\"onlineRunningTime\":57039.00999973085,\"ramUsage\":2.4,\"server\":\"microdyne\",\"scriptKey\":\"simple-hack.js*[\\\"microdyne\\\"]\",\"title\":\"simple-hack.js microdyne\",\"threads\":13,\"temporary\":false}}]}},\"taiyang-digital\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"taiyang-digital\",\"httpPortOpen\":true,\"ip\":\"3.5.5.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"A-Green-Tomorrow.lit\",\"brighter-than-the-sun.lit\"],\"organizationName\":\"Taiyang Digital\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"taiyang-digital\"}}]]},\"serversOnNetwork\":[\"univ-energy\",\"titan-labs\",\"applied-energetics\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":74,\"minDifficulty\":25,\"moneyAvailable\":835971834,\"moneyMax\":20899295850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":935,\"serverGrowth\":71,\"runningScripts\":[]}},\"galactic-cyber\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"galactic-cyber\",\"httpPortOpen\":true,\"ip\":\"42.2.5.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Galactic Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"galactic-cyber\"}}]]},\"serversOnNetwork\":[\"millenium-fitness\",\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":58,\"hackDifficulty\":58,\"minDifficulty\":19,\"moneyAvailable\":768392949,\"moneyMax\":19209823725,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":856,\"serverGrowth\":83,\"runningScripts\":[]}},\"aerocorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aerocorp\",\"httpPortOpen\":true,\"ip\":\"60.4.0.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"AeroCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aerocorp\"}}]]},\"serversOnNetwork\":[\"rho-construction\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":86,\"hackDifficulty\":86,\"minDifficulty\":29,\"moneyAvailable\":1158295716,\"moneyMax\":28957392900,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":925,\"serverGrowth\":55,\"runningScripts\":[]}},\"omnia\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omnia\",\"httpPortOpen\":true,\"ip\":\"40.5.8.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"history-of-synthoids.lit\"],\"organizationName\":\"Omnia Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omnia\"}}]]},\"serversOnNetwork\":[\"snap-fitness\",\"univ-energy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":65.49200000000052,\"minDifficulty\":29,\"moneyAvailable\":1658643667.5254662,\"moneyMax\":23658142075,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":885,\"serverGrowth\":67,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omnia\"],\"dataMap\":{\"omnia\":[0,0,364,520]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":137976.74205699208,\"onlineMoneyMade\":0,\"onlineRunningTime\":54959.60999976111,\"ramUsage\":2.4,\"server\":\"omnia\",\"scriptKey\":\"simple-hack.js*[\\\"omnia\\\"]\",\"title\":\"simple-hack.js omnia\",\"threads\":26,\"temporary\":false}}]}},\"zb-def\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-def\",\"httpPortOpen\":true,\"ip\":\"44.3.3.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"ZB Defense Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-def\"}}]]},\"serversOnNetwork\":[\"icarus\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":64,\"hackDifficulty\":64,\"minDifficulty\":21,\"moneyAvailable\":1073071576,\"moneyMax\":26826789400,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":799,\"serverGrowth\":67,\"runningScripts\":[]}},\"applied-energetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-339774.cct\",\"type\":\"Total Ways to Sum\",\"data\":84,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"applied-energetics\",\"httpPortOpen\":true,\"ip\":\"69.6.2.3\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Applied Energetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"applied-energetics\"}}]]},\"serversOnNetwork\":[\"taiyang-digital\",\"helios\",\"vitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":80,\"minDifficulty\":27,\"moneyAvailable\":882835538,\"moneyMax\":22070888450,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":785,\"serverGrowth\":75,\"runningScripts\":[]}},\"solaris\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-629410.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[163,77,22,171,181,87,149,32,85,126],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"solaris\",\"httpPortOpen\":true,\"ip\":\"74.6.6.7\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"A-Green-Tomorrow.lit\",\"the-failed-frontier.lit\"],\"organizationName\":\"Solaris Space Systems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"solaris\"}}]]},\"serversOnNetwork\":[\"deltaone\",\"nova-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":50.10000000000016,\"minDifficulty\":25,\"moneyAvailable\":2313192727.7081566,\"moneyMax\":20551529175,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":802,\"serverGrowth\":79,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"solaris\"],\"dataMap\":{\"solaris\":[260911036.1579809,78,702,598]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":186256.05083011766,\"onlineMoneyMade\":260911036.1579809,\"onlineRunningTime\":57039.00999973085,\"ramUsage\":2.4,\"server\":\"solaris\",\"scriptKey\":\"simple-hack.js*[\\\"solaris\\\"]\",\"title\":\"simple-hack.js solaris\",\"threads\":26,\"temporary\":false}}]}},\"deltaone\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-544509-BitRunners.cct\",\"type\":\"Shortest Path in a Grid\",\"data\":[[0,0,0,0,0,0],[0,0,1,0,0,1],[0,0,0,0,0,1],[0,0,0,1,1,0],[0,1,1,1,0,0],[1,0,0,1,0,0],[1,0,0,0,0,0],[0,1,0,0,0,0]],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"deltaone\",\"httpPortOpen\":true,\"ip\":\"53.8.4.3\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DeltaOne\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"deltaone\"}}]]},\"serversOnNetwork\":[\"galactic-cyber\",\"defcomm\",\"icarus\",\"solaris\",\"zeus-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":76,\"minDifficulty\":25,\"moneyAvailable\":1554189488,\"moneyMax\":38854737200,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":811,\"serverGrowth\":51,\"runningScripts\":[]}},\"global-pharm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"global-pharm\",\"httpPortOpen\":true,\"ip\":\"5.4.0.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"Global Pharmaceuticals\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"global-pharm\"}}]]},\"serversOnNetwork\":[\"lexo-corp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":65.05200000000056,\"minDifficulty\":25,\"moneyAvailable\":3797850119.042944,\"moneyMax\":41650931600,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":841,\"serverGrowth\":88,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"global-pharm\"],\"dataMap\":{\"global-pharm\":[0,0,234,312]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":75556.69986504778,\"onlineMoneyMade\":0,\"onlineRunningTime\":61315.20999966862,\"ramUsage\":2.4,\"server\":\"global-pharm\",\"scriptKey\":\"simple-hack.js*[\\\"global-pharm\\\"]\",\"title\":\"simple-hack.js global-pharm\",\"threads\":13,\"temporary\":false}}]}},\"nova-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-363731-BitRunners.cct\",\"type\":\"Unique Paths in a Grid II\",\"data\":[[0,0,0,0,0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,1,0,1,0,0,0,1,0],[1,0,0,0,0,0,0,0,0,0,0,0],[0,1,1,1,0,0,0,0,0,0,1,0],[0,0,0,0,0,1,1,0,0,1,0,0],[0,1,0,0,0,0,0,1,0,0,0,0],[0,0,0,1,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0,0,0,0]],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nova-med\",\"httpPortOpen\":true,\"ip\":\"44.1.3.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Nova Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nova-med\"}}]]},\"serversOnNetwork\":[\"solaris\",\"microdyne\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":71,\"hackDifficulty\":71,\"minDifficulty\":24,\"moneyAvailable\":1181511993,\"moneyMax\":29537799825,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":816,\"serverGrowth\":74,\"runningScripts\":[]}},\"zeus-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zeus-med\",\"httpPortOpen\":true,\"ip\":\"58.1.9.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Zeus Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zeus-med\"}}]]},\"serversOnNetwork\":[\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":1320495434,\"moneyMax\":33012385850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":813,\"serverGrowth\":77,\"runningScripts\":[]}},\"unitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-332850.cct\",\"type\":\"Sanitize Parentheses in Expression\",\"data\":\"()a((()())(\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-340174.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":35083323758,\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-745294.cct\",\"type\":\"Proper 2-Coloring of a Graph\",\"data\":[11,[[2,8],[6,10],[4,9],[5,6],[6,8],[3,4],[2,10],[4,8],[4,10],[2,5],[0,6],[1,3],[4,7]]],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"unitalife\",\"httpPortOpen\":true,\"ip\":\"95.2.4.9\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"UnitaLife Group\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"unitalife\"}}]]},\"serversOnNetwork\":[\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":52.07600000000033,\"minDifficulty\":26,\"moneyAvailable\":2636884186.6874485,\"moneyMax\":26049271350,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":813,\"serverGrowth\":70,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"unitalife\"],\"dataMap\":{\"unitalife\":[273684706.02754545,78,676,650]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":199727.40041845973,\"onlineMoneyMade\":273684706.02754545,\"onlineRunningTime\":64125.20999962779,\"ramUsage\":2.4,\"server\":\"unitalife\",\"scriptKey\":\"simple-hack.js*[\\\"unitalife\\\"]\",\"title\":\"simple-hack.js unitalife\",\"threads\":26,\"temporary\":false}}]}},\"lexo-corp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"lexo-corp\",\"httpPortOpen\":true,\"ip\":\"42.3.3.3\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"LexoCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"lexo-corp\"}}]]},\"serversOnNetwork\":[\"syscore\",\"global-pharm\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":44.5180000000002,\"minDifficulty\":22,\"moneyAvailable\":4496708095.643447,\"moneyMax\":19169089575,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":714,\"serverGrowth\":60,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"lexo-corp\"],\"dataMap\":{\"lexo-corp\":[5030296044.284847,742,3604,795]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":641214.5980672832,\"onlineMoneyMade\":5030296044.284847,\"onlineRunningTime\":67117.80999958474,\"ramUsage\":2.4,\"server\":\"lexo-corp\",\"scriptKey\":\"simple-hack.js*[\\\"lexo-corp\\\"]\",\"title\":\"simple-hack.js lexo-corp\",\"threads\":53,\"temporary\":false}}]}},\"rho-construction\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rho-construction\",\"httpPortOpen\":false,\"ip\":\"98.2.8.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Rho Construction\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rho-construction\"}}]]},\"serversOnNetwork\":[\"catalyst\",\"aerocorp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":36.249999999999964,\"minDifficulty\":18,\"moneyAvailable\":1550130004.7467597,\"moneyMax\":12535729300,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":501,\"serverGrowth\":52,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rho-construction\"],\"dataMap\":{\"rho-construction\":[901909513.3335388,143,1209,572]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":201913.35698985963,\"onlineMoneyMade\":901909513.3335388,\"onlineRunningTime\":67362.40999958118,\"ramUsage\":2.4,\"server\":\"rho-construction\",\"scriptKey\":\"simple-hack.js*[\\\"rho-construction\\\"]\",\"title\":\"simple-hack.js rho-construction\",\"threads\":13,\"temporary\":false}}]}},\"alpha-ent\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"alpha-ent\",\"httpPortOpen\":true,\"ip\":\"44.5.0.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"Alpha Enterprises\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"alpha-ent\"}}]]},\"serversOnNetwork\":[\"summit-uni\",\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":40.64199999999995,\"minDifficulty\":20,\"moneyAvailable\":1821322676.6632926,\"moneyMax\":15936993000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":593,\"serverGrowth\":54,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"alpha-ent\"],\"dataMap\":{\"alpha-ent\":[355343029.7805561,65,728,546]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":151186.61358655384,\"onlineMoneyMade\":355343029.7805561,\"onlineRunningTime\":67118.00999958474,\"ramUsage\":2.4,\"server\":\"alpha-ent\",\"scriptKey\":\"simple-hack.js*[\\\"alpha-ent\\\"]\",\"title\":\"simple-hack.js alpha-ent\",\"threads\":13,\"temporary\":false}}]}},\"aevum-police\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-623370.cct\",\"type\":\"Compression III: LZ Compression\",\"data\":\"1OULEEEEJEQskMSbskMSbskb4Jn1MQ0n1MQ0n1Q06kyJyJyJZEGFZEGFZEd6wFnZeAqZeAqO26RFnrECAnrZnrZnrD1s\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aevum-police\",\"httpPortOpen\":true,\"ip\":\"40.4.0.4\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Aevum Police Headquarters\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aevum-police\"}}]]},\"serversOnNetwork\":[\"catalyst\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":71.1680000000009,\"minDifficulty\":27,\"moneyAvailable\":498227058.6572173,\"moneyMax\":7463955200,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":435,\"serverGrowth\":49,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"aevum-police\"],\"dataMap\":{\"aevum-police\":[0,0,210,288]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72119.6713508697,\"onlineMoneyMade\":0,\"onlineRunningTime\":67118.00999958474,\"ramUsage\":2.4,\"server\":\"aevum-police\",\"scriptKey\":\"simple-hack.js*[\\\"aevum-police\\\"]\",\"title\":\"simple-hack.js aevum-police\",\"threads\":6,\"temporary\":false}}]}},\"rothman-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rothman-uni\",\"httpPortOpen\":false,\"ip\":\"33.8.3.0\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"tensions-in-tech-race.lit\"],\"organizationName\":\"Rothman University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rothman-uni\"}}]]},\"serversOnNetwork\":[\"the-hub\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":50,\"hackDifficulty\":35.238000000000525,\"minDifficulty\":17,\"moneyAvailable\":868374019.322099,\"moneyMax\":6164385575,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":426,\"serverGrowth\":45,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rothman-uni\"],\"dataMap\":{\"rothman-uni\":[4753320567.842716,1113,9063,1166]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1097580.2995346282,\"onlineMoneyMade\":4753320567.842716,\"onlineRunningTime\":67362.40999958118,\"ramUsage\":2.4,\"server\":\"rothman-uni\",\"scriptKey\":\"simple-hack.js*[\\\"rothman-uni\\\"]\",\"title\":\"simple-hack.js rothman-uni\",\"threads\":53,\"temporary\":false}}]}},\"zb-institute\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-institute\",\"httpPortOpen\":true,\"ip\":\"10.0.3.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"ZB Institute of Technology\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-institute\"}}]]},\"serversOnNetwork\":[\"johnson-ortho\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":66,\"hackDifficulty\":43.663999999999994,\"minDifficulty\":22,\"moneyAvailable\":4189164602.9138117,\"moneyMax\":26468824150,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":764,\"serverGrowth\":82,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zb-institute\"],\"dataMap\":{\"zb-institute\":[1108385592.6195831,208,988,598]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":224159.91023085607,\"onlineMoneyMade\":1108385592.6195831,\"onlineRunningTime\":57039.60999973084,\"ramUsage\":2.4,\"server\":\"zb-institute\",\"scriptKey\":\"simple-hack.js*[\\\"zb-institute\\\"]\",\"title\":\"simple-hack.js zb-institute\",\"threads\":26,\"temporary\":false}}]}},\"summit-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"summit-uni\",\"httpPortOpen\":false,\"ip\":\"91.6.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"synthetic-muscles.lit\"],\"organizationName\":\"Summit University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"summit-uni\"}}]]},\"serversOnNetwork\":[\"netlink\",\"alpha-ent\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":40.58999999999995,\"minDifficulty\":20,\"moneyAvailable\":842517511.4093614,\"moneyMax\":8348653850,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":462,\"serverGrowth\":41,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"summit-uni\"],\"dataMap\":{\"summit-uni\":[293959621.2329658,78,1196,585]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":209757.69875325798,\"onlineMoneyMade\":293959621.2329658,\"onlineRunningTime\":67362.40999958118,\"ramUsage\":2.4,\"server\":\"summit-uni\",\"scriptKey\":\"simple-hack.js*[\\\"summit-uni\\\"]\",\"title\":\"simple-hack.js summit-uni\",\"threads\":13,\"temporary\":false}}]}},\"syscore\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"syscore\",\"httpPortOpen\":true,\"ip\":\"49.6.3.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"SysCore Securities\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"syscore\"}}]]},\"serversOnNetwork\":[\"crush-fitness\",\"lexo-corp\",\"millenium-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":70,\"minDifficulty\":23,\"moneyAvailable\":588773619,\"moneyMax\":14719340475,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":573,\"serverGrowth\":61,\"runningScripts\":[]}},\"catalyst\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"catalyst\",\"httpPortOpen\":false,\"ip\":\"86.9.0.3\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"tensions-in-tech-race.lit\"],\"organizationName\":\"Catalyst Ventures\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"catalyst\"}}]]},\"serversOnNetwork\":[\"johnson-ortho\",\"rho-construction\",\"aevum-police\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":56.00800000000044,\"minDifficulty\":22,\"moneyAvailable\":647388129.1712646,\"moneyMax\":9618635800,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":442,\"serverGrowth\":39,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"catalyst\"],\"dataMap\":{\"catalyst\":[0,0,270,336]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":75083.62571562447,\"onlineMoneyMade\":0,\"onlineRunningTime\":67362.40999958118,\"ramUsage\":2.4,\"server\":\"catalyst\",\"scriptKey\":\"simple-hack.js*[\\\"catalyst\\\"]\",\"title\":\"simple-hack.js catalyst\",\"threads\":6,\"temporary\":false}}]}},\"the-hub\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-518965-BitRunners.cct\",\"type\":\"Find All Valid Math Expressions\",\"data\":[\"64632134\",-66],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"the-hub\",\"httpPortOpen\":false,\"ip\":\"93.6.0.7\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[],\"organizationName\":\"The Hub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"the-hub\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"rothman-uni\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":35,\"hackDifficulty\":28.05000000000014,\"minDifficulty\":12,\"moneyAvailable\":620750687.3839836,\"moneyMax\":3901005475,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":297,\"serverGrowth\":49,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"the-hub\"],\"dataMap\":{\"the-hub\":[282477044.67156786,87,675,312]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":77767.59742051613,\"onlineMoneyMade\":282477044.67156786,\"onlineRunningTime\":70345.40999953778,\"ramUsage\":2.4,\"server\":\"the-hub\",\"scriptKey\":\"simple-hack.js*[\\\"the-hub\\\"]\",\"title\":\"simple-hack.js the-hub\",\"threads\":3,\"temporary\":false}}]}},\"computek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"computek\",\"httpPortOpen\":false,\"ip\":\"66.6.0.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"CompuTek\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"computek\"}}]]},\"serversOnNetwork\":[\"omega-net\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":59,\"hackDifficulty\":59,\"minDifficulty\":20,\"moneyAvailable\":236632086,\"moneyMax\":5915802150,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":372,\"serverGrowth\":59,\"runningScripts\":[]}},\"netlink\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-377336.cct\",\"type\":\"Algorithmic Stock Trader III\",\"data\":[110,9,51,183,112,169,186,88,188,197,41,138,171,104,192,71,64,112,104,185,162,122,160,40,66,112,29,19,56],\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-778573.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[84,189,29,150,64,112,117,103,184,119,94,89,183,57,113,3,93,183,180,1],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"netlink\",\"httpPortOpen\":false,\"ip\":\"60.9.0.8\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"NetLink Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"netlink\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":51.88200000000052,\"minDifficulty\":26,\"moneyAvailable\":925623323.9161328,\"moneyMax\":6875000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":375,\"serverGrowth\":64,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"netlink\"],\"dataMap\":{\"netlink\":[3324142786.758778,901,6360,1166]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1198895.4041070468,\"onlineMoneyMade\":3324142786.758778,\"onlineRunningTime\":67362.40999958118,\"ramUsage\":2.4,\"server\":\"netlink\",\"scriptKey\":\"simple-hack.js*[\\\"netlink\\\"]\",\"title\":\"simple-hack.js netlink\",\"threads\":53,\"temporary\":false}}]}},\"johnson-ortho\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"johnson-ortho\",\"httpPortOpen\":false,\"ip\":\"26.8.1.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Johnson Orthopedics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"johnson-ortho\"}}]]},\"serversOnNetwork\":[\"omega-net\",\"zb-institute\",\"catalyst\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":65,\"minDifficulty\":22,\"moneyAvailable\":74774335,\"moneyMax\":1869358375,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":288,\"serverGrowth\":39,\"runningScripts\":[]}},\"n00dles\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-442252.cct\",\"type\":\"Array Jumping Game II\",\"data\":[3,3,0,1,0,0,6,2,4,4,2,1,3,2,4,2,1,2,2,2],\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-108814.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":32327513138879,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"n00dles\",\"httpPortOpen\":false,\"ip\":\"76.2.6.3\",\"isConnectedTo\":false,\"maxRam\":4,\"messages\":[],\"organizationName\":\"Noodle Bar\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"n00dles\"}}]]},\"serversOnNetwork\":[\"home\",\"max-hardware\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.9659999999993447,\"minDifficulty\":1,\"moneyAvailable\":1618083.3294544558,\"moneyMax\":1750000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":1,\"serverGrowth\":3000,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"n00dles\"],\"dataMap\":{\"n00dles\":[725062370.4889193,33629,3749,1626]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":690372.8753916597,\"onlineMoneyMade\":725062370.4889193,\"onlineRunningTime\":73993.40999948469,\"ramUsage\":2.4,\"server\":\"n00dles\",\"scriptKey\":\"simple-hack.js*[\\\"n00dles\\\"]\",\"title\":\"simple-hack.js n00dles\",\"threads\":1,\"temporary\":false}}]}},\"foodnstuff\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"foodnstuff\",\"httpPortOpen\":false,\"ip\":\"23.1.2.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"FoodNStuff\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"foodnstuff\"}}]]},\"serversOnNetwork\":[\"home\",\"nectar-net\",\"CSEC\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":87.98000000001136,\"minDifficulty\":3,\"moneyAvailable\":5599017.836146365,\"moneyMax\":50000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":1,\"serverGrowth\":5,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"foodnstuff\"],\"dataMap\":{\"foodnstuff\":[18077432.967480727,1110,68382,4074]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":2388976.1817160407,\"onlineMoneyMade\":18077432.967480727,\"onlineRunningTime\":73993.2099994847,\"ramUsage\":2.4,\"server\":\"foodnstuff\",\"scriptKey\":\"simple-hack.js*[\\\"foodnstuff\\\"]\",\"title\":\"simple-hack.js foodnstuff\",\"threads\":6,\"temporary\":false}}]}},\"sigma-cosmetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-600236-BitRunners.cct\",\"type\":\"Total Ways to Sum II\",\"data\":[71,[1,2,3,5,6,7,9,10,12]],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"sigma-cosmetics\",\"httpPortOpen\":false,\"ip\":\"18.8.6.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Sigma Cosmetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"sigma-cosmetics\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":83.65600000000576,\"minDifficulty\":3,\"moneyAvailable\":6766127.78936847,\"moneyMax\":57500000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":5,\"serverGrowth\":10,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"sigma-cosmetics\"],\"dataMap\":{\"sigma-cosmetics\":[40101430.008474626,996,40686,1920]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1409181.6908131428,\"onlineMoneyMade\":40101430.008474626,\"onlineRunningTime\":73992.6099994847,\"ramUsage\":2.4,\"server\":\"sigma-cosmetics\",\"scriptKey\":\"simple-hack.js*[\\\"sigma-cosmetics\\\"]\",\"title\":\"simple-hack.js sigma-cosmetics\",\"threads\":6,\"temporary\":false}}]}},\"joesguns\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"joesguns\",\"httpPortOpen\":false,\"ip\":\"76.0.4.4\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Joe's Guns\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"joesguns\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.323999999991264,\"minDifficulty\":5,\"moneyAvailable\":55399214.08844713,\"moneyMax\":62500000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":10,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"joesguns\"],\"dataMap\":{\"joesguns\":[2501934611.1017375,5082,58914,5034]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":2776896.9842424686,\"onlineMoneyMade\":2501934611.1017375,\"onlineRunningTime\":73992.6099994847,\"ramUsage\":2.4,\"server\":\"joesguns\",\"scriptKey\":\"simple-hack.js*[\\\"joesguns\\\"]\",\"title\":\"simple-hack.js joesguns\",\"threads\":6,\"temporary\":false}}]}},\"zer0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"zer0\",\"httpPortOpen\":false,\"ip\":\"0.6.7.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"ZER0 Nightclub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zer0\"}}]]},\"serversOnNetwork\":[\"iron-gym\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":16.301999999999357,\"minDifficulty\":8,\"moneyAvailable\":46940297.82134372,\"moneyMax\":187500000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":75,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zer0\"],\"dataMap\":{\"zer0\":[1225201937.0797365,3315,26611,2496]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1825953.5800720707,\"onlineMoneyMade\":1225201937.0797365,\"onlineRunningTime\":73931.80999948559,\"ramUsage\":2.4,\"server\":\"zer0\",\"scriptKey\":\"simple-hack.js*[\\\"zer0\\\"]\",\"title\":\"simple-hack.js zer0\",\"threads\":13,\"temporary\":false}}]}},\"nectar-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"nectar-net\",\"httpPortOpen\":false,\"ip\":\"44.7.1.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Nectar Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nectar-net\"}}]]},\"serversOnNetwork\":[\"foodnstuff\",\"omega-net\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":33.34399999999999,\"minDifficulty\":7,\"moneyAvailable\":14448237.287547525,\"moneyMax\":68750000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":20,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"nectar-net\"],\"dataMap\":{\"nectar-net\":[248808919.218694,2268,31572,2448]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1751725.9932935887,\"onlineMoneyMade\":248808919.218694,\"onlineRunningTime\":73993.2099994847,\"ramUsage\":2.4,\"server\":\"nectar-net\",\"scriptKey\":\"simple-hack.js*[\\\"nectar-net\\\"]\",\"title\":\"simple-hack.js nectar-net\",\"threads\":6,\"temporary\":false}}]}},\"neo-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-346900.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"eeeeegggIcqTLLLLnnFFXEEEEEEEEEEEMMMMFFFFFFwwoouOOOOOggD8ttttttt77777W22zUUbccx66\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-480166.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"11000000100011001101100001000001\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"neo-net\",\"httpPortOpen\":false,\"ip\":\"64.7.9.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"Neo Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"neo-net\"}}]]},\"serversOnNetwork\":[\"CSEC\",\"the-hub\",\"netlink\",\"crush-fitness\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":51.96599999999943,\"minDifficulty\":8,\"moneyAvailable\":20014666.330231212,\"moneyMax\":125000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":50,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"neo-net\"],\"dataMap\":{\"neo-net\":[186692480.91770682,1274,23634,1521]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1488437.701798918,\"onlineMoneyMade\":186692480.91770682,\"onlineRunningTime\":73993.2099994847,\"ramUsage\":2.4,\"server\":\"neo-net\",\"scriptKey\":\"simple-hack.js*[\\\"neo-net\\\"]\",\"title\":\"simple-hack.js neo-net\",\"threads\":13,\"temporary\":false}}]}},\"silver-helix\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-199712.cct\",\"type\":\"Total Ways to Sum\",\"data\":75,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"silver-helix\",\"httpPortOpen\":false,\"ip\":\"0.8.5.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"new-triads.lit\"],\"organizationName\":\"Silver Helix\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"silver-helix\"}}]]},\"serversOnNetwork\":[\"CSEC\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":34.763999999999285,\"minDifficulty\":10,\"moneyAvailable\":205685036.40384582,\"moneyMax\":1125000000,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":150,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"silver-helix\"],\"dataMap\":{\"silver-helix\":[1764189298.7365708,1300,18850,1560]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1397338.7461199388,\"onlineMoneyMade\":1764189298.7365708,\"onlineRunningTime\":70344.80999953779,\"ramUsage\":2.4,\"server\":\"silver-helix\",\"scriptKey\":\"simple-hack.js*[\\\"silver-helix\\\"]\",\"title\":\"simple-hack.js silver-helix\",\"threads\":26,\"temporary\":false}}]}},\"hong-fang-tea\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"hong-fang-tea\",\"httpPortOpen\":false,\"ip\":\"95.4.2.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"brighter-than-the-sun.lit\"],\"organizationName\":\"HongFang Teahouse\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"hong-fang-tea\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.407999999994756,\"minDifficulty\":5,\"moneyAvailable\":21490217.14328879,\"moneyMax\":75000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":30,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"hong-fang-tea\"],\"dataMap\":{\"hong-fang-tea\":[532701799.5416262,3168,35094,3084]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1663241.818202114,\"onlineMoneyMade\":532701799.5416262,\"onlineRunningTime\":73992.6099994847,\"ramUsage\":2.4,\"server\":\"hong-fang-tea\",\"scriptKey\":\"simple-hack.js*[\\\"hong-fang-tea\\\"]\",\"title\":\"simple-hack.js hong-fang-tea\",\"threads\":6,\"temporary\":false}}]}},\"harakiri-sushi\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"harakiri-sushi\",\"httpPortOpen\":false,\"ip\":\"95.4.3.2\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"HaraKiri Sushi Bar Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"harakiri-sushi\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":9.847999999995935,\"minDifficulty\":5,\"moneyAvailable\":87535354.27273993,\"moneyMax\":100000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":40,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"harakiri-sushi\"],\"dataMap\":{\"harakiri-sushi\":[4886744207.162423,5280,28704,2628]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1472805.3366230417,\"onlineMoneyMade\":4886744207.162423,\"onlineRunningTime\":73992.6099994847,\"ramUsage\":2.4,\"server\":\"harakiri-sushi\",\"scriptKey\":\"simple-hack.js*[\\\"harakiri-sushi\\\"]\",\"title\":\"simple-hack.js harakiri-sushi\",\"threads\":6,\"temporary\":false}}]}},\"phantasy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"phantasy\",\"httpPortOpen\":false,\"ip\":\"22.0.0.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Phantasy Club\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"phantasy\"}}]]},\"serversOnNetwork\":[\"max-hardware\",\"avmnite-02h\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":13.983999999999149,\"minDifficulty\":7,\"moneyAvailable\":171517058.25654057,\"moneyMax\":600000000,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":100,\"serverGrowth\":35,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"phantasy\"],\"dataMap\":{\"phantasy\":[3558613221.212144,2808,22516,2106]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1324124.8896614786,\"onlineMoneyMade\":3558613221.212144,\"onlineRunningTime\":70345.60999953777,\"ramUsage\":2.4,\"server\":\"phantasy\",\"scriptKey\":\"simple-hack.js*[\\\"phantasy\\\"]\",\"title\":\"simple-hack.js phantasy\",\"threads\":13,\"temporary\":false}}]}},\"max-hardware\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"max-hardware\",\"httpPortOpen\":false,\"ip\":\"97.1.3.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Max Hardware Store\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"max-hardware\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"phantasy\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.60999999999931,\"minDifficulty\":5,\"moneyAvailable\":250000000,\"moneyMax\":250000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":80,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"max-hardware\"],\"dataMap\":{\"max-hardware\":[2501319234.821575,2457,39546,1716]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1758701.4233538425,\"onlineMoneyMade\":2501319234.821575,\"onlineRunningTime\":73932.40999948558,\"ramUsage\":2.4,\"server\":\"max-hardware\",\"scriptKey\":\"simple-hack.js*[\\\"max-hardware\\\"]\",\"title\":\"simple-hack.js max-hardware\",\"threads\":13,\"temporary\":false}}]}},\"omega-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-203096.cct\",\"type\":\"Encryption II: Vigenère Cipher\",\"data\":[\"EMAILFLASHMOUSEFRAMELINUX\",\"COMMAND\"],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omega-net\",\"httpPortOpen\":false,\"ip\":\"21.1.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-new-god.lit\"],\"organizationName\":\"Omega Software\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omega-net\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"computek\",\"johnson-ortho\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":35,\"hackDifficulty\":24.213999999999768,\"minDifficulty\":12,\"moneyAvailable\":259998259.46127164,\"moneyMax\":1550185350,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":210,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omega-net\"],\"dataMap\":{\"omega-net\":[1152012756.1621516,715,6552,884]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":590208.2742780462,\"onlineMoneyMade\":1152012756.1621516,\"onlineRunningTime\":70345.60999953777,\"ramUsage\":2.4,\"server\":\"omega-net\",\"scriptKey\":\"simple-hack.js*[\\\"omega-net\\\"]\",\"title\":\"simple-hack.js omega-net\",\"threads\":13,\"temporary\":false}}]}},\"crush-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"crush-fitness\",\"httpPortOpen\":false,\"ip\":\"56.1.2.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Crush Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"crush-fitness\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"syscore\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":45,\"hackDifficulty\":45,\"minDifficulty\":15,\"moneyAvailable\":43600021,\"moneyMax\":1090000525,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":262,\"serverGrowth\":31,\"runningScripts\":[]}},\"iron-gym\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-326454.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"0001100000000000100000000011000000101001101011000100011000101110\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-339992.cct\",\"type\":\"Total Ways to Sum\",\"data\":25,\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-873868.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[163,161,153,4,139,10,151,158,94,14,177,8,106,135,174,175,54,89,95,65,75,138,131,107,182,107,51,7,143,141,114,135,124,169,190,115,33,107,25],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"iron-gym\",\"httpPortOpen\":false,\"ip\":\"76.1.0.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Iron Gym Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"iron-gym\"}}]]},\"serversOnNetwork\":[\"home\",\"zer0\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":44.85199999999967,\"minDifficulty\":10,\"moneyAvailable\":58164625.16077975,\"moneyMax\":500000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":100,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"iron-gym\"],\"dataMap\":{\"iron-gym\":[230765476.9806481,507,12467,819]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":887770.3051696217,\"onlineMoneyMade\":230765476.9806481,\"onlineRunningTime\":73931.80999948559,\"ramUsage\":2.4,\"server\":\"iron-gym\",\"scriptKey\":\"simple-hack.js*[\\\"iron-gym\\\"]\",\"title\":\"simple-hack.js iron-gym\",\"threads\":13,\"temporary\":false}}]}},\"millenium-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-115154.cct\",\"type\":\"Subarray with Maximum Sum\",\"data\":[-9,2,-3,10,-10,5,9,-4,-1,-2,3,-4,-4,4,3,-3,-4,-2,4,8,-9,-8,-4,-2,6,-9,-6,8,-6,-8,-2,2,9,-3,-6,1,-6],\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-448353.cct\",\"type\":\"Array Jumping Game II\",\"data\":[4,2,3,4,2,2,2,2,5,1,4,2,4,3,3,1,4,0,2,5],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"millenium-fitness\",\"httpPortOpen\":false,\"ip\":\"43.2.8.0\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"Millenium Fitness Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"millenium-fitness\"}}]]},\"serversOnNetwork\":[\"syscore\",\"galactic-cyber\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":49,\"hackDifficulty\":36.83000000000034,\"minDifficulty\":16,\"moneyAvailable\":760235444.3138773,\"moneyMax\":6250000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":500,\"serverGrowth\":27,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"millenium-fitness\"],\"dataMap\":{\"millenium-fitness\":[1994858488.416842,636,8215,1007]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":937143.3967763066,\"onlineMoneyMade\":1994858488.416842,\"onlineRunningTime\":67362.20999958119,\"ramUsage\":2.4,\"server\":\"millenium-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"millenium-fitness\\\"]\",\"title\":\"simple-hack.js millenium-fitness\",\"threads\":53,\"temporary\":false}}]}},\"powerhouse-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-131641-BitRunners.cct\",\"type\":\"Compression II: LZ Decompression\",\"data\":\"94z6PXkUD11363pQLO563411w5256ZJHMkJ385vDY66962mg9946ofz21\",\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"powerhouse-fitness\",\"httpPortOpen\":true,\"ip\":\"46.8.4.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Powerhouse Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"powerhouse-fitness\"}}]]},\"serversOnNetwork\":[\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":48.081999999999994,\"minDifficulty\":18,\"moneyAvailable\":1145227630.9609768,\"moneyMax\":22500000000,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":978,\"serverGrowth\":57,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"powerhouse-fitness\"],\"dataMap\":{\"powerhouse-fitness\":[0,0,130,169]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":31272.775830079292,\"onlineMoneyMade\":0,\"onlineRunningTime\":27070.810000063422,\"ramUsage\":2.4,\"server\":\"powerhouse-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"powerhouse-fitness\\\"]\",\"title\":\"simple-hack.js powerhouse-fitness\",\"threads\":13,\"temporary\":false}}]}},\"snap-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"snap-fitness\",\"httpPortOpen\":true,\"ip\":\"16.2.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Snap Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"snap-fitness\"}}]]},\"serversOnNetwork\":[\"alpha-ent\",\"omnia\",\"unitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":41,\"hackDifficulty\":41,\"minDifficulty\":14,\"moneyAvailable\":450000000,\"moneyMax\":11250000000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":744,\"serverGrowth\":50,\"runningScripts\":[]}},\"run4theh111z\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"run4theh111z\",\"httpPortOpen\":true,\"ip\":\"60.3.1.6\",\"isConnectedTo\":false,\"maxRam\":256,\"messages\":[\"simulated-reality.lit\",\"the-new-god.lit\"],\"organizationName\":\"The Runners\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"infocomm\",\"fulcrumtech\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":506,\"serverGrowth\":1,\"runningScripts\":[]}},\"I.I.I.I\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"I.I.I.I\",\"httpPortOpen\":false,\"ip\":\"40.2.6.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"I.I.I.I\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"avmnite-02h\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":362,\"serverGrowth\":1,\"runningScripts\":[]}},\"avmnite-02h\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-332878.cct\",\"type\":\"Encryption I: Caesar Cipher\",\"data\":[\"FLASH MOUSE CLOUD ENTER MODEM\",2],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"avmnite-02h\",\"httpPortOpen\":false,\"ip\":\"95.5.8.0\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"NiteSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"phantasy\",\"I.I.I.I\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":207,\"serverGrowth\":1,\"runningScripts\":[]}},\".\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\".\",\"httpPortOpen\":true,\"ip\":\"81.1.6.0\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\".\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\".\"}}]]},\"serversOnNetwork\":[\"helios\",\"clarkinc\",\"powerhouse-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":546,\"serverGrowth\":1,\"runningScripts\":[]}},\"CSEC\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"CSEC\",\"httpPortOpen\":false,\"ip\":\"55.3.4.4\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"CyberSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"foodnstuff\",\"neo-net\",\"silver-helix\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":1,\"openPortCount\":2,\"requiredHackingSkill\":56,\"serverGrowth\":1,\"runningScripts\":[]}},\"The-Cave\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"The-Cave\",\"httpPortOpen\":true,\"ip\":\"52.2.4.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"alpha-omega.lit\"],\"organizationName\":\"Helios\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"The-Cave\"}}]]},\"serversOnNetwork\":[\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":925,\"serverGrowth\":1,\"runningScripts\":[]}},\"w0r1d_d43m0n\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"w0r1d_d43m0n\",\"httpPortOpen\":false,\"ip\":\"66.1.4.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"w0r1d_d43m0n\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":3000,\"serverGrowth\":1,\"runningScripts\":[]}},\"darkweb\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"darkweb\",\"httpPortOpen\":true,\"ip\":\"95.6.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"darkweb\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[]}},\"home-0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-0\",\"httpPortOpen\":false,\"ip\":\"75.8.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-0\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-0\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,40,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128824.20545182136,\"onlineMoneyMade\":0,\"onlineRunningTime\":68129.80999957002,\"ramUsage\":3.15,\"server\":\"home-0\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-1\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-1\",\"httpPortOpen\":false,\"ip\":\"96.0.3.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-1\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-1\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,40,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128824.20545182136,\"onlineMoneyMade\":0,\"onlineRunningTime\":68122.80999957012,\"ramUsage\":3.15,\"server\":\"home-1\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-2\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-2\",\"httpPortOpen\":false,\"ip\":\"20.7.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-2\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-2\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,40,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128824.20545182136,\"onlineMoneyMade\":0,\"onlineRunningTime\":68110.8099995703,\"ramUsage\":3.15,\"server\":\"home-2\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-3\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-3\",\"httpPortOpen\":false,\"ip\":\"75.6.6.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-3\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-3\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128261.02194060304,\"onlineMoneyMade\":0,\"onlineRunningTime\":68084.60999957068,\"ramUsage\":3.15,\"server\":\"home-3\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-4\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-4\",\"httpPortOpen\":false,\"ip\":\"87.9.7.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-4\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-4\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128261.02194060304,\"onlineMoneyMade\":0,\"onlineRunningTime\":68081.60999957072,\"ramUsage\":3.15,\"server\":\"home-4\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-5\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-5\",\"httpPortOpen\":false,\"ip\":\"6.7.8.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-5\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-5\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128261.02194060304,\"onlineMoneyMade\":0,\"onlineRunningTime\":68074.60999957082,\"ramUsage\":3.15,\"server\":\"home-5\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-6\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-6\",\"httpPortOpen\":false,\"ip\":\"56.6.5.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-6\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-6\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128261.02194060304,\"onlineMoneyMade\":0,\"onlineRunningTime\":68069.4099995709,\"ramUsage\":3.15,\"server\":\"home-6\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-7\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-7\",\"httpPortOpen\":false,\"ip\":\"71.5.7.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-7\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-7\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128261.02194060304,\"onlineMoneyMade\":0,\"onlineRunningTime\":68067.40999957093,\"ramUsage\":3.15,\"server\":\"home-7\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-8\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-8\",\"httpPortOpen\":false,\"ip\":\"45.0.0.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-8\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-8\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128180.56715328616,\"onlineMoneyMade\":0,\"onlineRunningTime\":68049.40999957119,\"ramUsage\":3.15,\"server\":\"home-8\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-9\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-9\",\"httpPortOpen\":false,\"ip\":\"91.3.4.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-9\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-9\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128261.02194060304,\"onlineMoneyMade\":0,\"onlineRunningTime\":68036.00999957138,\"ramUsage\":3.15,\"server\":\"home-9\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-10\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-10\",\"httpPortOpen\":false,\"ip\":\"17.6.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-10\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-10\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":128180.56715328616,\"onlineMoneyMade\":0,\"onlineRunningTime\":68015.80999957168,\"ramUsage\":3.15,\"server\":\"home-10\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-11\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-11\",\"httpPortOpen\":false,\"ip\":\"68.4.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-11\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-11\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":127778.29321670166,\"onlineMoneyMade\":0,\"onlineRunningTime\":67999.80999957191,\"ramUsage\":3.15,\"server\":\"home-11\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-12\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-12\",\"httpPortOpen\":false,\"ip\":\"73.2.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-12\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-12\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":127778.29321670166,\"onlineMoneyMade\":0,\"onlineRunningTime\":67983.80999957214,\"ramUsage\":3.15,\"server\":\"home-12\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-13\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-13\",\"httpPortOpen\":false,\"ip\":\"45.6.8.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-13\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-13\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,40,0],\"summit-uni\":[0,0,40,0],\"alpha-ent\":[0,0,40,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"zb-institute\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":125815.19640616929,\"onlineMoneyMade\":0,\"onlineRunningTime\":67973.60999957229,\"ramUsage\":3.15,\"server\":\"home-13\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-14\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-14\",\"httpPortOpen\":false,\"ip\":\"98.3.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-14\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-14\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,40,0],\"summit-uni\":[0,0,40,0],\"alpha-ent\":[0,0,40,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"zb-institute\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":125815.19640616929,\"onlineMoneyMade\":0,\"onlineRunningTime\":67967.60999957238,\"ramUsage\":3.15,\"server\":\"home-14\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-15\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-15\",\"httpPortOpen\":false,\"ip\":\"61.7.3.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-15\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-15\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,40,0],\"alpha-ent\":[0,0,40,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"zb-institute\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":127231.20066294674,\"onlineMoneyMade\":0,\"onlineRunningTime\":67946.60999957268,\"ramUsage\":3.15,\"server\":\"home-15\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-16\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-16\",\"httpPortOpen\":false,\"ip\":\"45.0.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-16\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-16\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,60,0],\"nectar-net\":[0,0,50,0],\"omega-net\":[0,0,60,0],\"neo-net\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"silver-helix\":[0,0,50,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,40,0],\"summit-uni\":[0,0,40,0],\"alpha-ent\":[0,0,40,0],\"unitalife\":[0,0,40,0],\"lexo-corp\":[0,0,30,0],\"global-pharm\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"zb-institute\":[0,0,40,0],\"omnia\":[0,0,30,0],\"univ-energy\":[0,0,30,0],\"titan-labs\":[0,0,30,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":125815.19640616929,\"onlineMoneyMade\":0,\"onlineRunningTime\":67934.40999957286,\"ramUsage\":3.15,\"server\":\"home-16\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-17\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-17\",\"httpPortOpen\":false,\"ip\":\"54.7.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-17\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-17\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67918.4099995731,\"ramUsage\":3.15,\"server\":\"home-17\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-18\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-18\",\"httpPortOpen\":false,\"ip\":\"34.9.3.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-18\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-18\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67894.20999957345,\"ramUsage\":3.15,\"server\":\"home-18\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-19\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-19\",\"httpPortOpen\":false,\"ip\":\"92.1.9.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-19\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-19\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67886.20999957356,\"ramUsage\":3.15,\"server\":\"home-19\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-20\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-20\",\"httpPortOpen\":false,\"ip\":\"71.7.1.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-20\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-20\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67884.20999957359,\"ramUsage\":3.15,\"server\":\"home-20\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-21\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-21\",\"httpPortOpen\":false,\"ip\":\"9.3.3.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-21\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-21\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67867.20999957384,\"ramUsage\":3.15,\"server\":\"home-21\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-22\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-22\",\"httpPortOpen\":false,\"ip\":\"80.7.7.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-22\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-22\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67856.009999574,\"ramUsage\":3.15,\"server\":\"home-22\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-23\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-23\",\"httpPortOpen\":false,\"ip\":\"32.8.2.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-23\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-23\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67850.00999957409,\"ramUsage\":3.15,\"server\":\"home-23\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-24\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-24\",\"httpPortOpen\":false,\"ip\":\"22.7.1.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-24\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-24\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,50,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"the-hub\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"netlink\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"millenium-fitness\":[0,0,40,0],\"silver-helix\":[0,0,40,0],\"sigma-cosmetics\":[0,0,40,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,40,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,40,0],\"rho-construction\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"univ-energy\":[0,0,40,0],\"titan-labs\":[0,0,40,0],\"helios\":[0,0,30,0],\"vitalife\":[0,0,30,0],\"unitalife\":[0,0,30,0],\"global-pharm\":[0,0,30,0],\"solaris\":[0,0,30,0],\"microdyne\":[0,0,30,0],\"zb-institute\":[0,0,30,0],\"omnia\":[0,0,30,0],\"powerhouse-fitness\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":119539.72299545101,\"onlineMoneyMade\":0,\"onlineRunningTime\":67816.80999957457,\"ramUsage\":3.15,\"server\":\"home-24\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}}}","CompaniesSave":"{\"ECorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.0886,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Fulcrum Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Storm Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DefComm\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Helios Labs\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"VitaLife\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Icarus Microsystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Universal Energy\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Galactic Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"AeroCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omnia Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.6406,\"playerReputation\":0}},\"Solaris Space Systems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DeltaOne\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Global Pharmaceuticals\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Nova Medical\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Central Intelligence Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"National Security Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Watchdog Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"LexoCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Rho Construction\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Alpha Enterprises\":{\"ctor\":\"Company\",\"data\":{\"favor\":37.815,\"playerReputation\":0}},\"Aevum Police Headquarters\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"SysCore Securities\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"CompuTek\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NetLink Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Carmichael Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"FoodNStuff\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Joe's Guns\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omega Software\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Noodle Bar\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}}}","FactionsSave":"{\"Illuminati\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Daedalus\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Covenant\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"ECorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Fulcrum Secret Technologies\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"BitRunners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":48.3427,\"isBanned\":false,\"isMember\":true,\"playerReputation\":1002727.8218192193}},\"The Black Hand\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":133.83,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"NiteSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":142.4626,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Aevum\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":107.3609,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Chongqing\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":78.838,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Ishima\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":21.9587,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"New Tokyo\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":20.0596,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Sector-12\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":111.1884,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Volhaven\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":30.7334,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Speakers for the Dead\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Dark Army\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Syndicate\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Silhouette\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tetrads\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Slum Snakes\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Netburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":91.4609,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tian Di Hui\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":72.583,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"CyberSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":91.5419,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Bladeburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Church of the Machine God\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Shadows of Anarchy\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}}}","AliasesSave":"{\"kill-nuke\":\"home; run kill-nuke.js\",\"kill-hack\":\"home; run kill-all-simple-hack.js\",\"hacknet\":\"home; run hacknet-bot.js\",\"kill-bot\":\"home; run kill-hacknet.js\",\"nuke\":\"home; run auto-nuke.js\",\"flight\":\"home; run fl1ght.exe\",\"start-grow-helpers\":\"home; run start-grow-helpers.js\",\"backdoor-server\":\"home; run backdoor-command.js\",\"darkweb\":\"connect darkweb; buy -l\",\"buy-all\":\"buy FTPCrack.exe; buy relaySMTP.exe; buy HTTPWorm.exe; buy SQLInject.exe; buy ServerProfiler.exe; buy DeepscanV1.exe; buy DeepscanV2.exe; buy AutoLink.exe\"}","GlobalAliasesSave":"{\"killAll\":\"home; ./kill-all-simple-hack.js; ./kill-all-grow-helpers.js; ./kill-hacknet.js; ./kill-nuke.js;\",\"connectServer\":\"connect home; ./connect-server.js\",\"backdoor1CSEC\":\"connect home; ./backdoor-command.js CSEC\",\"backdoor2NiteSec\":\"connect home; ./backdoor-command.js avmnite-02h\",\"backdoor3BlackHand\":\"connect home; ./backdoor-command.js I.I.I.I\",\"backdoor4BitRunners\":\"connect home; ./backdoor-command.js run4theh111z\",\"buy1FTP\":\"buy FTPCrack.exe\",\"buy2SMTP\":\"buy relaySMTP.exe\",\"buy3HTTP\":\"buy HTTPWorm.exe\",\"buy4SQL\":\"buy SQLInject.exe\",\"startNew\":\"home; ./start-hack-course.js; ./hacknet-bot.js; ./auto-nuke.js; ./start-grow-helpers.js;\",\"startAll\":\"home; ./hacknet-bot.js; ./auto-nuke.js; ./start-grow-helpers.js;\"}","StockMarketSave":"{\"ECorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"ECorp\",\"symbol\":\"ECP\",\"price\":5876.961190452133,\"lastPrice\":5852.014767529141,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.5,\"b\":true,\"otlkMag\":18.186821331763415,\"otlkMagForecast\":68.78259203824044,\"cap\":18736460,\"spreadPerc\":0.5,\"shareTxForMovement\":61775,\"shareTxUntilMovement\":61775,\"totalShares\":133900000,\"maxShares\":26800000}},\"MegaCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"MegaCorp\",\"symbol\":\"MGCP\",\"price\":33555.42621453528,\"lastPrice\":33692.74718372005,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.48,\"b\":false,\"otlkMag\":17.20697239711975,\"otlkMagForecast\":30.666786990223176,\"cap\":343905733,\"spreadPerc\":0.3,\"shareTxForMovement\":63915,\"shareTxUntilMovement\":63915,\"totalShares\":78500000,\"maxShares\":15700000}},\"Blade Industries\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Blade Industries\",\"symbol\":\"BLD\",\"price\":5150.294191379648,\"lastPrice\":5115.837253931224,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.79,\"b\":true,\"otlkMag\":12.415438763503973,\"otlkMagForecast\":61.514127470932884,\"cap\":234809330,\"spreadPerc\":0.2,\"shareTxForMovement\":63070,\"shareTxUntilMovement\":63070,\"totalShares\":103300000,\"maxShares\":20700000}},\"Clarke Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Clarke Incorporated\",\"symbol\":\"CLRK\",\"price\":3137.4417799878356,\"lastPrice\":3120.1507130523723,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.65,\"b\":true,\"otlkMag\":10.73310123276195,\"otlkMagForecast\":62.915705153128066,\"cap\":233220540,\"spreadPerc\":0.3,\"shareTxForMovement\":84478,\"shareTxUntilMovement\":84478,\"totalShares\":144700000,\"maxShares\":28900000}},\"OmniTek Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"OmniTek Incorporated\",\"symbol\":\"OMTK\",\"price\":13312.83625363596,\"lastPrice\":13243.958257878901,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.61,\"b\":true,\"otlkMag\":11.27790260901465,\"otlkMagForecast\":62.35982483705347,\"cap\":755589720,\"spreadPerc\":0.4,\"shareTxForMovement\":85386,\"shareTxUntilMovement\":85386,\"totalShares\":51400000,\"maxShares\":10300000}},\"Four Sigma\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Four Sigma\",\"symbol\":\"FSIG\",\"price\":142906.72230771833,\"lastPrice\":141590.90762970888,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.09,\"b\":false,\"otlkMag\":12.609625055962223,\"otlkMagForecast\":35.24924858886456,\"cap\":301444974,\"spreadPerc\":0.4,\"shareTxForMovement\":53889,\"shareTxUntilMovement\":53889,\"totalShares\":31900000,\"maxShares\":6400000}},\"KuaiGong International\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"KuaiGong International\",\"symbol\":\"KGI\",\"price\":9208.596301619455,\"lastPrice\":9143.890684905715,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.83,\"b\":false,\"otlkMag\":13.07673060016385,\"otlkMagForecast\":38.44062976396167,\"cap\":55170046,\"spreadPerc\":0.4,\"shareTxForMovement\":34228,\"shareTxUntilMovement\":34228,\"totalShares\":101700000,\"maxShares\":20300000}},\"Fulcrum Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Fulcrum Technologies\",\"symbol\":\"FLCM\",\"price\":653475.5950548403,\"lastPrice\":660328.3838567729,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.23,\"b\":false,\"otlkMag\":16.51599644821413,\"otlkMagForecast\":30.395428528468504,\"cap\":575644863,\"spreadPerc\":1,\"shareTxForMovement\":50055,\"shareTxUntilMovement\":50055,\"totalShares\":60500000,\"maxShares\":12100000}},\"Storm Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Storm Technologies\",\"symbol\":\"STM\",\"price\":9519.050399293636,\"lastPrice\":9587.222358482493,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.84,\"b\":false,\"otlkMag\":6.246139419171757,\"otlkMagForecast\":43.05151015506085,\"cap\":397827276,\"spreadPerc\":0.3,\"shareTxForMovement\":92905,\"shareTxUntilMovement\":92905,\"totalShares\":50600000,\"maxShares\":10100000}},\"DefComm\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"DefComm\",\"symbol\":\"DCOMM\",\"price\":12135.786378867544,\"lastPrice\":12069.927022623566,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.64,\"b\":true,\"otlkMag\":8.21318717636482,\"otlkMagForecast\":58.215937347956675,\"cap\":375285478,\"spreadPerc\":0.8,\"shareTxForMovement\":96786,\"shareTxUntilMovement\":96786,\"totalShares\":57500000,\"maxShares\":11500000}},\"Helios Labs\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Helios Labs\",\"symbol\":\"HLS\",\"price\":8591.061986349801,\"lastPrice\":8546.613521742358,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.61,\"b\":false,\"otlkMag\":10.373937565935977,\"otlkMagForecast\":38.612873819176826,\"cap\":274070007,\"spreadPerc\":0.5,\"shareTxForMovement\":47592,\"shareTxUntilMovement\":47592,\"totalShares\":60200000,\"maxShares\":12000000}},\"VitaLife\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"VitaLife\",\"symbol\":\"VITA\",\"price\":8453.465554523995,\"lastPrice\":8398.331919989649,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.77,\"b\":true,\"otlkMag\":6.652383969305674,\"otlkMagForecast\":55.96548435347649,\"cap\":164415870,\"spreadPerc\":0.5,\"shareTxForMovement\":45297,\"shareTxUntilMovement\":45297,\"totalShares\":109400000,\"maxShares\":21900000}},\"Icarus Microsystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Icarus Microsystems\",\"symbol\":\"ICRS\",\"price\":10711.401809606461,\"lastPrice\":10656.887003177959,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.6,\"b\":true,\"otlkMag\":6.1130523957653535,\"otlkMagForecast\":55.89405249176244,\"cap\":255268106,\"spreadPerc\":0.4,\"shareTxForMovement\":89294,\"shareTxUntilMovement\":89294,\"totalShares\":63900000,\"maxShares\":12800000}},\"Universal Energy\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Universal Energy\",\"symbol\":\"UNV\",\"price\":6194.191128980538,\"lastPrice\":6221.124309442648,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.51,\"b\":true,\"otlkMag\":9.231146313824722,\"otlkMagForecast\":59.38663939154022,\"cap\":347524257,\"spreadPerc\":0.5,\"shareTxForMovement\":107864,\"shareTxUntilMovement\":107864,\"totalShares\":39200000,\"maxShares\":7800000}},\"AeroCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"AeroCorp\",\"symbol\":\"AERO\",\"price\":5473.348421217867,\"lastPrice\":5445.954206225475,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.59,\"b\":false,\"otlkMag\":7.350956965091252,\"otlkMagForecast\":42.171605809077185,\"cap\":197459562,\"spreadPerc\":0.5,\"shareTxForMovement\":78610,\"shareTxUntilMovement\":78610,\"totalShares\":42900000,\"maxShares\":8600000}},\"Omnia Cybersystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omnia Cybersystems\",\"symbol\":\"OMN\",\"price\":24299.805267390464,\"lastPrice\":24444.8272026587,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.7,\"b\":true,\"otlkMag\":5.505575325879683,\"otlkMagForecast\":54.9655938520881,\"cap\":299100303,\"spreadPerc\":0.6,\"shareTxForMovement\":115850,\"shareTxUntilMovement\":115850,\"totalShares\":49200000,\"maxShares\":9800000}},\"Solaris Space Systems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Solaris Space Systems\",\"symbol\":\"SLRS\",\"price\":30116.912443640922,\"lastPrice\":30322.327984045252,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.8,\"b\":true,\"otlkMag\":7.317194567558094,\"otlkMagForecast\":58.067527281871946,\"cap\":398790983,\"spreadPerc\":0.4,\"shareTxForMovement\":91980,\"shareTxUntilMovement\":91980,\"totalShares\":26600000,\"maxShares\":5300000}},\"Global Pharmaceuticals\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Global Pharmaceuticals\",\"symbol\":\"GPH\",\"price\":32518.251394314357,\"lastPrice\":32344.521664059772,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.63,\"b\":false,\"otlkMag\":10.244767030569935,\"otlkMagForecast\":38.84140847050224,\"cap\":521703441,\"spreadPerc\":0.7,\"shareTxForMovement\":72896,\"shareTxUntilMovement\":72896,\"totalShares\":32000000,\"maxShares\":6400000}},\"Nova Medical\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Nova Medical\",\"symbol\":\"NVMD\",\"price\":13254.290281981432,\"lastPrice\":13165.615298728264,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.79,\"b\":true,\"otlkMag\":6.7528151467740605,\"otlkMagForecast\":55.56444225659061,\"cap\":165044848,\"spreadPerc\":0.4,\"shareTxForMovement\":80363,\"shareTxUntilMovement\":80363,\"totalShares\":38600000,\"maxShares\":7700000}},\"Watchdog Security\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Watchdog Security\",\"symbol\":\"WDS\",\"price\":5844.091144493018,\"lastPrice\":5719.262892723533,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.56,\"b\":true,\"otlkMag\":1.6927856081085788,\"otlkMagForecast\":42.79634467878724,\"cap\":76950501,\"spreadPerc\":1.2,\"shareTxForMovement\":22505,\"shareTxUntilMovement\":22505,\"totalShares\":53400000,\"maxShares\":10700000}},\"LexoCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"LexoCorp\",\"symbol\":\"LXO\",\"price\":7310.542042159516,\"lastPrice\":7236.506026736144,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.2,\"b\":false,\"otlkMag\":6.399289867612769,\"otlkMagForecast\":44.55479412505778,\"cap\":102211030,\"spreadPerc\":1,\"shareTxForMovement\":100028,\"shareTxUntilMovement\":100028,\"totalShares\":37900000,\"maxShares\":7600000}},\"Rho Construction\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Rho Construction\",\"symbol\":\"RHOC\",\"price\":4209.527275692825,\"lastPrice\":4233.214279315328,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.66,\"b\":false,\"otlkMag\":5.45298395338738,\"otlkMagForecast\":45.105580139223456,\"cap\":90021819,\"spreadPerc\":0.3,\"shareTxForMovement\":63461,\"shareTxUntilMovement\":63461,\"totalShares\":41400000,\"maxShares\":8300000}},\"Alpha Enterprises\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Alpha Enterprises\",\"symbol\":\"APHE\",\"price\":25320.948312279277,\"lastPrice\":25720.326698845016,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.85,\"b\":true,\"otlkMag\":5.340717415966543,\"otlkMagForecast\":54.3708098261125,\"cap\":117033185,\"spreadPerc\":0.8,\"shareTxForMovement\":51271,\"shareTxUntilMovement\":51271,\"totalShares\":38000000,\"maxShares\":7600000}},\"SysCore Securities\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"SysCore Securities\",\"symbol\":\"SYSC\",\"price\":7551.50034079494,\"lastPrice\":7454.263899122389,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.53,\"b\":false,\"otlkMag\":6.779735051825734,\"otlkMagForecast\":45.16029246048457,\"cap\":85835760,\"spreadPerc\":1,\"shareTxForMovement\":82651,\"shareTxUntilMovement\":82651,\"totalShares\":27000000,\"maxShares\":5400000}},\"CompuTek\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"CompuTek\",\"symbol\":\"CTK\",\"price\":1108.0372788836642,\"lastPrice\":1116.1615739162362,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.86,\"b\":true,\"otlkMag\":6.227174599981295,\"otlkMagForecast\":55.78149627115308,\"cap\":12811284,\"spreadPerc\":1,\"shareTxForMovement\":101287,\"shareTxUntilMovement\":101287,\"totalShares\":83400000,\"maxShares\":16700000}},\"NetLink Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"NetLink Technologies\",\"symbol\":\"NTLK\",\"price\":36100.05154351682,\"lastPrice\":35042.429879838375,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":3.54,\"b\":true,\"otlkMag\":17.138358887609975,\"otlkMagForecast\":63.5757419767487,\"cap\":8103993,\"spreadPerc\":2,\"shareTxForMovement\":45873,\"shareTxUntilMovement\":45873,\"totalShares\":33600000,\"maxShares\":6700000}},\"Omega Software\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omega Software\",\"symbol\":\"OMGA\",\"price\":3580.3069060720904,\"lastPrice\":3611.4422230176124,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.02,\"b\":true,\"otlkMag\":7.241499200643275,\"otlkMagForecast\":57.09950213300822,\"cap\":43814853,\"spreadPerc\":0.9,\"shareTxForMovement\":63411,\"shareTxUntilMovement\":63411,\"totalShares\":9600000,\"maxShares\":1900000}},\"FoodNStuff\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"FoodNStuff\",\"symbol\":\"FNS\",\"price\":2865.9938028442,\"lastPrice\":2847.3017464462005,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.77,\"b\":false,\"otlkMag\":6.119435941979689,\"otlkMagForecast\":42.953734923690384,\"cap\":72001718,\"spreadPerc\":0.9,\"shareTxForMovement\":103631,\"shareTxUntilMovement\":103631,\"totalShares\":10700000,\"maxShares\":2100000}},\"Sigma Cosmetics\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Sigma Cosmetics\",\"symbol\":\"SGC\",\"price\":5317.353406732841,\"lastPrice\":5395.782012018296,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.73,\"b\":false,\"otlkMag\":1.448344340809805,\"otlkMagForecast\":43.82165438348918,\"cap\":21526541,\"spreadPerc\":0.7,\"shareTxForMovement\":21188,\"shareTxUntilMovement\":21188,\"totalShares\":19500000,\"maxShares\":3900000}},\"Joe's Guns\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Joe's Guns\",\"symbol\":\"JGN\",\"price\":58.76759650073054,\"lastPrice\":60.44607429181274,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":3.35,\"b\":false,\"otlkMag\":9.9940796917263,\"otlkMagForecast\":42.36914226405517,\"cap\":19167490,\"spreadPerc\":0.8,\"shareTxForMovement\":36762,\"shareTxUntilMovement\":36762,\"totalShares\":44400000,\"maxShares\":8900000}},\"Catalyst Ventures\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Catalyst Ventures\",\"symbol\":\"CTYS\",\"price\":1553.7992289373924,\"lastPrice\":1533.4046734537037,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.56,\"b\":true,\"otlkMag\":33.988829069929274,\"otlkMagForecast\":83.66221553751527,\"cap\":14801756,\"spreadPerc\":1.4,\"shareTxForMovement\":45209,\"shareTxUntilMovement\":45209,\"totalShares\":164200000,\"maxShares\":32800000}},\"Microdyne Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Microdyne Technologies\",\"symbol\":\"MDYN\",\"price\":26059.819399216973,\"lastPrice\":26222.010538629307,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.73,\"b\":true,\"otlkMag\":8.510678206173244,\"otlkMagForecast\":61.43180590325125,\"cap\":248013313,\"spreadPerc\":0.7,\"shareTxForMovement\":143532,\"shareTxUntilMovement\":143532,\"totalShares\":20500000,\"maxShares\":4100000}},\"Titan Laboratories\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Titan Laboratories\",\"symbol\":\"TITN\",\"price\":17322.10650187306,\"lastPrice\":17401.855884065226,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.54,\"b\":true,\"otlkMag\":11.860981447894618,\"otlkMagForecast\":60.68102917897175,\"cap\":169799583,\"spreadPerc\":0.8,\"shareTxForMovement\":126225,\"shareTxUntilMovement\":126225,\"totalShares\":22400000,\"maxShares\":4500000}},\"Orders\":{\"ECP\":[],\"MGCP\":[],\"BLD\":[],\"CLRK\":[],\"OMTK\":[],\"FSIG\":[],\"KGI\":[],\"FLCM\":[],\"STM\":[],\"DCOMM\":[],\"HLS\":[],\"VITA\":[],\"ICRS\":[],\"UNV\":[],\"AERO\":[],\"OMN\":[],\"SLRS\":[],\"GPH\":[],\"NVMD\":[],\"WDS\":[],\"LXO\":[],\"RHOC\":[],\"APHE\":[],\"SYSC\":[],\"CTK\":[],\"NTLK\":[],\"OMGA\":[],\"FNS\":[],\"SGC\":[],\"JGN\":[],\"CTYS\":[],\"MDYN\":[],\"TITN\":[]},\"storedCycles\":4,\"lastUpdate\":1693812783698,\"ticksUntilCycle\":42}","SettingsSave":"{\"ActiveScriptsServerPageSize\":100,\"ActiveScriptsScriptPageSize\":10,\"AutoexecScript\":\"\",\"AutosaveInterval\":60,\"CodeInstructionRunTime\":20,\"DisableASCIIArt\":false,\"DisableHotkeys\":false,\"DisableTextEffects\":false,\"DisableOverviewProgressBars\":false,\"EnableBashHotkeys\":false,\"EnableHistorySearch\":false,\"TimestampsFormat\":\"\",\"Locale\":\"en\",\"MaxRecentScriptsCapacity\":50,\"MaxLogCapacity\":50,\"MaxPortCapacity\":50,\"MaxTerminalCapacity\":500,\"RemoteFileApiPort\":0,\"SaveGameOnFileSave\":true,\"SuppressBuyAugmentationConfirmation\":false,\"SuppressFactionInvites\":false,\"SuppressMessages\":false,\"SuppressTravelConfirmation\":false,\"SuppressBladeburnerPopup\":false,\"SuppressTIXPopup\":false,\"SuppressSavedGameToast\":false,\"SuppressAutosaveDisabledWarnings\":false,\"UseIEC60027_2\":true,\"ShowMiddleNullTimeUnit\":false,\"ExcludeRunningScriptsFromSave\":false,\"IsSidebarOpened\":true,\"theme\":{\"primarylight\":\"#28CF28\",\"primary\":\"#21A821\",\"primarydark\":\"#177317\",\"successlight\":\"#1CFF1C\",\"success\":\"#16CA16\",\"successdark\":\"#0D910D\",\"errorlight\":\"#FF3B3B\",\"error\":\"#C32D2D\",\"errordark\":\"#8E2121\",\"secondarylight\":\"#B3B3B3\",\"secondary\":\"#838383\",\"secondarydark\":\"#676767\",\"warninglight\":\"#FFFF3A\",\"warning\":\"#C3C32A\",\"warningdark\":\"#8C8C1E\",\"infolight\":\"#64CBFF\",\"info\":\"#3399CC\",\"infodark\":\"#246D91\",\"welllight\":\"#404040\",\"well\":\"#1C1C1C\",\"white\":\"#C3C3C3\",\"black\":\"#0A0B0B\",\"hp\":\"#C62E2E\",\"money\":\"#D6BB27\",\"hack\":\"#ADFF2F\",\"combat\":\"#E8EDCD\",\"cha\":\"#8B5FAF\",\"int\":\"#537CC8\",\"rep\":\"#E8EDCD\",\"disabled\":\"#5AB5A5\",\"backgroundprimary\":\"#0C0D0E\",\"backgroundsecondary\":\"#121415\",\"button\":\"#252829\"},\"styles\":{\"lineHeight\":1.5,\"fontFamily\":\"Lucida Console, Lucida Sans Unicode, Fira Mono, Consolas, Courier New, Courier, monospace, Times New Roman\"},\"overview\":{\"x\":-17,\"y\":1169,\"opened\":true},\"EditorTheme\":{\"common\":{\"accent\":\"B5CEA8\",\"bg\":\"1E1E1E\",\"fg\":\"D4D4D4\"},\"syntax\":{\"tag\":\"569CD6\",\"entity\":\"569CD6\",\"string\":\"CE9178\",\"regexp\":\"646695\",\"markup\":\"569CD6\",\"keyword\":\"569CD6\",\"comment\":\"6A9955\",\"constant\":\"569CD6\",\"error\":\"F44747\"},\"ui\":{\"line\":\"1E1E1E\",\"panel\":{\"bg\":\"252526\",\"selected\":\"252526\",\"border\":\"1E1E1E\"},\"selection\":{\"bg\":\"ADD6FF26\"}},\"base\":\"vs-dark\",\"inherit\":true},\"OwnedAugmentationsOrder\":0,\"PurchaseAugmentationsOrder\":0,\"MonacoTheme\":\"monokai\",\"MonacoInsertSpaces\":true,\"MonacoTabSize\":2,\"MonacoDetectIndentation\":false,\"MonacoFontFamily\":\"Lucida Console\",\"MonacoFontSize\":15,\"MonacoFontLigatures\":false,\"MonacoVim\":false,\"MonacoWordWrap\":\"off\",\"MonacoCursorStyle\":\"line\",\"MonacoCursorBlinking\":\"blink\",\"hideTrailingDecimalZeros\":false,\"hideThousandsSeparator\":false,\"useEngineeringNotation\":false,\"disableSuffixes\":false}","VersionSave":"34","AllGangsSave":"","LastExportBonus":"1693736923116","StaneksGiftSave":"{\"ctor\":\"StaneksGift\",\"data\":{\"fragments\":[],\"isBonusCharging\":false,\"storedCycles\":0}}"}}