{"ctor":"BitburnerSaveObject","data":{"PlayerSave":"{\"ctor\":\"PlayerObject\",\"data\":{\"hp\":{\"current\":10,\"max\":10},\"skills\":{\"hacking\":2069,\"strength\":2,\"defense\":3,\"dexterity\":2,\"agility\":1,\"charisma\":2,\"intelligence\":0},\"exp\":{\"hacking\":23744657.451889288,\"strength\":0,\"defense\":0,\"dexterity\":0,\"agility\":0,\"charisma\":0,\"intelligence\":0},\"mults\":{\"hacking_chance\":2.292084352240171,\"hacking_speed\":2.2422808370538667,\"hacking_money\":7.436130888861674,\"hacking_grow\":3.4752669143903594,\"hacking\":6.024934961485492,\"strength\":2.749265783172939,\"defense\":3.346932257775752,\"dexterity\":2.7854403329515307,\"agility\":1.6681281189073727,\"charisma\":2.2600181041384264,\"hacking_exp\":8.884382131007227,\"strength_exp\":2.4116366519060866,\"defense_exp\":2.4116366519060866,\"dexterity_exp\":2.4116366519060866,\"agility_exp\":2.4116366519060866,\"charisma_exp\":2.1658506831326583,\"company_rep\":2.8589229017351103,\"faction_rep\":2.1658506831326587,\"crime_money\":1.8833484201153554,\"crime_success\":2.1401686592219944,\"hacknet_node_money\":4.0068338122814655,\"hacknet_node_purchase_cost\":0.48152487294451646,\"hacknet_node_ram_cost\":0.6294442783588449,\"hacknet_node_core_cost\":0.6294442783588449,\"hacknet_node_level_cost\":0.5350276366050182,\"work_money\":3.105419080026896,\"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\":31,\"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\"},{\"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\"}],\"queuedAugmentations\":[{\"level\":32,\"name\":\"NeuroFlux Governor\"},{\"level\":33,\"name\":\"NeuroFlux Governor\"},{\"level\":34,\"name\":\"NeuroFlux Governor\"},{\"level\":35,\"name\":\"NeuroFlux Governor\"},{\"level\":36,\"name\":\"NeuroFlux Governor\"},{\"level\":37,\"name\":\"NeuroFlux Governor\"},{\"level\":38,\"name\":\"NeuroFlux Governor\"},{\"level\":39,\"name\":\"NeuroFlux Governor\"},{\"level\":40,\"name\":\"NeuroFlux Governor\"}],\"city\":\"Aevum\",\"bitNodeN\":1,\"corporation\":null,\"gang\":null,\"bladeburner\":null,\"currentServer\":\"run4theh111z\",\"factions\":[\"BitRunners\",\"The Black Hand\",\"NiteSec\",\"Aevum\",\"Netburners\",\"CyberSec\"],\"factionInvitations\":[],\"hacknetNodes\":[{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13751.200000015118,\"ram\":64,\"totalMoneyGenerated\":427849957.7027736,\"name\":\"hacknet-node-0\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13750.200000015115,\"ram\":64,\"totalMoneyGenerated\":426518871.3120053,\"name\":\"hacknet-node-1\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13749.200000015111,\"ram\":64,\"totalMoneyGenerated\":425964080.1225205,\"name\":\"hacknet-node-2\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13748.200000015107,\"ram\":64,\"totalMoneyGenerated\":423559297.0099265,\"name\":\"hacknet-node-3\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13747.200000015104,\"ram\":64,\"totalMoneyGenerated\":423113286.45426023,\"name\":\"hacknet-node-4\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13746.2000000151,\"ram\":64,\"totalMoneyGenerated\":422633014.4696171,\"name\":\"hacknet-node-5\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13745.200000015097,\"ram\":64,\"totalMoneyGenerated\":422095197.0057542,\"name\":\"hacknet-node-6\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13744.200000015093,\"ram\":64,\"totalMoneyGenerated\":420829525.0016105,\"name\":\"hacknet-node-7\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13743.20000001509,\"ram\":64,\"totalMoneyGenerated\":420263010.8080323,\"name\":\"hacknet-node-8\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13223.600000013199,\"ram\":64,\"totalMoneyGenerated\":419270755.5455614,\"name\":\"hacknet-node-9\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13150.400000012933,\"ram\":64,\"totalMoneyGenerated\":418615429.18867004,\"name\":\"hacknet-node-10\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":13040.600000012533,\"ram\":64,\"totalMoneyGenerated\":417895292.74213207,\"name\":\"hacknet-node-11\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":12895.600000012006,\"ram\":64,\"totalMoneyGenerated\":417400623.124632,\"name\":\"hacknet-node-12\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":12731.600000011409,\"ram\":64,\"totalMoneyGenerated\":416739433.770743,\"name\":\"hacknet-node-13\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":12576.400000010844,\"ram\":64,\"totalMoneyGenerated\":414942070.8460536,\"name\":\"hacknet-node-14\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":12347.00000001001,\"ram\":64,\"totalMoneyGenerated\":413947112.7780389,\"name\":\"hacknet-node-15\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":11953.200000008577,\"ram\":64,\"totalMoneyGenerated\":411871343.7312156,\"name\":\"hacknet-node-16\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":11559.400000007145,\"ram\":64,\"totalMoneyGenerated\":402833134.94771624,\"name\":\"hacknet-node-17\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":11165.600000005712,\"ram\":64,\"totalMoneyGenerated\":392118660.7482481,\"name\":\"hacknet-node-18\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":10470.000000002989,\"ram\":64,\"totalMoneyGenerated\":371628187.83800805,\"name\":\"hacknet-node-19\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":9263.7999999986,\"ram\":64,\"totalMoneyGenerated\":332672086.95883846,\"name\":\"hacknet-node-20\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":7168.599999995671,\"ram\":64,\"totalMoneyGenerated\":259780701.65018067,\"name\":\"hacknet-node-21\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":6513.199999996267,\"ram\":64,\"totalMoneyGenerated\":235697516.64029446,\"name\":\"hacknet-node-22\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":36747.91185622609,\"onlineTimeSeconds\":6282.599999996477,\"ram\":64,\"totalMoneyGenerated\":227220434.8374884,\"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\":\"ECorp\",\"money\":24256205515.558544,\"moneySourceA\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-17124096,\"codingcontract\":0,\"corporation\":0,\"crime\":0,\"gang\":0,\"hacking\":95996537907.73125,\"hacknet\":9365459025.460705,\"hacknet_expenses\":-7572333967.622174,\"hospitalization\":0,\"infiltration\":0,\"sleeves\":0,\"stock\":0,\"total\":24255205515.558544,\"work\":0,\"servers\":-44000000,\"other\":-34305900000,\"augmentations\":-39167433354.024376}},\"moneySourceB\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-197908336,\"codingcontract\":0,\"corporation\":0,\"crime\":24717636.172864918,\"gang\":0,\"hacking\":174181940086.1657,\"hacknet\":254451360775.00198,\"hacknet_expenses\":-91879339866.62473,\"hospitalization\":-3678000,\"infiltration\":0,\"sleeves\":0,\"stock\":-200000000,\"total\":95186441225.19472,\"work\":6256069.41311641,\"servers\":-440000000,\"other\":-35868099973.810776,\"augmentations\":-204888807217.39325}},\"playtimeSinceLastAug\":13793200,\"playtimeSinceLastBitnode\":560802800,\"lastAugReset\":1693812794942,\"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\":95933725184.22783,\"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\":[\"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\",\"alias\",\"startNew \",\"./scan-network.js \",\"flight \",\"buy-all \",\"flight \",\"buy -l\",\"buy Formulas.exe \",\"run Formulas.exe \",\"backdoor1CSEC \",\"connect hong-fang-tea; 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 CSEC; 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 hong-fang-tea; connect nectar-net; connect silver-helix; 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 nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\"],\"lastUpdate\":1693826588202,\"lastSave\":1693826559203,\"totalPlaytime\":31231420800,\"currentWork\":{\"ctor\":\"FactionWork\",\"data\":{\"type\":\"FACTION\",\"singularity\":false,\"cyclesWorked\":1863,\"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\":false,\"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\",\"FTPCrack.exe\",\"relaySMTP.exe\",\"BruteSSH.exe\",\"DeepscanV1.exe\",\"AutoLink.exe\",\"fl1ght.exe\",\"HTTPWorm.exe\",\"SQLInject.exe\",\"ServerProfiler.exe\",\"DeepscanV2.exe\",\"Formulas.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\",\"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\",\"darkweb\"],\"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┃  ┣━foodnstuff: connect home; connect foodnstuff; \\n┃  ┣━sigma-cosmetics: connect home; connect sigma-cosmetics; \\n┃  ┣━joesguns: connect home; connect joesguns; \\n┃  ┃  ┣━max-hardware: connect home; connect joesguns; connect max-hardware; \\n┃  ┃  ┃  ┣━omega-net: connect home; connect joesguns; connect max-hardware; connect omega-net; \\n┃  ┣━hong-fang-tea: connect home; connect hong-fang-tea; \\n┃  ┃  ┣━zer0: connect home; connect hong-fang-tea; connect zer0; \\n┃  ┃  ┣━nectar-net: connect home; connect hong-fang-tea; connect nectar-net; \\n┃  ┃  ┃  ┣━silver-helix: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; \\n┃  ┃  ┃  ┃  ┣━netlink: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; \\n┃  ┃  ┃  ┃  ┃  ┣━I.I.I.I: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━millenium-fitness: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━aerocorp: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect aerocorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnia: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect aerocorp; connect omnia; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━icarus: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect aerocorp; connect omnia; connect icarus; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━univ-energy: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect aerocorp; connect omnia; connect univ-energy; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━solaris: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect aerocorp; connect omnia; connect solaris; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━global-pharm: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect global-pharm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━unitalife: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect global-pharm; connect unitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zeus-med: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect global-pharm; connect unitalife; connect zeus-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nova-med: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; connect global-pharm; connect unitalife; connect zeus-med; connect nova-med; \\n┃  ┃  ┃  ┃  ┣━johnson-ortho: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; \\n┃  ┃  ┃  ┃  ┃  ┣━rothman-uni: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect rothman-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━rho-construction: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect rothman-uni; connect rho-construction; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━aevum-police: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect rothman-uni; connect aevum-police; \\n┃  ┃  ┃  ┃  ┃  ┣━zb-institute: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect zb-institute; \\n┃  ┃  ┃  ┃  ┃  ┣━syscore: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━lexo-corp: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━galactic-cyber: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━deltaone: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━defcomm: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━infocomm: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect infocomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━applied-energetics: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect infocomm; connect applied-energetics; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━taiyang-digital: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━run4theh111z: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumtech: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnitek: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect omnitek; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━kuai-gong: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect kuai-gong; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━b-and-a: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect kuai-gong; connect b-and-a; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━ecorp: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect kuai-gong; connect b-and-a; connect ecorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nwo: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect kuai-gong; connect nwo; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━megacorp: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect kuai-gong; connect nwo; connect megacorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━The-Cave: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect fulcrumtech; connect kuai-gong; connect nwo; connect The-Cave; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━stormtech: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect stormtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━.: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect stormtech; connect .; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━powerhouse-fitness: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect stormtech; connect .; connect powerhouse-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━vitalife: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect vitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━4sigma: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect vitalife; connect 4sigma; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━blade: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect vitalife; connect 4sigma; connect blade; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━clarkinc: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect vitalife; connect 4sigma; connect clarkinc; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumassets: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; connect vitalife; connect 4sigma; connect clarkinc; connect fulcrumassets; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zb-def: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect zb-def; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━titan-labs: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect zb-def; connect titan-labs; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━microdyne: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect zb-def; connect microdyne; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━helios: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect zb-def; connect microdyne; connect helios; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━snap-fitness: connect home; connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect snap-fitness; \\n┃  ┃  ┣━CSEC: connect home; connect hong-fang-tea; connect CSEC; \\n┃  ┃  ┃  ┣━neo-net: connect home; connect hong-fang-tea; connect CSEC; connect neo-net; \\n┃  ┃  ┃  ┃  ┣━computek: connect home; connect hong-fang-tea; connect CSEC; connect neo-net; connect computek; \\n┃  ┃  ┃  ┣━phantasy: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; \\n┃  ┃  ┃  ┃  ┣━the-hub: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; connect the-hub; \\n┃  ┃  ┃  ┃  ┣━crush-fitness: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; connect crush-fitness; \\n┃  ┃  ┃  ┃  ┃  ┣━catalyst: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; connect crush-fitness; connect catalyst; \\n┃  ┃  ┃  ┃  ┣━avmnite-02h: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; connect avmnite-02h; \\n┃  ┃  ┃  ┃  ┃  ┣━summit-uni: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; connect avmnite-02h; connect summit-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━alpha-ent: connect home; connect hong-fang-tea; connect CSEC; connect phantasy; connect avmnite-02h; connect summit-uni; connect alpha-ent; \\n┃  ┣━harakiri-sushi: connect home; connect harakiri-sushi; \\n┃  ┣━iron-gym: connect home; connect iron-gym; \\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\":169.137,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":13582.210000014351,\"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\":169.14499999999998,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":13582.210000014351,\"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,2,0],\"foodnstuff\":[0,0,8,0],\"sigma-cosmetics\":[0,0,8,0],\"joesguns\":[0,0,8,0],\"max-hardware\":[0,0,8,0],\"omega-net\":[0,0,8,0],\"hong-fang-tea\":[0,0,8,0],\"zer0\":[0,0,8,0],\"nectar-net\":[0,0,8,0],\"silver-helix\":[0,0,8,0],\"netlink\":[0,0,8,0],\"millenium-fitness\":[0,0,8,0],\"rothman-uni\":[0,0,8,0],\"rho-construction\":[0,0,6,0],\"neo-net\":[0,0,4,0],\"phantasy\":[0,0,4,0],\"the-hub\":[0,0,4,0],\"catalyst\":[0,0,4,0],\"summit-uni\":[0,0,4,0],\"harakiri-sushi\":[0,0,2,0],\"iron-gym\":[0,0,4,0],\"omnia\":[0,0,2,0],\"univ-energy\":[0,0,2,0],\"solaris\":[0,0,2,0],\"global-pharm\":[0,0,2,0],\"unitalife\":[0,0,2,0],\"aevum-police\":[0,0,2,0],\"zb-institute\":[0,0,2,0],\"lexo-corp\":[0,0,2,0],\"fulcrumtech\":[0,0,2,0],\"omnitek\":[0,0,2,0],\"powerhouse-fitness\":[0,0,2,0],\"vitalife\":[0,0,2,0],\"blade\":[0,0,2,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":132.2982527358314,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.147,\"onlineExpGained\":20261.721887975076,\"onlineMoneyMade\":0,\"onlineRunningTime\":13582.210000014351,\"ramUsage\":3.15,\"server\":\"home\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":2,\"temporary\":false}}]}},\"ecorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"ecorp\",\"httpPortOpen\":true,\"ip\":\"61.2.4.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"ECorp\",\"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\":\"ecorp\"}}]]},\"serversOnNetwork\":[\"b-and-a\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":59699904959,\"moneyMax\":1492497623975,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1369,\"serverGrowth\":99,\"runningScripts\":[]}},\"megacorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"megacorp\",\"httpPortOpen\":true,\"ip\":\"49.3.2.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"MegaCorp\",\"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\":\"megacorp\"}}]]},\"serversOnNetwork\":[\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":53671289144,\"moneyMax\":1341782228600,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1151,\"serverGrowth\":99,\"runningScripts\":[]}},\"b-and-a\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"b-and-a\",\"httpPortOpen\":true,\"ip\":\"97.2.8.3\",\"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\":[\"kuai-gong\",\"ecorp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":82,\"hackDifficulty\":82,\"minDifficulty\":27,\"moneyAvailable\":25256893110,\"moneyMax\":631422327750,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1052,\"serverGrowth\":65,\"runningScripts\":[]}},\"blade\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"blade\",\"httpPortOpen\":true,\"ip\":\"34.9.2.8\",\"isConnectedTo\":false,\"maxRam\":32,\"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\":[\"4sigma\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":96,\"hackDifficulty\":94.56400000000015,\"minDifficulty\":32,\"moneyAvailable\":34408849965.40605,\"moneyMax\":686507647575,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1173,\"serverGrowth\":70,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"blade\"],\"dataMap\":{\"blade\":[0,0,39,52]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":25709.62501070871,\"onlineMoneyMade\":0,\"onlineRunningTime\":8366.609999995377,\"ramUsage\":2.4,\"server\":\"blade\",\"scriptKey\":\"simple-hack.js*[\\\"blade\\\"]\",\"title\":\"simple-hack.js blade\",\"threads\":13,\"temporary\":false}}]}},\"nwo\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nwo\",\"httpPortOpen\":true,\"ip\":\"59.0.7.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"NWO\",\"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\":\"nwo\"}}]]},\"serversOnNetwork\":[\"kuai-gong\",\"megacorp\",\"The-Cave\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":29056846729,\"moneyMax\":726421168225,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":958,\"serverGrowth\":91,\"runningScripts\":[]}},\"clarkinc\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-126260.cct\",\"type\":\"Shortest Path in a Grid\",\"data\":[[0,0,0,0,1,0,0,0,0],[0,0,0,1,1,1,0,0,0],[0,0,0,0,0,1,0,1,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0],[0,0,0,1,1,0,1,0,1],[0,1,0,0,0,0,0,0,0]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"clarkinc\",\"httpPortOpen\":true,\"ip\":\"87.6.7.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"beyond-man.lit\",\"cost-of-immortality.lit\"],\"organizationName\":\"Clarke Incorporated\",\"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\":\"clarkinc\"}}]]},\"serversOnNetwork\":[\"4sigma\",\"fulcrumassets\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":58,\"hackDifficulty\":58,\"minDifficulty\":19,\"moneyAvailable\":16018548068,\"moneyMax\":400463701700,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":996,\"serverGrowth\":74,\"runningScripts\":[]}},\"omnitek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omnitek\",\"httpPortOpen\":true,\"ip\":\"78.6.8.8\",\"isConnectedTo\":false,\"maxRam\":512,\"messages\":[\"coded-intelligence.lit\",\"history-of-synthoids.lit\"],\"organizationName\":\"OmniTek Incorporated\",\"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\":\"omnitek\"}}]]},\"serversOnNetwork\":[\"fulcrumtech\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":57.335999999999956,\"minDifficulty\":30,\"moneyAvailable\":10551.694159405419,\"moneyMax\":461213899675,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":992,\"serverGrowth\":99,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omnitek\"],\"dataMap\":{\"omnitek\":[47554353564.95579,213,1917,852]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":802744.7936943057,\"onlineMoneyMade\":47554353564.95579,\"onlineRunningTime\":8367.009999995378,\"ramUsage\":2.4,\"server\":\"omnitek\",\"scriptKey\":\"simple-hack.js*[\\\"omnitek\\\"]\",\"title\":\"simple-hack.js omnitek\",\"threads\":213,\"temporary\":false}}]}},\"4sigma\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"4sigma\",\"httpPortOpen\":true,\"ip\":\"76.8.8.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\":[\"vitalife\",\"blade\",\"clarkinc\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":69,\"hackDifficulty\":69,\"minDifficulty\":23,\"moneyAvailable\":24619609807,\"moneyMax\":615490245175,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":991,\"serverGrowth\":85,\"runningScripts\":[]}},\"kuai-gong\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"kuai-gong\",\"httpPortOpen\":true,\"ip\":\"19.0.7.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"KuaiGong International\",\"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\":\"kuai-gong\"}}]]},\"serversOnNetwork\":[\"fulcrumtech\",\"b-and-a\",\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":20558532942,\"moneyMax\":513963323550,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1140,\"serverGrowth\":97,\"runningScripts\":[]}},\"fulcrumtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"fulcrumtech\",\"httpPortOpen\":true,\"ip\":\"33.1.2.4\",\"isConnectedTo\":false,\"maxRam\":2048,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"Fulcrum 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\":\"fulcrumtech\"}}]]},\"serversOnNetwork\":[\"run4theh111z\",\"omnitek\",\"kuai-gong\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":84,\"hackDifficulty\":82.81400000000018,\"minDifficulty\":28,\"moneyAvailable\":409947277.7436848,\"moneyMax\":35788017300,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1017,\"serverGrowth\":87,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"fulcrumtech\"],\"dataMap\":{\"fulcrumtech\":[35788017300,853,10236,853]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":3045371.182321502,\"onlineMoneyMade\":35788017300,\"onlineRunningTime\":8367.009999995378,\"ramUsage\":2.4,\"server\":\"fulcrumtech\",\"scriptKey\":\"simple-hack.js*[\\\"fulcrumtech\\\"]\",\"title\":\"simple-hack.js fulcrumtech\",\"threads\":853,\"temporary\":false}}]}},\"fulcrumassets\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-280430.cct\",\"type\":\"Unique Paths in a Grid I\",\"data\":[7,13],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"fulcrumassets\",\"httpPortOpen\":true,\"ip\":\"49.9.2.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Fulcrum 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\":\"fulcrumassets\"}}]]},\"serversOnNetwork\":[\"clarkinc\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":1000000,\"moneyMax\":25000000,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1121,\"serverGrowth\":1,\"runningScripts\":[]}},\"stormtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"stormtech\",\"httpPortOpen\":true,\"ip\":\"76.7.5.1\",\"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\":[\"run4theh111z\",\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":87,\"minDifficulty\":29,\"moneyAvailable\":1146172982,\"moneyMax\":28654324550,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":968,\"serverGrowth\":76,\"runningScripts\":[]}},\"defcomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"defcomm\",\"httpPortOpen\":true,\"ip\":\"17.8.3.2\",\"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\",\"infocomm\",\"taiyang-digital\",\"zb-def\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":87,\"minDifficulty\":29,\"moneyAvailable\":918530424,\"moneyMax\":22963260600,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1008,\"serverGrowth\":49,\"runningScripts\":[]}},\"infocomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-11511.cct\",\"type\":\"Sanitize Parentheses in Expression\",\"data\":\"()))aa)()))(\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"infocomm\",\"httpPortOpen\":true,\"ip\":\"42.7.5.4\",\"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\":[\"defcomm\",\"applied-energetics\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":78,\"minDifficulty\":26,\"moneyAvailable\":807453800,\"moneyMax\":20186345000,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":895,\"serverGrowth\":49,\"runningScripts\":[]}},\"helios\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"helios\",\"httpPortOpen\":true,\"ip\":\"17.4.4.3\",\"isConnectedTo\":false,\"maxRam\":64,\"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\":[\"microdyne\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":77.82400000000001,\"minDifficulty\":28,\"moneyAvailable\":663412025.6817361,\"moneyMax\":14200535025,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":818,\"serverGrowth\":77,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"helios\"],\"dataMap\":{\"helios\":[0,0,156,156]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":78999.92590891625,\"onlineMoneyMade\":0,\"onlineRunningTime\":8366.609999995377,\"ramUsage\":2.4,\"server\":\"helios\",\"scriptKey\":\"simple-hack.js*[\\\"helios\\\"]\",\"title\":\"simple-hack.js helios\",\"threads\":26,\"temporary\":false}}]}},\"vitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"vitalife\",\"httpPortOpen\":true,\"ip\":\"99.3.4.2\",\"isConnectedTo\":false,\"maxRam\":128,\"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\":[\"run4theh111z\",\"4sigma\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":90,\"hackDifficulty\":76.16800000000013,\"minDifficulty\":30,\"moneyAvailable\":1114328669.504328,\"moneyMax\":18625114625,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":892,\"serverGrowth\":60,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"vitalife\"],\"dataMap\":{\"vitalife\":[0,0,265,318]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":155387.84347131645,\"onlineMoneyMade\":0,\"onlineRunningTime\":8366.609999995377,\"ramUsage\":2.4,\"server\":\"vitalife\",\"scriptKey\":\"simple-hack.js*[\\\"vitalife\\\"]\",\"title\":\"simple-hack.js vitalife\",\"threads\":53,\"temporary\":false}}]}},\"icarus\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"icarus\",\"httpPortOpen\":true,\"ip\":\"88.0.1.6\",\"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\":[\"omnia\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":89,\"hackDifficulty\":89,\"minDifficulty\":30,\"moneyAvailable\":978645934,\"moneyMax\":24466148350,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":922,\"serverGrowth\":92,\"runningScripts\":[]}},\"univ-energy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"univ-energy\",\"httpPortOpen\":true,\"ip\":\"50.8.5.9\",\"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\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":81,\"hackDifficulty\":80.02800000000018,\"minDifficulty\":27,\"moneyAvailable\":1605597068.3013408,\"moneyMax\":29933459750,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":835,\"serverGrowth\":81,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"univ-energy\"],\"dataMap\":{\"univ-energy\":[0,0,30,42]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":17463.141516707805,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.209999995379,\"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\":\"38.9.3.2\",\"isConnectedTo\":false,\"maxRam\":32,\"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\":[\"zb-def\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":71.762,\"minDifficulty\":25,\"moneyAvailable\":880399598.3758082,\"moneyMax\":20176347625,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":822,\"serverGrowth\":79,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"titan-labs\"],\"dataMap\":{\"titan-labs\":[0,0,78,91]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":38737.682967617715,\"onlineMoneyMade\":0,\"onlineRunningTime\":8366.609999995377,\"ramUsage\":2.4,\"server\":\"titan-labs\",\"scriptKey\":\"simple-hack.js*[\\\"titan-labs\\\"]\",\"title\":\"simple-hack.js titan-labs\",\"threads\":13,\"temporary\":false}}]}},\"microdyne\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"microdyne\",\"httpPortOpen\":true,\"ip\":\"27.0.7.7\",\"isConnectedTo\":false,\"maxRam\":16,\"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\":[\"zb-def\",\"helios\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":72,\"hackDifficulty\":70.04400000000003,\"minDifficulty\":24,\"moneyAvailable\":582951692.6521924,\"moneyMax\":13977875050,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":853,\"serverGrowth\":79,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"microdyne\"],\"dataMap\":{\"microdyne\":[0,0,36,42]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":17047.352432976666,\"onlineMoneyMade\":0,\"onlineRunningTime\":8366.609999995377,\"ramUsage\":2.4,\"server\":\"microdyne\",\"scriptKey\":\"simple-hack.js*[\\\"microdyne\\\"]\",\"title\":\"simple-hack.js microdyne\",\"threads\":6,\"temporary\":false}}]}},\"taiyang-digital\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"taiyang-digital\",\"httpPortOpen\":true,\"ip\":\"31.8.2.3\",\"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\":[\"defcomm\",\"run4theh111z\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":76,\"minDifficulty\":25,\"moneyAvailable\":847268268,\"moneyMax\":21181706700,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":904,\"serverGrowth\":74,\"runningScripts\":[]}},\"galactic-cyber\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"galactic-cyber\",\"httpPortOpen\":true,\"ip\":\"77.1.9.1\",\"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\":[\"lexo-corp\",\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":63,\"hackDifficulty\":63,\"minDifficulty\":21,\"moneyAvailable\":803105909,\"moneyMax\":20077647725,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":873,\"serverGrowth\":74,\"runningScripts\":[]}},\"aerocorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aerocorp\",\"httpPortOpen\":true,\"ip\":\"7.3.4.0\",\"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\":[\"millenium-fitness\",\"omnia\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":88,\"hackDifficulty\":88,\"minDifficulty\":29,\"moneyAvailable\":1175291781,\"moneyMax\":29382294525,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":892,\"serverGrowth\":58,\"runningScripts\":[]}},\"omnia\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omnia\",\"httpPortOpen\":true,\"ip\":\"87.0.1.6\",\"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\":[\"aerocorp\",\"icarus\",\"univ-energy\",\"solaris\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":93,\"hackDifficulty\":88.02800000000016,\"minDifficulty\":31,\"moneyAvailable\":1277126574.0125828,\"moneyMax\":23855129450,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":852,\"serverGrowth\":67,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omnia\"],\"dataMap\":{\"omnia\":[0,0,130,130]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71377.12604051207,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.40999999538,\"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\":\"39.8.5.8\",\"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\":[\"defcomm\",\"titan-labs\",\"microdyne\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":62,\"hackDifficulty\":62,\"minDifficulty\":21,\"moneyAvailable\":1043427868,\"moneyMax\":26085696700,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":795,\"serverGrowth\":74,\"runningScripts\":[]}},\"applied-energetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"applied-energetics\",\"httpPortOpen\":true,\"ip\":\"26.9.6.5\",\"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\":[\"infocomm\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":77,\"hackDifficulty\":77,\"minDifficulty\":26,\"moneyAvailable\":994574596,\"moneyMax\":24864364900,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":819,\"serverGrowth\":70,\"runningScripts\":[]}},\"solaris\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"solaris\",\"httpPortOpen\":true,\"ip\":\"54.3.2.1\",\"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\":[\"omnia\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":70.53200000000017,\"minDifficulty\":26,\"moneyAvailable\":1121888554.6641822,\"moneyMax\":18793119200,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":805,\"serverGrowth\":71,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"solaris\"],\"dataMap\":{\"solaris\":[0,0,156,182]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":79277.11863140367,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.209999995379,\"ramUsage\":2.4,\"server\":\"solaris\",\"scriptKey\":\"simple-hack.js*[\\\"solaris\\\"]\",\"title\":\"simple-hack.js solaris\",\"threads\":26,\"temporary\":false}}]}},\"deltaone\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"deltaone\",\"httpPortOpen\":true,\"ip\":\"33.9.8.4\",\"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\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":1558634603,\"moneyMax\":38965865075,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":886,\"serverGrowth\":57,\"runningScripts\":[]}},\"global-pharm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"global-pharm\",\"httpPortOpen\":true,\"ip\":\"88.5.3.8\",\"isConnectedTo\":false,\"maxRam\":8,\"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\":[\"millenium-fitness\",\"unitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":75,\"hackDifficulty\":74.88000000000011,\"minDifficulty\":25,\"moneyAvailable\":2307555517.627396,\"moneyMax\":42126718675,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":757,\"serverGrowth\":84,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"global-pharm\"],\"dataMap\":{\"global-pharm\":[0,0,18,24]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":9515.17326230874,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.209999995379,\"ramUsage\":2.4,\"server\":\"global-pharm\",\"scriptKey\":\"simple-hack.js*[\\\"global-pharm\\\"]\",\"title\":\"simple-hack.js global-pharm\",\"threads\":3,\"temporary\":false}}]}},\"nova-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-256374.cct\",\"type\":\"Unique Paths in a Grid I\",\"data\":[7,4],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nova-med\",\"httpPortOpen\":true,\"ip\":\"93.5.8.8\",\"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\":[\"zeus-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":67,\"minDifficulty\":22,\"moneyAvailable\":1170488023,\"moneyMax\":29262200575,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":829,\"serverGrowth\":69,\"runningScripts\":[]}},\"zeus-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zeus-med\",\"httpPortOpen\":true,\"ip\":\"96.3.0.3\",\"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\":[\"unitalife\",\"nova-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":89,\"hackDifficulty\":89,\"minDifficulty\":30,\"moneyAvailable\":1415530422,\"moneyMax\":35388260550,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":811,\"serverGrowth\":75,\"runningScripts\":[]}},\"unitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"unitalife\",\"httpPortOpen\":true,\"ip\":\"1.3.3.6\",\"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\":[\"global-pharm\",\"zeus-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":75,\"hackDifficulty\":67.63600000000017,\"minDifficulty\":25,\"moneyAvailable\":1720676713.9848082,\"moneyMax\":27080471625,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":820,\"serverGrowth\":73,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"unitalife\"],\"dataMap\":{\"unitalife\":[0,0,182,182]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":82464.83494000907,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.209999995379,\"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\":\"14.1.6.4\",\"isConnectedTo\":false,\"maxRam\":64,\"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\",\"galactic-cyber\",\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":68,\"hackDifficulty\":56.944,\"minDifficulty\":23,\"moneyAvailable\":1271431566.5722244,\"moneyMax\":19479680675,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":674,\"serverGrowth\":60,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"lexo-corp\"],\"dataMap\":{\"lexo-corp\":[0,0,234,260]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":102699.90368159111,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.009999995378,\"ramUsage\":2.4,\"server\":\"lexo-corp\",\"scriptKey\":\"simple-hack.js*[\\\"lexo-corp\\\"]\",\"title\":\"simple-hack.js lexo-corp\",\"threads\":26,\"temporary\":false}}]}},\"rho-construction\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rho-construction\",\"httpPortOpen\":false,\"ip\":\"58.3.6.9\",\"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\":[\"rothman-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":58,\"hackDifficulty\":47.24799999999991,\"minDifficulty\":19,\"moneyAvailable\":1304473852.5540266,\"moneyMax\":15339008450,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":502,\"serverGrowth\":45,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rho-construction\"],\"dataMap\":{\"rho-construction\":[247414873.776739,13,286,299]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":359.7767310486096,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.152,\"onlineExpGained\":108382.35449258341,\"onlineMoneyMade\":247414873.776739,\"onlineRunningTime\":13460.010000013906,\"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\":\"58.0.3.8\",\"isConnectedTo\":false,\"maxRam\":128,\"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\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":58,\"hackDifficulty\":39.9800000000001,\"minDifficulty\":19,\"moneyAvailable\":1059739017.130943,\"moneyMax\":16040208425,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":566,\"serverGrowth\":50,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"alpha-ent\"],\"dataMap\":{\"alpha-ent\":[1216504435.00955,53,1431,477]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":355414.3765216656,\"onlineMoneyMade\":1216504435.00955,\"onlineRunningTime\":8366.409999995376,\"ramUsage\":2.4,\"server\":\"alpha-ent\",\"scriptKey\":\"simple-hack.js*[\\\"alpha-ent\\\"]\",\"title\":\"simple-hack.js alpha-ent\",\"threads\":53,\"temporary\":false}}]}},\"aevum-police\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aevum-police\",\"httpPortOpen\":true,\"ip\":\"7.7.2.0\",\"isConnectedTo\":false,\"maxRam\":64,\"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\":[\"rothman-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":53.06800000000001,\"minDifficulty\":23,\"moneyAvailable\":437244795.2962614,\"moneyMax\":6752191475,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":445,\"serverGrowth\":44,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"aevum-police\"],\"dataMap\":{\"aevum-police\":[0,0,390,390]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":166315.63349245526,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.009999995378,\"ramUsage\":2.4,\"server\":\"aevum-police\",\"scriptKey\":\"simple-hack.js*[\\\"aevum-police\\\"]\",\"title\":\"simple-hack.js aevum-police\",\"threads\":26,\"temporary\":false}}]}},\"rothman-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rothman-uni\",\"httpPortOpen\":false,\"ip\":\"70.0.0.5\",\"isConnectedTo\":false,\"maxRam\":64,\"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\":[\"johnson-ortho\",\"rho-construction\",\"aevum-police\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":49,\"hackDifficulty\":35.35799999999989,\"minDifficulty\":16,\"moneyAvailable\":460984716.6219986,\"moneyMax\":5094820525,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":427,\"serverGrowth\":42,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rothman-uni\"],\"dataMap\":{\"rothman-uni\":[890934892.3953992,104,1664,468]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":960.5069512718749,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.155,\"onlineExpGained\":351618.96847529896,\"onlineMoneyMade\":890934892.3953992,\"onlineRunningTime\":13521.010000014128,\"ramUsage\":2.4,\"server\":\"rothman-uni\",\"scriptKey\":\"simple-hack.js*[\\\"rothman-uni\\\"]\",\"title\":\"simple-hack.js rothman-uni\",\"threads\":26,\"temporary\":false}}]}},\"zb-institute\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-institute\",\"httpPortOpen\":true,\"ip\":\"22.3.8.7\",\"isConnectedTo\":false,\"maxRam\":32,\"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\":81,\"hackDifficulty\":77.82200000000016,\"minDifficulty\":27,\"moneyAvailable\":1324057953.4326644,\"moneyMax\":23157480250,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":738,\"serverGrowth\":79,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zb-institute\"],\"dataMap\":{\"zb-institute\":[0,0,91,91]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":44142.9410561225,\"onlineMoneyMade\":0,\"onlineRunningTime\":8367.009999995378,\"ramUsage\":2.4,\"server\":\"zb-institute\",\"scriptKey\":\"simple-hack.js*[\\\"zb-institute\\\"]\",\"title\":\"simple-hack.js zb-institute\",\"threads\":13,\"temporary\":false}}]}},\"summit-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"summit-uni\",\"httpPortOpen\":false,\"ip\":\"1.2.4.2\",\"isConnectedTo\":false,\"maxRam\":16,\"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\":[\"avmnite-02h\",\"alpha-ent\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":56,\"hackDifficulty\":49.69400000000008,\"minDifficulty\":19,\"moneyAvailable\":390747195.1199829,\"moneyMax\":6891062000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":464,\"serverGrowth\":47,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"summit-uni\"],\"dataMap\":{\"summit-uni\":[0,0,132,156]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":173.56954048820683,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.15699999999998,\"onlineExpGained\":50662.300663855596,\"onlineMoneyMade\":0,\"onlineRunningTime\":13520.410000014126,\"ramUsage\":2.4,\"server\":\"summit-uni\",\"scriptKey\":\"simple-hack.js*[\\\"summit-uni\\\"]\",\"title\":\"simple-hack.js summit-uni\",\"threads\":6,\"temporary\":false}}]}},\"syscore\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"syscore\",\"httpPortOpen\":true,\"ip\":\"68.3.8.3\",\"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\":[\"johnson-ortho\",\"lexo-corp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":529766992,\"moneyMax\":13244174800,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":603,\"serverGrowth\":62,\"runningScripts\":[]}},\"catalyst\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"catalyst\",\"httpPortOpen\":false,\"ip\":\"8.2.7.7\",\"isConnectedTo\":false,\"maxRam\":32,\"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\":[\"crush-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":55.162000000000404,\"minDifficulty\":22,\"moneyAvailable\":532060509.20618594,\"moneyMax\":7940315075,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":436,\"serverGrowth\":39,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"catalyst\"],\"dataMap\":{\"catalyst\":[0,0,273,299]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":376.0695610410765,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.158,\"onlineExpGained\":117391.1179734246,\"onlineMoneyMade\":0,\"onlineRunningTime\":13520.410000014126,\"ramUsage\":2.4,\"server\":\"catalyst\",\"scriptKey\":\"simple-hack.js*[\\\"catalyst\\\"]\",\"title\":\"simple-hack.js catalyst\",\"threads\":13,\"temporary\":false}}]}},\"the-hub\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"the-hub\",\"httpPortOpen\":false,\"ip\":\"95.1.9.2\",\"isConnectedTo\":false,\"maxRam\":16,\"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\":[\"phantasy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":36,\"hackDifficulty\":31.624000000000045,\"minDifficulty\":12,\"moneyAvailable\":427053210.4518035,\"moneyMax\":4222864400,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":324,\"serverGrowth\":46,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"the-hub\"],\"dataMap\":{\"the-hub\":[275976445.4135792,36,558,174]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":302.43713903879933,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.16,\"onlineExpGained\":94160.2355772668,\"onlineMoneyMade\":275976445.4135792,\"onlineRunningTime\":13520.410000014126,\"ramUsage\":2.4,\"server\":\"the-hub\",\"scriptKey\":\"simple-hack.js*[\\\"the-hub\\\"]\",\"title\":\"simple-hack.js the-hub\",\"threads\":6,\"temporary\":false}}]}},\"computek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"computek\",\"httpPortOpen\":false,\"ip\":\"6.0.6.2\",\"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\":[\"neo-net\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":57,\"hackDifficulty\":57,\"minDifficulty\":19,\"moneyAvailable\":237803064,\"moneyMax\":5945076600,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":325,\"serverGrowth\":52,\"runningScripts\":[]}},\"netlink\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"netlink\",\"httpPortOpen\":false,\"ip\":\"55.2.5.4\",\"isConnectedTo\":false,\"maxRam\":16,\"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\":[\"silver-helix\",\"I.I.I.I\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":62,\"hackDifficulty\":59.89799999999998,\"minDifficulty\":21,\"moneyAvailable\":694212470.8479363,\"moneyMax\":6875000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":376,\"serverGrowth\":63,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"netlink\"],\"dataMap\":{\"netlink\":[84315531.845953,12,198,120]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":202.87828644867042,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.161,\"onlineExpGained\":63327.875829819575,\"onlineMoneyMade\":84315531.845953,\"onlineRunningTime\":13521.210000014129,\"ramUsage\":2.4,\"server\":\"netlink\",\"scriptKey\":\"simple-hack.js*[\\\"netlink\\\"]\",\"title\":\"simple-hack.js netlink\",\"threads\":6,\"temporary\":false}}]}},\"johnson-ortho\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"johnson-ortho\",\"httpPortOpen\":false,\"ip\":\"80.0.9.9\",\"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\":[\"silver-helix\",\"rothman-uni\",\"zb-institute\",\"syscore\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":43,\"hackDifficulty\":43,\"minDifficulty\":14,\"moneyAvailable\":72581741,\"moneyMax\":1814543525,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":268,\"serverGrowth\":60,\"runningScripts\":[]}},\"n00dles\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"n00dles\",\"httpPortOpen\":false,\"ip\":\"49.2.0.2\",\"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\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":2.0019999999997746,\"minDifficulty\":1,\"moneyAvailable\":1645337.7177818648,\"moneyMax\":1750000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":1,\"serverGrowth\":3000,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"n00dles\"],\"dataMap\":{\"n00dles\":[535914213.99345595,10557,2644,611]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":1577.3347101820916,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.16299999999998,\"onlineExpGained\":404946.58377857937,\"onlineMoneyMade\":535914213.99345595,\"onlineRunningTime\":13582.210000014351,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"foodnstuff\",\"httpPortOpen\":false,\"ip\":\"7.7.3.9\",\"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\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":89.63800000000415,\"minDifficulty\":3,\"moneyAvailable\":5165110.4598726705,\"moneyMax\":50000000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":1,\"serverGrowth\":5,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"foodnstuff\"],\"dataMap\":{\"foodnstuff\":[21321410.538928267,312,32034,1056]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":7863.551565126799,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.164,\"onlineExpGained\":1786133.9523818241,\"onlineMoneyMade\":21321410.538928267,\"onlineRunningTime\":13582.210000014351,\"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\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"sigma-cosmetics\",\"httpPortOpen\":false,\"ip\":\"86.7.5.5\",\"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\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":72.38800000000212,\"minDifficulty\":3,\"moneyAvailable\":5835723.212790334,\"moneyMax\":57500000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":5,\"serverGrowth\":10,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"sigma-cosmetics\"],\"dataMap\":{\"sigma-cosmetics\":[48867863.08584499,384,21294,540]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":6172.90568586426,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.165,\"onlineExpGained\":1184679.0508770386,\"onlineMoneyMade\":48867863.08584499,\"onlineRunningTime\":13582.01000001435,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"joesguns\",\"httpPortOpen\":false,\"ip\":\"26.3.7.5\",\"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\",\"max-hardware\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":49.580000000001334,\"minDifficulty\":5,\"moneyAvailable\":8471543.837079085,\"moneyMax\":62500000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":10,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"joesguns\"],\"dataMap\":{\"joesguns\":[118813273.65934217,636,16974,756]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":6307.296374953292,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.167,\"onlineExpGained\":1223779.2166356277,\"onlineMoneyMade\":118813273.65934217,\"onlineRunningTime\":13521.210000014129,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"zer0\",\"httpPortOpen\":false,\"ip\":\"17.1.0.5\",\"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\":[\"hong-fang-tea\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":20.26399999999975,\"minDifficulty\":8,\"moneyAvailable\":33367323.046871662,\"moneyMax\":187500000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":75,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zer0\"],\"dataMap\":{\"zer0\":[647936701.1325843,832,10335,1014]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":4572.96134943937,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.16899999999998,\"onlineExpGained\":1136316.9167468895,\"onlineMoneyMade\":647936701.1325843,\"onlineRunningTime\":13521.210000014129,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"nectar-net\",\"httpPortOpen\":false,\"ip\":\"28.9.5.0\",\"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\":[\"hong-fang-tea\",\"silver-helix\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":36.886000000001275,\"minDifficulty\":7,\"moneyAvailable\":10423997.33547509,\"moneyMax\":68750000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":20,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"nectar-net\"],\"dataMap\":{\"nectar-net\":[112581869.67041667,522,11514,666]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":4908.788597984634,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.17,\"onlineExpGained\":1015644.7964524782,\"onlineMoneyMade\":112581869.67041667,\"onlineRunningTime\":13521.210000014129,\"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\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"neo-net\",\"httpPortOpen\":false,\"ip\":\"86.2.4.0\",\"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\",\"computek\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":33.5919999999997,\"minDifficulty\":8,\"moneyAvailable\":15070766.275800705,\"moneyMax\":125000000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":50,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"neo-net\"],\"dataMap\":{\"neo-net\":[171270006.85565066,520,12584,897]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":5570.246192631877,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.171,\"onlineExpGained\":1306097.4592704524,\"onlineMoneyMade\":171270006.85565066,\"onlineRunningTime\":13520.610000014127,\"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\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"silver-helix\",\"httpPortOpen\":false,\"ip\":\"83.8.2.9\",\"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\":[\"nectar-net\",\"netlink\",\"johnson-ortho\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":32.96399999999969,\"minDifficulty\":10,\"moneyAvailable\":102729096.59820423,\"moneyMax\":1125000000,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":150,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"silver-helix\"],\"dataMap\":{\"silver-helix\":[880175489.3472625,338,8268,676]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":4037.8147998287604,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.173,\"onlineExpGained\":989578.0192801115,\"onlineMoneyMade\":880175489.3472625,\"onlineRunningTime\":13521.210000014129,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"hong-fang-tea\",\"httpPortOpen\":false,\"ip\":\"92.6.0.1\",\"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\",\"zer0\",\"nectar-net\",\"CSEC\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":31.340000000000288,\"minDifficulty\":5,\"moneyAvailable\":12530575.801231464,\"moneyMax\":75000000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":30,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"hong-fang-tea\"],\"dataMap\":{\"hong-fang-tea\":[114739356.27295482,450,10206,570]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":3813.6534577296206,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.17399999999998,\"onlineExpGained\":748020.5535201706,\"onlineMoneyMade\":114739356.27295482,\"onlineRunningTime\":13521.210000014129,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"harakiri-sushi\",\"httpPortOpen\":false,\"ip\":\"42.3.6.0\",\"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\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.273999999999079,\"minDifficulty\":5,\"moneyAvailable\":100000000,\"moneyMax\":100000000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":40,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"harakiri-sushi\"],\"dataMap\":{\"harakiri-sushi\":[838055164.7069048,762,12984,624]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":3757.3162579795817,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.17499999999998,\"onlineExpGained\":957514.2841693299,\"onlineMoneyMade\":838055164.7069048,\"onlineRunningTime\":13520.410000014126,\"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\":\"89.4.1.1\",\"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\":[\"CSEC\",\"the-hub\",\"crush-fitness\",\"avmnite-02h\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":20.22199999999976,\"minDifficulty\":7,\"moneyAvailable\":104726007.04890592,\"moneyMax\":600000000,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":100,\"serverGrowth\":35,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"phantasy\"],\"dataMap\":{\"phantasy\":[1438466847.759894,637,8658,754]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":3370.3326066346253,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.176,\"onlineExpGained\":803512.4043104119,\"onlineMoneyMade\":1438466847.759894,\"onlineRunningTime\":13520.410000014126,\"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\":true,\"hasAdminRights\":true,\"hostname\":\"max-hardware\",\"httpPortOpen\":false,\"ip\":\"62.2.0.0\",\"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\":[\"joesguns\",\"omega-net\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.725999999999402,\"minDifficulty\":5,\"moneyAvailable\":140643399.97075638,\"moneyMax\":250000000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":80,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"max-hardware\"],\"dataMap\":{\"max-hardware\":[3108416517.127049,1326,15067,1404]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":4599.63569896566,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.177,\"onlineExpGained\":1185865.115891508,\"onlineMoneyMade\":3108416517.127049,\"onlineRunningTime\":13521.210000014129,\"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\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omega-net\",\"httpPortOpen\":false,\"ip\":\"66.3.0.0\",\"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\":[\"max-hardware\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":27,\"hackDifficulty\":22.703999999999894,\"minDifficulty\":9,\"moneyAvailable\":232377604.7553013,\"moneyMax\":1665651500,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":185,\"serverGrowth\":32,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omega-net\"],\"dataMap\":{\"omega-net\":[1394255982.5829837,247,3913,468]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":1777.1794843217822,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.178,\"onlineExpGained\":456397.81757554814,\"onlineMoneyMade\":1394255982.5829837,\"onlineRunningTime\":13521.210000014129,\"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\":\"9.0.1.4\",\"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\":[\"phantasy\",\"catalyst\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":43,\"hackDifficulty\":43,\"minDifficulty\":14,\"moneyAvailable\":51004432,\"moneyMax\":1275110800,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":268,\"serverGrowth\":30,\"runningScripts\":[]}},\"iron-gym\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"iron-gym\",\"httpPortOpen\":false,\"ip\":\"88.1.3.3\",\"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\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":32.257999999999846,\"minDifficulty\":10,\"moneyAvailable\":39692199.13298751,\"moneyMax\":500000000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":100,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"iron-gym\"],\"dataMap\":{\"iron-gym\":[203877002.73067954,182,6097,468]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":3077.3147783749473,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.179,\"onlineExpGained\":719315.1148548711,\"onlineMoneyMade\":203877002.73067954,\"onlineRunningTime\":13520.410000014126,\"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\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"millenium-fitness\",\"httpPortOpen\":false,\"ip\":\"63.9.8.7\",\"isConnectedTo\":false,\"maxRam\":64,\"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\":[\"I.I.I.I\",\"aerocorp\",\"global-pharm\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":53,\"hackDifficulty\":37.01399999999991,\"minDifficulty\":18,\"moneyAvailable\":499489531.83937603,\"moneyMax\":6250000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":524,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"millenium-fitness\"],\"dataMap\":{\"millenium-fitness\":[241516441.36771443,26,1092,468]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":769.3332422868383,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.17999999999998,\"onlineExpGained\":266312.9081297942,\"onlineMoneyMade\":241516441.36771443,\"onlineRunningTime\":13460.210000013907,\"ramUsage\":2.4,\"server\":\"millenium-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"millenium-fitness\\\"]\",\"title\":\"simple-hack.js millenium-fitness\",\"threads\":26,\"temporary\":false}}]}},\"powerhouse-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"powerhouse-fitness\",\"httpPortOpen\":true,\"ip\":\"47.1.7.4\",\"isConnectedTo\":false,\"maxRam\":16,\"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\":57,\"hackDifficulty\":55.75200000000001,\"minDifficulty\":19,\"moneyAvailable\":1207929541.606992,\"moneyMax\":22500000000,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1031,\"serverGrowth\":55,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"powerhouse-fitness\"],\"dataMap\":{\"powerhouse-fitness\":[0,0,36,48]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":15000.3907899926,\"onlineMoneyMade\":0,\"onlineRunningTime\":8366.809999995377,\"ramUsage\":2.4,\"server\":\"powerhouse-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"powerhouse-fitness\\\"]\",\"title\":\"simple-hack.js powerhouse-fitness\",\"threads\":6,\"temporary\":false}}]}},\"snap-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"snap-fitness\",\"httpPortOpen\":true,\"ip\":\"18.4.7.6\",\"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\":[\"lexo-corp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":47,\"hackDifficulty\":47,\"minDifficulty\":16,\"moneyAvailable\":450000000,\"moneyMax\":11250000000,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":769,\"serverGrowth\":42,\"runningScripts\":[]}},\"run4theh111z\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"run4theh111z\",\"httpPortOpen\":true,\"ip\":\"66.9.7.6\",\"isConnectedTo\":true,\"maxRam\":512,\"messages\":[\"simulated-reality.lit\",\"the-new-god.lit\"],\"organizationName\":\"The Runners\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"taiyang-digital\",\"fulcrumtech\",\"stormtech\",\"vitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":5,\"requiredHackingSkill\":512,\"serverGrowth\":1,\"runningScripts\":[]}},\"I.I.I.I\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"I.I.I.I\",\"httpPortOpen\":true,\"ip\":\"16.9.1.3\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"I.I.I.I\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"netlink\",\"millenium-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":3,\"openPortCount\":5,\"requiredHackingSkill\":354,\"serverGrowth\":1,\"runningScripts\":[]}},\"avmnite-02h\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"avmnite-02h\",\"httpPortOpen\":true,\"ip\":\"59.4.9.8\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"NiteSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"phantasy\",\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":2,\"openPortCount\":5,\"requiredHackingSkill\":218,\"serverGrowth\":1,\"runningScripts\":[]}},\".\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\".\",\"httpPortOpen\":true,\"ip\":\"9.2.5.8\",\"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\":[\"stormtech\",\"powerhouse-fitness\"],\"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\":4,\"openPortCount\":5,\"requiredHackingSkill\":505,\"serverGrowth\":1,\"runningScripts\":[]}},\"CSEC\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"CSEC\",\"httpPortOpen\":true,\"ip\":\"56.2.6.9\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"CyberSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"hong-fang-tea\",\"neo-net\",\"phantasy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":1,\"openPortCount\":5,\"requiredHackingSkill\":59,\"serverGrowth\":1,\"runningScripts\":[]}},\"The-Cave\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"The-Cave\",\"httpPortOpen\":true,\"ip\":\"85.2.8.2\",\"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\":\"70.5.3.3\",\"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\":\"94.5.5.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\":\"40.7.2.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9436063367974,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18099999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11789.410000007829,\"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\":\"10.3.6.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9436063367974,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18099999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11784.21000000781,\"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\":\"46.5.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.94641972447215,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.182,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11783.210000007806,\"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\":\"7.4.5.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.94641972447226,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.182,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11782.210000007803,\"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\":\"29.2.9.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.94923311214706,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.183,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11781.210000007799,\"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\":\"62.4.2.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.949233112147,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.183,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11774.210000007773,\"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\":\"62.5.4.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9520464998219,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.184,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11769.210000007755,\"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\":\"17.9.0.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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9520464998219,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.184,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11767.210000007748,\"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\":\"60.5.4.9\",\"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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.95485988749675,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.185,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11762.01000000773,\"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\":\"65.8.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.95485988749675,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.185,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11759.010000007718,\"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\":\"89.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9576732751715,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18599999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11754.0100000077,\"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\":\"11.6.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9576732751716,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18599999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11751.010000007689,\"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\":\"63.5.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9576732751715,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18599999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11746.01000000767,\"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\":\"40.6.2.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.96048666284634,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18699999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11745.010000007667,\"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\":\"1.5.2.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.96048666284634,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.18699999999998,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11739.810000007648,\"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\":\"50.5.2.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9633000505212,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.188,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11734.81000000763,\"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\":\"74.2.6.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9633000505212,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.188,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11733.810000007627,\"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\":\"87.1.0.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.966113438196,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.189,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11729.810000007612,\"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\":\"75.4.9.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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.966113438196,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.189,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11724.810000007594,\"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\":\"76.7.5.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.966113438196,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.189,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11723.81000000759,\"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\":\"50.1.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9689268258708,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.19,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11722.810000007586,\"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\":\"41.6.6.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9689268258708,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.19,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11721.610000007582,\"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\":\"87.6.9.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9689268258708,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.19,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11720.610000007578,\"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\":\"93.7.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.97174021354573,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.191,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11719.610000007575,\"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\":\"53.3.6.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-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\":{\"foodnstuff\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,30,0],\"max-hardware\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"hong-fang-tea\":[0,0,30,0],\"zer0\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,30,0],\"millenium-fitness\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"neo-net\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"summit-uni\":[0,0,10,0],\"iron-gym\":[0,0,10,0],\"omnia\":[0,0,10,0],\"univ-energy\":[0,0,10,0],\"solaris\":[0,0,10,0],\"global-pharm\":[0,0,10,0],\"unitalife\":[0,0,10,0],\"aevum-police\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"lexo-corp\":[0,0,10,0],\"fulcrumtech\":[0,0,10,0],\"omnitek\":[0,0,10,0],\"powerhouse-fitness\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"blade\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":475.9717402135457,\"offlineMoneyMade\":0,\"offlineRunningTime\":169.191,\"onlineExpGained\":85503.29362881354,\"onlineMoneyMade\":0,\"onlineRunningTime\":11718.610000007571,\"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\":190.6051,\"isBanned\":false,\"isMember\":true,\"playerReputation\":89791.4208457767}},\"The Black Hand\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":134.83,\"isBanned\":false,\"isMember\":true,\"playerReputation\":6181.072281398142}},\"NiteSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":143.4626,\"isBanned\":false,\"isMember\":true,\"playerReputation\":6481.428555565959}},\"Aevum\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":108.3609,\"isBanned\":false,\"isMember\":true,\"playerReputation\":5789.9608593326575}},\"Chongqing\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":78.838,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"Ishima\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":21.9587,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"New Tokyo\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":20.0596,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"Sector-12\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":111.1884,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Volhaven\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":30.7334,\"isBanned\":true,\"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\":92.4609,\"isBanned\":false,\"isMember\":true,\"playerReputation\":5345.998773600013}},\"Tian Di Hui\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":72.583,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"CyberSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":92.5419,\"isBanned\":false,\"isMember\":true,\"playerReputation\":5177.2402827357755}},\"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\":16243.814361846358,\"lastPrice\":16287.313210675231,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.46,\"b\":false,\"otlkMag\":20.33403902518459,\"otlkMagForecast\":29.179022400544813,\"cap\":498955683,\"spreadPerc\":0.5,\"shareTxForMovement\":36731,\"shareTxUntilMovement\":36731,\"totalShares\":110900000,\"maxShares\":22200000}},\"MegaCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"MegaCorp\",\"symbol\":\"MGCP\",\"price\":16665.758581094404,\"lastPrice\":16624.144560591358,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.43,\"b\":true,\"otlkMag\":21.67252700404603,\"otlkMagForecast\":69.56539273751946,\"cap\":503633286,\"spreadPerc\":0.3,\"shareTxForMovement\":74903,\"shareTxUntilMovement\":74903,\"totalShares\":75300000,\"maxShares\":15100000}},\"Blade Industries\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Blade Industries\",\"symbol\":\"BLD\",\"price\":46079.883388330694,\"lastPrice\":46289.12010116158,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.78,\"b\":true,\"otlkMag\":14.174047145785568,\"otlkMagForecast\":62.96212913402399,\"cap\":373302434,\"spreadPerc\":0.5,\"shareTxForMovement\":46606,\"shareTxUntilMovement\":46606,\"totalShares\":69800000,\"maxShares\":14000000}},\"Clarke Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Clarke Incorporated\",\"symbol\":\"CLRK\",\"price\":30922.724218586092,\"lastPrice\":30795.439382372853,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.71,\"b\":true,\"otlkMag\":10.90911366392425,\"otlkMagForecast\":60.68933438054123,\"cap\":46447073,\"spreadPerc\":0.1,\"shareTxForMovement\":84460,\"shareTxUntilMovement\":84460,\"totalShares\":84500000,\"maxShares\":16900000}},\"OmniTek Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"OmniTek Incorporated\",\"symbol\":\"OMTK\",\"price\":52393.87695261007,\"lastPrice\":52579.932355157995,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.61,\"b\":false,\"otlkMag\":12.793368625882724,\"otlkMagForecast\":36.98922400283017,\"cap\":208948883,\"spreadPerc\":0.4,\"shareTxForMovement\":82003,\"shareTxUntilMovement\":82003,\"totalShares\":50200000,\"maxShares\":10000000}},\"Four Sigma\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Four Sigma\",\"symbol\":\"FSIG\",\"price\":143804.68654962818,\"lastPrice\":142931.01600413484,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.05,\"b\":true,\"otlkMag\":15.883275671630578,\"otlkMagForecast\":65.71802319174054,\"cap\":1227300049,\"spreadPerc\":1,\"shareTxForMovement\":70368,\"shareTxUntilMovement\":70368,\"totalShares\":34800000,\"maxShares\":7000000}},\"KuaiGong International\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"KuaiGong International\",\"symbol\":\"KGI\",\"price\":35731.44700956145,\"lastPrice\":35563.750321363645,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.81,\"b\":true,\"otlkMag\":11.05579060093976,\"otlkMagForecast\":61.1589382169315,\"cap\":255279765,\"spreadPerc\":0.1,\"shareTxForMovement\":85924,\"shareTxUntilMovement\":85924,\"totalShares\":100200000,\"maxShares\":20000000}},\"Fulcrum Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Fulcrum Technologies\",\"symbol\":\"FLCM\",\"price\":32083.42357808555,\"lastPrice\":31849.804006200768,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.26,\"b\":false,\"otlkMag\":13.550737277017554,\"otlkMagForecast\":33.86259335739582,\"cap\":481622648,\"spreadPerc\":0.2,\"shareTxForMovement\":57802,\"shareTxUntilMovement\":57802,\"totalShares\":68200000,\"maxShares\":13600000}},\"Storm Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Storm Technologies\",\"symbol\":\"STM\",\"price\":14989.020927244603,\"lastPrice\":15066.680533994626,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.89,\"b\":false,\"otlkMag\":7.377974031950427,\"otlkMagForecast\":43.368980468304926,\"cap\":257118836,\"spreadPerc\":0.5,\"shareTxForMovement\":103577,\"shareTxUntilMovement\":103577,\"totalShares\":54700000,\"maxShares\":10900000}},\"DefComm\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"DefComm\",\"symbol\":\"DCOMM\",\"price\":8521.697841220637,\"lastPrice\":8552.951336548424,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.63,\"b\":false,\"otlkMag\":8.881298163095718,\"otlkMagForecast\":40.89250811690967,\"cap\":86068414,\"spreadPerc\":0.9,\"shareTxForMovement\":46220,\"shareTxUntilMovement\":46220,\"totalShares\":75900000,\"maxShares\":15200000}},\"Helios Labs\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Helios Labs\",\"symbol\":\"HLS\",\"price\":14011.094845300502,\"lastPrice\":13964.756540829258,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.57,\"b\":true,\"otlkMag\":9.021094918361317,\"otlkMagForecast\":58.39418465446139,\"cap\":146763957,\"spreadPerc\":0.8,\"shareTxForMovement\":67337,\"shareTxUntilMovement\":67337,\"totalShares\":79600000,\"maxShares\":15900000}},\"VitaLife\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"VitaLife\",\"symbol\":\"VITA\",\"price\":9953.768905749588,\"lastPrice\":9998.386915416033,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.77,\"b\":false,\"otlkMag\":8.31779660217226,\"otlkMagForecast\":44.090926291120816,\"cap\":83879365,\"spreadPerc\":0.5,\"shareTxForMovement\":53922,\"shareTxUntilMovement\":53922,\"totalShares\":118500000,\"maxShares\":23700000}},\"Icarus Microsystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Icarus Microsystems\",\"symbol\":\"ICRS\",\"price\":12730.442217087699,\"lastPrice\":12683.923676212547,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.63,\"b\":true,\"otlkMag\":8.404096363962282,\"otlkMagForecast\":57.27391138354785,\"cap\":189453945,\"spreadPerc\":0.4,\"shareTxForMovement\":63505,\"shareTxUntilMovement\":63505,\"totalShares\":56300000,\"maxShares\":11300000}},\"Universal Energy\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Universal Energy\",\"symbol\":\"UNV\",\"price\":20954.289930499188,\"lastPrice\":21026.26082074786,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.59,\"b\":false,\"otlkMag\":9.54013328246662,\"otlkMagForecast\":39.001546704167644,\"cap\":465242626,\"spreadPerc\":0.9,\"shareTxForMovement\":49698,\"shareTxUntilMovement\":49698,\"totalShares\":43100000,\"maxShares\":8600000}},\"AeroCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"AeroCorp\",\"symbol\":\"AERO\",\"price\":12305.796861086861,\"lastPrice\":12259.407887219499,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.65,\"b\":true,\"otlkMag\":4.14813938417901,\"otlkMagForecast\":54.8577418295372,\"cap\":74787258,\"spreadPerc\":0.7,\"shareTxForMovement\":116997,\"shareTxUntilMovement\":116997,\"totalShares\":62400000,\"maxShares\":12500000}},\"Omnia Cybersystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omnia Cybersystems\",\"symbol\":\"OMN\",\"price\":3330.554867927783,\"lastPrice\":3317.0378657514366,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.7,\"b\":false,\"otlkMag\":5.763893213764565,\"otlkMagForecast\":45.264648329584645,\"cap\":21580377,\"spreadPerc\":0.9,\"shareTxForMovement\":87625,\"shareTxUntilMovement\":87625,\"totalShares\":92400000,\"maxShares\":18500000}},\"Solaris Space Systems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Solaris Space Systems\",\"symbol\":\"SLRS\",\"price\":28522.592671304094,\"lastPrice\":28648.785450929758,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.76,\"b\":false,\"otlkMag\":8.942301692659377,\"otlkMagForecast\":41.18288453129676,\"cap\":303766197,\"spreadPerc\":0.4,\"shareTxForMovement\":68765,\"shareTxUntilMovement\":68765,\"totalShares\":47900000,\"maxShares\":9600000}},\"Global Pharmaceuticals\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Global Pharmaceuticals\",\"symbol\":\"GPH\",\"price\":24190.01541451764,\"lastPrice\":24098.826684069503,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.65,\"b\":false,\"otlkMag\":9.510798395209077,\"otlkMagForecast\":39.019886090445745,\"cap\":480212347,\"spreadPerc\":0.7,\"shareTxForMovement\":110866,\"shareTxUntilMovement\":110866,\"totalShares\":29800000,\"maxShares\":6000000}},\"Nova Medical\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Nova Medical\",\"symbol\":\"NVMD\",\"price\":15460.880187899964,\"lastPrice\":15530.183956975514,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.77,\"b\":false,\"otlkMag\":6.995781033730263,\"otlkMagForecast\":44.49156409693393,\"cap\":217049375,\"spreadPerc\":0.5,\"shareTxForMovement\":93621,\"shareTxUntilMovement\":93621,\"totalShares\":35000000,\"maxShares\":7000000}},\"Watchdog Security\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Watchdog Security\",\"symbol\":\"WDS\",\"price\":2415.6885228701176,\"lastPrice\":2381.9925050874917,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.43,\"b\":true,\"otlkMag\":5.97421873689262,\"otlkMagForecast\":55.40283469964275,\"cap\":96845769,\"spreadPerc\":1,\"shareTxForMovement\":36033,\"shareTxUntilMovement\":36033,\"totalShares\":84600000,\"maxShares\":16900000}},\"LexoCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"LexoCorp\",\"symbol\":\"LXO\",\"price\":9469.966641926356,\"lastPrice\":9541.083092682169,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.29,\"b\":false,\"otlkMag\":7.190174730544241,\"otlkMagForecast\":44.54146372617938,\"cap\":106160065,\"spreadPerc\":0.9,\"shareTxForMovement\":107288,\"shareTxUntilMovement\":107288,\"totalShares\":66400000,\"maxShares\":13300000}},\"Rho Construction\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Rho Construction\",\"symbol\":\"RHOC\",\"price\":3086.286047235131,\"lastPrice\":3098.683063775162,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.69,\"b\":false,\"otlkMag\":2.125920055483289,\"otlkMagForecast\":52.038007131175874,\"cap\":35522999,\"spreadPerc\":0.9,\"shareTxForMovement\":71603,\"shareTxUntilMovement\":71603,\"totalShares\":57600000,\"maxShares\":11500000}},\"Alpha Enterprises\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Alpha Enterprises\",\"symbol\":\"APHE\",\"price\":17354.878030236516,\"lastPrice\":17538.753954286203,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.82,\"b\":false,\"otlkMag\":7.05086110079169,\"otlkMagForecast\":41.40287413485554,\"cap\":92920075,\"spreadPerc\":1,\"shareTxForMovement\":70588,\"shareTxUntilMovement\":70588,\"totalShares\":33100000,\"maxShares\":6600000}},\"SysCore Securities\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"SysCore Securities\",\"symbol\":\"SYSC\",\"price\":6528.4645023100775,\"lastPrice\":6587.3725540585765,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.55,\"b\":false,\"otlkMag\":5.628644489074667,\"otlkMagForecast\":47.58609044955462,\"cap\":66186775,\"spreadPerc\":1.2,\"shareTxForMovement\":21777,\"shareTxUntilMovement\":21777,\"totalShares\":30200000,\"maxShares\":6000000}},\"CompuTek\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"CompuTek\",\"symbol\":\"CTK\",\"price\":5349.532781502212,\"lastPrice\":5322.267418845257,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.88,\"b\":true,\"otlkMag\":6.557282461074448,\"otlkMagForecast\":56.82001039132307,\"cap\":90372039,\"spreadPerc\":0.5,\"shareTxForMovement\":114111,\"shareTxUntilMovement\":114111,\"totalShares\":40300000,\"maxShares\":8100000}},\"NetLink Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"NetLink Technologies\",\"symbol\":\"NTLK\",\"price\":17576.35298330655,\"lastPrice\":17260.835537813135,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":3.14,\"b\":false,\"otlkMag\":11.767121502311664,\"otlkMagForecast\":35.04116616000924,\"cap\":111125289,\"spreadPerc\":1.6,\"shareTxForMovement\":33423,\"shareTxUntilMovement\":33423,\"totalShares\":11800000,\"maxShares\":2400000}},\"Omega Software\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omega Software\",\"symbol\":\"OMGA\",\"price\":3625.2859866031986,\"lastPrice\":3645.7573100883783,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.97,\"b\":false,\"otlkMag\":1.9395331298031526,\"otlkMagForecast\":48.69693457087617,\"cap\":18893733,\"spreadPerc\":1.1,\"shareTxForMovement\":73556,\"shareTxUntilMovement\":73556,\"totalShares\":17500000,\"maxShares\":3500000}},\"FoodNStuff\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"FoodNStuff\",\"symbol\":\"FNS\",\"price\":2932.509419122731,\"lastPrice\":2944.459459431197,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.7,\"b\":true,\"otlkMag\":4.482378997180263,\"otlkMagForecast\":50.23412292885345,\"cap\":57118023,\"spreadPerc\":0.8,\"shareTxForMovement\":161211,\"shareTxUntilMovement\":161211,\"totalShares\":11800000,\"maxShares\":2400000}},\"Sigma Cosmetics\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Sigma Cosmetics\",\"symbol\":\"SGC\",\"price\":2884.5801237128244,\"lastPrice\":2918.668833105232,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.03,\"b\":true,\"otlkMag\":12.95205438555526,\"otlkMagForecast\":56.21017768262656,\"cap\":36353159,\"spreadPerc\":1.2,\"shareTxForMovement\":40450,\"shareTxUntilMovement\":40450,\"totalShares\":9500000,\"maxShares\":1900000}},\"Joe's Guns\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Joe's Guns\",\"symbol\":\"JGN\",\"price\":921.7819758796118,\"lastPrice\":906.9458808304842,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.81,\"b\":true,\"otlkMag\":1.98398416746183,\"otlkMagForecast\":49.35993095480515,\"cap\":19994226,\"spreadPerc\":0.9,\"shareTxForMovement\":28960,\"shareTxUntilMovement\":28960,\"totalShares\":48800000,\"maxShares\":9800000}},\"Catalyst Ventures\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Catalyst Ventures\",\"symbol\":\"CTYS\",\"price\":858.3072393194101,\"lastPrice\":865.4523790696113,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.43,\"b\":false,\"otlkMag\":16.886861296776686,\"otlkMagForecast\":33.35036875444233,\"cap\":33762563,\"spreadPerc\":1.1,\"shareTxForMovement\":65158,\"shareTxUntilMovement\":65158,\"totalShares\":69000000,\"maxShares\":13800000}},\"Microdyne Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Microdyne Technologies\",\"symbol\":\"MDYN\",\"price\":33084.60284679747,\"lastPrice\":33225.201350967116,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.73,\"b\":true,\"otlkMag\":7.486926878412589,\"otlkMagForecast\":58.867818726694445,\"cap\":604657827,\"spreadPerc\":0.7,\"shareTxForMovement\":211821,\"shareTxUntilMovement\":211821,\"totalShares\":12100000,\"maxShares\":2400000}},\"Titan Laboratories\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Titan Laboratories\",\"symbol\":\"TITN\",\"price\":20783.096606291627,\"lastPrice\":20715.563505177557,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.56,\"b\":true,\"otlkMag\":11.5787206344276,\"otlkMagForecast\":60.095982976810944,\"cap\":371390560,\"spreadPerc\":0.5,\"shareTxForMovement\":169347,\"shareTxUntilMovement\":169347,\"totalShares\":20400000,\"maxShares\":4100000}},\"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\":26,\"lastUpdate\":1693826583009,\"ticksUntilCycle\":27}","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":"1693826588388","StaneksGiftSave":"{\"ctor\":\"StaneksGift\",\"data\":{\"fragments\":[],\"isBonusCharging\":false,\"storedCycles\":0}}"}}