push
This commit is contained in:
1 parent
435add26de
commit
b7197c909c
10 files changed
+442
-119
No files matched your search
@@ -73,6 +73,8 @@
|
||||
"sml": "cd $dir && sml $fileName"
|
||||
},
|
||||
"cSpell.words": [
|
||||
"augumentation",
|
||||
"Augumentations",
|
||||
"avmnite",
|
||||
"brutessh",
|
||||
"CSEC",
|
||||
|
||||
+345
@@ -0,0 +1,345 @@
|
||||
import { EXPLOITS, DARKWEB_EXPLOITS } from "./constants.js";
|
||||
|
||||
/**
|
||||
* remove write log ✓
|
||||
* loop
|
||||
* get all servers
|
||||
* nuke if possible
|
||||
* send scripts hack, grow weaken
|
||||
* backdoor factions
|
||||
* buy grow servers
|
||||
* start helpers if not running include home //remove from hacknet
|
||||
* grow if needed
|
||||
* weaken if needed
|
||||
* hack if no grow or weaken
|
||||
* do simple hack
|
||||
* check if money available
|
||||
* check threads
|
||||
* run hack
|
||||
* run grow to recover
|
||||
* run weaken if security too high
|
||||
* buy hack tools
|
||||
*/
|
||||
|
||||
/** @param {import("./index.js").NS } ns */
|
||||
export async function main(ns) {
|
||||
ns.disableLog('ALL');
|
||||
const doc = eval('document');
|
||||
|
||||
const serverCostThreshold = 0.2;
|
||||
const serverMaxRAM = 128;
|
||||
const nodeCostThreshold = 0.2;
|
||||
const upgradeCostThreshold = 0.1;
|
||||
const upgradeCount = 1;
|
||||
const nodeCap = 24;
|
||||
const levelCap = 200;
|
||||
const ramCap = 64;
|
||||
const coreCap = 16;
|
||||
|
||||
let factionProgress;
|
||||
|
||||
|
||||
if (ns.fileExists('@factionProgress.script')) {
|
||||
factionProgress = JSON.parse(ns.read('@factionProgress.script'));
|
||||
} else {
|
||||
// factionProgress =
|
||||
updateFactionProgress();
|
||||
}
|
||||
|
||||
ns.singularity.getAugmentationsFromFaction(faction);
|
||||
|
||||
|
||||
const currentMoney = function () { return ns.getServerMoneyAvailable("home"); };
|
||||
const currentHacking = function () { return ns.getHackingLevel(); };
|
||||
|
||||
function updateFactionProgress() {
|
||||
ns.write('@factionProgress.script', JSON.stringify(factionProgress), 'w');
|
||||
}
|
||||
|
||||
function terminalCommand(command) {
|
||||
const terminalInput = doc.getElementById("terminal-input");
|
||||
if (terminalInput != null && terminalInput != undefined) {
|
||||
const handler = Object.keys(terminalInput)[1];
|
||||
terminalInput.value = command;
|
||||
terminalInput[handler].onChange({ target: terminalInput });
|
||||
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
|
||||
}
|
||||
}
|
||||
|
||||
function maxPortsToHack() {
|
||||
let maxPorts = 0;
|
||||
EXPLOITS.forEach(exploit => {
|
||||
if (ns.fileExists(exploit.name)) ++maxPorts;
|
||||
});
|
||||
// ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);
|
||||
return maxPorts;
|
||||
}
|
||||
|
||||
function analyzeServer(server) {
|
||||
let requiredHacking = ns.getServerRequiredHackingLevel(server);
|
||||
let requiredPorts = ns.getServerNumPortsRequired(server);
|
||||
|
||||
return {
|
||||
name: server,
|
||||
rootAccess: ns.hasRootAccess(server),
|
||||
requiredHacking: requiredHacking,
|
||||
requiredPorts: requiredPorts,
|
||||
nukeAvailable: (currentHacking() >= requiredHacking && maxPortsToHack() >= requiredPorts),
|
||||
currentMoney: ns.getServerMoneyAvailable(server),
|
||||
maxMoney: ns.getServerMaxMoney(server),
|
||||
currentSecurity: ns.getServerSecurityLevel(server),
|
||||
minSecurity: ns.getServerMinSecurityLevel(server),
|
||||
RAM: ns.getServerMaxRam(server),
|
||||
};
|
||||
}
|
||||
|
||||
function scanServer(currentServer, previousServer = currentServer, network = []) {
|
||||
let availableServers = ns.scan(currentServer);
|
||||
network.push(analyzeServer(currentServer));
|
||||
|
||||
for (let i = 0; i < availableServers.length; ++i) {
|
||||
let nextServer = availableServers[i];
|
||||
|
||||
if (nextServer != currentServer && nextServer != previousServer) {
|
||||
scanServer(nextServer, currentServer, network);
|
||||
}
|
||||
}
|
||||
return network;
|
||||
}
|
||||
|
||||
function numberToUnits(number) {
|
||||
let numberString = Math.floor(number);
|
||||
if (Math.abs(number) / 1000 >= 1) {
|
||||
numberString = Math.floor(number / 1000) + 'k';
|
||||
}
|
||||
if (Math.abs(number) / 1000000 >= 1) {
|
||||
numberString = Math.floor(number / 1000000) + 'm';
|
||||
}
|
||||
if (Math.abs(number) / 1000000000 >= 1) {
|
||||
numberString = Math.floor(number / 1000000000) + 'b';
|
||||
}
|
||||
if (Math.abs(number) / 1000000000000 >= 1) {
|
||||
numberString = Math.floor(number / 1000000000000) + 't';
|
||||
}
|
||||
|
||||
return numberString;
|
||||
}
|
||||
|
||||
// if new game, buy TOR router, start hack course
|
||||
if (currentHacking() == 1) {
|
||||
|
||||
}
|
||||
|
||||
let prevMaxMoneyHost = '';
|
||||
ns.write('$autoHack.js', '', 'w');
|
||||
let lastMoney = ns.getServerMoneyAvailable('home');
|
||||
let lastTime = Date.now();
|
||||
const firstMoney = ns.getServerMoneyAvailable('home');
|
||||
const firstTime = Date.now();
|
||||
|
||||
while (true) {
|
||||
//
|
||||
// Money stats
|
||||
//
|
||||
const moneyDiff = currentMoney() - lastMoney;
|
||||
const currentTime = Date.now();
|
||||
const timeDiff = (currentTime - lastTime) / 1000;
|
||||
const moneyPerSecond = moneyDiff / timeDiff;
|
||||
const moneyDiffLife = currentMoney() - firstMoney;
|
||||
const timeDiffLife = (currentTime - firstTime) / 1000;
|
||||
const moneyPerSecondLife = moneyDiffLife / timeDiffLife;
|
||||
const moneyString = `${numberToUnits(Math.floor(moneyPerSecond))} | ${numberToUnits(Math.floor(moneyPerSecondLife))} $/s`;
|
||||
ns.print(`${lastMoney} ${currentMoney()} ${moneyDiff} ${numberToUnits(Math.floor(moneyPerSecondLife))}\n ${currentTime} ${currentTime} ${timeDiff}`);
|
||||
doc.querySelector("#root > div.react-draggable > div.drag.MuiBox-root > div > p").innerText = moneyString;
|
||||
ns.write('$moneyStats.js', moneyString + '\n', 'a');
|
||||
lastMoney = currentMoney();
|
||||
lastTime = currentTime;
|
||||
|
||||
//
|
||||
// Factions
|
||||
//
|
||||
|
||||
//
|
||||
// Programs
|
||||
//
|
||||
if (ns.singularity.purchaseTor()) {
|
||||
ns.singularity.purchaseProgram('BruteSSH.exe');
|
||||
ns.singularity.purchaseProgram('FTPCrack.exe');
|
||||
ns.singularity.purchaseProgram('relaySMTP.exe');
|
||||
ns.singularity.purchaseProgram('HTTPWorm.exe');
|
||||
ns.singularity.purchaseProgram('SQLInject.exe');
|
||||
}
|
||||
|
||||
//
|
||||
// Hacknet
|
||||
//
|
||||
let nodeCount = ns.hacknet.numNodes();
|
||||
|
||||
if (nodeCount < nodeCap && ns.hacknet.getPurchaseNodeCost() < nodeCostThreshold * currentMoney()) {
|
||||
ns.hacknet.purchaseNode();
|
||||
nodeCount = ns.hacknet.numNodes();
|
||||
}
|
||||
|
||||
for (let index = 0; index < nodeCount; ++index) {
|
||||
let nodeStats = ns.hacknet.getNodeStats(index);
|
||||
|
||||
if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) < upgradeCostThreshold * currentMoney()) {
|
||||
ns.hacknet.upgradeLevel(index, upgradeCount);
|
||||
}
|
||||
|
||||
if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) < upgradeCostThreshold * currentMoney()) {
|
||||
ns.hacknet.upgradeRam(index, upgradeCount);
|
||||
}
|
||||
|
||||
if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) < upgradeCostThreshold * currentMoney()) {
|
||||
ns.hacknet.upgradeCore(index, upgradeCount);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Buy more servers
|
||||
//
|
||||
let serverRAM = 8;
|
||||
if (ns.getPurchasedServerCost(serverRAM) < ns.getServerMoneyAvailable('home') * serverCostThreshold) {
|
||||
ns.purchaseServer('home', serverRAM);
|
||||
}
|
||||
|
||||
//
|
||||
// Upgrade RAM
|
||||
//
|
||||
for (const server of ns.getPurchasedServers()) {
|
||||
const serverStats = analyzeServer(server);
|
||||
if (serverStats.RAM < serverMaxRAM) {
|
||||
if (ns.getPurchasedServerUpgradeCost(serverStats.name, serverStats.RAM * 2) < ns.getServerMoneyAvailable('home') * upgradeCostThreshold) {
|
||||
ns.upgradePurchasedServer(serverStats.name, serverStats.RAM * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Analyze all available hosts
|
||||
//
|
||||
let network = scanServer('home');
|
||||
network.sort((a, b) => b.maxMoney - a.maxMoney);
|
||||
|
||||
//
|
||||
// NUKE if possible
|
||||
//
|
||||
for (let host of network) {
|
||||
ns.scp(['grow.js', 'weaken.js', 'hack.js'], host.name, 'home');
|
||||
if (!host.rootAccess && host.nukeAvailable) {
|
||||
for (const exploit of EXPLOITS) {
|
||||
if (ns.fileExists(exploit.name)) eval(`${exploit.function}('${host.name}')`);
|
||||
}
|
||||
ns.nuke(host.name);
|
||||
host = analyzeServer(host.name);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Backdoor factions
|
||||
//
|
||||
|
||||
// TODO: convert to global RAM usage, steal 50%, regrow, weaken
|
||||
|
||||
//
|
||||
// Hack servers
|
||||
//
|
||||
for (let i = 0; i < network.length; i++) {
|
||||
const moneyHost = network[i];
|
||||
if (moneyHost.maxMoney > 0) {
|
||||
let securityDecrease = 0;
|
||||
let weakenThreads = 0;
|
||||
|
||||
while (moneyHost.currentSecurity - securityDecrease > moneyHost.minSecurity) {
|
||||
securityDecrease = ns.weakenAnalyze(++weakenThreads);
|
||||
}
|
||||
|
||||
ns.growthAnalyze(moneyHost.name, 2);
|
||||
ns.hackAnalyze(moneyHost.name);
|
||||
|
||||
for (const host of network) {
|
||||
if (!ns.scriptRunning('grow.js', host.name) && !ns.scriptRunning('weaken.js', host.name) && !ns.scriptRunning('hack.js', host.name) && host.rootAccess && host.RAM > 0) {
|
||||
const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name);
|
||||
const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// const host = network[i];
|
||||
// if (!ns.scriptRunning('grow.js', host.name) && !ns.scriptRunning('weaken.js', host.name) && !ns.scriptRunning('hack.js', host.name) && host.rootAccess && host.RAM > 0) {
|
||||
// if (host.name != 'home' && host.currentMoney > 0) {
|
||||
// const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name);
|
||||
// const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
// const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
// const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
// const hackTime = ns.getHackTime(host.name);
|
||||
// const growTime = ns.getGrowTime(host.name);
|
||||
// const weakenTime = ns.getWeakenTime(host.name);
|
||||
// const hackWait = hackTime <= growTime ? growTime - hackTime + 50 : 0;
|
||||
// const hackAnalyze = ns.hackAnalyze(host.name);
|
||||
// const growThreadsNeededPerHack = Math.ceil(ns.growthAnalyze(host.name, 1 + hackAnalyze));
|
||||
|
||||
// let hackThreads = Math.floor(freeRAM / (hackRAM + growRAM * growThreadsNeededPerHack));
|
||||
// hackThreads = hackThreads == 0 ? 1 : hackThreads;
|
||||
// const growThreads = Math.floor((freeRAM - hackThreads * hackRAM) / growRAM);
|
||||
// const growLoops = Math.ceil(growThreadsNeededPerHack / growThreads);
|
||||
// const weakenThreads = Math.floor(freeRAM / weakenRAM);
|
||||
// const log = `host:${host.name} target:${host.name} | security:${(host.currentSecurity / host.minSecurity * 100).toFixed(0)}% | money:${(host.currentMoney / host.maxMoney * 100).toFixed(0)}% | hThreads:${hackThreads} hTime:${((growTime * (growLoops - 1) + hackWait + hackTime) / 60000).toFixed(2)}m | gThreads:${growThreads} gLoops:${growLoops} gTime:${(growTime * growLoops / 60000).toFixed(2)}m`;
|
||||
// ns.print(log);
|
||||
// ns.write('$autoHack.js', log + '\n', 'a');
|
||||
|
||||
// if (host.currentSecurity / host.minSecurity > 2) {
|
||||
// if (weakenThreads > 0) {
|
||||
// ns.exec('weaken.js', host.name, weakenThreads, host.name);
|
||||
// }
|
||||
// } else {
|
||||
// ns.exec('grow.js', host.name, growThreads, host.name, growLoops);
|
||||
// ns.exec('hack.js', host.name, hackThreads, host.name, growTime * (growLoops - 1) + hackWait);
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name) - (host.name == 'home' ? 1.8 : 0);
|
||||
// const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
// const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
// const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
// const hackTime = ns.getHackTime(maxMoneyHost.name);
|
||||
// const growTime = ns.getGrowTime(maxMoneyHost.name);
|
||||
// const weakenTime = ns.getWeakenTime(maxMoneyHost.name);
|
||||
// const hackWait = hackTime <= growTime ? growTime - hackTime + 50 : 0;
|
||||
// const hackAnalyze = ns.hackAnalyze(maxMoneyHost.name);
|
||||
// const growThreadsNeededPerHack = Math.ceil(ns.growthAnalyze(maxMoneyHost.name, 1 + hackAnalyze));
|
||||
|
||||
// let hackThreads = Math.floor(freeRAM / (hackRAM + growRAM * growThreadsNeededPerHack));
|
||||
// hackThreads = hackThreads == 0 ? 1 : hackThreads;
|
||||
// const growThreads = Math.floor((freeRAM - hackThreads * hackRAM) / growRAM);
|
||||
// // ns.tprint(`Math.floor((${freeRAM} - ${hackThreads} * ${hackRAM}) / ${growRAM}) = ${growThreads}`);
|
||||
// const growLoops = Math.ceil(growThreadsNeededPerHack / growThreads);
|
||||
// const weakenThreads = Math.floor(freeRAM / weakenRAM);
|
||||
// const log = `host:${host.name} target:${maxMoneyHost.name} | security:${(maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity * 100).toFixed(0)}% | money:${(maxMoneyHost.currentMoney / maxMoneyHost.maxMoney * 100).toFixed(0)}% | hThreads:${hackThreads} hTime:${((growTime * (growLoops - 1) + hackWait + hackTime) / 60000).toFixed(2)}m | gThreads:${growThreads} gLoops:${growLoops} gTime:${(growTime * growLoops / 60000).toFixed(2)}m`; // | wThreads:${weakenThreads} wTime:${(weakenTime / 60000).toFixed(2)}m`;
|
||||
// ns.print(log);
|
||||
// ns.write('$autoHackMax.js', log + '\n', 'a');
|
||||
|
||||
// // ns.tprint(`${maxMoneyHost.currentSecurity} / ${maxMoneyHost.minSecurity} > 5 = ${maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity > 5}`)
|
||||
// if (maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity > 5) {
|
||||
// if (weakenThreads > 0) {
|
||||
// ns.exec('weaken.js', host.name, weakenThreads, maxMoneyHost.name);
|
||||
// }
|
||||
// } else {
|
||||
// if (maxMoneyHost.currentMoney / maxMoneyHost.maxMoney < 0.2) {
|
||||
// ns.exec('grow.js', host.name, Math.floor(freeRAM / growRAM), maxMoneyHost.name);
|
||||
// } else {
|
||||
// ns.exec('grow.js', host.name, growThreads, maxMoneyHost.name, growLoops);
|
||||
// ns.exec('hack.js', host.name, hackThreads, maxMoneyHost.name, growTime * (growLoops - 1) + hackWait);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// Sleep before next loop
|
||||
await ns.sleep(1000);
|
||||
}
|
||||
}
|
||||
+67
-61
@@ -159,6 +159,7 @@ export async function main(ns) {
|
||||
|
||||
let buyCounter = 120;
|
||||
let prevMaxMoneyHost = '';
|
||||
ns.write('autoHack.txt', '', 'w');
|
||||
|
||||
while (true) {
|
||||
// Buy all available exploits
|
||||
@@ -174,10 +175,13 @@ export async function main(ns) {
|
||||
ns.purchaseServer('home', serverRAM);
|
||||
}
|
||||
|
||||
// Upgrade RAM
|
||||
for (const server of ns.getPurchasedServers()) {
|
||||
const serverStats = analyzeServer(server);
|
||||
if (ns.getPurchasedServerUpgradeCost(serverStats.name, serverStats.RAM * 2) < ns.getServerMoneyAvailable('home') * 0.2) {
|
||||
ns.upgradePurchasedServer(serverStats.name, serverStats.RAM * 2);
|
||||
if (serverStats.RAM < 128) {
|
||||
if (ns.getPurchasedServerUpgradeCost(serverStats.name, serverStats.RAM * 2) < ns.getServerMoneyAvailable('home') * 0.2) {
|
||||
ns.upgradePurchasedServer(serverStats.name, serverStats.RAM * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,75 +216,77 @@ export async function main(ns) {
|
||||
prevMaxMoneyHost = maxMoneyHost.name;
|
||||
}
|
||||
|
||||
// TODO: convert to global RAM usage
|
||||
// TODO: convert to global RAM usage, steal 50%, regrow, weaken
|
||||
|
||||
// Hack servers
|
||||
for (const host of network) {
|
||||
for (let i = 1; i < network.length; i++) {
|
||||
const host = network[i];
|
||||
if (!ns.scriptRunning('grow.js', host.name) && !ns.scriptRunning('weaken.js', host.name) && !ns.scriptRunning('hack.js', host.name) && host.rootAccess && host.RAM > 0) {
|
||||
// if (false) {//(host.name != 'home' && host.currentMoney > 0) {
|
||||
// const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name);
|
||||
// const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
// const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
// const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
// const hackTime = ns.getHackTime(host.name);
|
||||
// const growTime = ns.getGrowTime(host.name);
|
||||
// const weakenTime = ns.getWeakenTime(host.name);
|
||||
// const hackWait = hackTime <= growTime ? growTime - hackTime + 50 : 0;
|
||||
// const hackAnalyze = ns.hackAnalyze(host.name);
|
||||
// const growThreadsNeededPerHack = Math.ceil(ns.growthAnalyze(host.name, 1 + hackAnalyze));
|
||||
if (host.name != 'home' && host.currentMoney > 0) {
|
||||
const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name);
|
||||
const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
const hackTime = ns.getHackTime(host.name);
|
||||
const growTime = ns.getGrowTime(host.name);
|
||||
const weakenTime = ns.getWeakenTime(host.name);
|
||||
const hackWait = hackTime <= growTime ? growTime - hackTime + 50 : 0;
|
||||
const hackAnalyze = ns.hackAnalyze(host.name);
|
||||
const growThreadsNeededPerHack = Math.ceil(ns.growthAnalyze(host.name, 1 + hackAnalyze));
|
||||
|
||||
// let hackThreads = Math.floor(freeRAM / (hackRAM + growRAM * growThreadsNeededPerHack));
|
||||
// hackThreads = hackThreads == 0 ? 1 : hackThreads;
|
||||
// const growThreads = Math.floor((freeRAM - hackThreads * hackRAM) / growRAM);
|
||||
// const growLoops = Math.ceil(growThreadsNeededPerHack / growThreads);
|
||||
// const weakenThreads = Math.floor(freeRAM / weakenRAM);
|
||||
// const log = `host:${host.name} target:${maxMoneyHost.name} | security:${(maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity).toFixed(2)} | hThreads:${hackThreads} hTime:${(growTime * (growLoops - 1) + hackWait + hackTime / 60000).toFixed(2)}m | gThreads:${growThreads} gLoops:${growLoops} gTime:${(growTime * growLoops / 60000).toFixed(2)}m | wThreads:${weakenThreads} wTime:${(weakenTime / 60000).toFixed(2)}m`;
|
||||
// ns.print(log);
|
||||
// ns.write('autoHack.txt', log + '\n', 'a');
|
||||
let hackThreads = Math.floor(freeRAM / (hackRAM + growRAM * growThreadsNeededPerHack));
|
||||
hackThreads = hackThreads == 0 ? 1 : hackThreads;
|
||||
const growThreads = Math.floor((freeRAM - hackThreads * hackRAM) / growRAM);
|
||||
const growLoops = Math.ceil(growThreadsNeededPerHack / growThreads);
|
||||
const weakenThreads = Math.floor(freeRAM / weakenRAM);
|
||||
const log = `host:${host.name} target:${host.name} | security:${(host.currentSecurity / host.minSecurity * 100).toFixed(0)}% | money:${(host.currentMoney / host.maxMoney * 100).toFixed(0)}% | hThreads:${hackThreads} hTime:${((growTime * (growLoops - 1) + hackWait + hackTime) / 60000).toFixed(2)}m | gThreads:${growThreads} gLoops:${growLoops} gTime:${(growTime * growLoops / 60000).toFixed(2)}m`;
|
||||
ns.print(log);
|
||||
ns.write('autoHack.txt', log + '\n', 'a');
|
||||
|
||||
// if (host.currentSecurity / host.minSecurity > 2) {
|
||||
// if (weakenThreads > 0) {
|
||||
// ns.exec('weaken.js', host.name, weakenThreads, host.name);
|
||||
// }
|
||||
// } else {
|
||||
// ns.exec('grow.js', host.name, growThreads, host.name, growLoops);
|
||||
// ns.exec('hack.js', host.name, hackThreads, host.name, growTime * (growLoops - 1) + hackWait);
|
||||
// }
|
||||
// } else {
|
||||
const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name) - (host.name == 'home' ? 1.8 : 0);
|
||||
const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
const hackTime = ns.getHackTime(maxMoneyHost.name);
|
||||
const growTime = ns.getGrowTime(maxMoneyHost.name);
|
||||
const weakenTime = ns.getWeakenTime(maxMoneyHost.name);
|
||||
const hackWait = hackTime <= growTime ? growTime - hackTime + 50 : 0;
|
||||
const hackAnalyze = ns.hackAnalyze(maxMoneyHost.name);
|
||||
const growThreadsNeededPerHack = Math.ceil(ns.growthAnalyze(maxMoneyHost.name, 1 + hackAnalyze));
|
||||
|
||||
let hackThreads = Math.floor(freeRAM / (hackRAM + growRAM * growThreadsNeededPerHack));
|
||||
hackThreads = hackThreads == 0 ? 1 : hackThreads;
|
||||
const growThreads = Math.floor((freeRAM - hackThreads * hackRAM) / growRAM);
|
||||
// ns.tprint(`Math.floor((${freeRAM} - ${hackThreads} * ${hackRAM}) / ${growRAM}) = ${growThreads}`);
|
||||
const growLoops = Math.ceil(growThreadsNeededPerHack / growThreads);
|
||||
const weakenThreads = Math.floor(freeRAM / weakenRAM);
|
||||
const log = `host:${host.name} target:${maxMoneyHost.name} | security:${(maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity).toFixed(2)}% | money:${(maxMoneyHost.currentMoney / maxMoneyHost.maxMoney * 100).toFixed(0)}% | hThreads:${hackThreads} hTime:${((growTime * (growLoops - 1) + hackWait + hackTime) / 60000).toFixed(2)}m | gThreads:${growThreads} gLoops:${growLoops} gTime:${(growTime * growLoops / 60000).toFixed(2)}m`; // | wThreads:${weakenThreads} wTime:${(weakenTime / 60000).toFixed(2)}m`;
|
||||
ns.print(log);
|
||||
ns.write('autoHackMax.txt', log + '\n', 'a');
|
||||
|
||||
if (maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity > 5) {
|
||||
if (weakenThreads > 0) {
|
||||
ns.exec('weaken.js', host.name, weakenThreads, maxMoneyHost.name);
|
||||
if (host.currentSecurity / host.minSecurity > 2) {
|
||||
if (weakenThreads > 0) {
|
||||
ns.exec('weaken.js', host.name, weakenThreads, host.name);
|
||||
}
|
||||
} else {
|
||||
ns.exec('grow.js', host.name, growThreads, host.name, growLoops);
|
||||
ns.exec('hack.js', host.name, hackThreads, host.name, growTime * (growLoops - 1) + hackWait);
|
||||
}
|
||||
} else {
|
||||
if (maxMoneyHost.currentMoney / maxMoneyHost.maxMoney < 0.2) {
|
||||
ns.exec('grow.js', host.name, Math.floor(freeRAM / growRAM), maxMoneyHost.name);
|
||||
const freeRAM = ns.getServerMaxRam(host.name) - ns.getServerUsedRam(host.name) - (host.name == 'home' ? 1.8 : 0);
|
||||
const hackRAM = ns.getScriptRam('hack.js', host.name);
|
||||
const growRAM = ns.getScriptRam('grow.js', host.name);
|
||||
const weakenRAM = ns.getScriptRam('weaken.js', host.name);
|
||||
const hackTime = ns.getHackTime(maxMoneyHost.name);
|
||||
const growTime = ns.getGrowTime(maxMoneyHost.name);
|
||||
const weakenTime = ns.getWeakenTime(maxMoneyHost.name);
|
||||
const hackWait = hackTime <= growTime ? growTime - hackTime + 50 : 0;
|
||||
const hackAnalyze = ns.hackAnalyze(maxMoneyHost.name);
|
||||
const growThreadsNeededPerHack = Math.ceil(ns.growthAnalyze(maxMoneyHost.name, 1 + hackAnalyze));
|
||||
|
||||
let hackThreads = Math.floor(freeRAM / (hackRAM + growRAM * growThreadsNeededPerHack));
|
||||
hackThreads = hackThreads == 0 ? 1 : hackThreads;
|
||||
const growThreads = Math.floor((freeRAM - hackThreads * hackRAM) / growRAM);
|
||||
// ns.tprint(`Math.floor((${freeRAM} - ${hackThreads} * ${hackRAM}) / ${growRAM}) = ${growThreads}`);
|
||||
const growLoops = Math.ceil(growThreadsNeededPerHack / growThreads);
|
||||
const weakenThreads = Math.floor(freeRAM / weakenRAM);
|
||||
const log = `host:${host.name} target:${maxMoneyHost.name} | security:${(maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity * 100).toFixed(0)}% | money:${(maxMoneyHost.currentMoney / maxMoneyHost.maxMoney * 100).toFixed(0)}% | hThreads:${hackThreads} hTime:${((growTime * (growLoops - 1) + hackWait + hackTime) / 60000).toFixed(2)}m | gThreads:${growThreads} gLoops:${growLoops} gTime:${(growTime * growLoops / 60000).toFixed(2)}m`; // | wThreads:${weakenThreads} wTime:${(weakenTime / 60000).toFixed(2)}m`;
|
||||
ns.print(log);
|
||||
ns.write('autoHackMax.txt', log + '\n', 'a');
|
||||
|
||||
// ns.tprint(`${maxMoneyHost.currentSecurity} / ${maxMoneyHost.minSecurity} > 5 = ${maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity > 5}`)
|
||||
if (maxMoneyHost.currentSecurity / maxMoneyHost.minSecurity > 5) {
|
||||
if (weakenThreads > 0) {
|
||||
ns.exec('weaken.js', host.name, weakenThreads, maxMoneyHost.name);
|
||||
}
|
||||
} else {
|
||||
ns.exec('grow.js', host.name, growThreads, maxMoneyHost.name, growLoops);
|
||||
ns.exec('hack.js', host.name, hackThreads, maxMoneyHost.name, growTime * (growLoops - 1) + hackWait);
|
||||
if (maxMoneyHost.currentMoney / maxMoneyHost.maxMoney < 0.2) {
|
||||
ns.exec('grow.js', host.name, Math.floor(freeRAM / growRAM), maxMoneyHost.name);
|
||||
} else {
|
||||
ns.exec('grow.js', host.name, growThreads, maxMoneyHost.name, growLoops);
|
||||
ns.exec('hack.js', host.name, hackThreads, maxMoneyHost.name, growTime * (growLoops - 1) + hackWait);
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,20 @@ export const DARKWEB_EXPLOITS = [
|
||||
{ name: 'Formulas.exe', cost: 5000000000 }
|
||||
];
|
||||
|
||||
export const FACTIONS = {
|
||||
'Netburners': {
|
||||
requirements: {
|
||||
hack: 80,
|
||||
}
|
||||
},
|
||||
'CyberSec':{
|
||||
requirements:{
|
||||
hack: 57,
|
||||
nuke: 1,
|
||||
backdoor:'CSEC',
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const COMPLETED_FACTIONS = [
|
||||
'CyberSec',
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjEwODMsXCJzdHJlbmd0aFwiOjEsXCJkZWZlbnNlXCI6MSxcImRleHRlcml0eVwiOjEsXCJhZ2lsaXR5XCI6MSxcImNoYXJpc21hXCI6MSxcImludGVsbGlnZW5jZVwiOjB9LFwiZXhwXCI6e1wiaGFja2luZ1wiOjI5Mjk2OTEyMzguODM1MjU3LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoxLjYwMTUyOTI1MzAzMDQ4MTcsXCJoYWNraW5nX3NwZWVkXCI6MS42MDM2NzE0MjcxODI0MzU3LFwiaGFja2luZ19tb25leVwiOjIuMDg4MTYxNzI0NDcyODUsXCJoYWNraW5nX2dyb3dcIjoxLjQ1MjYzNDI0MzExMTU0OCxcImhhY2tpbmdcIjoyLjE3ODY3NjA2NTQ5Mjk0NDIsXCJzdHJlbmd0aFwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiZGVmZW5zZVwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiZGV4dGVyaXR5XCI6MS40NTI2MzQyNDMxMTE1NDgsXCJhZ2lsaXR5XCI6MS40NTI2MzQyNDMxMTE1NDgsXCJjaGFyaXNtYVwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiaGFja2luZ19leHBcIjoyLjc3MzYwMDgxMDUzMTA2MjgsXCJzdHJlbmd0aF9leHBcIjoxLjgzNzU4MjMxNzUzNjEwODEsXCJkZWZlbnNlX2V4cFwiOjEuODM3NTgyMzE3NTM2MTA4MSxcImRleHRlcml0eV9leHBcIjoxLjgzNzU4MjMxNzUzNjEwODEsXCJhZ2lsaXR5X2V4cFwiOjEuODM3NTgyMzE3NTM2MTA4MSxcImNoYXJpc21hX2V4cFwiOjEuODM3NTgyMzE3NTM2MTA4MSxcImNvbXBhbnlfcmVwXCI6MS40NTI2MzQyNDMxMTE1NDgsXCJmYWN0aW9uX3JlcFwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiY3JpbWVfbW9uZXlcIjoxLjQ1MjYzNDI0MzExMTU0OCxcImNyaW1lX3N1Y2Nlc3NcIjoxLjQ1MjYzNDI0MzExMTU0OCxcImhhY2tuZXRfbm9kZV9tb25leVwiOjMuNjYzNjc5NzQ1NTg3NjE0LFwiaGFja25ldF9ub2RlX3B1cmNoYXNlX2Nvc3RcIjowLjUyNjYyNDcyOTI4NDE3MzQsXCJoYWNrbmV0X25vZGVfcmFtX2Nvc3RcIjowLjY4ODM5ODMzODkzMzU1OTcsXCJoYWNrbmV0X25vZGVfY29yZV9jb3N0XCI6MC42ODgzOTgzMzg5MzM1NTk3LFwiaGFja25ldF9ub2RlX2xldmVsX2Nvc3RcIjowLjU4NTEzODU4ODA5MzUyNTgsXCJ3b3JrX21vbmV5XCI6MS40NTI2MzQyNDMxMTE1NDgsXCJibGFkZWJ1cm5lcl9tYXhfc3RhbWluYVwiOjEsXCJibGFkZWJ1cm5lcl9zdGFtaW5hX2dhaW5cIjoxLFwiYmxhZGVidXJuZXJfYW5hbHlzaXNcIjoxLFwiYmxhZGVidXJuZXJfc3VjY2Vzc19jaGFuY2VcIjoxfSxcImF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENvcmUgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIEtlcm5lbCBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ1BVIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDYWNoZSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MTUsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQml0V2lyZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTeW5hcHRpYyBFbmhhbmNlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkRhdGFKYWNrXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsLVJldGVudGlvbiBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDUlRYNDItQUEgR2VuZSBNb2RpZmljYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBTeW5hcHRpYyBQb3RlbnRpYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9XSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsc3RpbXVsYXRvclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDYXNoUm9vdCBTdGFydGVyIEtpdFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTcGVlY2ggUHJvY2Vzc29yIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkF1Z21lbnRlZCBUYXJnZXRpbmcgSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiV2lyZWQgUmVmbGV4ZXNcIn1dLFwiY2l0eVwiOlwiTmV3IFRva3lvXCIsXCJiaXROb2RlTlwiOjEsXCJjb3Jwb3JhdGlvblwiOm51bGwsXCJnYW5nXCI6bnVsbCxcImJsYWRlYnVybmVyXCI6bnVsbCxcImN1cnJlbnRTZXJ2ZXJcIjpcImhvbWVcIixcImZhY3Rpb25zXCI6W1wiQWV2dW1cIixcIlNlY3Rvci0xMlwiLFwiVGlhbiBEaSBIdWlcIixcIkN5YmVyU2VjXCJdLFwiZmFjdGlvbkludml0YXRpb25zXCI6W1wiTmV0YnVybmVyc1wiLFwiTml0ZVNlY1wiXSxcImhhY2tuZXROb2Rlc1wiOlt7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTYsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjozMzYwMC43Mzk4MDI5OTA2MixcIm9ubGluZVRpbWVTZWNvbmRzXCI6MzkxMTUuNTk5OTk5OTkxOTY2LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6MTE1NzAwNjg0NS42ODExODEsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE2LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MzM2MDAuNzM5ODAyOTkwNjIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjM5MTE0LjU5OTk5OTk5MTk4LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6MTE1MDU3NjQ3MS4xMDI4MjI4LFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTFcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNixcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjMzNjAwLjczOTgwMjk5MDYyLFwib25saW5lVGltZVNlY29uZHNcIjozOTA4NS4zOTk5OTk5OTI0MDUsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjoxMTQ5NzQ1MjI0LjYyMzEzNjUsXCJuYW1lXCI6XCJLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjk0MixcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MixcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoxLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6Mzg0NzM0Mjg5Ljc5MTM1ODUsXCJzdHJlbmd0aFwiOjAsXCJkZWZlbnNlXCI6MCxcImRleHRlcml0eVwiOjAsXCJhZ2lsaXR5XCI6MCxcImNoYXJpc21hXCI6MCxcImludGVsbGlnZW5jZVwiOjB9LFwibXVsdHNcIjp7XCJoYWNraW5nX2NoYW5jZVwiOjEuNzYxNjgyMTc4MzMzNTMsXCJoYWNraW5nX3NwZWVkXCI6MS42MzU3NDQ4NTU3MjYwODQzLFwiaGFja2luZ19tb25leVwiOjIuMDg4MTYxNzI0NDcyODUsXCJoYWNraW5nX2dyb3dcIjoxLjQ1MjYzNDI0MzExMTU0OCxcImhhY2tpbmdcIjoyLjE3ODY3NjA2NTQ5Mjk0NDIsXCJzdHJlbmd0aFwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiZGVmZW5zZVwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiZGV4dGVyaXR5XCI6Mi4wMTMzNTEwNjA5NTI2MDU3LFwiYWdpbGl0eVwiOjEuNTI1MjY1OTU1MjY3MTI1MyxcImNoYXJpc21hXCI6MS43NDMxNjEwOTE3MzM4NTc2LFwiaGFja2luZ19leHBcIjozLjEwNjQzMjkwNzc5NDc5MDgsXCJzdHJlbmd0aF9leHBcIjoxLjgzNzU4MjMxNzUzNjEwODEsXCJkZWZlbnNlX2V4cFwiOjEuODM3NTgyMzE3NTM2MTA4MSxcImRleHRlcml0eV9leHBcIjoxLjgzNzU4MjMxNzUzNjEwODEsXCJhZ2lsaXR5X2V4cFwiOjEuODM3NTgyMzE3NTM2MTA4MSxcImNoYXJpc21hX2V4cFwiOjEuODM3NTgyMzE3NTM2MTA4MSxcImNvbXBhbnlfcmVwXCI6MS40NTI2MzQyNDMxMTE1NDgsXCJmYWN0aW9uX3JlcFwiOjEuNDUyNjM0MjQzMTExNTQ4LFwiY3JpbWVfbW9uZXlcIjoxLjQ1MjYzNDI0MzExMTU0OCxcImNyaW1lX3N1Y2Nlc3NcIjoxLjQ1MjYzNDI0MzExMTU0OCxcImhhY2tuZXRfbm9kZV9tb25leVwiOjMuNjYzNjc5NzQ1NTg3NjE0LFwiaGFja25ldF9ub2RlX3B1cmNoYXNlX2Nvc3RcIjowLjUyNjYyNDcyOTI4NDE3MzQsXCJoYWNrbmV0X25vZGVfcmFtX2Nvc3RcIjowLjY4ODM5ODMzODkzMzU1OTcsXCJoYWNrbmV0X25vZGVfY29yZV9jb3N0XCI6MC42ODgzOTgzMzg5MzM1NTk3LFwiaGFja25ldF9ub2RlX2xldmVsX2Nvc3RcIjowLjU4NTEzODU4ODA5MzUyNTgsXCJ3b3JrX21vbmV5XCI6MS40NTI2MzQyNDMxMTE1NDgsXCJibGFkZWJ1cm5lcl9tYXhfc3RhbWluYVwiOjEsXCJibGFkZWJ1cm5lcl9zdGFtaW5hX2dhaW5cIjoxLFwiYmxhZGVidXJuZXJfYW5hbHlzaXNcIjoxLFwiYmxhZGVidXJuZXJfc3VjY2Vzc19jaGFuY2VcIjoxfSxcImF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENvcmUgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIEtlcm5lbCBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ1BVIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDYWNoZSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MTUsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQml0V2lyZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTeW5hcHRpYyBFbmhhbmNlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkRhdGFKYWNrXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsLVJldGVudGlvbiBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDUlRYNDItQUEgR2VuZSBNb2RpZmljYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBTeW5hcHRpYyBQb3RlbnRpYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJhbHN0aW11bGF0b3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ2FzaFJvb3QgU3RhcnRlciBLaXRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3BlZWNoIFByb2Nlc3NvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkF1Z21lbnRlZCBUYXJnZXRpbmcgSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBdWdtZW50ZWQgVGFyZ2V0aW5nIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIldpcmVkIFJlZmxleGVzXCJ9XSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm9yZWNlcHRvciBNYW5hZ2VtZW50IEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmFub2ZpYmVyIFdlYXZlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlNvY2lhbCBOZWdvdGlhdGlvbiBBc3Npc3RhbnQgKFMuTi5BKVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOdW9wdGltYWwgTm9vdHJvcGljIEluamVjdG9yIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQURSLVYxIFBoZXJvbW9uZSBHZW5lXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlNwZWVjaCBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjE2LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MTcsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxOCxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjE5LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MjAsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoyMSxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjIyLFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MjMsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoyNCxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifV0sXCJjaXR5XCI6XCJOZXcgVG9reW9cIixcImJpdE5vZGVOXCI6MSxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxsLFwiYmxhZGVidXJuZXJcIjpudWxsLFwiY3VycmVudFNlcnZlclwiOlwiaG9tZVwiLFwiZmFjdGlvbnNcIjpbXCJUaWFuIERpIEh1aVwiXSxcImZhY3Rpb25JbnZpdGF0aW9uc1wiOltcIk5ldGJ1cm5lcnNLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjEyNTYsXCJzdHJlbmd0aFwiOjIsXCJkZWZlbnNlXCI6MixcImRleHRlcml0eVwiOjIsXCJhZ2lsaXR5XCI6MSxcImNoYXJpc21hXCI6MixcImludGVsbGlnZW5jZVwiOjB9LFwiZXhwXCI6e1wiaGFja2luZ1wiOjgyMjk4ODA4LjcwMDMzMTg1LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoyLjE0ODk5OTkyMzkyNjcwNCxcImhhY2tpbmdfc3BlZWRcIjoyLjEzODI2NzE4MjUxNjU0NjIsXCJoYWNraW5nX21vbmV5XCI6My41OTA4OTIxNTIxMjYzODYsXCJoYWNraW5nX2dyb3dcIjoyLjE1MDQ5MjM2NTYyODQ1LFwiaGFja2luZ1wiOjMuMjc5OTI5Mzk2MjAyOTc5LFwic3RyZW5ndGhcIjoyLjM3NDE0MzU3MTY1MzgwODQsXCJkZWZlbnNlXCI6Mi4wNjQ0NzI2NzEwMDMzMTIsXCJkZXh0ZXJpdHlcIjoyLjc0MjEzNTgyNTI2MDE0OSxcImFnaWxpdHlcIjoxLjgwNjQxMzU4NzEyNzg5OCxcImNoYXJpc21hXCI6Mi4yNzA5MTk5MzgxMDM2NDMzLFwiaGFja2luZ19leHBcIjo0LjMzMDIyMDkzNzMyNzY4NyxcInN0cmVuZ3RoX2V4cFwiOjIuMTc2Mjk4Mjc0MDE1OTkxMyxcImRlZmVuc2VfZXhwXCI6Mi4xNzYyOTgyNzQwMTU5OTEzLFwiZGV4dGVyaXR5X2V4cFwiOjIuMTc2Mjk4Mjc0MDE1OTkxMyxcImFnaWxpdHlfZXhwXCI6Mi4xNzYyOTgyNzQwMTU5OTEzLFwiY2hhcmlzbWFfZXhwXCI6Mi4xNzYyOTgyNzQwMTU5OTEzLFwiY29tcGFueV9yZXBcIjoyLjg3MjcxMzcyMTcwMTEwODcsXCJmYWN0aW9uX3JlcFwiOjIuMTc2Mjk4Mjc0MDE1OTkxMyxcImNyaW1lX21vbmV5XCI6MS43MjAzOTM4OTI1MDI3NixcImNyaW1lX3N1Y2Nlc3NcIjoxLjcyMDM5Mzg5MjUwMjc2LFwiaGFja25ldF9ub2RlX21vbmV5XCI6NC4zMzg5OTQ2ODM4MTkzOCxcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC40NDQ2NjE2MDgyMjg5NDg5NixcImhhY2tuZXRfbm9kZV9yYW1fY29zdFwiOjAuNTgxMjU3MDA0MjIwODQ4MSxcImhhY2tuZXRfbm9kZV9jb3JlX2Nvc3RcIjowLjU4MTI1NzAwNDIyMDg0ODEsXCJoYWNrbmV0X25vZGVfbGV2ZWxfY29zdFwiOjAuNDk0MDY4NDUzNTg3NzIwOTUsXCJ3b3JrX21vbmV5XCI6MS44OTI0MzMyODE3NTMwMzYsXCJibGFkZWJ1cm5lcl9tYXhfc3RhbWluYVwiOjEsXCJibGFkZWJ1cm5lcl9zdGFtaW5hX2dhaW5cIjoxLFwiYmxhZGVidXJuZXJfYW5hbHlzaXNcIjoxLFwiYmxhZGVidXJuZXJfc3VjY2Vzc19jaGFuY2VcIjoxfSxcImF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENvcmUgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIEtlcm5lbCBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ1BVIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDYWNoZSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MzIsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQml0V2lyZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTeW5hcHRpYyBFbmhhbmNlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkRhdGFKYWNrXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsLVJldGVudGlvbiBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDUlRYNDItQUEgR2VuZSBNb2RpZmljYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBTeW5hcHRpYyBQb3RlbnRpYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJhbHN0aW11bGF0b3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ2FzaFJvb3QgU3RhcnRlciBLaXRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3BlZWNoIFByb2Nlc3NvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkF1Z21lbnRlZCBUYXJnZXRpbmcgSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBdWdtZW50ZWQgVGFyZ2V0aW5nIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIldpcmVkIFJlZmxleGVzXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvcmVjZXB0b3IgTWFuYWdlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5hbm9maWJlciBXZWF2ZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTb2NpYWwgTmVnb3RpYXRpb24gQXNzaXN0YW50IChTLk4uQSlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnVvcHRpbWFsIE5vb3Ryb3BpYyBJbmplY3RvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkFEUi1WMSBQaGVyb21vbmUgR2VuZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTcGVlY2ggRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZSBDb3JlIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW5oYW5jZWQgTXllbGluIFNoZWF0aGluZ1wifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElWXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlRoZSBCbGFjayBIYW5kXCJ9XSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZSBDb3JlIFYyIFVwZ3JhZGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQml0UnVubmVycyBOZXVyb2xpbmtcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBCaW8tbmV1cmFsIE5ldHdvcmsgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIFZcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsIEFjY2VsZXJhdG9yXCJ9LHtcImxldmVsXCI6MzMsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjozNCxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjMzNixcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MSxcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjozOSxcImludGVsbGlnZW5jZVwiOjB9LFwiZXhwXCI6e1wiaGFja2luZ1wiOjE3ODc4MDEuMTcyOTY3MTc2NCxcInN0cmVuZ3RoXCI6MCxcImRlZmVuc2VcIjowLFwiZGV4dGVyaXR5XCI6MCxcImFnaWxpdHlcIjowLFwiY2hhcmlzbWFcIjo4MDEuMTU1OTIzMDg2Nzk0NSxcImludGVsbGlnZW5jZVwiOjB9LFwibXVsdHNcIjp7XCJoYWNraW5nX2NoYW5jZVwiOjEuMjkxNTY2MTg3NjgxNDQsXCJoYWNraW5nX3NwZWVkXCI6MS4yOTE1NjYxODc2ODE0NCxcImhhY2tpbmdfbW9uZXlcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiaGFja2luZ19ncm93XCI6MS4yOTE1NjYxODc2ODE0NCxcImhhY2tpbmdcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiaGFja2luZ19leHBcIjoxLjI5MTU2NjE4NzY4MTQ0LFwic3RyZW5ndGhcIjoxLjI5MTU2NjE4NzY4MTQ0LFwic3RyZW5ndGhfZXhwXCI6MS4yOTE1NjYxODc2ODE0NCxcImRlZmVuc2VcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiZGVmZW5zZV9leHBcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiZGV4dGVyaXR5XCI6MS4yOTE1NjYxODc2ODE0NCxcImRleHRlcml0eV9leHBcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiYWdpbGl0eVwiOjEuMjkxNTY2MTg3NjgxNDQsXCJhZ2lsaXR5X2V4cFwiOjEuMjkxNTY2MTg3NjgxNDQsXCJjaGFyaXNtYVwiOjEuMjkxNTY2MTg3NjgxNDQsXCJjaGFyaXNtYV9leHBcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiaGFja25ldF9ub2RlX21vbmV5XCI6MS4yOTE1NjYxODc2ODE0NCxcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC43NzQyNDY4MDk0NzMzMzkxLFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC43NzQyNDY4MDk0NzMzMzkxLFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuNzc0MjQ2ODA5NDczMzM5MSxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC43NzQyNDY4MDk0NzMzMzkxLFwiY29tcGFueV9yZXBcIjoxLjI5MTU2NjE4NzY4MTQ0LFwiZmFjdGlvbl9yZXBcIjoxLjI5MTU2NjE4NzY4MTQ0LFwid29ya19tb25leVwiOjEuMjkxNTY2MTg3NjgxNDQsXCJjcmltZV9zdWNjZXNzXCI6MS4yOTE1NjYxODc2ODE0NCxcImNyaW1lX21vbmV5XCI6MS4yOTE1NjYxODc2ODE0NCxcImJsYWRlYnVybmVyX21heF9zdGFtaW5hXCI6MSxcImJsYWRlYnVybmVyX3N0YW1pbmFfZ2FpblwiOjEsXCJibGFkZWJ1cm5lcl9hbmFseXNpc1wiOjEsXCJibGFkZWJ1cm5lcl9zdWNjZXNzX2NoYW5jZVwiOjF9LFwiYXVnbWVudGF0aW9uc1wiOltdLFwicXVldWVkQXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ29yZSBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgS2VybmVsIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDUFUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENhY2hlIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBOSUMgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MixcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjMsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn1dLFwiY2l0eVwiOlwiTmV3IFRva3lvXCIsXCJiaXROb2RlTlwiOjQsXCJjb3Jwb3JhdGlvblwiOm51bGwsXCJnYW5nXCI6bnVsbCxcImJsYWRlYnVybmVyXCI6bnVsbCxcImN1cnJlbnRTZXJ2ZXJcIjpcImhvbWVcIixcImZhY3Rpb25zXCI6W1wiTml0ZVNlY1wiLFwiTmV0YnVybmVyc1wiLFwiQ3liZXJTZWNcIl0sXCJmYWN0aW9uSW52aXRhdGlvbnNcIjpbXCJBZXZ1bVwiLFwiVGlhbiBEaSBIdWlcIixcIk5ldyBUb2t5b1wiXSxcImhhY2tuZXROb2Rlc1wiOlt7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTMsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjo1MDcuNjU3OTgwMzkzOTgwNTUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjY2MjQ5Ljk5OTk5OTU5Njk2LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6MTc1NjYxNTQuOTMzODIxODgzLFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTBcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxMyxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjUwNy42NTc5ODAzOTM5ODA1NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6NjYyNDguOTk5OTk5NTk2OTcsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjoxNzQ3MjY0NS42MjU5NzIzMzQsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMVwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjEzLFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6NTA3LjY1Nzk4MDM5Mzk4MDU1LFwib25saW5lVGltZVNlY29uZHNcIjo2NjI0NS45OTk5OTk1OTcwMSxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjE3MzU3NDA5LjY4MzM0NzM1NixcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0yXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTMsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjo1MDcuNjU3OTgwMzkzOTgwNTUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjY2MTI5Ljk5OTk5OTU5ODcsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjoxNzMxMDEwNC41NDk2NTEyMixcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0zXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTMsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjo1MDcuNjU3OTgwMzkzOTgwNTUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjY1OTgxLjE5OTk5OTYwMDg3LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6MTcyNjUzMTAuNTE2Mzc4MzksXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtNFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjEzLFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6NTA3LjY1Nzk4MDM5Mzk4MDU1LFwib25saW5lVGltZVNlY29uZHNcIjo2NTUwMi41OTk5OTk2MDc4MjQsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjoxNzIxMjYwMi4yMzc3MTY5LFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTVcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxMyxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjUwNy42NTc5ODAzOTM5ODA1NSxcIm9Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjM2NixcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MSxcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoxLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6MjgwOTc2Ni45MzgxMjY1NTEsXCJzdHJlbmd0aFwiOjAsXCJkZWZlbnNlXCI6MCxcImRleHRlcml0eVwiOjAsXCJhZ2lsaXR5XCI6MCxcImNoYXJpc21hXCI6MCxcImludGVsbGlnZW5jZVwiOjB9LFwibXVsdHNcIjp7XCJoYWNraW5nX2NoYW5jZVwiOjEuMzMwNzA2NDAxMTU0Nzc3MSxcImhhY2tpbmdfc3BlZWRcIjoxLjMzMDcwNjQwMTE1NDc3NzEsXCJoYWNraW5nX21vbmV5XCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiaGFja2luZ19ncm93XCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiaGFja2luZ1wiOjEuMzMwNzA2NDAxMTU0Nzc3MSxcInN0cmVuZ3RoXCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiZGVmZW5zZVwiOjEuMzMwNzA2NDAxMTU0Nzc3MSxcImRleHRlcml0eVwiOjEuMzMwNzA2NDAxMTU0Nzc3MSxcImFnaWxpdHlcIjoxLjMzMDcwNjQwMTE1NDc3NzEsXCJjaGFyaXNtYVwiOjEuMzMwNzA2NDAxMTU0Nzc3MSxcImhhY2tpbmdfZXhwXCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwic3RyZW5ndGhfZXhwXCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiZGVmZW5zZV9leHBcIjoxLjMzMDcwNjQwMTE1NDc3NzEsXCJkZXh0ZXJpdHlfZXhwXCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiYWdpbGl0eV9leHBcIjoxLjMzMDcwNjQwMTE1NDc3NzEsXCJjaGFyaXNtYV9leHBcIjoxLjMzMDcwNjQwMTE1NDc3NzEsXCJjb21wYW55X3JlcFwiOjEuMzMwNzA2NDAxMTU0Nzc3MSxcImZhY3Rpb25fcmVwXCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiY3JpbWVfbW9uZXlcIjoxLjMzMDcwNjQwMTE1NDc3NzEsXCJjcmltZV9zdWNjZXNzXCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiaGFja25ldF9ub2RlX21vbmV5XCI6My4zNTYxNjYyOTc0Mzc0NTU1LFwiaGFja25ldF9ub2RlX3B1cmNoYXNlX2Nvc3RcIjowLjU3NDg3NzQ1OTM0MzE2MDYsXCJoYWNrbmV0X25vZGVfcmFtX2Nvc3RcIjowLjc1MTQ3MzgwMzA2Mjk1NTEsXCJoYWNrbmV0X25vZGVfY29yZV9jb3N0XCI6MC43NTE0NzM4MDMwNjI5NTUxLFwiaGFja25ldF9ub2RlX2xldmVsX2Nvc3RcIjowLjYzODc1MjczMjYwMzUxMTcsXCJ3b3JrX21vbmV5XCI6MS4zMzA3MDY0MDExNTQ3NzcxLFwiYmxhZGVidXJuZXJfbWF4X3N0YW1pbmFcIjoxLFwiYmxhZGVidXJuZXJfc3RhbWluYV9nYWluXCI6MSxcImJsYWRlYnVybmVyX2FuYWx5c2lzXCI6MSxcImJsYWRlYnVybmVyX3N1Y2Nlc3NfY2hhbmNlXCI6MX0sXCJhdWdtZW50YXRpb25zXCI6W3tcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDb3JlIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBLZXJuZWwgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENQVSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ2FjaGUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIE5JQyBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjMsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn1dLFwicXVldWVkQXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJCaXRXaXJlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlN5bmFwdGljIEVuaGFuY2VtZW50IEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElcIn0se1wibGV2ZWxcIjo0LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6NSxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjYsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn1dLFwiY2l0eVwiOlwiQWV2dW1cIixcImJpdE5vZGVOXCI6NCxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxsLFwiYmxhZGVidXJuZXJcIjpudWxsLFwiY3VycmVudFNlcnZlclwiOlwiQ1NFQ1wiLFwiZmFjdGlvbnNcIjpbXCJOaXRlU2VjXCIsXCJBZXZ1bVwiLFwiTmV0YnVybmVyc1wiLFwiQ3liZXJTZWNcIl0sXCJmYWN0aW9uSW52aXRhdGlvbnNcIjpbXSxcImhhY2tuZXROb2Rlc1wiOlt7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTYsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxNTM5LjAyMTk0NDE0NzUxMzgsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjk2Mzg4LjU5OTk5OTE1ODM3LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NzkyNjYzMzAuMjMyODkwMyxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0wXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTYsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxNTM5LjAyMTk0NDE0NzUxMzgsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjk0OTY0Ljk5OTk5OTE3OTEsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo3ODk5NjgzMS4yMzk5NjI0MSxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0xXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxNDY1LjczNTE4NDkwMjM5NDIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjk0NjU2LjE5OTk5OTE4MzYsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo3ODcwMTQzMS4zOTE5ODY2OCxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0yXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxNDY1LjczNTE4NDkwMjM5NDIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjk0MDI0Ljc5OTk5OTE5MjgsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo3ODU0ODU4Ni4wNzA2OTc3MSxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0zXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxNDY1LjczNTE4NDkwMjM5NDIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjkzMTU3LjU5OTk5OTIwNTQxLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NzgzODg0NjEuMDQ4ODMyMTgsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtNFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxLine truncated
|
||||
@@ -1,66 +1,17 @@
|
||||
import { EXPLOITS } from "./constants.js"
|
||||
|
||||
/** @param {import(".").NS } ns */
|
||||
export async function main(ns) {
|
||||
// ns.disableLog('ALL');
|
||||
|
||||
// function scanServer(currentServer, previousServer = currentServer) {
|
||||
// let availableServers = ns.scan(currentServer);
|
||||
// let result = [];
|
||||
|
||||
// for (let i = 0; i < availableServers.length; ++i) {
|
||||
// let nextServer = availableServers[i];
|
||||
|
||||
// if (nextServer != currentServer && nextServer != previousServer) {
|
||||
// result.concat(scanServer(nextServer, currentServer));
|
||||
// }
|
||||
// }
|
||||
|
||||
// return [currentServer].concat(result);
|
||||
// }
|
||||
|
||||
function maxPortsToHack() {
|
||||
let maxPorts = 0;
|
||||
for (const exploit of EXPLOITS) {
|
||||
if (ns.fileExists(exploit.name)) ++maxPorts;
|
||||
function checkFactionCompletion(factionName){
|
||||
let complete = true;
|
||||
let ownedAugumentations = ns.singularity.getOwnedAugmentations(true);
|
||||
for (const augumentation of ns.singularity.getAugmentationsFromFaction(factionName)) {
|
||||
complete = complete && ownedAugumentations.indexOf(augumentation) != -1;
|
||||
}
|
||||
// ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);
|
||||
return maxPorts;
|
||||
|
||||
return complete;
|
||||
}
|
||||
|
||||
function analyzeServer(server) {
|
||||
let requiredHacking = ns.getServerRequiredHackingLevel(server);
|
||||
let requiredPorts = ns.getServerNumPortsRequired(server);
|
||||
let currentHacking = ns.getHackingLevel();
|
||||
|
||||
return {
|
||||
"name": server,
|
||||
"rootAccess": ns.hasRootAccess(server),
|
||||
"requiredHacking": requiredHacking,
|
||||
"requiredPorts": requiredPorts,
|
||||
"nukeAvailable": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts),
|
||||
"currentMoney": ns.getServerMoneyAvailable(server),
|
||||
"maxMoney": ns.getServerMaxMoney(server),
|
||||
"currentSecurity": ns.getServerSecurityLevel(server),
|
||||
"minSecurity": ns.getServerMinSecurityLevel(server),
|
||||
};
|
||||
}
|
||||
|
||||
function scanServer(currentServer, previousServer = currentServer, network = []) {
|
||||
let availableServers = ns.scan(currentServer);
|
||||
network.push(analyzeServer(currentServer));
|
||||
|
||||
for (let i = 0; i < availableServers.length; ++i) {
|
||||
let nextServer = availableServers[i];
|
||||
|
||||
if (nextServer != currentServer && nextServer != previousServer) {
|
||||
scanServer(nextServer, currentServer, network);
|
||||
}
|
||||
}
|
||||
return network;
|
||||
}
|
||||
|
||||
let network = scanServer('home');
|
||||
ns.tprint(network[0])
|
||||
ns.as
|
||||
ns.tprint(checkFactionCompletion('CyberSec') );
|
||||
ns.tprint(checkFactionCompletion('Aevum') );
|
||||
}
|
||||
Reference in new issue
Block a user