geni-bioinfo 0.1.5 → 0.1.7

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.
@@ -46,10 +46,13 @@ addCommonOptions(exports.costsCommand
46
46
  .command('submission')
47
47
  .description('Per-submission cost breakdown')
48
48
  .argument('[ids...]', 'Filter by submission IDs')
49
+ .option('--status <status>', 'Filter by submission status (case insensitive, e.g. succeeded, FAILED)')
49
50
  .option('--limit <n>', 'Max results (1–200)', '50')
50
51
  .option('--offset <n>', 'Pagination offset', '0')
51
52
  .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))).action(async (ids, opts) => {
52
53
  const params = buildParams(opts);
54
+ if (opts.status)
55
+ params.set('submissionStatus', opts.status.toUpperCase());
53
56
  ids.forEach(id => params.append('id', id));
54
57
  params.set('limit', opts.limit);
55
58
  params.set('offset', opts.offset);
@@ -77,6 +80,51 @@ addCommonOptions(exports.costsCommand
77
80
  const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/instance-type${qs(buildParams(opts))}`));
78
81
  (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.analyticsByInstanceTypeColumns);
79
82
  });
83
+ exports.costsCommand
84
+ .command('task')
85
+ .description('Per-task cost breakdown')
86
+ .argument('[ids...]', 'Filter by task IDs')
87
+ .option('--submission-id <id>', 'Filter by submission ID')
88
+ .option('--limit <n>', 'Max results (1–200)', '50')
89
+ .option('--offset <n>', 'Pagination offset', '0')
90
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
91
+ .action(async (ids, opts) => {
92
+ const params = new URLSearchParams();
93
+ ids.forEach(id => params.append('id', id));
94
+ if (opts.submissionId)
95
+ params.set('submissionId', opts.submissionId);
96
+ params.set('limit', opts.limit);
97
+ params.set('offset', opts.offset);
98
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/task${qs(params)}`));
99
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.costsByTaskColumns);
100
+ });
101
+ addCommonOptions(exports.costsCommand
102
+ .command('instance')
103
+ .description('Per-instance cost breakdown')
104
+ .option('--environment-id <id>', 'Filter by environment ID')
105
+ .option('--engine-id <id>', 'Filter by engine ID')
106
+ .option('--queue-id <id>', 'Filter by queue ID')
107
+ .option('--instance-type <type>', 'Filter by EC2 instance type (e.g. m5.xlarge)')
108
+ .option('--execution-mode <mode>', 'Filter by execution mode (e.g. SPOT, ON_DEMAND)')
109
+ .option('--limit <n>', 'Max results (1–200)', '50')
110
+ .option('--offset <n>', 'Pagination offset', '0')
111
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))).action(async (opts) => {
112
+ const params = buildParams(opts);
113
+ if (opts.environmentId)
114
+ params.set('environmentId', opts.environmentId);
115
+ if (opts.engineId)
116
+ params.set('engineId', opts.engineId);
117
+ if (opts.queueId)
118
+ params.set('queueId', opts.queueId);
119
+ if (opts.instanceType)
120
+ params.set('instanceType', opts.instanceType);
121
+ if (opts.executionMode)
122
+ params.set('executionMode', opts.executionMode);
123
+ params.set('limit', opts.limit);
124
+ params.set('offset', opts.offset);
125
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/instance${qs(params)}`));
126
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.costsByInstanceColumns);
127
+ });
80
128
  addCommonOptions(exports.costsCommand
81
129
  .command('engine')
82
130
  .description('Cost grouped by engine')
@@ -104,8 +152,13 @@ addCommonOptions(exports.costsCommand
104
152
  exports.costsCommand
105
153
  .command('sync')
106
154
  .description('Trigger a CUR actual-cost sync')
107
- .action(async () => {
108
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/costs/sync'), { method: 'POST' });
155
+ .option('--reset', 'Clear all actual cost data before syncing, forcing a full recalculation from CUR')
156
+ .action(async (opts) => {
157
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/costs/sync'), {
158
+ method: 'POST',
159
+ headers: { 'Content-Type': 'application/json' },
160
+ body: JSON.stringify({ reset: opts.reset ?? false }),
161
+ });
109
162
  console.log(`Sync job enqueued: ${data.jobId}`);
110
163
  });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLGtDQUEyQztBQUMzQyw0Q0FXcUI7QUFRckIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUE7QUFFckMsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBWTtJQUNwQyxPQUFPLEdBQUc7U0FDUCxNQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLENBQUM7U0FDekUsTUFBTSxDQUFDLDhCQUE4QixFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDNUcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtJQUVwQyxJQUFJLElBQUksQ0FBQyxTQUFTO1FBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRXpFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNoQyxNQUFNLENBQUMsR0FBRyxD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QixNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBc0IsQ0FBQTtJQUM1RixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUNqRCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7XG4gIGZvcm1hdE91dHB1dCxcbiAgYW5hbHl0aWNzU3VtbWFyeUNvbHVtbnMsXG4gIGFuYWx5dGljc0J5U3VibWlzc2lvbkNvbHVtbnMsXG4gIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zLFxuICBhbmFseXRpY3NCeVF1ZXVlQ29sdW1ucyxcbiAgYW5hbHl0aWNzQnlJbnN0YW5jZVR5cGVDb2x1bW5zLFxuICBhbmFseXRpY3NPdmVyVGltZUNvbHVtbnMsXG4gIGNvc3RzQnlFbmdpbmVDb2x1bW5zLFxuICBjb3N0c0J5RXhlY3V0aW9uTW9kZUNvbHVtbnMsXG4gIHR5cGUgT3V0cHV0Rm9ybWF0LFxufSBmcm9tICcuLi9mb3JtYXQuanMnXG5cbnR5cGUgQmFzZU9wdHMgPSB7XG4gIHN0YXJ0RGF0ZT86IHN0cmluZ1xuICBlbmREYXRlPzogc3RyaW5nXG4gIHN1Ym1pc3Npb25TdGF0dXM/OiBzdHJpbmdcbn1cblxuY29uc3QgREFURV9SRSA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kL1xuXG5mdW5jdGlvbiBwYXJzZURhdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghREFURV9SRS50ZXN0KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZWVlZLU1NLURELCBnb3QgXCIke3ZhbHVlfVwiYClcbiAgcmV0dXJuIHZhbHVlXG59XG5cbmZ1bmN0aW9uIGFkZENvbW1vbk9wdGlvbnMoY21kOiBDb21tYW5kKTogQ29tbWFuZCB7XG4gIHJldHVybiBjbWRcbiAgICAub3B0aW9uKCctLXN0YXJ0LWRhdGUgPFlZWVktTU0tREQ+JywgJ1N0YXJ0IGRhdGUgKFVUQywgaW5jbHVzaXZlKScsIHBhcnNlRGF0ZSlcbiAgICAub3B0aW9uKCctLWVuZC1kYXRlIDxZWVlZLU1NLUREPicsICdFbmQgZGF0ZSAoVVRDLCBpbmNsdXNpdmUpJywgcGFyc2VEYXRlKVxuICAgIC5vcHRpb24oJy0tc3VibWlzc2lvbi1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN1Ym1pc3Npb24gc3RhdHVzIChlLmcuIFNVQ0NFRURFRCwgRkFJTEVELCBSVU5OSU5HKScpXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKG9wdHM6IEJhc2VPcHRzKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG5cbiAgaWYgKG9wdHMuc3RhcnREYXRlKSBwYXJhbXMuc2V0KCdmcm9tJywgYCR7b3B0cy5zdGFydERhdGV9VDAwOjAwOjAwLjAwMFpgKVxuXG4gIGlmIChvcHRzLmVuZERhdGUpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoYCR7b3B0cy5lbmREYXRlfVQwMDowMDowMC4wMDBaYClcbiAgICBkLnNldFVUQ0RhdGUoZC5nZXRVVENEYXRlKCkgKyAxKVxuICAgIHBhcmFtcy5zZXQoJ3RvJywgZC50b0lTT1N0cmluZygpKVxuICB9XG5cbiAgaWYgKG9wdHMuc3VibWlzc2lvblN0YXR1cykgcGFyYW1zLnNldCgnc3VibWlzc2lvblN0YXR1cycsIG9wdHMuc3VibWlzc2lvblN0YXR1cylcbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBxcyhwYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHMgPSBwYXJhbXMudG9TdHJpbmcoKVxuICByZXR1cm4gcyA/IGA/JHtzfWAgOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgY29zdHNDb21tYW5kID0gbmV3IENvbW1hbmQoJ2Nvc3RzJylcbiAgLmRlc2NyaXB0aW9uKCdWaWV3IGNvc3QgYW5hbHl0aWNzJylcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3N1bW1hcnknKVxuICAgIC5kZXNjcmlwdGlvbignT3ZlcmFsbCBjb3N0IHRvdGFscyBmb3IgdGhlIHRlbmFudCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdW1tYXJ5JHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpXG4gIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzU3VtbWFyeUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnc3VibWlzc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdQZXItc3VibWlzc2lvbiBjb3N0IGJyZWFrZG93bicpXG4gICAgLmFyZ3VtZW50KCdbaWRzLi4uXScsICdGaWx0ZXIgYnkgc3VibWlzc2lvbiBJRHMnKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gICAgLm9wdGlvbignLS1vZmZzZXQgPG4+JywgJ1BhZ2luYXRpb24gb2Zmc2V0JywgJzAnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKGlkczogc3RyaW5nW10sIG9wdHM6IEJhc2VPcHRzICYgeyBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBpZHMuZm9yRWFjaChpZCA9PiBwYXJhbXMuYXBwZW5kKCdpZCcsIGlkKSlcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBvcHRzLmxpbWl0KVxuICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdWJtaXNzaW9uJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbnZpcm9ubWVudCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZW52aXJvbm1lbnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZW52aXJvbm1lbnQke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3F1ZXVlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBxdWV1ZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9xdWV1ZSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlRdWV1ZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnaW5zdGFuY2UtdHlwZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgRUMyIGluc3RhbmNlIHR5cGUgYW5kIG1hcmtldCB0eXBlJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2luc3RhbmNlLXR5cGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5SW5zdGFuY2VUeXBlQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbmdpbmUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IGVuZ2luZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9lbmdpbmUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlFbmdpbmVDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2V4ZWN1dGlvbi1tb2RlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBleGVjdXRpb24gbW9kZSAoc3BvdCAvIG9uLWRlbWFuZCknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZXhlY3V0aW9uLW1vZGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlFeGVjdXRpb25Nb2RlQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdvdmVyLXRpbWUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBidWNrZXRlZCBieSB0aW1lIHBlcmlvZCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWludGVydmFsIDxpbnRlcnZhbD4nLCAnVGltZSBidWNrZXQgc2l6ZScpLmNob2ljZXMoWydkYXknLCAnd2VlaycsICdtb250aCddKS5kZWZhdWx0KCdkYXknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgaW50ZXJ2YWw6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBwYXJhbXMuc2V0KCdpbnRlcnZhbCcsIG9wdHMuaW50ZXJ2YWwpXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvb3Zlci10aW1lJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzT3ZlclRpbWVDb2x1bW5zKVxufSlcblxuY29zdHNDb21tYW5kXG4gIC5jb21tYW5kKCdzeW5jJylcbiAgLmRlc2NyaXB0aW9uKCdUcmlnZ2VyIGEgQ1VSIGFjdHVhbC1jb3N0IHN5bmMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL2Nvc3RzL3N5bmMnKSwgeyBtZXRob2Q6ICdQT1NUJyB9KSBhcyB7IGpvYklkOiBzdHJpbmcgfVxuICAgIGNvbnNvbGUubG9nKGBTeW5jIGpvYiBlbnF1ZXVlZDogJHtkYXRhLmpvYklkfWApXG4gIH0pXG4iXX0=
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLGtDQUEyQztBQUMzQyw0Q0FhcUI7QUFRckIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUE7QUFFckMsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBWTtJQUNwQyxPQUFPLEdBQUc7U0FDUCxNQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLENBQUM7U0FDekUsTUFBTSxDQUFDLDhCQUE4QixFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDNUcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtJQUVwQyxJQUFJLElBQUksQ0FBQyxTQUFTO1FBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRXpFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNoQyxNQUFNLENBQUMsR0FBRyxD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YUFBYSxDQUFDLEVBQUU7UUFDbEQsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztLQUNyRCxDQUFzQixDQUFBO0lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQ2pELENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHtcbiAgZm9ybWF0T3V0cHV0LFxuICBhbmFseXRpY3NTdW1tYXJ5Q29sdW1ucyxcbiAgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucyxcbiAgYW5hbHl0aWNzQnlFbnZpcm9ubWVudENvbHVtbnMsXG4gIGFuYWx5dGljc0J5UXVldWVDb2x1bW5zLFxuICBhbmFseXRpY3NCeUluc3RhbmNlVHlwZUNvbHVtbnMsXG4gIGFuYWx5dGljc092ZXJUaW1lQ29sdW1ucyxcbiAgY29zdHNCeUVuZ2luZUNvbHVtbnMsXG4gIGNvc3RzQnlFeGVjdXRpb25Nb2RlQ29sdW1ucyxcbiAgY29zdHNCeVRhc2tDb2x1bW5zLFxuICBjb3N0c0J5SW5zdGFuY2VDb2x1bW5zLFxuICB0eXBlIE91dHB1dEZvcm1hdCxcbn0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG50eXBlIEJhc2VPcHRzID0ge1xuICBzdGFydERhdGU/OiBzdHJpbmdcbiAgZW5kRGF0ZT86IHN0cmluZ1xuICBzdWJtaXNzaW9uU3RhdHVzPzogc3RyaW5nXG59XG5cbmNvbnN0IERBVEVfUkUgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC9cblxuZnVuY3Rpb24gcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIURBVEVfUkUudGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWVlZWS1NTS1ERCwgZ290IFwiJHt2YWx1ZX1cImApXG4gIHJldHVybiB2YWx1ZVxufVxuXG5mdW5jdGlvbiBhZGRDb21tb25PcHRpb25zKGNtZDogQ29tbWFuZCk6IENvbW1hbmQge1xuICByZXR1cm4gY21kXG4gICAgLm9wdGlvbignLS1zdGFydC1kYXRlIDxZWVlZLU1NLUREPicsICdTdGFydCBkYXRlIChVVEMsIGluY2x1c2l2ZSknLCBwYXJzZURhdGUpXG4gICAgLm9wdGlvbignLS1lbmQtZGF0ZSA8WVlZWS1NTS1ERD4nLCAnRW5kIGRhdGUgKFVUQywgaW5jbHVzaXZlKScsIHBhcnNlRGF0ZSlcbiAgICAub3B0aW9uKCctLXN1Ym1pc3Npb24tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIHN0YXR1cyAoZS5nLiBTVUNDRUVERUQsIEZBSUxFRCwgUlVOTklORyknKVxufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhvcHRzOiBCYXNlT3B0cyk6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuXG4gIGlmIChvcHRzLnN0YXJ0RGF0ZSkgcGFyYW1zLnNldCgnZnJvbScsIGAke29wdHMuc3RhcnREYXRlfVQwMDowMDowMC4wMDBaYClcblxuICBpZiAob3B0cy5lbmREYXRlKSB7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGAke29wdHMuZW5kRGF0ZX1UMDA6MDA6MDAuMDAwWmApXG4gICAgZC5zZXRVVENEYXRlKGQuZ2V0VVRDRGF0ZSgpICsgMSlcbiAgICBwYXJhbXMuc2V0KCd0bycsIGQudG9JU09TdHJpbmcoKSlcbiAgfVxuXG4gIGlmIChvcHRzLnN1Ym1pc3Npb25TdGF0dXMpIHBhcmFtcy5zZXQoJ3N1Ym1pc3Npb25TdGF0dXMnLCBvcHRzLnN1Ym1pc3Npb25TdGF0dXMpXG4gIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gcXMocGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCBzID0gcGFyYW1zLnRvU3RyaW5nKClcbiAgcmV0dXJuIHMgPyBgPyR7c31gIDogJydcbn1cblxuZXhwb3J0IGNvbnN0IGNvc3RzQ29tbWFuZCA9IG5ldyBDb21tYW5kKCdjb3N0cycpXG4gIC5kZXNjcmlwdGlvbignVmlldyBjb3N0IGFuYWx5dGljcycpXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdzdW1tYXJ5JylcbiAgICAuZGVzY3JpcHRpb24oJ092ZXJhbGwgY29zdCB0b3RhbHMgZm9yIHRoZSB0ZW5hbnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvc3VtbWFyeSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKVxuICBmb3JtYXRPdXRwdXQoZGF0YSwgb3B0cy5mb3JtYXQsIGFuYWx5dGljc1N1bW1hcnlDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3N1Ym1pc3Npb24nKVxuICAgIC5kZXNjcmlwdGlvbignUGVyLXN1Ym1pc3Npb24gY29zdCBicmVha2Rvd24nKVxuICAgIC5hcmd1bWVudCgnW2lkcy4uLl0nLCAnRmlsdGVyIGJ5IHN1Ym1pc3Npb24gSURzJylcbiAgICAub3B0aW9uKCctLXN0YXR1cyA8c3RhdHVzPicsICdGaWx0ZXIgYnkgc3VibWlzc2lvbiBzdGF0dXMgKGNhc2UgaW5zZW5zaXRpdmUsIGUuZy4gc3VjY2VlZGVkLCBGQUlMRUQpJylcbiAgICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdNYXggcmVzdWx0cyAoMeKAkzIwMCknLCAnNTAnKVxuICAgIC5vcHRpb24oJy0tb2Zmc2V0IDxuPicsICdQYWdpbmF0aW9uIG9mZnNldCcsICcwJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChpZHM6IHN0cmluZ1tdLCBvcHRzOiBCYXNlT3B0cyAmIHsgc3RhdHVzPzogc3RyaW5nOyBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBpZiAob3B0cy5zdGF0dXMpIHBhcmFtcy5zZXQoJ3N1Ym1pc3Npb25TdGF0dXMnLCBvcHRzLnN0YXR1cy50b1VwcGVyQ2FzZSgpKVxuICBpZHMuZm9yRWFjaChpZCA9PiBwYXJhbXMuYXBwZW5kKCdpZCcsIGlkKSlcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBvcHRzLmxpbWl0KVxuICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdWJtaXNzaW9uJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbnZpcm9ubWVudCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZW52aXJvbm1lbnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZW52aXJvbm1lbnQke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3F1ZXVlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBxdWV1ZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9xdWV1ZSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlRdWV1ZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnaW5zdGFuY2UtdHlwZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgRUMyIGluc3RhbmNlIHR5cGUgYW5kIG1hcmtldCB0eXBlJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2luc3RhbmNlLXR5cGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5SW5zdGFuY2VUeXBlQ29sdW1ucylcbn0pXG5cbmNvc3RzQ29tbWFuZFxuICAuY29tbWFuZCgndGFzaycpXG4gIC5kZXNjcmlwdGlvbignUGVyLXRhc2sgY29zdCBicmVha2Rvd24nKVxuICAuYXJndW1lbnQoJ1tpZHMuLi5dJywgJ0ZpbHRlciBieSB0YXNrIElEcycpXG4gIC5vcHRpb24oJy0tc3VibWlzc2lvbi1pZCA8aWQ+JywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIElEJylcbiAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAnTWF4IHJlc3VsdHMgKDHigJMyMDApJywgJzUwJylcbiAgLm9wdGlvbignLS1vZmZzZXQgPG4+JywgJ1BhZ2luYXRpb24gb2Zmc2V0JywgJzAnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAoaWRzOiBzdHJpbmdbXSwgb3B0czogeyBzdWJtaXNzaW9uSWQ/OiBzdHJpbmc7IGxpbWl0OiBzdHJpbmc7IG9mZnNldDogc3RyaW5nOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgaWRzLmZvckVhY2goaWQgPT4gcGFyYW1zLmFwcGVuZCgnaWQnLCBpZCkpXG4gICAgaWYgKG9wdHMuc3VibWlzc2lvbklkKSBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uSWQnLCBvcHRzLnN1Ym1pc3Npb25JZClcbiAgICBwYXJhbXMuc2V0KCdsaW1pdCcsIG9wdHMubGltaXQpXG4gICAgcGFyYW1zLnNldCgnb2Zmc2V0Jywgb3B0cy5vZmZzZXQpXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy90YXNrJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBjb3N0c0J5VGFza0NvbHVtbnMpXG4gIH0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdpbnN0YW5jZScpXG4gICAgLmRlc2NyaXB0aW9uKCdQZXItaW5zdGFuY2UgY29zdCBicmVha2Rvd24nKVxuICAgIC5vcHRpb24oJy0tZW52aXJvbm1lbnQtaWQgPGlkPicsICAgJ0ZpbHRlciBieSBlbnZpcm9ubWVudCBJRCcpXG4gICAgLm9wdGlvbignLS1lbmdpbmUtaWQgPGlkPicsICAgICAgICAnRmlsdGVyIGJ5IGVuZ2luZSBJRCcpXG4gICAgLm9wdGlvbignLS1xdWV1ZS1pZCA8aWQ+JywgICAgICAgICAnRmlsdGVyIGJ5IHF1ZXVlIElEJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgICdGaWx0ZXIgYnkgRUMyIGluc3RhbmNlIHR5cGUgKGUuZy4gbTUueGxhcmdlKScpXG4gICAgLm9wdGlvbignLS1leGVjdXRpb24tbW9kZSA8bW9kZT4nLCAnRmlsdGVyIGJ5IGV4ZWN1dGlvbiBtb2RlIChlLmcuIFNQT1QsIE9OX0RFTUFORCknKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG4+JywgICdNYXggcmVzdWx0cyAoMeKAkzIwMCknLCAnNTAnKVxuICAgIC5vcHRpb24oJy0tb2Zmc2V0IDxuPicsICdQYWdpbmF0aW9uIG9mZnNldCcsICcwJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHtcbiAgZW52aXJvbm1lbnRJZD86IHN0cmluZzsgZW5naW5lSWQ/OiBzdHJpbmc7IHF1ZXVlSWQ/OiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZzsgZXhlY3V0aW9uTW9kZT86IHN0cmluZztcbiAgbGltaXQ6IHN0cmluZzsgb2Zmc2V0OiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0XG59KSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IGJ1aWxkUGFyYW1zKG9wdHMpXG4gIGlmIChvcHRzLmVudmlyb25tZW50SWQpIHBhcmFtcy5zZXQoJ2Vudmlyb25tZW50SWQnLCBvcHRzLmVudmlyb25tZW50SWQpXG4gIGlmIChvcHRzLmVuZ2luZUlkKSAgICAgIHBhcmFtcy5zZXQoJ2VuZ2luZUlkJywgb3B0cy5lbmdpbmVJZClcbiAgaWYgKG9wdHMucXVldWVJZCkgICAgICAgcGFyYW1zLnNldCgncXVldWVJZCcsIG9wdHMucXVldWVJZClcbiAgaWYgKG9wdHMuaW5zdGFuY2VUeXBlKSAgcGFyYW1zLnNldCgnaW5zdGFuY2VUeXBlJywgb3B0cy5pbnN0YW5jZVR5cGUpXG4gIGlmIChvcHRzLmV4ZWN1dGlvbk1vZGUpIHBhcmFtcy5zZXQoJ2V4ZWN1dGlvbk1vZGUnLCBvcHRzLmV4ZWN1dGlvbk1vZGUpXG4gIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0cy5saW1pdClcbiAgcGFyYW1zLnNldCgnb2Zmc2V0Jywgb3B0cy5vZmZzZXQpXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvaW5zdGFuY2Uke3FzKHBhcmFtcyl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBjb3N0c0J5SW5zdGFuY2VDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2VuZ2luZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZW5naW5lJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2VuZ2luZSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgY29zdHNCeUVuZ2luZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnZXhlY3V0aW9uLW1vZGUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IGV4ZWN1dGlvbiBtb2RlIChzcG90IC8gb24tZGVtYW5kKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9leGVjdXRpb24tbW9kZSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgY29zdHNCeUV4ZWN1dGlvbk1vZGVDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ292ZXItdGltZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGJ1Y2tldGVkIGJ5IHRpbWUgcGVyaW9kJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0taW50ZXJ2YWwgPGludGVydmFsPicsICdUaW1lIGJ1Y2tldCBzaXplJykuY2hvaWNlcyhbJ2RheScsICd3ZWVrJywgJ21vbnRoJ10pLmRlZmF1bHQoJ2RheScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBpbnRlcnZhbDogc3RyaW5nOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IGJ1aWxkUGFyYW1zKG9wdHMpXG4gIHBhcmFtcy5zZXQoJ2ludGVydmFsJywgb3B0cy5pbnRlcnZhbClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9vdmVyLXRpbWUke3FzKHBhcmFtcyl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NPdmVyVGltZUNvbHVtbnMpXG59KVxuXG5jb3N0c0NvbW1hbmRcbiAgLmNvbW1hbmQoJ3N5bmMnKVxuICAuZGVzY3JpcHRpb24oJ1RyaWdnZXIgYSBDVVIgYWN0dWFsLWNvc3Qgc3luYycpXG4gIC5vcHRpb24oJy0tcmVzZXQnLCAnQ2xlYXIgYWxsIGFjdHVhbCBjb3N0IGRhdGEgYmVmb3JlIHN5bmNpbmcsIGZvcmNpbmcgYSBmdWxsIHJlY2FsY3VsYXRpb24gZnJvbSBDVVInKVxuICAuYWN0aW9uKGFzeW5jIChvcHRzOiB7IHJlc2V0PzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoJy9jb3N0cy9zeW5jJyksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHJlc2V0OiBvcHRzLnJlc2V0ID8/IGZhbHNlIH0pLFxuICAgIH0pIGFzIHsgam9iSWQ6IHN0cmluZyB9XG4gICAgY29uc29sZS5sb2coYFN5bmMgam9iIGVucXVldWVkOiAke2RhdGEuam9iSWR9YClcbiAgfSlcbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { Command } from 'commander';
2
- export declare const submissionLogCommand: Command;
3
- export declare const taskLogCommand: Command;
2
+ export declare const logsSubcommand: Command;
3
+ export declare const taskLogsSubcommand: Command;
@@ -1,99 +1,80 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.taskLogCommand = exports.submissionLogCommand = void 0;
3
+ exports.taskLogsSubcommand = exports.logsSubcommand = void 0;
4
4
  const commander_1 = require("commander");
5
5
  const auth_1 = require("../auth");
6
6
  const format_js_1 = require("../format.js");
7
- exports.submissionLogCommand = new commander_1.Command('submission-log')
8
- .description('Manage submission logs');
9
- exports.submissionLogCommand
10
- .command('list')
11
- .description('List logs for a submission')
12
- .requiredOption('--submission-id <id>', 'Submission ID')
7
+ exports.logsSubcommand = new commander_1.Command('logs')
8
+ .description('View logs for a submission')
9
+ .argument('<submission-id>', 'Submission ID')
10
+ .option('--tail', 'Show last N lines instead of all logs')
11
+ .option('--limit <n>', 'Number of lines to show with --tail', '50')
12
+ .option('--follow', 'Continuously poll for new log lines')
13
13
  .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
14
- .action(async (opts) => {
15
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${opts.submissionId}`));
16
- if (opts.format === 'table') {
17
- data.items.forEach(item => console.log(item.message));
14
+ .action(async (submissionId, opts) => {
15
+ if (opts.tail || opts.follow) {
16
+ const limit = parseInt(opts.limit, 10);
17
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}&limit=${limit}`));
18
+ let lastTimestamp = printLogLines(data.items);
19
+ if (opts.follow) {
20
+ await pollLogs(lastTimestamp, async (since) => {
21
+ const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}&since=${encodeURIComponent(since)}`));
22
+ return res.items;
23
+ }, (items) => {
24
+ lastTimestamp = printLogLines(items) ?? lastTimestamp;
25
+ });
26
+ }
18
27
  }
