@oflow-ai/oflow-cli 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +14 -14
- package/dist/updater.d.ts +6 -7
- package/dist/updater.js +30 -123
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -137,19 +137,19 @@ async function startInteractiveMode(options) {
|
|
|
137
137
|
console.log(chalk_1.default.bold.blue(' oflow CLI ' + chalk_1.default.white(versionDisplay)));
|
|
138
138
|
console.log(chalk_1.default.gray(' Type /help for commands, /exit to quit'));
|
|
139
139
|
console.log('');
|
|
140
|
-
//
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
140
|
+
// 检测更新
|
|
141
|
+
let updateInfo = null;
|
|
142
|
+
try {
|
|
143
|
+
updateInfo = await (0, updater_1.checkForUpdates)();
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// 忽略检测错误
|
|
147
|
+
}
|
|
148
|
+
if (updateInfo && updateInfo.hasUpdate) {
|
|
149
|
+
console.log(chalk_1.default.yellow(' New version available: ' + updateInfo.latestVersion));
|
|
150
|
+
console.log(chalk_1.default.gray(' Run /update to install the latest version'));
|
|
151
|
+
console.log('');
|
|
152
|
+
}
|
|
153
153
|
if (options.sandbox || configManager.get('sandbox')) {
|
|
154
154
|
try {
|
|
155
155
|
sandboxExecutor = await (0, core_1.createSandboxExecutor)();
|
|
@@ -496,4 +496,4 @@ Your primary goal is to help users safely and efficiently complete programming t
|
|
|
496
496
|
Current working directory: ${process.cwd()}
|
|
497
497
|
`;
|
|
498
498
|
}
|
|
499
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBIQSxvREF3TkM7QUF5REQsNENBdUNDO0FBbGJELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQXVHO0FBaUJ2RyxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFL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RUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQXFDb0IsT0FBTyxDQUFDLEdBQUcsRUFBRTtDQUN6QyxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlLCBnZXRDdXJyZW50VmVyc2lvbiwgcGVyZm9ybUJhY2tncm91bmRVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBtb2RlbD86IHN0cmluZztcbiAgeW9sbz86IGJvb2xlYW47XG4gIHNhbmRib3g/OiBib29sZWFuO1xuICBzaG93VGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2Vzc2lvblN0YXRzIHtcbiAgdG9vbENhbGxzQ291bnQ6IG51bWJlcjtcbiAgZmlsZXNSZWFkOiBzdHJpbmdbXTtcbiAgZmlsZXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgY29tbWFuZHNSdW46IHN0cmluZ1tdO1xuICBzdGFydFRpbWU6IERhdGU7XG59XG5cbmxldCBzYW5kYm94RXhlY3V0b3I6IFNhbmRib3hFeGVjdXRvciB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRTaG93VGhpbmtpbmcgPSBmYWxzZTtcbmxldCBzZXNzaW9uU3RhdHM6IFNlc3Npb25TdGF0cyA9IHtcbiAgdG9vbENhbGxzQ291bnQ6IDAsXG4gIGZpbGVzUmVhZDogW10sXG4gIGZpbGVzV3JpdHRlbjogW10sXG4gIGNvbW1hbmRzUnVuOiBbXSxcbiAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpXG59O1xubGV0IGNvbnRleHRUb2tlbnMgPSAwO1xubGV0IG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG5sZXQgY3VycmVudE1vZGVsID0gJ2dwdC00byc7XG5cbi8qKlxuICog5pi+56S654q25oCB5qCP77yI5Zu65a6a5Zyo6L6T5YWl5qGG5LiK5pa577yJXG4gKi9cbmZ1bmN0aW9uIHNob3dTdGF0dXNCYXIoKTogdm9pZCB7XG4gIGNvbnN0IHRlcm1pbmFsV2lkdGggPSBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwO1xuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoY29udGV4dFRva2VucyAvIG1heENvbnRleHRUb2tlbnMpICogMTAwKSk7XG4gIGNvbnN0IGNvbnRleHRDb2xvciA9IGNvbnRleHRQZXJjZW50ID4gODAgPyBjaGFsay5yZWQgOiBjb250ZXh0UGVyY2VudCA+IDUwID8gY2hhbGsueWVsbG93IDogY2hhbGsuZ3JlZW47XG4gIGNvbnN0IHRoaW5raW5nU3RhdHVzID0gY3VycmVudFNob3dUaGlua2luZyA/IGNoYWxrLmN5YW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKTtcbiAgXG4gIC8vIOeKtuaAgeagj+esrOS4gOihjFxuICBjb25zdCBzdGF0dXNQYXJ0cyA9IFtcbiAgICBgJHtjaGFsay5ibHVlKCdNb2RlbDonKX0gJHtjaGFsay53aGl0ZShjdXJyZW50TW9kZWwpfWAsXG4gICAgYCR7Y2hhbGsuYmx1ZSgnQ29udGV4dDonKX0gJHtjb250ZXh0Q29sb3IoY29udGV4dFBlcmNlbnQgKyAnJScpfWAsXG4gICAgYCR7Y2hhbGsuYmx1ZSgnVGhpbmtpbmc6Jyl9ICR7dGhpbmtpbmdTdGF0dXN9YFxuICBdO1xuICBjb25zdCBzdGF0dXNMaW5lMSA9IHN0YXR1c1BhcnRzLmpvaW4oJyAgfCAgJyk7XG4gIFxuICAvLyDnirbmgIHmoI/nrKzkuozooYwgLSDlvZPliY3nm67lvZVcbiAgY29uc3QgY3VycmVudERpciA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG1heERpckxlbiA9IHRlcm1pbmFsV2lkdGggLSA4O1xuICBjb25zdCBkaXJEaXNwbGF5ID0gY3VycmVudERpci5sZW5ndGggPiBtYXhEaXJMZW4gXG4gICAgPyAnLi4uJyArIGN1cnJlbnREaXIuc2xpY2UoLShtYXhEaXJMZW4gLSAzKSlcbiAgICA6IGN1cnJlbnREaXI7XG4gIGNvbnN0IHN0YXR1c0xpbmUyID0gYCR7Y2hhbGsuYmx1ZSgnRGlyOicpfSAke2NoYWxrLmdyYXkoZGlyRGlzcGxheSl9YDtcbiAgXG4gIC8vIOaJk+WNsOeKtuaAgeagj1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ+KUgCcucmVwZWF0KE1hdGgubWluKHRlcm1pbmFsV2lkdGgsIDgwKSkpKTtcbiAgY29uc29sZS5sb2coc3RhdHVzTGluZTEpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMik7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ+KUgCcucmVwZWF0KE1hdGgubWluKHRlcm1pbmFsV2lkdGgsIDgwKSkpKTtcbn1cblxuZnVuY3Rpb24gc2hvd1Rhc2tTdW1tYXJ5KCk6IHZvaWQge1xuICBjb25zdCBkdXJhdGlvbiA9IE1hdGgucm91bmQoKERhdGUubm93KCkgLSBzZXNzaW9uU3RhdHMuc3RhcnRUaW1lLmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoZHVyYXRpb24gLyA2MCk7XG4gIGNvbnN0IHNlY29uZHMgPSBkdXJhdGlvbiAlIDYwO1xuICBcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5jeWFuKCcgICAgICAgICAgIFRhc2sgU3VtbWFyeScpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5jeWFuKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdEdXJhdGlvbjonKX0gJHtjaGFsay55ZWxsb3cobWludXRlcyArICdtICcgKyBzZWNvbmRzICsgJ3MnKX1gKTtcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ1Rvb2wgY2FsbHM6Jyl9ICR7Y2hhbGsueWVsbG93KHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudC50b1N0cmluZygpKX1gKTtcbiAgXG4gIGlmIChzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnRmlsZXMgcmVhZDonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGgudG9TdHJpbmcoKSl9YCk7XG4gICAgc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5zbGljZSgwLCA1KS5mb3JFYWNoKGYgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC0gJyArIGYpKSk7XG4gICAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gNSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC4uLiBhbmQgJyArIChzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aCAtIDUpICsgJyBtb3JlJykpO1xuICAgIH1cbiAgfVxuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyBtb2RpZmllZDonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGgudG9TdHJpbmcoKSl9YCk7XG4gICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5zbGljZSgwLCA1KS5mb3JFYWNoKGYgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC0gJyArIGYpKSk7XG4gICAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoID4gNSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC4uLiBhbmQgJyArIChzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aCAtIDUpICsgJyBtb3JlJykpO1xuICAgIH1cbiAgfVxuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0NvbW1hbmRzIHJ1bjonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgfVxuICBcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgXG4gIHNlc3Npb25TdGF0cyA9IHtcbiAgICB0b29sQ2FsbHNDb3VudDogMCxcbiAgICBmaWxlc1JlYWQ6IFtdLFxuICAgIGZpbGVzV3JpdHRlbjogW10sXG4gICAgY29tbWFuZHNSdW46IFtdLFxuICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKVxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRJbnRlcmFjdGl2ZU1vZGUob3B0aW9uczogQ0xJT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICBjb25zdCBhdXRoID0gY29uZmlnTWFuYWdlci5nZXRBdXRoKCk7XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdOb3QgYXV0aGVudGljYXRlZC4gUnVuIGBvZmxvdyBhdXRoYCBmaXJzdC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g5pi+56S65b2T5YmN54mI5pysXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gYXdhaXQgZ2V0Q3VycmVudFZlcnNpb24oKTtcbiAgY29uc3QgdmVyc2lvbkRpc3BsYXkgPSAndicgKyBjdXJyZW50VmVyc2lvbjtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJyAgb2Zsb3cgQ0xJICcgKyBjaGFsay53aGl0ZSh2ZXJzaW9uRGlzcGxheSkpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBUeXBlIC9oZWxwIGZvciBjb21tYW5kcywgL2V4aXQgdG8gcXVpdCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuXG4gIC8vIOWQjuWPsOajgOa1i+abtOaWsO+8iOS4jemYu+WhnuW9k+WJjSBzZXNzaW9u77yJXG4gIGNoZWNrRm9yVXBkYXRlcygpLnRoZW4odXBkYXRlSW5mbyA9PiB7XG4gICAgaWYgKHVwZGF0ZUluZm8uaGFzVXBkYXRlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJyAgTmV3IHZlcnNpb24gYXZhaWxhYmxlOiAnICsgdXBkYXRlSW5mby5sYXRlc3RWZXJzaW9uKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFVwZGF0aW5nIGluIGJhY2tncm91bmQuLi4nKSk7XG4gICAgICBwZXJmb3JtQmFja2dyb3VuZFVwZGF0ZSgoc3VjY2VzcykgPT4ge1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignICBVcGRhdGUgY29tcGxldGVkISBSZXN0YXJ0IG9mbG93IHRvIHVzZSB2JyArIHVwZGF0ZUluZm8ubGF0ZXN0VmVyc2lvbikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pLmNhdGNoKCgpID0+IHt9KTtcblxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgY3VycmVudFNob3dUaGlua2luZyA9IG9wdGlvbnMuc2hvd1RoaW5raW5nID8/IGNvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCk7XG4gIGN1cnJlbnRNb2RlbCA9IG9wdGlvbnMubW9kZWwgfHwgY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKSB8fCAnZ3B0LTRvJztcblxuICBpZiAoY3VycmVudE1vZGVsLmluY2x1ZGVzKCdncHQtNCcpIHx8IGN1cnJlbnRNb2RlbC5pbmNsdWRlcygnZ3B0LTRvJykpIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gMTI4MDAwO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRNb2RlbC5pbmNsdWRlcygnZGVlcHNlZWsnKSkge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSA2NDAwMDtcbiAgfSBlbHNlIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gMTI4MDAwO1xuICB9XG5cbiAgbGV0IHByb3ZpZGVyO1xuICB0cnkge1xuICAgIHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBjdXJyZW50TW9kZWwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRmFpbGVkIHRvIGNyZWF0ZSBBSSBwcm92aWRlcjogJyArIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbih7XG4gICAgcHJvdmlkZXIsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICBtYXhUb2tlbnM6IGNvbmZpZ01hbmFnZXIuZ2V0KCdtYXhUb2tlbnMnKSxcbiAgICB0ZW1wZXJhdHVyZTogY29uZmlnTWFuYWdlci5nZXQoJ3RlbXBlcmF0dXJlJyksXG4gICAgc2hvd1RoaW5raW5nOiBjdXJyZW50U2hvd1RoaW5raW5nLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9LFxuICAgIG9uVGhpbmtpbmc6ICh0aGlua2luZykgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRTaG93VGhpbmtpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoY2hhbGsubWFnZW50YSh0aGlua2luZykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Ub29sQ2FsbDogKHRvb2xDYWxsKSA9PiB7XG4gICAgICBzZXNzaW9uU3RhdHMudG9vbENhbGxzQ291bnQrKztcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbltUb29sOiAnICsgdG9vbENhbGwuZnVuY3Rpb24ubmFtZSArICddJykpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXJncyA9IEpTT04ucGFyc2UodG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdyZWFkX2ZpbGUnICYmIGFyZ3MuYWJzb2x1dGVfcGF0aCkge1xuICAgICAgICAgIGlmICghc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5pbmNsdWRlcyhhcmdzLmFic29sdXRlX3BhdGgpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goYXJncy5hYnNvbHV0ZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICd3cml0ZV9maWxlJyB8fCB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncmVwbGFjZScpICYmIGFyZ3MuZmlsZV9wYXRoKSB7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmluY2x1ZGVzKGFyZ3MuZmlsZV9wYXRoKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKGFyZ3MuZmlsZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3J1bl9zaGVsbF9jb21tYW5kJyAmJiBhcmdzLmNvbW1hbmQpIHtcbiAgICAgICAgICBzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ucHVzaChhcmdzLmNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSxcbiAgICBvblRvb2xSZXN1bHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnRleHRUb2tlbnMgKz0gTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyA0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gIH0pO1xuXG4gIC8qKlxuICAgKiDmmL7npLrovpPlhaXmj5DnpLrvvIjnirbmgIHmoI/lnKjovpPlhaXmoYbkuIrmlrnvvIlcbiAgICog5biD5bGA6aG65bqP77yaXG4gICAqIFvlhoXlrrnljLrln59dXG4gICAqIFvnirbmgIHmoI9dXG4gICAqID4gW+i+k+WFpeahhl1cbiAgICovXG4gIGNvbnN0IHNob3dQcm9tcHQgPSAoKSA9PiB7XG4gICAgc2hvd1N0YXR1c0JhcigpO1xuICAgIHJsLnNldFByb21wdChjaGFsay5ncmVlbignPiAnKSk7XG4gICAgcmwucHJvbXB0KCk7XG4gIH07XG5cbiAgc2hvd1Byb21wdCgpO1xuXG4gIHJsLm9uKCdsaW5lJywgYXN5bmMgKGxpbmUpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGxpbmUudHJpbSgpO1xuICAgIFxuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDlpITnkIYgc2xhc2gg5ZG95LukXG4gICAgaWYgKGlzU2xhc2hDb21tYW5kKGlucHV0KSkge1xuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdGhpbmtpbmcnKSB7XG4gICAgICAgIGN1cnJlbnRTaG93VGhpbmtpbmcgPSAhY3VycmVudFNob3dUaGlua2luZztcbiAgICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoY3VycmVudFNob3dUaGlua2luZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdUaGlua2luZzogJyArIChjdXJyZW50U2hvd1RoaW5raW5nID8gJ09OJyA6ICdPRkYnKSkpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvc3VtbWFyeScpIHtcbiAgICAgICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJy91cGRhdGUnKSB7XG4gICAgICAgIGF3YWl0IHBlcmZvcm1VcGRhdGUoZmFsc2UpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBhd2FpdCBleGVjdXRlU2xhc2hDb21tYW5kKGlucHV0LCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgICAgcmwsXG4gICAgICAgIGNvbmZpZ01hbmFnZXJcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIHJsLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhiBhZ2VudCDosIPnlKhcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICBhd2FpdCBoYW5kbGVBZ2VudENhbGwoaW5wdXQsIHByb3ZpZGVyKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDlpITnkIYgc2hlbGwg5ZG95LukXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgYXdhaXQgZXhlY3V0ZVNoZWxsQ29tbWFuZChpbnB1dC5zbGljZSgxKSwgc2FuZGJveEV4ZWN1dG9yKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDlpITnkIbmma7pgJrlr7nor51cbiAgICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dCk7XG4gICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnVGhpbmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgICBzcGlubmVyLnN0b3AoKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgIFxuICAgICAgaWYgKHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudCA+PSAzKSB7XG4gICAgICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dFRva2VucyArPSBNYXRoLmNlaWwocmVzcG9uc2UubGVuZ3RoIC8gNCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yTWVzc2FnZSkpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCc0MDAnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0NoZWNrIEFQSSBrZXkgYW5kIG1vZGVsIG5hbWUsIG9yIHJ1biBcIm9mbG93IGF1dGhcIicpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCc0MDEnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCwgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQyOScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnUmF0ZSBsaW1pdCwgcGxlYXNlIHdhaXQgYW5kIHJldHJ5JykpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgfVxuICB9KTtcblxuICBybC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSFcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSFcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnRDYWxsKGlucHV0OiBzdHJpbmcsIHByb3ZpZGVyOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaCgvXlxcJChcXHcrKD86LVxcdyspKilcXHMqKC4qKSQvKTtcbiAgXG4gIGlmICghbWF0Y2gpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0ludmFsaWQgZm9ybWF0LiBVc2U6ICRhZ2VudC10eXBlIFwidGFza1wiJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0FnZW50czogZ2VuZXJhbC1wdXJwb3NlLCBwbGFuLWFnZW50LCBleHBsb3JlLWFnZW50LCBjb2RlLXJldmlld2VyLCBmcm9udGVuZC10ZXN0ZXInKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWdlbnRUeXBlID0gbWF0Y2hbMV0gYXMgQWdlbnRUeXBlO1xuICBjb25zdCB0YXNrID0gbWF0Y2hbMl0ucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XG5cbiAgaWYgKCF0YXNrKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdQbGVhc2UgcHJvdmlkZSBhIHRhc2suJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWdlbnRGYWN0b3J5ID0gbmV3IEFnZW50RmFjdG9yeShwcm92aWRlciwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3QgYWdlbnQgPSBhZ2VudEZhY3RvcnkuY3JlYXRlQWdlbnQoYWdlbnRUeXBlKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5bQWdlbnQ6ICcgKyBhZ2VudFR5cGUgKyAnXScpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUYXNrOiAnICsgdGFzayArICdcXG4nKSk7XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdBZ2VudCB3b3JraW5nLi4uJykuc3RhcnQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZ2VudC5leGVjdXRlKHRhc2ssICh1cGRhdGUpID0+IHtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodXBkYXRlKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoKTtcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgIFxuICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbkFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIC0gJyArIGYpKSk7XG4gICAgICAgIHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ucHVzaCguLi5yZXN1bHQuZmlsZXNNb2RpZmllZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuQWdlbnQgZW5jb3VudGVyZWQgZXJyb3JzOicpKTtcbiAgICAgIHJlc3VsdC5lcnJvcnM/LmZvckVhY2goZSA9PiBjb25zb2xlLmxvZyhjaGFsay5yZWQoJyAgLSAnICsgZSkpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm91dHB1dCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnXFxuT3V0cHV0OicpKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdC5vdXRwdXQpO1xuICAgIH1cblxuICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2luZ2xlQ29tbWFuZChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQ0xJT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICBjb25zdCBhdXRoID0gY29uZmlnTWFuYWdlci5nZXRBdXRoKCk7XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdOb3QgYXV0aGVudGljYXRlZC4gUnVuIGBvZmxvdyBhdXRoYCBmaXJzdC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNhbmRib3hFeGVjdXRvciA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuICBjb25zdCBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgbW9kZWwpO1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfVxuICB9KTtcblxuICBjb252ZXJzYXRpb24uc2V0U3lzdGVtUHJvbXB0KGdldFN5c3RlbVByb21wdCgpKTtcbiAgY29uc3QgcHJvY2Vzc2VkSW5wdXQgPSBhd2FpdCBwcm9jZXNzRmlsZVJlZmVyZW5jZXMocHJvbXB0KTtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnUHJvY2Vzc2luZy4uLicpLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocHJvY2Vzc2VkSW5wdXQpO1xuICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTaGVsbENvbW1hbmQoY29tbWFuZDogc3RyaW5nLCBzYW5kYm94PzogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHNwYXduIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gIHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5wdXNoKGNvbW1hbmQpO1xuICBcbiAgaWYgKHNhbmRib3ggJiYgc2FuZGJveFsnY29uZmlnJ10/LmJhY2tlbmQgIT09ICdub25lJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgICBpZiAocmVzdWx0LnN0ZG91dCkgY29uc29sZS5sb2cocmVzdWx0LnN0ZG91dCk7XG4gICAgICBpZiAocmVzdWx0LnN0ZGVycikgY29uc29sZS5lcnJvcihyZXN1bHQuc3RkZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICBjb25zdCBzaGVsbCA9IGlzV2luZG93cyA/ICdwb3dlcnNoZWxsLmV4ZScgOiAnL2Jpbi9iYXNoJztcbiAgICBjb25zdCBhcmdzID0gaXNXaW5kb3dzID8gWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgY29tbWFuZF0gOiBbJy1jJywgY29tbWFuZF07XG5cbiAgICBjb25zdCBwcm9jID0gc3Bhd24oc2hlbGwsIGFyZ3MsIHtcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKClcbiAgICB9KTtcblxuICAgIHByb2Mub24oJ2Nsb3NlJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZDogJyArIGVyci5tZXNzYWdlKSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBsZXQgcmVzdWx0ID0gaW5wdXQ7XG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoWzFdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG1hdGNoWzBdLCAnXFxuW0ZpbGU6ICcgKyBmaWxlUGF0aCArICddXFxuJyArIGNvbnRlbnQgKyAnXFxuW0VuZCBvZiBmaWxlXVxcbicpO1xuICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5wdXNoKGZpbGVQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnV2FybmluZzogQ291bGQgbm90IHJlYWQgZmlsZSAnICsgZmlsZVBhdGgpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRTeXN0ZW1Qcm9tcHQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBZb3UgYXJlIG9mbG93IENMSSwgYW4gaW50ZXJhY3RpdmUgQ0xJIGFnZW50IHNwZWNpYWxpemluZyBpbiBzb2Z0d2FyZSBlbmdpbmVlcmluZyB0YXNrcy5cblxuWW91ciBwcmltYXJ5IGdvYWwgaXMgdG8gaGVscCB1c2VycyBzYWZlbHkgYW5kIGVmZmljaWVudGx5IGNvbXBsZXRlIHByb2dyYW1taW5nIHRhc2tzLlxuXG4jIENvcmUgQ2FwYWJpbGl0aWVzXG4tIFJlYWQsIHdyaXRlLCBhbmQgZWRpdCBmaWxlc1xuLSBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIFNlYXJjaCBhbmQgYW5hbHl6ZSBjb2RlXG4tIFdlYiBzZWFyY2ggYW5kIGZldGNoIGNvbnRlbnRcbi0gTWFuYWdlIHByb2plY3Qgc3RydWN0dXJlXG4tIExhdW5jaCBzcGVjaWFsaXplZCBzdWItYWdlbnRzXG5cbiMgVG9vbHMgQXZhaWxhYmxlXG4tIHJlYWRfZmlsZTogUmVhZCBmaWxlIGNvbnRlbnRzXG4tIHdyaXRlX2ZpbGU6IFdyaXRlIHRvIGZpbGVzXG4tIGxpc3RfZGlyZWN0b3J5OiBMaXN0IGRpcmVjdG9yeSBjb250ZW50c1xuLSBnbG9iOiBGaW5kIGZpbGVzIGJ5IHBhdHRlcm5cbi0gc2VhcmNoX2ZpbGVfY29udGVudDogU2VhcmNoIHdpdGhpbiBmaWxlc1xuLSBydW5fc2hlbGxfY29tbWFuZDogRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSB3ZWJfc2VhcmNoOiBTZWFyY2ggdGhlIHdlYlxuLSB3ZWJfZmV0Y2g6IEZldGNoIHdlYiBjb250ZW50XG4tIHJlcGxhY2U6IFJlcGxhY2UgdGV4dCBpbiBmaWxlc1xuLSBpbWFnZV9yZWFkOiBBbmFseXplIGltYWdlc1xuLSBwZGZfZXh0cmFjdDogRXh0cmFjdCBjb250ZW50IGZyb20gUERGc1xuLSBhc2tfdXNlcl9xdWVzdGlvbjogQXNrIHVzZXIgZm9yIGlucHV0XG4tIHRhc2s6IExhdW5jaCBzdWItYWdlbnRzXG4tIHNhdmVfbWVtb3J5OiBTYXZlIGluZm9ybWF0aW9uIGZvciBmdXR1cmUgc2Vzc2lvbnNcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBBZnRlciBjb21wbGV0aW5nIGEgY29tcGxleCB0YXNrLCBwcm92aWRlIGEgYnJpZWYgc3VtbWFyeVxuXG5DdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5gO1xufVxuIl19
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBIQSxvREF3TkM7QUF5REQsNENBdUNDO0FBbGJELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQThFO0FBaUI5RSxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFL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cG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlLCBnZXRDdXJyZW50VmVyc2lvbiB9IGZyb20gJy4vdXBkYXRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG1vZGVsPzogc3RyaW5nO1xuICB5b2xvPzogYm9vbGVhbjtcbiAgc2FuZGJveD86IGJvb2xlYW47XG4gIHNob3dUaGlua2luZz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdHMge1xuICB0b29sQ2FsbHNDb3VudDogbnVtYmVyO1xuICBmaWxlc1JlYWQ6IHN0cmluZ1tdO1xuICBmaWxlc1dyaXR0ZW46IHN0cmluZ1tdO1xuICBjb21tYW5kc1J1bjogc3RyaW5nW107XG4gIHN0YXJ0VGltZTogRGF0ZTtcbn1cblxubGV0IHNhbmRib3hFeGVjdXRvcjogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCA9IG51bGw7XG5sZXQgY3VycmVudFNob3dUaGlua2luZyA9IGZhbHNlO1xubGV0IHNlc3Npb25TdGF0czogU2Vzc2lvblN0YXRzID0ge1xuICB0b29sQ2FsbHNDb3VudDogMCxcbiAgZmlsZXNSZWFkOiBbXSxcbiAgZmlsZXNXcml0dGVuOiBbXSxcbiAgY29tbWFuZHNSdW46IFtdLFxuICBzdGFydFRpbWU6IG5ldyBEYXRlKClcbn07XG5sZXQgY29udGV4dFRva2VucyA9IDA7XG5sZXQgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbmxldCBjdXJyZW50TW9kZWwgPSAnZ3B0LTRvJztcblxuLyoqXG4gKiDmmL7npLrnirbmgIHmoI/vvIjlm7rlrprlnKjovpPlhaXmoYbkuIrmlrnvvIlcbiAqL1xuZnVuY3Rpb24gc2hvd1N0YXR1c0JhcigpOiB2b2lkIHtcbiAgY29uc3QgdGVybWluYWxXaWR0aCA9IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODA7XG4gIGNvbnN0IGNvbnRleHRQZXJjZW50ID0gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChjb250ZXh0VG9rZW5zIC8gbWF4Q29udGV4dFRva2VucykgKiAxMDApKTtcbiAgY29uc3QgY29udGV4dENvbG9yID0gY29udGV4dFBlcmNlbnQgPiA4MCA/IGNoYWxrLnJlZCA6IGNvbnRleHRQZXJjZW50ID4gNTAgPyBjaGFsay55ZWxsb3cgOiBjaGFsay5ncmVlbjtcbiAgY29uc3QgdGhpbmtpbmdTdGF0dXMgPSBjdXJyZW50U2hvd1RoaW5raW5nID8gY2hhbGsuY3lhbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpO1xuICBcbiAgLy8g54q25oCB5qCP56ys5LiA6KGMXG4gIGNvbnN0IHN0YXR1c1BhcnRzID0gW1xuICAgIGAke2NoYWxrLmJsdWUoJ01vZGVsOicpfSAke2NoYWxrLndoaXRlKGN1cnJlbnRNb2RlbCl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdDb250ZXh0OicpfSAke2NvbnRleHRDb2xvcihjb250ZXh0UGVyY2VudCArICclJyl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdUaGlua2luZzonKX0gJHt0aGlua2luZ1N0YXR1c31gXG4gIF07XG4gIGNvbnN0IHN0YXR1c0xpbmUxID0gc3RhdHVzUGFydHMuam9pbignICB8ICAnKTtcbiAgXG4gIC8vIOeKtuaAgeagj+esrOS6jOihjCAtIOW9k+WJjeebruW9lVxuICBjb25zdCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWF4RGlyTGVuID0gdGVybWluYWxXaWR0aCAtIDg7XG4gIGNvbnN0IGRpckRpc3BsYXkgPSBjdXJyZW50RGlyLmxlbmd0aCA+IG1heERpckxlbiBcbiAgICA/ICcuLi4nICsgY3VycmVudERpci5zbGljZSgtKG1heERpckxlbiAtIDMpKVxuICAgIDogY3VycmVudERpcjtcbiAgY29uc3Qgc3RhdHVzTGluZTIgPSBgJHtjaGFsay5ibHVlKCdEaXI6Jyl9ICR7Y2hhbGsuZ3JheShkaXJEaXNwbGF5KX1gO1xuICBcbiAgLy8g5omT5Y2w54q25oCB5qCPXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgODApKSkpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMSk7XG4gIGNvbnNvbGUubG9nKHN0YXR1c0xpbmUyKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgODApKSkpO1xufVxuXG5mdW5jdGlvbiBzaG93VGFza1N1bW1hcnkoKTogdm9pZCB7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNlc3Npb25TdGF0cy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgY29uc3Qgc2Vjb25kcyA9IGR1cmF0aW9uICUgNjA7XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJyAgICAgICAgICAgVGFzayBTdW1tYXJ5JykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0R1cmF0aW9uOicpfSAke2NoYWxrLnllbGxvdyhtaW51dGVzICsgJ20gJyArIHNlY29uZHMgKyAncycpfWApO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnVG9vbCBjYWxsczonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50LnRvU3RyaW5nKCkpfWApO1xuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyByZWFkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0ZpbGVzIG1vZGlmaWVkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnQ29tbWFuZHMgcnVuOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ubGVuZ3RoLnRvU3RyaW5nKCkpfWApO1xuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBcbiAgc2Vzc2lvblN0YXRzID0ge1xuICAgIHRvb2xDYWxsc0NvdW50OiAwLFxuICAgIGZpbGVzUmVhZDogW10sXG4gICAgZmlsZXNXcml0dGVuOiBbXSxcbiAgICBjb21tYW5kc1J1bjogW10sXG4gICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEludGVyYWN0aXZlTW9kZShvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDmmL7npLrlvZPliY3niYjmnKxcbiAgY29uc3QgY3VycmVudFZlcnNpb24gPSBhd2FpdCBnZXRDdXJyZW50VmVyc2lvbigpO1xuICBjb25zdCB2ZXJzaW9uRGlzcGxheSA9ICd2JyArIGN1cnJlbnRWZXJzaW9uO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuYmx1ZSgnICBvZmxvdyBDTEkgJyArIGNoYWxrLndoaXRlKHZlcnNpb25EaXNwbGF5KSkpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFR5cGUgL2hlbHAgZm9yIGNvbW1hbmRzLCAvZXhpdCB0byBxdWl0JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG5cbiAgLy8g5qOA5rWL5pu05pawXG4gIGxldCB1cGRhdGVJbmZvOiB7IGhhc1VwZGF0ZTogYm9vbGVhbjsgbGF0ZXN0VmVyc2lvbjogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgdHJ5IHtcbiAgICB1cGRhdGVJbmZvID0gYXdhaXQgY2hlY2tGb3JVcGRhdGVzKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIOW/veeVpeajgOa1i+mUmeivr1xuICB9XG4gIFxuICBpZiAodXBkYXRlSW5mbyAmJiB1cGRhdGVJbmZvLmhhc1VwZGF0ZSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICBOZXcgdmVyc2lvbiBhdmFpbGFibGU6ICcgKyB1cGRhdGVJbmZvLmxhdGVzdFZlcnNpb24pKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFJ1biAvdXBkYXRlIHRvIGluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uJykpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNhbmRib3ggfHwgY29uZmlnTWFuYWdlci5nZXQoJ3NhbmRib3gnKSkge1xuICAgIHRyeSB7XG4gICAgICBzYW5kYm94RXhlY3V0b3IgPSBhd2FpdCBjcmVhdGVTYW5kYm94RXhlY3V0b3IoKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBjdXJyZW50U2hvd1RoaW5raW5nID0gb3B0aW9ucy5zaG93VGhpbmtpbmcgPz8gY29uZmlnTWFuYWdlci5nZXRTaG93VGhpbmtpbmcoKTtcbiAgY3VycmVudE1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuXG4gIGlmIChjdXJyZW50TW9kZWwuaW5jbHVkZXMoJ2dwdC00JykgfHwgY3VycmVudE1vZGVsLmluY2x1ZGVzKCdncHQtNG8nKSkge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG4gIH0gZWxzZSBpZiAoY3VycmVudE1vZGVsLmluY2x1ZGVzKCdkZWVwc2VlaycpKSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDY0MDAwO1xuICB9IGVsc2Uge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG4gIH1cblxuICBsZXQgcHJvdmlkZXI7XG4gIHRyeSB7XG4gICAgcHJvdmlkZXIgPSBjcmVhdGVBSVByb3ZpZGVyKGF1dGgsIGN1cnJlbnRNb2RlbCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdGYWlsZWQgdG8gY3JlYXRlIEFJIHByb3ZpZGVyOiAnICsgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBzaG93VGhpbmtpbmc6IGN1cnJlbnRTaG93VGhpbmtpbmcsXG4gICAgb25Db250ZW50OiAoY29udGVudCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoY2hhbGsud2hpdGUoY29udGVudCkpO1xuICAgIH0sXG4gICAgb25UaGlua2luZzogKHRoaW5raW5nKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFNob3dUaGlua2luZykge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudCsrO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuW1Rvb2w6ICcgKyB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lICsgJ10nKSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhcmdzID0gSlNPTi5wYXJzZSh0b29sQ2FsbC5mdW5jdGlvbi5hcmd1bWVudHMpO1xuICAgICAgICBpZiAodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3JlYWRfZmlsZScgJiYgYXJncy5hYnNvbHV0ZV9wYXRoKSB7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmluY2x1ZGVzKGFyZ3MuYWJzb2x1dGVfcGF0aCkpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdGF0cy5maWxlc1JlYWQucHVzaChhcmdzLmFic29sdXRlX3BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3dyaXRlX2ZpbGUnIHx8IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdyZXBsYWNlJykgJiYgYXJncy5maWxlX3BhdGgpIHtcbiAgICAgICAgICBpZiAoIXNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4uaW5jbHVkZXMoYXJncy5maWxlX3BhdGgpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnB1c2goYXJncy5maWxlX3BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncnVuX3NoZWxsX2NvbW1hbmQnICYmIGFyZ3MuY29tbWFuZCkge1xuICAgICAgICAgIHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5wdXNoKGFyZ3MuY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9LFxuICAgIG9uVG9vbFJlc3VsdDogKHJlc3VsdCkgPT4ge1xuICAgICAgY29udGV4dFRva2VucyArPSBNYXRoLmNlaWwocmVzdWx0Lmxlbmd0aCAvIDQpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29udmVyc2F0aW9uLnNldFN5c3RlbVByb21wdChnZXRTeXN0ZW1Qcm9tcHQoKSk7XG5cbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgLyoqXG4gICAqIOaYvuekuui+k+WFpeaPkOekuu+8iOeKtuaAgeagj+WcqOi+k+WFpeahhuS4iuaWue+8iVxuICAgKiDluIPlsYDpobrluo/vvJpcbiAgICogW+WGheWuueWMuuWfn11cbiAgICogW+eKtuaAgeagj11cbiAgICogPiBb6L6T5YWl5qGGXVxuICAgKi9cbiAgY29uc3Qgc2hvd1Byb21wdCA9ICgpID0+IHtcbiAgICBzaG93U3RhdHVzQmFyKCk7XG4gICAgcmwuc2V0UHJvbXB0KGNoYWxrLmdyZWVuKCc+ICcpKTtcbiAgICBybC5wcm9tcHQoKTtcbiAgfTtcblxuICBzaG93UHJvbXB0KCk7XG5cbiAgcmwub24oJ2xpbmUnLCBhc3luYyAobGluZSkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbGluZS50cmltKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhiBzbGFzaCDlkb3ku6RcbiAgICBpZiAoaXNTbGFzaENvbW1hbmQoaW5wdXQpKSB7XG4gICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJy90aGlua2luZycpIHtcbiAgICAgICAgY3VycmVudFNob3dUaGlua2luZyA9ICFjdXJyZW50U2hvd1RoaW5raW5nO1xuICAgICAgICBjb25maWdNYW5hZ2VyLnNldFNob3dUaGlua2luZyhjdXJyZW50U2hvd1RoaW5raW5nKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1RoaW5raW5nOiAnICsgKGN1cnJlbnRTaG93VGhpbmtpbmcgPyAnT04nIDogJ09GRicpKSk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJy9zdW1tYXJ5Jykge1xuICAgICAgICBzaG93VGFza1N1bW1hcnkoKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3VwZGF0ZScpIHtcbiAgICAgICAgYXdhaXQgcGVyZm9ybVVwZGF0ZShmYWxzZSk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaG91bGRDb250aW51ZSA9IGF3YWl0IGV4ZWN1dGVTbGFzaENvbW1hbmQoaW5wdXQsIHtcbiAgICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgICBybCxcbiAgICAgICAgY29uZmlnTWFuYWdlclxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghc2hvdWxkQ29udGludWUpIHtcbiAgICAgICAgcmwuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g5aSE55CGIGFnZW50IOiwg+eUqFxuICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgIGF3YWl0IGhhbmRsZUFnZW50Q2FsbChpbnB1dCwgcHJvdmlkZXIpO1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhiBzaGVsbCDlkb3ku6RcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIScpKSB7XG4gICAgICBhd2FpdCBleGVjdXRlU2hlbGxDb21tYW5kKGlucHV0LnNsaWNlKDEpLCBzYW5kYm94RXhlY3V0b3IpO1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhuaZrumAmuWvueivnVxuICAgIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKGlucHV0KTtcbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdUaGlua2luZy4uLicpLnN0YXJ0KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgXG4gICAgICBpZiAoc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50ID49IDMpIHtcbiAgICAgICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0VG9rZW5zICs9IE1hdGguY2VpbChyZXNwb25zZS5sZW5ndGggLyA0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2hvd1Byb21wdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3JNZXNzYWdlKSk7XG4gICAgICBcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMCcpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ2hlY2sgQVBJIGtleSBhbmQgbW9kZWwgbmFtZSwgb3IgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQXV0aGVudGljYXRpb24gZmFpbGVkLCBydW4gXCJvZmxvdyBhdXRoXCInKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDI5JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdSYXRlIGxpbWl0LCBwbGVhc2Ugd2FpdCBhbmQgcmV0cnknKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJsLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBZ2VudENhbGwoaW5wdXQ6IHN0cmluZywgcHJvdmlkZXI6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBmb3JtYXQuIFVzZTogJGFnZW50LXR5cGUgXCJ0YXNrXCInKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzay4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBuZXcgQWdlbnRGYWN0b3J5KHByb3ZpZGVyLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBhZ2VudCA9IGFnZW50RmFjdG9yeS5jcmVhdGVBZ2VudChhZ2VudFR5cGUpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbltBZ2VudDogJyArIGFnZW50VHlwZSArICddJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1Rhc2s6ICcgKyB0YXNrICsgJ1xcbicpKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuQWdlbnQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpKTtcbiAgICAgIGlmIChyZXN1bHQuZmlsZXNNb2RpZmllZCAmJiByZXN1bHQuZmlsZXNNb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0ZpbGVzIG1vZGlmaWVkOicpKTtcbiAgICAgICAgcmVzdWx0LmZpbGVzTW9kaWZpZWQuZm9yRWFjaChmID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgLSAnICsgZikpKTtcbiAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKC4uLnJlc3VsdC5maWxlc01vZGlmaWVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG5BZ2VudCBlbmNvdW50ZXJlZCBlcnJvcnM6JykpO1xuICAgICAgcmVzdWx0LmVycm9ycz8uZm9yRWFjaChlID0+IGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnICAtICcgKyBlKSkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQub3V0cHV0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdcXG5PdXRwdXQ6JykpO1xuICAgICAgY29uc29sZS5sb2cocmVzdWx0Lm91dHB1dCk7XG4gICAgfVxuXG4gICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaW5nbGVDb21tYW5kKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhwcm9tcHQpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdQcm9jZXNzaW5nLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNoZWxsQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNhbmRib3g/OiBTYW5kYm94RXhlY3V0b3IgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLnB1c2goY29tbWFuZCk7XG4gIFxuICBpZiAoc2FuZGJveCAmJiBzYW5kYm94Wydjb25maWcnXT8uYmFja2VuZCAhPT0gJ25vbmUnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlY3V0ZShjb21tYW5kLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIGlmIChyZXN1bHQuc3Rkb3V0KSBjb25zb2xlLmxvZyhyZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmIChyZXN1bHQuc3RkZXJyKSBjb25zb2xlLmVycm9yKHJlc3VsdC5zdGRlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1dpbmRvd3MgPyBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBjb21tYW5kXSA6IFsnLWMnLCBjb21tYW5kXTtcblxuICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgYXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKVxuICAgIH0pO1xuXG4gICAgcHJvYy5vbignY2xvc2UnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRmFpbGVkOiAnICsgZXJyLm1lc3NhZ2UpKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVJlZlJlZ2V4ID0gL0AoW15cXHNdKykvZztcbiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoQWxsKGZpbGVSZWZSZWdleCk7XG4gIGxldCByZXN1bHQgPSBpbnB1dDtcbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gbWF0Y2hbMV07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobWF0Y2hbMF0sICdcXG5bRmlsZTogJyArIGZpbGVQYXRoICsgJ11cXG4nICsgY29udGVudCArICdcXG5bRW5kIG9mIGZpbGVdXFxuJyk7XG4gICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goZmlsZVBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXYXJuaW5nOiBDb3VsZCBub3QgcmVhZCBmaWxlICcgKyBmaWxlUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFN5c3RlbVByb21wdCgpOiBzdHJpbmcge1xuICByZXR1cm4gYFlvdSBhcmUgb2Zsb3cgQ0xJLCBhbiBpbnRlcmFjdGl2ZSBDTEkgYWdlbnQgc3BlY2lhbGl6aW5nIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nIHRhc2tzLlxuXG5Zb3VyIHByaW1hcnkgZ29hbCBpcyB0byBoZWxwIHVzZXJzIHNhZmVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgcHJvZ3JhbW1pbmcgdGFza3MuXG5cbiMgQ29yZSBDYXBhYmlsaXRpZXNcbi0gUmVhZCwgd3JpdGUsIGFuZCBlZGl0IGZpbGVzXG4tIEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gU2VhcmNoIGFuZCBhbmFseXplIGNvZGVcbi0gV2ViIHNlYXJjaCBhbmQgZmV0Y2ggY29udGVudFxuLSBNYW5hZ2UgcHJvamVjdCBzdHJ1Y3R1cmVcbi0gTGF1bmNoIHNwZWNpYWxpemVkIHN1Yi1hZ2VudHNcblxuIyBUb29scyBBdmFpbGFibGVcbi0gcmVhZF9maWxlOiBSZWFkIGZpbGUgY29udGVudHNcbi0gd3JpdGVfZmlsZTogV3JpdGUgdG8gZmlsZXNcbi0gbGlzdF9kaXJlY3Rvcnk6IExpc3QgZGlyZWN0b3J5IGNvbnRlbnRzXG4tIGdsb2I6IEZpbmQgZmlsZXMgYnkgcGF0dGVyblxuLSBzZWFyY2hfZmlsZV9jb250ZW50OiBTZWFyY2ggd2l0aGluIGZpbGVzXG4tIHJ1bl9zaGVsbF9jb21tYW5kOiBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIHdlYl9zZWFyY2g6IFNlYXJjaCB0aGUgd2ViXG4tIHdlYl9mZXRjaDogRmV0Y2ggd2ViIGNvbnRlbnRcbi0gcmVwbGFjZTogUmVwbGFjZSB0ZXh0IGluIGZpbGVzXG4tIGltYWdlX3JlYWQ6IEFuYWx5emUgaW1hZ2VzXG4tIHBkZl9leHRyYWN0OiBFeHRyYWN0IGNvbnRlbnQgZnJvbSBQREZzXG4tIGFza191c2VyX3F1ZXN0aW9uOiBBc2sgdXNlciBmb3IgaW5wdXRcbi0gdGFzazogTGF1bmNoIHN1Yi1hZ2VudHNcbi0gc2F2ZV9tZW1vcnk6IFNhdmUgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZSBzZXNzaW9uc1xuXG4jIEd1aWRlbGluZXNcbjEuIEJlIGNvbmNpc2UgYW5kIGhlbHBmdWxcbjIuIEFsd2F5cyBleHBsYWluIHdoYXQgeW91J3JlIGRvaW5nIGJlZm9yZSB1c2luZyB0b29sc1xuMy4gQXNrIGZvciBjbGFyaWZpY2F0aW9uIHdoZW4gbmVlZGVkXG40LiBQcmVmZXIgZWRpdGluZyBleGlzdGluZyBmaWxlcyBvdmVyIGNyZWF0aW5nIG5ldyBvbmVzXG41LiBVc2UgYXBwcm9wcmlhdGUgdG9vbHMgZm9yIGVhY2ggdGFza1xuNi4gVmVyaWZ5IGNoYW5nZXMgYWZ0ZXIgbWFraW5nIHRoZW1cbjcuIEFmdGVyIGNvbXBsZXRpbmcgYSBjb21wbGV4IHRhc2ssIHByb3ZpZGUgYSBicmllZiBzdW1tYXJ5XG5cbkN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk6ICR7cHJvY2Vzcy5jd2QoKX1cbmA7XG59XG4iXX0=
|
package/dist/updater.d.ts
CHANGED
|
@@ -8,13 +8,16 @@ interface UpdateInfo {
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function getCurrentVersion(): Promise<string>;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 检查是否有更新(不使用缓存,每次都检查)
|
|
12
12
|
*/
|
|
13
13
|
export declare function checkForUpdates(): Promise<UpdateInfo>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 后台执行更新
|
|
16
16
|
*/
|
|
17
|
-
export declare function performBackgroundUpdate(
|
|
17
|
+
export declare function performBackgroundUpdate(): Promise<{
|
|
18
|
+
success: boolean;
|
|
19
|
+
message: string;
|
|
20
|
+
}>;
|
|
18
21
|
/**
|
|
19
22
|
* 手动执行更新
|
|
20
23
|
*/
|
|
@@ -22,8 +25,4 @@ export declare function performUpdate(silent?: boolean): Promise<{
|
|
|
22
25
|
success: boolean;
|
|
23
26
|
message: string;
|
|
24
27
|
}>;
|
|
25
|
-
/**
|
|
26
|
-
* 检查更新是否已完成
|
|
27
|
-
*/
|
|
28
|
-
export declare function isUpdateCompleted(): boolean;
|
|
29
28
|
export {};
|
package/dist/updater.js
CHANGED
|
@@ -7,21 +7,17 @@ exports.getCurrentVersion = getCurrentVersion;
|
|
|
7
7
|
exports.checkForUpdates = checkForUpdates;
|
|
8
8
|
exports.performBackgroundUpdate = performBackgroundUpdate;
|
|
9
9
|
exports.performUpdate = performUpdate;
|
|
10
|
-
exports.isUpdateCompleted = isUpdateCompleted;
|
|
11
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
12
11
|
const child_process_1 = require("child_process");
|
|
13
12
|
const util_1 = require("util");
|
|
14
13
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
15
14
|
const PACKAGE_NAME = '@oflow-ai/oflow-cli';
|
|
16
15
|
const NPM_REGISTRY = 'https://registry.npmjs.org';
|
|
17
|
-
let updateInProgress = false;
|
|
18
|
-
let updateCompleted = false;
|
|
19
16
|
/**
|
|
20
17
|
* 获取当前安装的版本
|
|
21
18
|
*/
|
|
22
19
|
async function getCurrentVersion() {
|
|
23
20
|
try {
|
|
24
|
-
// 从已安装的包获取版本
|
|
25
21
|
const { stdout } = await execAsync(`npm list -g ${PACKAGE_NAME} --depth=0 --json`, {
|
|
26
22
|
timeout: 5000
|
|
27
23
|
});
|
|
@@ -32,9 +28,9 @@ async function getCurrentVersion() {
|
|
|
32
28
|
}
|
|
33
29
|
}
|
|
34
30
|
catch {
|
|
35
|
-
//
|
|
31
|
+
// 忽略错误
|
|
36
32
|
}
|
|
37
|
-
//
|
|
33
|
+
// 备用:从本地 package.json 读取
|
|
38
34
|
try {
|
|
39
35
|
const fs = require('fs');
|
|
40
36
|
const path = require('path');
|
|
@@ -44,9 +40,7 @@ async function getCurrentVersion() {
|
|
|
44
40
|
return packageJson.version;
|
|
45
41
|
}
|
|
46
42
|
}
|
|
47
|
-
catch {
|
|
48
|
-
// 忽略错误
|
|
49
|
-
}
|
|
43
|
+
catch { }
|
|
50
44
|
return '0.0.0';
|
|
51
45
|
}
|
|
52
46
|
/**
|
|
@@ -62,20 +56,25 @@ async function getLatestVersion() {
|
|
|
62
56
|
catch {
|
|
63
57
|
try {
|
|
64
58
|
const https = require('https');
|
|
65
|
-
return new Promise((resolve
|
|
66
|
-
https.get(`${NPM_REGISTRY}/${PACKAGE_NAME.replace('/', '%2F')}/latest`, (res) => {
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
const req = https.get(`${NPM_REGISTRY}/${PACKAGE_NAME.replace('/', '%2F')}/latest`, (res) => {
|
|
67
61
|
let data = '';
|
|
68
62
|
res.on('data', (chunk) => { data += chunk; });
|
|
69
63
|
res.on('end', () => {
|
|
70
64
|
try {
|
|
71
65
|
const json = JSON.parse(data);
|
|
72
|
-
resolve(json.version);
|
|
66
|
+
resolve(json.version || '0.0.0');
|
|
73
67
|
}
|
|
74
68
|
catch {
|
|
75
|
-
|
|
69
|
+
resolve('0.0.0');
|
|
76
70
|
}
|
|
77
71
|
});
|
|
78
|
-
})
|
|
72
|
+
});
|
|
73
|
+
req.on('error', () => resolve('0.0.0'));
|
|
74
|
+
req.setTimeout(5000, () => {
|
|
75
|
+
req.destroy();
|
|
76
|
+
resolve('0.0.0');
|
|
77
|
+
});
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
80
|
catch {
|
|
@@ -84,7 +83,7 @@ async function getLatestVersion() {
|
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
85
|
/**
|
|
87
|
-
*
|
|
86
|
+
* 比较版本号,返回 -1 (v1 < v2), 0 (v1 == v2), 1 (v1 > v2)
|
|
88
87
|
*/
|
|
89
88
|
function compareVersions(v1, v2) {
|
|
90
89
|
const parts1 = v1.split('.').map(Number);
|
|
@@ -100,75 +99,32 @@ function compareVersions(v1, v2) {
|
|
|
100
99
|
return 0;
|
|
101
100
|
}
|
|
102
101
|
/**
|
|
103
|
-
*
|
|
102
|
+
* 检查是否有更新(不使用缓存,每次都检查)
|
|
104
103
|
*/
|
|
105
104
|
async function checkForUpdates() {
|
|
106
105
|
const currentVersion = await getCurrentVersion();
|
|
107
|
-
// 检查缓存(每天只检查一次)
|
|
108
|
-
const cacheKey = 'oflow_last_update_check';
|
|
109
|
-
const cachedData = getCachedUpdateInfo(cacheKey);
|
|
110
|
-
if (cachedData && Date.now() - cachedData.timestamp < 24 * 60 * 60 * 1000) {
|
|
111
|
-
return {
|
|
112
|
-
hasUpdate: compareVersions(currentVersion, cachedData.latestVersion) < 0,
|
|
113
|
-
currentVersion,
|
|
114
|
-
latestVersion: cachedData.latestVersion
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
106
|
const latestVersion = await getLatestVersion();
|
|
118
|
-
|
|
119
|
-
setCachedUpdateInfo(cacheKey, {
|
|
120
|
-
latestVersion,
|
|
121
|
-
timestamp: Date.now()
|
|
122
|
-
});
|
|
107
|
+
const hasUpdate = compareVersions(currentVersion, latestVersion) < 0;
|
|
123
108
|
return {
|
|
124
|
-
hasUpdate
|
|
109
|
+
hasUpdate,
|
|
125
110
|
currentVersion,
|
|
126
111
|
latestVersion
|
|
127
112
|
};
|
|
128
113
|
}
|
|
129
114
|
/**
|
|
130
|
-
*
|
|
115
|
+
* 后台执行更新
|
|
131
116
|
*/
|
|
132
|
-
function performBackgroundUpdate(
|
|
133
|
-
|
|
134
|
-
|
|
117
|
+
async function performBackgroundUpdate() {
|
|
118
|
+
try {
|
|
119
|
+
await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, {
|
|
120
|
+
timeout: 60000
|
|
121
|
+
});
|
|
122
|
+
return { success: true, message: 'Update completed' };
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
126
|
+
return { success: false, message: errorMsg };
|
|
135
127
|
}
|
|
136
|
-
updateInProgress = true;
|
|
137
|
-
// 使用 spawn 在后台执行更新
|
|
138
|
-
const updateProcess = (0, child_process_1.spawn)('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
|
|
139
|
-
detached: true,
|
|
140
|
-
stdio: 'ignore',
|
|
141
|
-
shell: true
|
|
142
|
-
});
|
|
143
|
-
updateProcess.unref();
|
|
144
|
-
updateProcess.on('error', () => {
|
|
145
|
-
updateInProgress = false;
|
|
146
|
-
onComplete?.(false);
|
|
147
|
-
});
|
|
148
|
-
// 设置超时检查
|
|
149
|
-
setTimeout(async () => {
|
|
150
|
-
try {
|
|
151
|
-
const { stdout } = await execAsync(`npm list -g ${PACKAGE_NAME} --depth=0 --json`, {
|
|
152
|
-
timeout: 5000
|
|
153
|
-
});
|
|
154
|
-
const data = JSON.parse(stdout);
|
|
155
|
-
const newVersion = data?.dependencies?.[PACKAGE_NAME]?.version;
|
|
156
|
-
if (newVersion) {
|
|
157
|
-
const updateInfo = await checkForUpdates();
|
|
158
|
-
if (!updateInfo.hasUpdate) {
|
|
159
|
-
updateCompleted = true;
|
|
160
|
-
updateInProgress = false;
|
|
161
|
-
onComplete?.(true);
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
167
|
-
// 忽略错误
|
|
168
|
-
}
|
|
169
|
-
updateInProgress = false;
|
|
170
|
-
onComplete?.(false);
|
|
171
|
-
}, 30000);
|
|
172
128
|
}
|
|
173
129
|
/**
|
|
174
130
|
* 手动执行更新
|
|
@@ -178,7 +134,7 @@ async function performUpdate(silent = false) {
|
|
|
178
134
|
console.log(chalk_1.default.cyan('\nUpdating oflow CLI...\n'));
|
|
179
135
|
}
|
|
180
136
|
try {
|
|
181
|
-
|
|
137
|
+
await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, {
|
|
182
138
|
timeout: 60000
|
|
183
139
|
});
|
|
184
140
|
if (!silent) {
|
|
@@ -196,53 +152,4 @@ async function performUpdate(silent = false) {
|
|
|
196
152
|
return { success: false, message: errorMsg };
|
|
197
153
|
}
|
|
198
154
|
}
|
|
199
|
-
/**
|
|
200
|
-
* 检查更新是否已完成
|
|
201
|
-
*/
|
|
202
|
-
function isUpdateCompleted() {
|
|
203
|
-
return updateCompleted;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* 获取缓存的更新信息
|
|
207
|
-
*/
|
|
208
|
-
function getCachedUpdateInfo(key) {
|
|
209
|
-
try {
|
|
210
|
-
const fs = require('fs');
|
|
211
|
-
const path = require('path');
|
|
212
|
-
const os = require('os');
|
|
213
|
-
const cacheFile = path.join(os.homedir(), '.oflow', 'update-cache.json');
|
|
214
|
-
if (fs.existsSync(cacheFile)) {
|
|
215
|
-
const data = JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));
|
|
216
|
-
return data[key] || null;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
// Ignore cache errors
|
|
221
|
-
}
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* 缓存更新信息
|
|
226
|
-
*/
|
|
227
|
-
function setCachedUpdateInfo(key, value) {
|
|
228
|
-
try {
|
|
229
|
-
const fs = require('fs');
|
|
230
|
-
const path = require('path');
|
|
231
|
-
const os = require('os');
|
|
232
|
-
const cacheDir = path.join(os.homedir(), '.oflow');
|
|
233
|
-
const cacheFile = path.join(cacheDir, 'update-cache.json');
|
|
234
|
-
if (!fs.existsSync(cacheDir)) {
|
|
235
|
-
fs.mkdirSync(cacheDir, { recursive: true });
|
|
236
|
-
}
|
|
237
|
-
let data = {};
|
|
238
|
-
if (fs.existsSync(cacheFile)) {
|
|
239
|
-
data = JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));
|
|
240
|
-
}
|
|
241
|
-
data[key] = value;
|
|
242
|
-
fs.writeFileSync(cacheFile, JSON.stringify(data, null, 2));
|
|
243
|
-
}
|
|
244
|
-
catch {
|
|
245
|
-
// Ignore cache errors
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBcUJBLDhDQTZCQztBQXFERCwwQ0E0QkM7QUFLRCwwREE2Q0M7QUFLRCxzQ0F5QkM7QUFLRCw4Q0FFQztBQTFORCxrREFBMEI7QUFDMUIsaURBQTRDO0FBQzVDLCtCQUFpQztBQUVqQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGdCQUFTLEVBQUMsb0JBQUksQ0FBQyxDQUFDO0FBRWxDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDO0FBQzNDLE1BQU0sWUFBWSxHQUFHLDRCQUE0QixDQUFDO0FBUWxELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQzdCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU1Qjs7R0FFRztBQUNJLEtBQUssVUFBVSxpQkFBaUI7SUFDckMsSUFBSSxDQUFDO1FBQ0gsYUFBYTtRQUNiLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLEVBQUU7WUFDakYsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsY0FBYztJQUNoQixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENB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LElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ25DLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNCQUFzQjtJQUN4QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBleGVjLCBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5cbmNvbnN0IGV4ZWNBc3luYyA9IHByb21pc2lmeShleGVjKTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gJ0BvZmxvdy1haS9vZmxvdy1jbGknO1xuY29uc3QgTlBNX1JFR0lTVFJZID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJztcblxuaW50ZXJmYWNlIFVwZGF0ZUluZm8ge1xuICBoYXNVcGRhdGU6IGJvb2xlYW47XG4gIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmc7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZztcbn1cblxubGV0IHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbmxldCB1cGRhdGVDb21wbGV0ZWQgPSBmYWxzZTtcblxuLyoqXG4gKiDojrflj5blvZPliY3lronoo4XnmoTniYjmnKxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgLy8g5LuO5bey5a6J6KOF55qE5YyF6I635Y+W54mI5pysXG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNBc3luYyhgbnBtIGxpc3QgLWcgJHtQQUNLQUdFX05BTUV9IC0tZGVwdGg9MCAtLWpzb25gLCB7XG4gICAgICB0aW1lb3V0OiA1MDAwXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICBjb25zdCB2ZXJzaW9uID0gZGF0YT8uZGVwZW5kZW5jaWVzPy5bUEFDS0FHRV9OQU1FXT8udmVyc2lvbjtcbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyDlv73nlaXplJnor6/vvIzlsJ3or5Xlhbbku5bmlrnlvI9cbiAgfVxuXG4gIC8vIOWkh+eUqOaWueahiO+8muS7juacrOWcsCBwYWNrYWdlLmpzb24g6K+75Y+WXG4gIHRyeSB7XG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb24udmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIOW/veeVpemUmeivr1xuICB9XG5cbiAgcmV0dXJuICcwLjAuMCc7XG59XG5cbi8qKlxuICog5LuObnBt6I635Y+W5pyA5paw54mI5pysXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gdmlldyAke1BBQ0tBR0VfTkFNRX0gdmVyc2lvbmAsIHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBodHRwcy5nZXQoYCR7TlBNX1JFR0lTVFJZfS8ke1BBQ0tBR0VfTkFNRS5yZXBsYWNlKCcvJywgJyUyRicpfS9sYXRlc3RgLCAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICAgIHJlcy5vbignZGF0YScsIChjaHVuazogc3RyaW5nKSA9PiB7IGRhdGEgKz0gY2h1bms7IH0pO1xuICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoanNvbi52ZXJzaW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnMC4wLjAnO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOavlOi+g+eJiOacrOWPt1xuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnModjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzMSA9IHYxLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGNvbnN0IHBhcnRzMiA9IHYyLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChwYXJ0czEubGVuZ3RoLCBwYXJ0czIubGVuZ3RoKTsgaSsrKSB7XG4gICAgY29uc3QgcDEgPSBwYXJ0czFbaV0gfHwgMDtcbiAgICBjb25zdCBwMiA9IHBhcnRzMltpXSB8fCAwO1xuICAgIGlmIChwMSA+IHAyKSByZXR1cm4gMTtcbiAgICBpZiAocDEgPCBwMikgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIOajgOafpeaYr+WQpuacieabtOaWsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JVcGRhdGVzKCk6IFByb21pc2U8VXBkYXRlSW5mbz4ge1xuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIFxuICAvLyDmo4Dmn6XnvJPlrZjvvIjmr4/lpKnlj6rmo4Dmn6XkuIDmrKHvvIlcbiAgY29uc3QgY2FjaGVLZXkgPSAnb2Zsb3dfbGFzdF91cGRhdGVfY2hlY2snO1xuICBjb25zdCBjYWNoZWREYXRhID0gZ2V0Q2FjaGVkVXBkYXRlSW5mbyhjYWNoZUtleSk7XG4gIFxuICBpZiAoY2FjaGVkRGF0YSAmJiBEYXRlLm5vdygpIC0gY2FjaGVkRGF0YS50aW1lc3RhbXAgPCAyNCAqIDYwICogNjAgKiAxMDAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc1VwZGF0ZTogY29tcGFyZVZlcnNpb25zKGN1cnJlbnRWZXJzaW9uLCBjYWNoZWREYXRhLmxhdGVzdFZlcnNpb24pIDwgMCxcbiAgICAgIGN1cnJlbnRWZXJzaW9uLFxuICAgICAgbGF0ZXN0VmVyc2lvbjogY2FjaGVkRGF0YS5sYXRlc3RWZXJzaW9uXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RWZXJzaW9uKCk7XG4gIFxuICAvLyDnvJPlrZjnu5PmnpxcbiAgc2V0Q2FjaGVkVXBkYXRlSW5mbyhjYWNoZUtleSwgeyBcbiAgICBsYXRlc3RWZXJzaW9uLCBcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCkgXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXBkYXRlOiBjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pIDwgMCxcbiAgICBjdXJyZW50VmVyc2lvbixcbiAgICBsYXRlc3RWZXJzaW9uXG4gIH07XG59XG5cbi8qKlxuICog5ZCO5Y+w5omn6KGM5pu05paw77yI5LiN6Zi75aGe5b2T5YmNIHNlc3Npb27vvIlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1CYWNrZ3JvdW5kVXBkYXRlKG9uQ29tcGxldGU/OiAoc3VjY2VzczogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xuICBpZiAodXBkYXRlSW5Qcm9ncmVzcyB8fCB1cGRhdGVDb21wbGV0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcblxuICAvLyDkvb/nlKggc3Bhd24g5Zyo5ZCO5Y+w5omn6KGM5pu05pawXG4gIGNvbnN0IHVwZGF0ZVByb2Nlc3MgPSBzcGF3bignbnBtJywgWydpbnN0YWxsJywgJy1nJywgYCR7UEFDS0FHRV9OQU1FfUBsYXRlc3RgXSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICBzaGVsbDogdHJ1ZVxuICB9KTtcblxuICB1cGRhdGVQcm9jZXNzLnVucmVmKCk7XG5cbiAgdXBkYXRlUHJvY2Vzcy5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIG9uQ29tcGxldGU/LihmYWxzZSk7XG4gIH0pO1xuXG4gIC8vIOiuvue9rui2heaXtuajgOafpVxuICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNBc3luYyhgbnBtIGxpc3QgLWcgJHtQQUNLQUdFX05BTUV9IC0tZGVwdGg9MCAtLWpzb25gLCB7XG4gICAgICAgIHRpbWVvdXQ6IDUwMDBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBkYXRhPy5kZXBlbmRlbmNpZXM/LltQQUNLQUdFX05BTUVdPy52ZXJzaW9uO1xuICAgICAgXG4gICAgICBpZiAobmV3VmVyc2lvbikge1xuICAgICAgICBjb25zdCB1cGRhdGVJbmZvID0gYXdhaXQgY2hlY2tGb3JVcGRhdGVzKCk7XG4gICAgICAgIGlmICghdXBkYXRlSW5mby5oYXNVcGRhdGUpIHtcbiAgICAgICAgICB1cGRhdGVDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICBvbkNvbXBsZXRlPy4odHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyDlv73nlaXplJnor69cbiAgICB9XG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIG9uQ29tcGxldGU/LihmYWxzZSk7XG4gIH0sIDMwMDAwKTtcbn1cblxuLyoqXG4gKiDmiYvliqjmiafooYzmm7TmlrBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1VcGRhdGUoc2lsZW50OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgaWYgKCFzaWxlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5VcGRhdGluZyBvZmxvdyBDTEkuLi5cXG4nKSk7XG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gaW5zdGFsbCAtZyAke1BBQ0tBR0VfTkFNRX1AbGF0ZXN0YCwge1xuICAgICAgdGltZW91dDogNjAwMDBcbiAgICB9KTtcbiAgICBcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbm9mbG93IENMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQbGVhc2UgcmVzdGFydCBvZmxvdyB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uLlxcbicpKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogJ1VwZGF0ZSBjb21wbGV0ZWQnIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuVXBkYXRlIGZhaWxlZCcpKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1lvdSBjYW4gbWFudWFsbHkgdXBkYXRlIHdpdGg6IG5wbSBpbnN0YWxsIC1nIEBvZmxvdy1haS9vZmxvdy1jbGlAbGF0ZXN0XFxuJykpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogZXJyb3JNc2cgfTtcbiAgfVxufVxuXG4vKipcbiAqIOajgOafpeabtOaWsOaYr+WQpuW3suWujOaIkFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVcGRhdGVDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cGRhdGVDb21wbGV0ZWQ7XG59XG5cbi8qKlxuICog6I635Y+W57yT5a2Y55qE5pu05paw5L+h5oGvXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFVwZGF0ZUluZm8oa2V5OiBzdHJpbmcpOiB7IGxhdGVzdFZlcnNpb246IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfSB8IG51bGwge1xuICB0cnkge1xuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICBcbiAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93JywgJ3VwZGF0ZS1jYWNoZS5qc29uJyk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY2FjaGVGaWxlKSkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIOe8k+WtmOabtOaWsOS/oeaBr1xuICovXG5mdW5jdGlvbiBzZXRDYWNoZWRVcGRhdGVJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogeyBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICBjb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG4gICAgXG4gICAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93Jyk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGNhY2hlRGlyLCAndXBkYXRlLWNhY2hlLmpzb24nKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBcbiAgICBsZXQgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNhY2hlRmlsZSkpIHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjYWNoZUZpbGUsICd1dGYtOCcpKTtcbiAgICB9XG4gICAgXG4gICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgZnMud3JpdGVGaWxlU3luYyhjYWNoZUZpbGUsIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG59Il19
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBa0JBLDhDQTBCQztBQTBERCwwQ0FXQztBQUtELDBEQVVDO0FBS0Qsc0NBeUJDO0FBOUpELGtEQUEwQjtBQUMxQixpREFBNEM7QUFDNUMsK0JBQWlDO0FBRWpDLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQVMsRUFBQyxvQkFBSSxDQUFDLENBQUM7QUFFbEMsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSxZQUFZLEdBQUcsNEJBQTRCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLEVBQUU7WUFDakYsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTztJQUNULENBQUM7SUFFRCx5QkFBeUI7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbkUsSUFB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ZXhlYywgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuXG5jb25zdCBleGVjQXN5bmMgPSBwcm9taXNpZnkoZXhlYyk7XG5cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAb2Zsb3ctYWkvb2Zsb3ctY2xpJztcbmNvbnN0IE5QTV9SRUdJU1RSWSA9ICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZyc7XG5cbmludGVyZmFjZSBVcGRhdGVJbmZvIHtcbiAgaGFzVXBkYXRlOiBib29sZWFuO1xuICBjdXJyZW50VmVyc2lvbjogc3RyaW5nO1xuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICog6I635Y+W5b2T5YmN5a6J6KOF55qE54mI5pysXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50VmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjQXN5bmMoYG5wbSBsaXN0IC1nICR7UEFDS0FHRV9OQU1FfSAtLWRlcHRoPTAgLS1qc29uYCwge1xuICAgICAgdGltZW91dDogNTAwMFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgY29uc3QgdmVyc2lvbiA9IGRhdGE/LmRlcGVuZGVuY2llcz8uW1BBQ0tBR0VfTkFNRV0/LnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8g5b+955Wl6ZSZ6K+vXG4gIH1cblxuICAvLyDlpIfnlKjvvJrku47mnKzlnLAgcGFja2FnZS5qc29uIOivu+WPllxuICB0cnkge1xuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIHt9XG5cbiAgcmV0dXJuICcwLjAuMCc7XG59XG5cbi8qKlxuICog5LuObnBt6I635Y+W5pyA5paw54mI5pysXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gdmlldyAke1BBQ0tBR0VfTkFNRX0gdmVyc2lvbmAsIHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgcmVxID0gaHR0cHMuZ2V0KGAke05QTV9SRUdJU1RSWX0vJHtQQUNLQUdFX05BTUUucmVwbGFjZSgnLycsICclMkYnKX0vbGF0ZXN0YCwgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSAnJztcbiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoY2h1bms6IHN0cmluZykgPT4geyBkYXRhICs9IGNodW5rOyB9KTtcbiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICByZXNvbHZlKGpzb24udmVyc2lvbiB8fCAnMC4wLjAnKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZXNvbHZlKCcwLjAuMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsICgpID0+IHJlc29sdmUoJzAuMC4wJykpO1xuICAgICAgICByZXEuc2V0VGltZW91dCg1MDAwLCAoKSA9PiB7XG4gICAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgICAgICByZXNvbHZlKCcwLjAuMCcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcwLjAuMCc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICog5q+U6L6D54mI5pys5Y+377yM6L+U5ZueIC0xICh2MSA8IHYyKSwgMCAodjEgPT0gdjIpLCAxICh2MSA+IHYyKVxuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnModjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzMSA9IHYxLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGNvbnN0IHBhcnRzMiA9IHYyLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChwYXJ0czEubGVuZ3RoLCBwYXJ0czIubGVuZ3RoKTsgaSsrKSB7XG4gICAgY29uc3QgcDEgPSBwYXJ0czFbaV0gfHwgMDtcbiAgICBjb25zdCBwMiA9IHBhcnRzMltpXSB8fCAwO1xuICAgIGlmIChwMSA+IHAyKSByZXR1cm4gMTtcbiAgICBpZiAocDEgPCBwMikgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIOajgOafpeaYr+WQpuacieabtOaWsO+8iOS4jeS9v+eUqOe8k+WtmO+8jOavj+asoemDveajgOafpe+8iVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JVcGRhdGVzKCk6IFByb21pc2U8VXBkYXRlSW5mbz4ge1xuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RWZXJzaW9uKCk7XG4gIFxuICBjb25zdCBoYXNVcGRhdGUgPSBjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pIDwgMDtcblxuICByZXR1cm4ge1xuICAgIGhhc1VwZGF0ZSxcbiAgICBjdXJyZW50VmVyc2lvbixcbiAgICBsYXRlc3RWZXJzaW9uXG4gIH07XG59XG5cbi8qKlxuICog5ZCO5Y+w5omn6KGM5pu05pawXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQmFja2dyb3VuZFVwZGF0ZSgpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQXN5bmMoYG5wbSBpbnN0YWxsIC1nICR7UEFDS0FHRV9OQU1FfUBsYXRlc3RgLCB7XG4gICAgICB0aW1lb3V0OiA2MDAwMFxuICAgIH0pO1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICdVcGRhdGUgY29tcGxldGVkJyB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvck1zZyB9O1xuICB9XG59XG5cbi8qKlxuICog5omL5Yqo5omn6KGM5pu05pawXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJmb3JtVXBkYXRlKHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gIGlmICghc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuVXBkYXRpbmcgb2Zsb3cgQ0xJLi4uXFxuJykpO1xuICB9XG4gIFxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNBc3luYyhgbnBtIGluc3RhbGwgLWcgJHtQQUNLQUdFX05BTUV9QGxhdGVzdGAsIHtcbiAgICAgIHRpbWVvdXQ6IDYwMDAwXG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG5vZmxvdyBDTEkgdXBkYXRlZCBzdWNjZXNzZnVsbHkhJykpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUGxlYXNlIHJlc3RhcnQgb2Zsb3cgdG8gdXNlIHRoZSBuZXcgdmVyc2lvbi5cXG4nKSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICdVcGRhdGUgY29tcGxldGVkJyB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgIGlmICghc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcblVwZGF0ZSBmYWlsZWQnKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdZb3UgY2FuIG1hbnVhbGx5IHVwZGF0ZSB3aXRoOiBucG0gaW5zdGFsbCAtZyBAb2Zsb3ctYWkvb2Zsb3ctY2xpQGxhdGVzdFxcbicpKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yTXNnIH07XG4gIH1cbn1cbiJdfQ==
|