19
28
  else {
20
- (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.submissionLogColumns);
29
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}`));
30
+ if (opts.format === 'table') {
31
+ data.items.forEach(item => console.log(item.message));
32
+ }
33
+ else {
34
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.submissionLogColumns);
35
+ }
21
36
  }
22
37
  });
23
- exports.submissionLogCommand
24
- .command('tail [submission-id]')
25
- .description('Tail logs for a submission')
26
- .option('--limit <n>', 'Number of recent log lines to show', '50')
38
+ exports.taskLogsSubcommand = new commander_1.Command('logs')
39
+ .description('View logs for a task')
40
+ .argument('<task-id>', 'Task ID')
41
+ .option('--tail', 'Show last N lines instead of all logs')
42
+ .option('--limit <n>', 'Number of lines to show with --tail', '50')
27
43
  .option('--follow', 'Continuously poll for new log lines')
28
- .action(async (submissionId, opts) => {
29
- const limit = parseInt(opts.limit, 10);
30
- const url = submissionId
31
- ? `/submission-logs?submissionId=${submissionId}&limit=${limit}`
32
- : `/submission-logs?limit=${limit}`;
33
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(url));
34
- let lastTimestamp = printLogLines(data.items);
35
- if (opts.follow) {
36
- await pollLogs(lastTimestamp, async (since) => {
37
- const base = submissionId
38
- ? `/submission-logs?submissionId=${submissionId}`
39
- : `/submission-logs`;
40
- const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`${base}&since=${encodeURIComponent(since)}`));
41
- return res.items;
42
- }, (items) => {
43
- lastTimestamp = printLogLines(items) ?? lastTimestamp;
44
- });
45
- }
46
- });
47
- exports.taskLogCommand = new commander_1.Command('task-log')
48
- .description('Manage task logs');
49
- exports.taskLogCommand
50
- .command('list')
51
- .description('List task logs for a submission')
52
- .requiredOption('--submission-id <id>', 'Submission ID')
53
- .option('--task-id <id>', 'Task ID (optional, filter by specific task)')
44
+ .option('--short', 'Omit task ID prefix')
54
45
  .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
55
- .action(async (opts) => {
56
- let url = `/task-logs?submissionId=${opts.submissionId}`;
57
- if (opts.taskId)
58
- url += `&taskId=${opts.taskId}`;
59
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(url));
60
- if (opts.format === 'table') {
61
- data.items.forEach(item => console.log(item.message));
46
+ .action(async (taskId, opts) => {
47
+ if (opts.tail || opts.follow) {
48
+ const limit = parseInt(opts.limit, 10);
49
+ const buildUrl = (since) => {
50
+ const params = new URLSearchParams();
51
+ params.set('taskId', taskId);
52
+ if (since)
53
+ params.set('since', since);
54
+ else
55
+ params.set('limit', String(limit));
56
+ return `/task-logs?${params}`;
57
+ };
58
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl()));
59
+ const id = (item) => opts.short ? undefined : (item.jobName ?? item.taskId ?? taskId);
60
+ let lastTimestamp = printTaskLogLines(data.items, id);
61
+ if (opts.follow) {
62
+ await pollLogs(lastTimestamp, async (since) => {
63
+ const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl(since)));
64
+ return res.items;
65
+ }, (items) => {
66
+ lastTimestamp = printTaskLogLines(items, id) ?? lastTimestamp;
67
+ });
68
+ }
62
69
  }
63
70
  else {
64
- (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.taskLogColumns);
65
- }
66
- });
67
- exports.taskLogCommand
68
- .command('tail <submission-id>')
69
- .description('Tail logs for a submission or task')
70
- .option('--task-id <id>', 'Task ID (optional, filter by specific task)')
71
- .option('--limit <n>', 'Number of recent log lines to show', '50')
72
- .option('--follow', 'Continuously poll for new log lines')
73
- .option('--short', 'Omit task ID prefix')
74
- .action(async (submissionId, opts) => {
75
- const limit = parseInt(opts.limit, 10);
76
- const buildUrl = (since) => {
77
- const params = new URLSearchParams();
78
- params.set('submissionId', submissionId);
79
- if (opts.taskId)
80
- params.set('taskId', opts.taskId);
81
- if (since)
82
- params.set('since', since);
83
- else
84
- params.set('limit', String(limit));
85
- return `/task-logs?${params}`;
86
- };
87
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl()));
88
- const id = (item) => opts.short ? undefined : (item.jobName ?? item.taskId ?? opts.taskId);
89
- let lastTimestamp = printTaskLogLines(data.items, id);
90
- if (opts.follow) {
91
- await pollLogs(lastTimestamp, async (since) => {
92
- const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl(since)));
93
- return res.items;
94
- }, (items) => {
95
- lastTimestamp = printTaskLogLines(items, id) ?? lastTimestamp;
96
- });
71
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/task-logs?taskId=${taskId}`));
72
+ if (opts.format === 'table') {
73
+ data.items.forEach(item => console.log(item.message));
74
+ }
75
+ else {
76
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.taskLogColumns);
77
+ }
97
78
  }
98
79
  });
99
80
  function printLogLines(items, id) {
@@ -142,4 +123,4 @@ async function pollLogs(initialTimestamp, fetch, onItems) {
142
123
  });
143
124
  });
144
125
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBMkM7QUFDM0Msa0NBQTJDO0FBQzNDLDRDQUFvRztBQUV2RixRQUFBLG9CQUFvQixHQUFHLElBQUksbUJBQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUM5RCxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtBQUV4Qyw0QkFBb0I7S0FDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxDQUFDO0tBQ3ZELFNBQVMsQ0FBQyxJQUFJLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM5RyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQW9ELEVBQUUsRUFBRTtJQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxpQ0FBaUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQXlCLENBQUE7SUFDbEgsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUErQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFBLHdCQUFZLEVBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENB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Q3JCLGdCQUFvQyxFQUNwQyxLQUE0QyxFQUM1QyxPQUFtQztJQUVuQyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVSLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDdkIsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7IGZvcm1hdE91dHB1dCwgc3VibWlzc2lvbkxvZ0NvbHVtbnMsIHRhc2tMb2dDb2x1bW5zLCB0eXBlIE91dHB1dEZvcm1hdCB9IGZyb20gJy4uL2Zvcm1hdC5qcydcblxuZXhwb3J0IGNvbnN0IHN1Ym1pc3Npb25Mb2dDb21tYW5kID0gbmV3IENvbW1hbmQoJ3N1Ym1pc3Npb24tbG9nJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2Ugc3VibWlzc2lvbiBsb2dzJylcblxuc3VibWlzc2lvbkxvZ0NvbW1hbmRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgbG9ncyBmb3IgYSBzdWJtaXNzaW9uJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLXN1Ym1pc3Npb24taWQgPGlkPicsICdTdWJtaXNzaW9uIElEJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgc3VibWlzc2lvbklkOiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtvcHRzLnN1Ym1pc3Npb25JZH1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgICBpZiAob3B0cy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgIChkYXRhLml0ZW1zIGFzIHsgbWVzc2FnZTogc3RyaW5nIH1bXSkuZm9yRWFjaChpdGVtID0+IGNvbnNvbGUubG9nKGl0ZW0ubWVzc2FnZSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBzdWJtaXNzaW9uTG9nQ29sdW1ucylcbiAgICB9XG4gIH0pXG5cbnN1Ym1pc3Npb25Mb2dDb21tYW5kXG4gIC5jb21tYW5kKCd0YWlsIFtzdWJtaXNzaW9uLWlkXScpXG4gIC5kZXNjcmlwdGlvbignVGFpbCBsb2dzIGZvciBhIHN1Ym1pc3Npb24nKVxuICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgcmVjZW50IGxvZyBsaW5lcyB0byBzaG93JywgJzUwJylcbiAgLm9wdGlvbignLS1mb2xsb3cnLCAnQ29udGludW91c2x5IHBvbGwgZm9yIG5ldyBsb2cgbGluZXMnKVxuICAuYWN0aW9uKGFzeW5jIChzdWJtaXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0czogeyBsaW1pdDogc3RyaW5nOyBmb2xsb3c6IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcGFyc2VJbnQob3B0cy5saW1pdCwgMTApXG4gICAgY29uc3QgdXJsID0gc3VibWlzc2lvbklkXG4gICAgICA/IGAvc3VibWlzc2lvbi1sb2dzP3N1Ym1pc3Npb25JZD0ke3N1Ym1pc3Npb25JZH0mbGltaXQ9JHtsaW1pdH1gXG4gICAgICA6IGAvc3VibWlzc2lvbi1sb2dzP2xpbWl0PSR7bGltaXR9YFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKHVybCkpIGFzIHsgaXRlbXM6IExvZ0l0ZW1bXSB9XG4gICAgbGV0IGxhc3RUaW1lc3RhbXAgPSBwcmludExvZ0xpbmVzKGRhdGEuaXRlbXMpXG5cbiAgICBpZiAob3B0cy5mb2xsb3cpIHtcbiAgICAgIGF3YWl0IHBvbGxMb2dzKGxhc3RUaW1lc3RhbXAsIGFzeW5jIChzaW5jZSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gc3VibWlzc2lvbklkXG4gICAgICAgICAgPyBgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtzdWJtaXNzaW9uSWR9YFxuICAgICAgICAgIDogYC9zdWJtaXNzaW9uLWxvZ3NgXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYCR7YmFzZX0mc2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQoc2luY2UpfWApKSBhcyB7IGl0ZW1zOiBMb2dJdGVtW10gfVxuICAgICAgICByZXR1cm4gcmVzLml0ZW1zXG4gICAgICB9LCAoaXRlbXMpID0+IHtcbiAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoaXRlbXMpID8/IGxhc3RUaW1lc3RhbXBcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgdGFza0xvZ0NvbW1hbmQgPSBuZXcgQ29tbWFuZCgndGFzay1sb2cnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSB0YXNrIGxvZ3MnKVxuXG50YXNrTG9nQ29tbWFuZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB0YXNrIGxvZ3MgZm9yIGEgc3VibWlzc2lvbicpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1zdWJtaXNzaW9uLWlkIDxpZD4nLCAnU3VibWlzc2lvbiBJRCcpXG4gIC5vcHRpb24oJy0tdGFzay1pZCA8aWQ+JywgJ1Rhc2sgSUQgKG9wdGlvbmFsLCBmaWx0ZXIgYnkgc3BlY2lmaWMgdGFzayknKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czogeyBzdWJtaXNzaW9uSWQ6IHN0cmluZzsgdGFza0lkPzogc3RyaW5nOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgbGV0IHVybCA9IGAvdGFzay1sb2dzP3N1Ym1pc3Npb25JZD0ke29wdHMuc3VibWlzc2lvbklkfWBcbiAgICBpZiAob3B0cy50YXNrSWQpIHVybCArPSBgJnRhc2tJZD0ke29wdHMudGFza0lkfWBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCh1cmwpKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgIGlmIChvcHRzLmZvcm1hdCA9PT0gJ3RhYmxlJykge1xuICAgICAgKGRhdGEuaXRlbXMgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfVtdKS5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXNzYWdlKSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIHRhc2tMb2dDb2x1bW5zKVxuICAgIH1cbiAgfSlcblxudGFza0xvZ0NvbW1hbmRcbiAgLmNvbW1hbmQoJ3RhaWwgPHN1Ym1pc3Npb24taWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdUYWlsIGxvZ3MgZm9yIGEgc3VibWlzc2lvbiBvciB0YXNrJylcbiAgLm9wdGlvbignLS10YXNrLWlkIDxpZD4nLCAnVGFzayBJRCAob3B0aW9uYWwsIGZpbHRlciBieSBzcGVjaWZpYyB0YXNrKScpXG4gIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ051bWJlciBvZiByZWNlbnQgbG9nIGxpbmVzIHRvIHNob3cnLCAnNTAnKVxuICAub3B0aW9uKCctLWZvbGxvdycsICdDb250aW51b3VzbHkgcG9sbCBmb3IgbmV3IGxvZyBsaW5lcycpXG4gIC5vcHRpb24oJy0tc2hvcnQnLCAnT21pdCB0YXNrIElEIHByZWZpeCcpXG4gIC5hY3Rpb24oYXN5bmMgKHN1Ym1pc3Npb25JZDogc3RyaW5nLCBvcHRzOiB7IHRhc2tJZD86IHN0cmluZzsgbGltaXQ6IHN0cmluZzsgZm9sbG93OiBib29sZWFuOyBzaG9ydDogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSBwYXJzZUludChvcHRzLmxpbWl0LCAxMClcbiAgICBjb25zdCBidWlsZFVybCA9IChzaW5jZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uSWQnLCBzdWJtaXNzaW9uSWQpXG4gICAgICBpZiAob3B0cy50YXNrSWQpIHBhcmFtcy5zZXQoJ3Rhc2tJZCcsIG9wdHMudGFza0lkKVxuICAgICAgaWYgKHNpbmNlKSBwYXJhbXMuc2V0KCdzaW5jZScsIHNpbmNlKVxuICAgICAgZWxzZSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpXG4gICAgICByZXR1cm4gYC90YXNrLWxvZ3M/JHtwYXJhbXN9YFxuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChidWlsZFVybCgpKSkgYXMgeyBpdGVtczogVGFza0xvZ0l0ZW1bXSB9XG4gICAgY29uc3QgaWQgPSAoaXRlbTogVGFza0xvZ0l0ZW0pID0+IG9wdHMuc2hvcnQgPyB1bmRlZmluZWQgOiAoaXRlbS5qb2JOYW1lID8/IGl0ZW0udGFza0lkID8/IG9wdHMudGFza0lkKVxuICAgIGxldCBsYXN0VGltZXN0YW1wID0gcHJpbnRUYXNrTG9nTGluZXMoZGF0YS5pdGVtcywgaWQpXG5cbiAgICBpZiAob3B0cy5mb2xsb3cpIHtcbiAgICAgIGF3YWl0IHBvbGxMb2dzKGxhc3RUaW1lc3RhbXAsIGFzeW5jIChzaW5jZSkgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGJ1aWxkVXJsKHNpbmNlKSkpIGFzIHsgaXRlbXM6IFRhc2tMb2dJdGVtW10gfVxuICAgICAgICByZXR1cm4gcmVzLml0ZW1zXG4gICAgICB9LCAoaXRlbXMpID0+IHtcbiAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50VGFza0xvZ0xpbmVzKGl0ZW1zLCBpZCkgPz8gbGFzdFRpbWVzdGFtcFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbmludGVyZmFjZSBMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUYXNrTG9nSXRlbSBleHRlbmRzIExvZ0l0ZW0ge1xuICB0YXNrSWQ/OiBzdHJpbmdcbiAgam9iTmFtZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBwcmludExvZ0xpbmVzKGl0ZW1zOiBMb2dJdGVtW10sIGlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGlmIChpZCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2lkfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2l0ZW0ubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnRpbWVzdGFtcCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwcmludFRhc2tMb2dMaW5lcyhpdGVtczogVGFza0xvZ0l0ZW1bXSwgaWQ6IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IHByZWZpeCA9IGlkKGl0ZW0pXG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke3ByZWZpeH0gICR7aXRlbS5tZXNzYWdlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3RzfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgOiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbExvZ3MoXG4gIGluaXRpYWxUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmV0Y2g6IChzaW5jZTogc3RyaW5nKSA9PiBQcm9taXNlPExvZ0l0ZW1bXT4sXG4gIG9uSXRlbXM6IChpdGVtczogTG9nSXRlbVtdKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBzaW5jZSA9IGluaXRpYWxUaW1lc3RhbXAgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBmZXRjaChzaW5jZSlcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvbkl0ZW1zKGl0ZW1zKVxuICAgICAgICAgIHNpbmNlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0udGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgdHJhbnNpZW50IGVycm9ycyBkdXJpbmcgcG9sbGluZ1xuICAgICAgfVxuICAgIH0sIDMwMDApXG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBMkM7QUFDM0Msa0NBQTJDO0FBQzNDLDRDQUFvRztBQUV2RixRQUFBLGNBQWMsR0FBRyxJQUFJLG1CQUFPLENBQUMsTUFBTSxDQUFDO0tBQzlDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO0tBQzVDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsdUNBQXVDLENBQUM7S0FDekQsTUFBTSxDQUFDLGFBQWEsRUFBRSxxQ0FBcUMsRUFBRSxJQUFJLENBQUM7S0FDbEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxxQ0FBcUMsQ0FBQztLQUN6RCxTQUFTLENBQUMsSUFBSSxrQkFBTSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDOUcsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFvQixFQUFFLElBQTZFLEVBQUUsRUFBRTtJQUNwSCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxnQkFBUyxFQUFDLElBQUEsYUFBTSxFQUFDLGlDQUFpQyxZQUFZLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBeUIsQ0FBQTtRQUM1SCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1B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O0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHsgZm9ybWF0T3V0cHV0LCBzdWJtaXNzaW9uTG9nQ29sdW1ucywgdGFza0xvZ0NvbHVtbnMsIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG5leHBvcnQgY29uc3QgbG9nc1N1YmNvbW1hbmQgPSBuZXcgQ29tbWFuZCgnbG9ncycpXG4gIC5kZXNjcmlwdGlvbignVmlldyBsb2dzIGZvciBhIHN1Ym1pc3Npb24nKVxuICAuYXJndW1lbnQoJzxzdWJtaXNzaW9uLWlkPicsICdTdWJtaXNzaW9uIElEJylcbiAgLm9wdGlvbignLS10YWlsJywgJ1Nob3cgbGFzdCBOIGxpbmVzIGluc3RlYWQgb2YgYWxsIGxvZ3MnKVxuICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgbGluZXMgdG8gc2hvdyB3aXRoIC0tdGFpbCcsICc1MCcpXG4gIC5vcHRpb24oJy0tZm9sbG93JywgJ0NvbnRpbnVvdXNseSBwb2xsIGZvciBuZXcgbG9nIGxpbmVzJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKHN1Ym1pc3Npb25JZDogc3RyaW5nLCBvcHRzOiB7IHRhaWw6IGJvb2xlYW47IGxpbWl0OiBzdHJpbmc7IGZvbGxvdzogYm9vbGVhbjsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGlmIChvcHRzLnRhaWwgfHwgb3B0cy5mb2xsb3cpIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gcGFyc2VJbnQob3B0cy5saW1pdCwgMTApXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtzdWJtaXNzaW9uSWR9JmxpbWl0PSR7bGltaXR9YCkpIGFzIHsgaXRlbXM6IExvZ0l0ZW1bXSB9XG4gICAgICBsZXQgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoZGF0YS5pdGVtcylcbiAgICAgIGlmIChvcHRzLmZvbGxvdykge1xuICAgICAgICBhd2FpdCBwb2xsTG9ncyhsYXN0VGltZXN0YW1wLCBhc3luYyAoc2luY2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvc3VibWlzc2lvbi1sb2dzP3N1Ym1pc3Npb25JZD0ke3N1Ym1pc3Npb25JZH0mc2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQoc2luY2UpfWApKSBhcyB7IGl0ZW1zOiBMb2dJdGVtW10gfVxuICAgICAgICAgIHJldHVybiByZXMuaXRlbXNcbiAgICAgICAgfSwgKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoaXRlbXMpID8/IGxhc3RUaW1lc3RhbXBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9zdWJtaXNzaW9uLWxvZ3M/c3VibWlzc2lvbklkPSR7c3VibWlzc2lvbklkfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgICAgaWYgKG9wdHMuZm9ybWF0ID09PSAndGFibGUnKSB7XG4gICAgICAgIChkYXRhLml0ZW1zIGFzIHsgbWVzc2FnZTogc3RyaW5nIH1bXSkuZm9yRWFjaChpdGVtID0+IGNvbnNvbGUubG9nKGl0ZW0ubWVzc2FnZSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgc3VibWlzc2lvbkxvZ0NvbHVtbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgdGFza0xvZ3NTdWJjb21tYW5kID0gbmV3IENvbW1hbmQoJ2xvZ3MnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgbG9ncyBmb3IgYSB0YXNrJylcbiAgLmFyZ3VtZW50KCc8dGFzay1pZD4nLCAnVGFzayBJRCcpXG4gIC5vcHRpb24oJy0tdGFpbCcsICdTaG93IGxhc3QgTiBsaW5lcyBpbnN0ZWFkIG9mIGFsbCBsb2dzJylcbiAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAnTnVtYmVyIG9mIGxpbmVzIHRvIHNob3cgd2l0aCAtLXRhaWwnLCAnNTAnKVxuICAub3B0aW9uKCctLWZvbGxvdycsICdDb250aW51b3VzbHkgcG9sbCBmb3IgbmV3IGxvZyBsaW5lcycpXG4gIC5vcHRpb24oJy0tc2hvcnQnLCAnT21pdCB0YXNrIElEIHByZWZpeCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jICh0YXNrSWQ6IHN0cmluZywgb3B0czogeyB0YWlsOiBib29sZWFuOyBsaW1pdDogc3RyaW5nOyBmb2xsb3c6IGJvb2xlYW47IHNob3J0OiBib29sZWFuOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgaWYgKG9wdHMudGFpbCB8fCBvcHRzLmZvbGxvdykge1xuICAgICAgY29uc3QgbGltaXQgPSBwYXJzZUludChvcHRzLmxpbWl0LCAxMClcbiAgICAgIGNvbnN0IGJ1aWxkVXJsID0gKHNpbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICBwYXJhbXMuc2V0KCd0YXNrSWQnLCB0YXNrSWQpXG4gICAgICAgIGlmIChzaW5jZSkgcGFyYW1zLnNldCgnc2luY2UnLCBzaW5jZSlcbiAgICAgICAgZWxzZSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpXG4gICAgICAgIHJldHVybiBgL3Rhc2stbG9ncz8ke3BhcmFtc31gXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChidWlsZFVybCgpKSkgYXMgeyBpdGVtczogVGFza0xvZ0l0ZW1bXSB9XG4gICAgICBjb25zdCBpZCA9IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gb3B0cy5zaG9ydCA/IHVuZGVmaW5lZCA6IChpdGVtLmpvYk5hbWUgPz8gaXRlbS50YXNrSWQgPz8gdGFza0lkKVxuICAgICAgbGV0IGxhc3RUaW1lc3RhbXAgPSBwcmludFRhc2tMb2dMaW5lcyhkYXRhLml0ZW1zLCBpZClcbiAgICAgIGlmIChvcHRzLmZvbGxvdykge1xuICAgICAgICBhd2FpdCBwb2xsTG9ncyhsYXN0VGltZXN0YW1wLCBhc3luYyAoc2luY2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGJ1aWxkVXJsKHNpbmNlKSkpIGFzIHsgaXRlbXM6IFRhc2tMb2dJdGVtW10gfVxuICAgICAgICAgIHJldHVybiByZXMuaXRlbXNcbiAgICAgICAgfSwgKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50VGFza0xvZ0xpbmVzKGl0ZW1zLCBpZCkgPz8gbGFzdFRpbWVzdGFtcFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3Rhc2stbG9ncz90YXNrSWQ9JHt0YXNrSWR9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gICAgICBpZiAob3B0cy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgICAgKGRhdGEuaXRlbXMgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfVtdKS5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXNzYWdlKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCB0YXNrTG9nQ29sdW1ucylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbmludGVyZmFjZSBMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUYXNrTG9nSXRlbSBleHRlbmRzIExvZ0l0ZW0ge1xuICB0YXNrSWQ/OiBzdHJpbmdcbiAgam9iTmFtZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBwcmludExvZ0xpbmVzKGl0ZW1zOiBMb2dJdGVtW10sIGlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGlmIChpZCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2lkfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2l0ZW0ubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnRpbWVzdGFtcCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwcmludFRhc2tMb2dMaW5lcyhpdGVtczogVGFza0xvZ0l0ZW1bXSwgaWQ6IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IHByZWZpeCA9IGlkKGl0ZW0pXG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke3ByZWZpeH0gICR7aXRlbS5tZXNzYWdlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3RzfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgOiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbExvZ3MoXG4gIGluaXRpYWxUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmV0Y2g6IChzaW5jZTogc3RyaW5nKSA9PiBQcm9taXNlPExvZ0l0ZW1bXT4sXG4gIG9uSXRlbXM6IChpdGVtczogTG9nSXRlbVtdKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBzaW5jZSA9IGluaXRpYWxUaW1lc3RhbXAgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBmZXRjaChzaW5jZSlcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvbkl0ZW1zKGl0ZW1zKVxuICAgICAgICAgIHNpbmNlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0udGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgdHJhbnNpZW50IGVycm9ycyBkdXJpbmcgcG9sbGluZ1xuICAgICAgfVxuICAgIH0sIDMwMDApXG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
@@ -2,23 +2,57 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loginCommand = void 0;
4
4
  const commander_1 = require("commander");
5
+ const readline_1 = require("readline");
5
6
  const auth_1 = require("../auth");
7
+ async function prompt(question) {
8
+ const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
9
+ return new Promise(resolve => rl.question(question, answer => { rl.close(); resolve(answer); }));
10
+ }
11
+ async function promptPassword(question) {
12
+ process.stdout.write(question);
13
+ process.stdin.setRawMode(true);
14
+ process.stdin.resume();
15
+ process.stdin.setEncoding('utf8');
16
+ return new Promise(resolve => {
17
+ let password = '';
18
+ process.stdin.on('data', function handler(ch) {
19
+ if (ch === '\n' || ch === '\r' || ch === '') {
20
+ process.stdin.setRawMode(false);
21
+ process.stdin.pause();
22
+ process.stdin.removeListener('data', handler);
23
+ process.stdout.write('\n');
24
+ resolve(password);
25
+ }
26
+ else if (ch === '' || ch === '\b') {
27
+ if (password.length > 0) {
28
+ password = password.slice(0, -1);
29
+ process.stdout.write('\b \b');
30
+ }
31
+ }
32
+ else {
33
+ password += ch;
34
+ process.stdout.write('*');
35
+ }
36
+ });
37
+ });
38
+ }
6
39
  exports.loginCommand = new commander_1.Command('login')
7
40
  .description('Login into GENI Workflows and store credentials')
8
- .option('--email <email>', 'User email')
9
41
  .option('--password <password>', 'User password')
10
42
  .action(async (opts) => {
11
- if (!opts.email || !opts.password) {
12
- exports.loginCommand.help();
13
- return;
43
+ const email = await prompt('Email: ');
44
+ const password = opts.password ?? await promptPassword('Password: ');
45
+ if (!email || !password) {
46
+ console.error('Email and password are required.');
47
+ process.exit(1);
14
48
  }
15
49
  const res = await fetch((0, auth_1.apiUrl)('/auth/login'), {
16
50
  method: 'POST',
17
51
  headers: { 'Content-Type': 'application/json' },
18
- body: JSON.stringify({ email: opts.email, password: opts.password }),
52
+ body: JSON.stringify({ email, password }),
19
53
  });
20
54
  const data = await (0, auth_1.readJsonResponse)(res, { method: 'POST', url: (0, auth_1.apiUrl)('/auth/login') });
21
55
  (0, auth_1.saveCredentials)(data.accessToken);
22
56
  console.log('Logged in. Credentials saved to ~/.geni/credentials.json');
23
57
  });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQW9DO0FBQ3BDLGtDQUFvRTtBQUV2RCxRQUFBLFlBQVksR0FBRyxJQUFJLG1CQUFPLENBQUMsT0FBTyxDQUFDO0tBQzdDLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO0tBQ3ZDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxlQUFlLENBQUM7S0FDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUEyQyxFQUFFLEVBQUU7SUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsb0JBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNuQixPQUFNO0lBQ1IsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUEsYUFBTSxFQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzdDLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1FBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUNyRSxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsdUJBQWdCLEVBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBQSxhQUFNLEVBQUMsYUFBYSxDQUFDLEVBQUUsQ0FFdEYsQ0FBQztJQUNGLElBQUEsc0JBQWUsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBhcGlVcmwsIHJlYWRKc29uUmVzcG9uc2UsIHNhdmVDcmVkZW50aWFscyB9IGZyb20gJy4uL2F1dGgnO1xuXG5leHBvcnQgY29uc3QgbG9naW5Db21tYW5kID0gbmV3IENvbW1hbmQoJ2xvZ2luJylcbiAgLmRlc2NyaXB0aW9uKCdMb2dpbiBpbnRvIEdFTkkgV29ya2Zsb3dzIGFuZCBzdG9yZSBjcmVkZW50aWFscycpXG4gIC5vcHRpb24oJy0tZW1haWwgPGVtYWlsPicsICdVc2VyIGVtYWlsJylcbiAgLm9wdGlvbignLS1wYXNzd29yZCA8cGFzc3dvcmQ+JywgJ1VzZXIgcGFzc3dvcmQnKVxuICAuYWN0aW9uKGFzeW5jIChvcHRzOiB7IGVtYWlsPzogc3RyaW5nOyBwYXNzd29yZD86IHN0cmluZyB9KSA9PiB7XG4gICAgaWYgKCFvcHRzLmVtYWlsIHx8ICFvcHRzLnBhc3N3b3JkKSB7XG4gICAgICBsb2dpbkNvbW1hbmQuaGVscCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYXBpVXJsKCcvYXV0aC9sb2dpbicpLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlbWFpbDogb3B0cy5lbWFpbCwgcGFzc3dvcmQ6IG9wdHMucGFzc3dvcmQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRKc29uUmVzcG9uc2UocmVzLCB7IG1ldGhvZDogJ1BPU1QnLCB1cmw6IGFwaVVybCgnL2F1dGgvbG9naW4nKSB9KSBhcyB7XG4gICAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIH07XG4gICAgc2F2ZUNyZWRlbnRpYWxzKGRhdGEuYWNjZXNzVG9rZW4pO1xuICAgIGNvbnNvbGUubG9nKCdMb2dnZWQgaW4uIENyZWRlbnRpYWxzIHNhdmVkIHRvIH4vLmdlbmkvY3JlZGVudGlhbHMuanNvbicpO1xuICB9KTtcbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQW9DO0FBQ3BDLHVDQUEyQztBQUMzQyxrQ0FBb0U7QUFFcEUsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQjtJQUNwQyxNQUFNLEVBQUUsR0FBRyxJQUFBLDBCQUFlLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRyxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxRQUFnQjtJQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLE9BQU8sQ0FBQyxFQUFVO1lBQ2xELElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxZQUFZLEdBQUcsSUFBSSxtQkFBTyxDQUFDLE9BQU8sQ0FBQztLQUM3QyxXQUFXLENBQUMsaURBQWlELENBQUM7S0FDOUQsTUFBTSxDQUFDLHVCQUF1QixFQUFFLGVBQWUsQ0FBQztLQUNoRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQTJCLEVBQUUsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsYUFBYSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUEsYUFBTSxFQUFDLGFBQWEsQ0FBQyxFQUFFLENBRXRGLENBQUM7SUFDRixJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMERBQTBELENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSAncmVhZGxpbmUnO1xuaW1wb3J0IHsgYXBpVXJsLCByZWFkSnNvblJlc3BvbnNlLCBzYXZlQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9hdXRoJztcblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybC5xdWVzdGlvbihxdWVzdGlvbiwgYW5zd2VyID0+IHsgcmwuY2xvc2UoKTsgcmVzb2x2ZShhbnN3ZXIpOyB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdFBhc3N3b3JkKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShxdWVzdGlvbik7XG4gIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcbiAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcbiAgcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgbGV0IHBhc3N3b3JkID0gJyc7XG4gICAgcHJvY2Vzcy5zdGRpbi5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZXIoY2g6IHN0cmluZykge1xuICAgICAgaWYgKGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJ1xccicgfHwgY2ggPT09ICdcdTAwMDMnKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4ucGF1c2UoKTtcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5yZW1vdmVMaXN0ZW5lcignZGF0YScsIGhhbmRsZXIpO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG4gICAgICAgIHJlc29sdmUocGFzc3dvcmQpO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ38nIHx8IGNoID09PSAnXFxiJykge1xuICAgICAgICBpZiAocGFzc3dvcmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXGIgXFxiJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3N3b3JkICs9IGNoO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnKicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvZ2luQ29tbWFuZCA9IG5ldyBDb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignTG9naW4gaW50byBHRU5JIFdvcmtmbG93cyBhbmQgc3RvcmUgY3JlZGVudGlhbHMnKVxuICAub3B0aW9uKCctLXBhc3N3b3JkIDxwYXNzd29yZD4nLCAnVXNlciBwYXNzd29yZCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgcGFzc3dvcmQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGVtYWlsID0gYXdhaXQgcHJvbXB0KCdFbWFpbDogJyk7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBvcHRzLnBhc3N3b3JkID8/IGF3YWl0IHByb21wdFBhc3N3b3JkKCdQYXNzd29yZDogJyk7XG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VtYWlsIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGFwaVVybCgnL2F1dGgvbG9naW4nKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwsIHBhc3N3b3JkIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkSnNvblJlc3BvbnNlKHJlcywgeyBtZXRob2Q6ICdQT1NUJywgdXJsOiBhcGlVcmwoJy9hdXRoL2xvZ2luJykgfSkgYXMge1xuICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICB9O1xuICAgIHNhdmVDcmVkZW50aWFscyhkYXRhLmFjY2Vzc1Rva2VuKTtcbiAgICBjb25zb2xlLmxvZygnTG9nZ2VkIGluLiBDcmVkZW50aWFscyBzYXZlZCB0byB+Ly5nZW5pL2NyZWRlbnRpYWxzLmpzb24nKTtcbiAgfSk7XG4iXX0=