@workflow/nitro 5.0.0-beta.37 → 5.0.0-beta.39
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/index.d.ts.map +1 -1
- package/dist/index.js +140 -181
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +2 -31
- package/package.json +6 -6
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,aAAa,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,YAAY,EAAE,aAAa,EAAE,CAAC;;;iBA4DT,KAAK;;AAF1B,wBA+RwB"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
4
|
-
import {
|
|
4
|
+
import { WORKFLOW_QUEUE_TRIGGER } from '@workflow/builders';
|
|
5
5
|
import { workflowTransformPlugin } from '@workflow/rollup';
|
|
6
6
|
import { join } from 'pathe';
|
|
7
7
|
import { LocalBuilder, VercelBuilder } from './builders.js';
|
|
@@ -41,7 +41,7 @@ function isNitroV2(nitro) {
|
|
|
41
41
|
* support.
|
|
42
42
|
*/
|
|
43
43
|
function addNodeRequireBanner(config) {
|
|
44
|
-
const banner =
|
|
44
|
+
const banner = "import { createRequire as __wkfCreateRequire } from 'node:module'; if (typeof require === 'undefined') { globalThis.require = __wkfCreateRequire(import.meta.url); }";
|
|
45
45
|
const output = config.output;
|
|
46
46
|
if (output == null) {
|
|
47
47
|
config.output = { banner };
|
|
@@ -58,98 +58,11 @@ function addNodeRequireBanner(config) {
|
|
|
58
58
|
: `${banner}\n${existing}`;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
const WORKFLOW_INLINE_PACKAGES = new Set([
|
|
62
|
-
'workflow',
|
|
63
|
-
'core',
|
|
64
|
-
'serde',
|
|
65
|
-
'errors',
|
|
66
|
-
'utils',
|
|
67
|
-
'builders',
|
|
68
|
-
'rollup',
|
|
69
|
-
'ai',
|
|
70
|
-
'world',
|
|
71
|
-
]);
|
|
72
|
-
function getWorkflowPackageName(source) {
|
|
73
|
-
const packageSpecifier = source.match(/^@workflow\/([^/]+)/);
|
|
74
|
-
if (packageSpecifier) {
|
|
75
|
-
return packageSpecifier[1] ?? null;
|
|
76
|
-
}
|
|
77
|
-
if (source === 'workflow' || source.startsWith('workflow/')) {
|
|
78
|
-
return 'workflow';
|
|
79
|
-
}
|
|
80
|
-
const packagePath = source.match(/[\\/]packages[\\/]([^\\/]+)/);
|
|
81
|
-
return packagePath?.[1] ?? null;
|
|
82
|
-
}
|
|
83
|
-
function createWorkflowForceInlinePlugin(workflowTargetWorld, workflowTargetWorldAlias) {
|
|
84
|
-
const targetWorldPackage = getWorkflowPackageName(workflowTargetWorld);
|
|
85
|
-
return {
|
|
86
|
-
name: 'workflow:force-inline',
|
|
87
|
-
// `order: 'pre'` is required: Nitro's `nitro:externals` plugin
|
|
88
|
-
// uses `order: 'pre'` for its resolveId hook and spreads our
|
|
89
|
-
// resolution result while forcing `external: true`. Without
|
|
90
|
-
// `pre` here, our `external: false` decision gets overwritten
|
|
91
|
-
// and `@workflow/*` imports end up externalized in the bundle.
|
|
92
|
-
resolveId: {
|
|
93
|
-
order: 'pre',
|
|
94
|
-
async handler(source, importer, options) {
|
|
95
|
-
if (source === WORKFLOW_WORLD_TARGET_MODULE) {
|
|
96
|
-
return { id: workflowTargetWorldAlias, external: false };
|
|
97
|
-
}
|
|
98
|
-
if (!importer)
|
|
99
|
-
return null;
|
|
100
|
-
// Match workflow package specifiers OR direct paths into
|
|
101
|
-
// packages/<name>/. Bail out early on non-workflow imports
|
|
102
|
-
// so we don't intercept the rest of the resolution chain.
|
|
103
|
-
const packageName = getWorkflowPackageName(source);
|
|
104
|
-
const isWorkflowPkg = packageName != null &&
|
|
105
|
-
(WORKFLOW_INLINE_PACKAGES.has(packageName) ||
|
|
106
|
-
packageName === targetWorldPackage);
|
|
107
|
-
if (!isWorkflowPkg)
|
|
108
|
-
return null;
|
|
109
|
-
// Resolve via other resolvers, skipping ourselves so we
|
|
110
|
-
// get a path. We don't gate on `resolved.external` because
|
|
111
|
-
// `nitro:externals` spreads our result and overrides
|
|
112
|
-
// `external: true` regardless of what we return — we want
|
|
113
|
-
// to win that race by returning first under `order: 'pre'`.
|
|
114
|
-
const resolved = await this.resolve(source, importer, {
|
|
115
|
-
...options,
|
|
116
|
-
skipSelf: true,
|
|
117
|
-
});
|
|
118
|
-
if (!resolved)
|
|
119
|
-
return null;
|
|
120
|
-
let resolvedId = resolved.id;
|
|
121
|
-
// Strip file:// protocol if present — Rollup needs a plain
|
|
122
|
-
// filesystem path to load the module. `fileURLToPath`
|
|
123
|
-
// correctly handles Windows paths (e.g., file:///C:/...
|
|
124
|
-
// -> C:\...) and percent-decoding.
|
|
125
|
-
if (resolvedId.startsWith('file://')) {
|
|
126
|
-
resolvedId = fileURLToPath(resolvedId);
|
|
127
|
-
}
|
|
128
|
-
return { id: resolvedId, external: false };
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
function createResolverRequire(nitro) {
|
|
134
|
-
return createRequire(join(nitro.options.rootDir, 'package.json'));
|
|
135
|
-
}
|
|
136
|
-
function resolveWorkflowTargetWorldAlias(nitro, targetWorld) {
|
|
137
|
-
try {
|
|
138
|
-
return createResolverRequire(nitro).resolve(targetWorld);
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
return targetWorld;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
61
|
export default {
|
|
145
62
|
name: 'workflow/nitro',
|
|
146
63
|
async setup(nitro) {
|
|
147
64
|
const isVercelDeploy = !nitro.options.dev && nitro.options.preset === 'vercel';
|
|
148
|
-
const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
|
|
149
65
|
const nitroBuildDir = `${nitro.options.buildDir.replace(/[\\/]+$/, '')}/`;
|
|
150
|
-
nitro.options.alias[WORKFLOW_WORLD_TARGET_MODULE] =
|
|
151
|
-
resolveWorkflowTargetWorldAlias(nitro, workflowTargetWorld);
|
|
152
|
-
nitro.options.alias['pg-native'] ??= WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS;
|
|
153
66
|
// Add transform plugin at the BEGINNING to run before other transforms
|
|
154
67
|
// (especially before class property transforms that rename classes like _ClassName)
|
|
155
68
|
nitro.hooks.hook('rollup:before', (_nitro, config) => {
|
|
@@ -195,24 +108,70 @@ export default {
|
|
|
195
108
|
];
|
|
196
109
|
}
|
|
197
110
|
}
|
|
198
|
-
//
|
|
199
|
-
// externalized. This
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
//
|
|
204
|
-
//
|
|
205
|
-
//
|
|
206
|
-
// "must have a static classId property".
|
|
111
|
+
// In dev mode, force workflow SDK packages to be bundled by Nitro's
|
|
112
|
+
// Rollup rather than externalized. This ensures the SWC transform
|
|
113
|
+
// plugin processes files containing workflow patterns (like
|
|
114
|
+
// @workflow/core/dist/runtime/run.js) and adds the classId
|
|
115
|
+
// registration IIFEs needed for serialization. Without this, serde
|
|
116
|
+
// classes from npm packages (like `Run`) would be externalized, the
|
|
117
|
+
// SWC transform would never fire on them, and serialization would
|
|
118
|
+
// fail with "must have a static classId property".
|
|
207
119
|
//
|
|
208
120
|
// We use a Rollup resolveId hook (added BEFORE the externalization
|
|
209
121
|
// plugin) that intercepts workflow package imports and marks them
|
|
210
122
|
// as non-external. This is more targeted than `noExternals = true`
|
|
211
123
|
// which would bundle ALL dependencies and cause TDZ errors from
|
|
212
124
|
// circular imports in packages like vue-bundle-renderer/h3.
|
|
213
|
-
nitro.
|
|
214
|
-
|
|
215
|
-
|
|
125
|
+
if (nitro.options.dev) {
|
|
126
|
+
nitro.hooks.hook('rollup:before', (_nitro, config) => {
|
|
127
|
+
config.plugins.unshift({
|
|
128
|
+
name: 'workflow:force-inline',
|
|
129
|
+
// `order: 'pre'` is required: Nitro's `nitro:externals` plugin
|
|
130
|
+
// uses `order: 'pre'` for its resolveId hook and spreads our
|
|
131
|
+
// resolution result while forcing `external: true`. Without
|
|
132
|
+
// `pre` here, our `external: false` decision gets overwritten
|
|
133
|
+
// and `@workflow/*` imports end up externalized in the dev
|
|
134
|
+
// bundle — which means the SWC-injected `static classId` IIFE
|
|
135
|
+
// in (e.g.) `@workflow/core/dist/runtime/run.js` is never
|
|
136
|
+
// applied, and step return values that include `Run`
|
|
137
|
+
// instances fail to serialize at runtime.
|
|
138
|
+
resolveId: {
|
|
139
|
+
order: 'pre',
|
|
140
|
+
async handler(source, importer, options) {
|
|
141
|
+
if (!importer)
|
|
142
|
+
return null;
|
|
143
|
+
// Match workflow package specifiers OR direct paths into
|
|
144
|
+
// packages/<name>/. Bail out early on non-workflow imports
|
|
145
|
+
// so we don't intercept the rest of the resolution chain.
|
|
146
|
+
const isWorkflowPkg = /^@?workflow(\/|$)/.test(source) ||
|
|
147
|
+
/[\\/]packages[\\/](workflow|core|serde|errors|utils|builders|rollup|ai|world|world-local|world-vercel|world-postgres|world-testing|cli|next|nitro|nuxt|vite|vitest|astro|sveltekit|nest)[\\/]/.test(source);
|
|
148
|
+
if (!isWorkflowPkg)
|
|
149
|
+
return null;
|
|
150
|
+
// Resolve via other resolvers, skipping ourselves so we
|
|
151
|
+
// get a path. We don't gate on `resolved.external` because
|
|
152
|
+
// `nitro:externals` spreads our result and overrides
|
|
153
|
+
// `external: true` regardless of what we return — we want
|
|
154
|
+
// to win that race by returning first under `order: 'pre'`.
|
|
155
|
+
const resolved = await this.resolve(source, importer, {
|
|
156
|
+
...options,
|
|
157
|
+
skipSelf: true,
|
|
158
|
+
});
|
|
159
|
+
if (!resolved)
|
|
160
|
+
return null;
|
|
161
|
+
let resolvedId = resolved.id;
|
|
162
|
+
// Strip file:// protocol if present — Rollup needs a plain
|
|
163
|
+
// filesystem path to load the module. `fileURLToPath`
|
|
164
|
+
// correctly handles Windows paths (e.g., file:///C:/...
|
|
165
|
+
// -> C:\...) and percent-decoding.
|
|
166
|
+
if (resolvedId.startsWith('file://')) {
|
|
167
|
+
resolvedId = fileURLToPath(resolvedId);
|
|
168
|
+
}
|
|
169
|
+
return { id: resolvedId, external: false };
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
}
|
|
216
175
|
// Add tsConfig plugin
|
|
217
176
|
if (nitro.options.workflow?.typescriptPlugin) {
|
|
218
177
|
nitro.options.typescript.tsConfig ||= {};
|
|
@@ -270,8 +229,19 @@ export default {
|
|
|
270
229
|
}
|
|
271
230
|
});
|
|
272
231
|
}
|
|
273
|
-
|
|
274
|
-
|
|
232
|
+
// Embedded observability dashboard. Defaults to on in dev / off in prod
|
|
233
|
+
// builds; when disabled nothing is registered, so prod bundles never
|
|
234
|
+
// import @workflow/web. Excluded on Vercel deploys (the on-disk build/
|
|
235
|
+
// and node_modules import don't survive a serverless bundle — users use
|
|
236
|
+
// the hosted Vercel dashboard there).
|
|
237
|
+
const dashboardOption = nitro.options.workflow?.dashboard;
|
|
238
|
+
const dashboardEnabled = typeof dashboardOption === 'object'
|
|
239
|
+
? (dashboardOption.enabled ?? nitro.options.dev)
|
|
240
|
+
: (dashboardOption ?? nitro.options.dev);
|
|
241
|
+
const dashboardPath = normalizeDashboardPath((typeof dashboardOption === 'object' && dashboardOption.path) ||
|
|
242
|
+
DEFAULT_DASHBOARD_PATH);
|
|
243
|
+
if (dashboardEnabled && !isVercelDeploy) {
|
|
244
|
+
addDashboardHandler(nitro, dashboardPath);
|
|
275
245
|
}
|
|
276
246
|
addVirtualHandler(nitro, '/.well-known/workflow/v1/webhook/:token', 'workflow/webhook.mjs');
|
|
277
247
|
// V2: single combined handler for both workflow and step execution.
|
|
@@ -332,104 +302,98 @@ export default {
|
|
|
332
302
|
},
|
|
333
303
|
};
|
|
334
304
|
const DASHBOARD_VIRTUAL_ID = '#workflow/dashboard-handler';
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
305
|
+
const DEFAULT_DASHBOARD_PATH = '/_workflow';
|
|
306
|
+
/**
|
|
307
|
+
* Normalize the dashboard mount path so the Nitro route registration and the
|
|
308
|
+
* embedded handler's own basename normalization can't disagree.
|
|
309
|
+
*
|
|
310
|
+
* `dashboardPath` feeds two consumers: the Nitro route registration
|
|
311
|
+
* (`[path, path + '/**']`) and the handler's `basename` (which re-normalizes
|
|
312
|
+
* internally via `normalizeBasename`). Normalizing once, here, keeps them in
|
|
313
|
+
* sync. We force a single leading slash, strip trailing slashes, and reject
|
|
314
|
+
* the root mount (whose `/**` catch-all would swallow the host app), falling
|
|
315
|
+
* back to the default.
|
|
316
|
+
*/
|
|
317
|
+
function normalizeDashboardPath(path) {
|
|
318
|
+
const normalized = `/${path.trim().replace(/^\/+/, '').replace(/\/+$/, '')}`;
|
|
319
|
+
return normalized === '/' ? DEFAULT_DASHBOARD_PATH : normalized;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Mount the observability dashboard in-process at `basename` (e.g. `/_workflow`).
|
|
323
|
+
*
|
|
324
|
+
* The entire `@workflow/web` UI (SSR + static client assets + RPC) is served by
|
|
325
|
+
* a single Web-standard fetch handler running inside this Nitro process — no
|
|
326
|
+
* second server, no separate port, no redirect. The handler is framework-
|
|
327
|
+
* neutral; this is just its first consumer.
|
|
328
|
+
*/
|
|
329
|
+
function addDashboardHandler(nitro, basename) {
|
|
330
|
+
// Resolve `@workflow/web/handler` relative to this module so consumers don't
|
|
331
|
+
// need a direct dependency on `@workflow/web`. Inlined into the virtual
|
|
332
|
+
// handler as a file:// URL and imported with @vite-ignore/webpackIgnore so
|
|
333
|
+
// Node `import()`s it from node_modules at runtime — keeping @workflow/web's
|
|
334
|
+
// (large, React) dependency graph out of the Nitro server bundle.
|
|
342
335
|
const require_ = createRequire(import.meta.url);
|
|
343
|
-
let
|
|
336
|
+
let webHandlerUrl;
|
|
344
337
|
try {
|
|
345
|
-
|
|
338
|
+
webHandlerUrl = pathToFileURL(require_.resolve('@workflow/web/handler')).href;
|
|
346
339
|
}
|
|
347
340
|
catch {
|
|
348
|
-
|
|
341
|
+
webHandlerUrl = '@workflow/web/handler';
|
|
349
342
|
}
|
|
350
343
|
const handlerSource = /* js */ `
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
const port = typeof address === 'object' && address ? address.port : 3456;
|
|
360
|
-
return 'http://localhost:' + port;
|
|
344
|
+
const __workflowWebHandlerUrl = ${JSON.stringify(webHandlerUrl)};
|
|
345
|
+
const __workflowDashboardBasename = ${JSON.stringify(basename)};
|
|
346
|
+
let handlerPromise = null;
|
|
347
|
+
async function getDashboardHandler() {
|
|
348
|
+
if (!handlerPromise) {
|
|
349
|
+
handlerPromise = (async () => {
|
|
350
|
+
const mod = await import(/* @vite-ignore */ /* webpackIgnore: true */ __workflowWebHandlerUrl);
|
|
351
|
+
return mod.createWorkflowWebHandler({ basename: __workflowDashboardBasename });
|
|
361
352
|
})().catch((error) => {
|
|
362
|
-
|
|
353
|
+
handlerPromise = null;
|
|
363
354
|
throw error;
|
|
364
355
|
});
|
|
365
356
|
}
|
|
366
|
-
return
|
|
357
|
+
return handlerPromise;
|
|
367
358
|
}
|
|
368
359
|
`;
|
|
369
|
-
if (
|
|
360
|
+
if (isNitroV2(nitro)) {
|
|
361
|
+
// Nitro v2 (legacy h3)
|
|
370
362
|
nitro.options.virtual[DASHBOARD_VIRTUAL_ID] = /* js */ `
|
|
371
363
|
import { fromWebHandler } from "h3";
|
|
372
364
|
${handlerSource}
|
|
373
|
-
export default fromWebHandler(async () => {
|
|
365
|
+
export default fromWebHandler(async (request) => {
|
|
374
366
|
try {
|
|
375
|
-
const
|
|
376
|
-
return
|
|
367
|
+
const handler = await getDashboardHandler();
|
|
368
|
+
return await handler(request);
|
|
377
369
|
} catch (error) {
|
|
378
|
-
console.error('Failed to
|
|
379
|
-
return new Response('Failed to
|
|
370
|
+
console.error('Failed to render workflow dashboard:', error);
|
|
371
|
+
return new Response('Failed to render workflow dashboard: ' + (error && error.message || error), { status: 500 });
|
|
380
372
|
}
|
|
381
373
|
});
|
|
382
374
|
`;
|
|
383
375
|
}
|
|
384
376
|
else {
|
|
377
|
+
// Nitro v3+ (native web handlers)
|
|
385
378
|
nitro.options.virtual[DASHBOARD_VIRTUAL_ID] = /* js */ `
|
|
386
379
|
${handlerSource}
|
|
387
|
-
export default async () => {
|
|
380
|
+
export default async ({ req }) => {
|
|
388
381
|
try {
|
|
389
|
-
const
|
|
390
|
-
return
|
|
382
|
+
const handler = await getDashboardHandler();
|
|
383
|
+
return await handler(req);
|
|
391
384
|
} catch (error) {
|
|
392
|
-
console.error('Failed to
|
|
393
|
-
return new Response('Failed to
|
|
385
|
+
console.error('Failed to render workflow dashboard:', error);
|
|
386
|
+
return new Response('Failed to render workflow dashboard: ' + (error && error.message || error), { status: 500 });
|
|
394
387
|
}
|
|
395
388
|
};
|
|
396
389
|
`;
|
|
397
390
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
if (id.startsWith('/') || /^[A-Za-z]:[\\/]/.test(id)) {
|
|
404
|
-
return pathToFileURL(id).href;
|
|
405
|
-
}
|
|
406
|
-
return id;
|
|
407
|
-
}
|
|
408
|
-
function createDevWorldTargetSource(nitro) {
|
|
409
|
-
const workflowTargetWorldAlias = nitro.options.alias[WORKFLOW_WORLD_TARGET_MODULE];
|
|
410
|
-
if (typeof workflowTargetWorldAlias !== 'string') {
|
|
411
|
-
throw new Error(`Missing ${WORKFLOW_WORLD_TARGET_MODULE} alias for Nitro dev workflow handler`);
|
|
391
|
+
// Register the exact mount path and a catch-all beneath it so the index,
|
|
392
|
+
// client routes, API routes (RPC/stream), and static assets all route to the
|
|
393
|
+
// embedded handler, which resolves them against `basename` internally.
|
|
394
|
+
for (const route of [basename, `${basename}/**`]) {
|
|
395
|
+
nitro.options.handlers.push({ route, handler: DASHBOARD_VIRTUAL_ID });
|
|
412
396
|
}
|
|
413
|
-
const workflowTargetWorldImport = JSON.stringify(getStaticImportSpecifier(workflowTargetWorldAlias));
|
|
414
|
-
const workflowCoreRuntimeImport = JSON.stringify(getStaticImportSpecifier(resolveWorkflowCoreRuntimeAlias({ workingDir: nitro.options.rootDir })));
|
|
415
|
-
return /* js */ `
|
|
416
|
-
import {
|
|
417
|
-
createWorldFromModule as __workflowCreateWorldFromModule,
|
|
418
|
-
setWorld as __workflowSetWorld,
|
|
419
|
-
} from ${workflowCoreRuntimeImport};
|
|
420
|
-
import * as __workflowTargetWorld from ${workflowTargetWorldImport};
|
|
421
|
-
|
|
422
|
-
let __workflowWorldPromise = null;
|
|
423
|
-
|
|
424
|
-
async function ensureWorkflowWorld() {
|
|
425
|
-
if (!__workflowWorldPromise) {
|
|
426
|
-
__workflowWorldPromise = Promise.resolve(
|
|
427
|
-
__workflowCreateWorldFromModule(__workflowTargetWorld)
|
|
428
|
-
).then(__workflowSetWorld);
|
|
429
|
-
}
|
|
430
|
-
await __workflowWorldPromise;
|
|
431
|
-
}
|
|
432
|
-
`;
|
|
433
397
|
}
|
|
434
398
|
function addVirtualHandler(nitro, route, buildPath) {
|
|
435
399
|
nitro.options.handlers.push({
|
|
@@ -443,24 +407,21 @@ function addVirtualHandler(nitro, route, buildPath) {
|
|
|
443
407
|
'workflow/workflows.mjs': `await import(/* @vite-ignore */ pathToFileURL(${stepsImportPath}).href + "?t=" + version);`,
|
|
444
408
|
};
|
|
445
409
|
if (nitro.options.dev) {
|
|
446
|
-
const devWorldTargetSource = createDevWorldTargetSource(nitro);
|
|
447
410
|
// Dev mode: load generated workflow bundles from disk at request time.
|
|
448
411
|
// This keeps `.nitro/workflow/*.mjs` out of Nitro's own bundle graph,
|
|
449
412
|
// which avoids rebuild loops and stale dependency graphs during HMR.
|
|
450
413
|
// Cache-bust by file mtime so each successful rebuild loads fresh code.
|
|
451
|
-
if (
|
|
414
|
+
if (isNitroV2(nitro)) {
|
|
452
415
|
nitro.options.virtual[`#${buildPath}`] = /* js */ `
|
|
453
416
|
import { fromWebHandler } from "h3";
|
|
454
417
|
import { statSync } from "node:fs";
|
|
455
418
|
import { pathToFileURL } from "node:url";
|
|
456
|
-
${devWorldTargetSource}
|
|
457
419
|
|
|
458
420
|
const handlerPath = ${handlerImportPath};
|
|
459
421
|
let currentVersion = "";
|
|
460
422
|
let currentImportPath = "";
|
|
461
423
|
|
|
462
424
|
async function loadPOST() {
|
|
463
|
-
await ensureWorkflowWorld();
|
|
464
425
|
const version = String(statSync(handlerPath).mtimeMs);
|
|
465
426
|
if (version !== currentVersion) {
|
|
466
427
|
currentVersion = version;
|
|
@@ -480,14 +441,12 @@ function addVirtualHandler(nitro, route, buildPath) {
|
|
|
480
441
|
nitro.options.virtual[`#${buildPath}`] = /* js */ `
|
|
481
442
|
import { statSync } from "node:fs";
|
|
482
443
|
import { pathToFileURL } from "node:url";
|
|
483
|
-
${devWorldTargetSource}
|
|
484
444
|
|
|
485
445
|
const handlerPath = ${handlerImportPath};
|
|
486
446
|
let currentVersion = "";
|
|
487
447
|
let currentImportPath = "";
|
|
488
448
|
|
|
489
449
|
async function loadPOST() {
|
|
490
|
-
await ensureWorkflowWorld();
|
|
491
450
|
const version = String(statSync(handlerPath).mtimeMs);
|
|
492
451
|
if (version !== currentVersion) {
|
|
493
452
|
currentVersion = version;
|
|
@@ -514,7 +473,7 @@ function addVirtualHandler(nitro, route, buildPath) {
|
|
|
514
473
|
// using `@workflow/nuxt`, importing only `POST` could drop the generated
|
|
515
474
|
// step bundle's top-level registrations, so the handler loaded but steps
|
|
516
475
|
// were missing at runtime.
|
|
517
|
-
if (
|
|
476
|
+
if (isNitroV2(nitro)) {
|
|
518
477
|
// Nitro v2 (legacy)
|
|
519
478
|
nitro.options.virtual[`#${buildPath}`] = /* js */ `
|
|
520
479
|
import ${handlerImportPath};
|
|
@@ -548,7 +507,7 @@ function addManifestHandler(nitro) {
|
|
|
548
507
|
// Dev mode: use a virtual handler that reads the manifest from disk at
|
|
549
508
|
// request time. The absolute path is valid because we're on the build machine.
|
|
550
509
|
nitro.options.handlers.push({ route, handler: MANIFEST_VIRTUAL_ID });
|
|
551
|
-
nitro.options.virtual[MANIFEST_VIRTUAL_ID] =
|
|
510
|
+
nitro.options.virtual[MANIFEST_VIRTUAL_ID] = isNitroV2(nitro)
|
|
552
511
|
? /* js */ `
|
|
553
512
|
import { fromWebHandler } from "h3";
|
|
554
513
|
import { readFileSync } from "node:fs";
|
|
@@ -598,7 +557,7 @@ function writeManifestHandler(nitro) {
|
|
|
598
557
|
try {
|
|
599
558
|
const manifestContent = readFileSync(manifestPath, 'utf-8');
|
|
600
559
|
JSON.parse(manifestContent); // validate
|
|
601
|
-
const handlerCode =
|
|
560
|
+
const handlerCode = isNitroV2(nitro)
|
|
602
561
|
? `import { fromWebHandler } from "h3";
|
|
603
562
|
const manifest = ${JSON.stringify(manifestContent)};
|
|
604
563
|
export default fromWebHandler(() => new Response(manifest, {
|
|
@@ -614,7 +573,7 @@ export default async () => new Response(manifest, {
|
|
|
614
573
|
}
|
|
615
574
|
catch {
|
|
616
575
|
// Write a 404 fallback handler
|
|
617
|
-
const fallback =
|
|
576
|
+
const fallback = isNitroV2(nitro)
|
|
618
577
|
? `import { fromWebHandler } from "h3";
|
|
619
578
|
export default fromWebHandler(() => new Response("Manifest not found", { status: 404 }));
|
|
620
579
|
`
|
|
@@ -623,4 +582,4 @@ export default fromWebHandler(() => new Response("Manifest not found", { status:
|
|
|
623
582
|
writeFileSync(handlerPath, fallback);
|
|
624
583
|
}
|
|
625
584
|
}
|
|
626
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLGlDQUFpQyxFQUNqQyxzQkFBc0IsRUFDdEIsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs1RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sWUFBWSxHQUFJLEtBQThDLENBQUMsSUFBSTtRQUN2RSxFQUFFLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQUMsTUFBb0I7SUFDaEQsTUFBTSxNQUFNLEdBQUcsMkJBQTJCLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixNQUFN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QUFDLE9BQU87WUFDN0IsQ0FBQyxDQUFDOztDQUVQO1lBQ0ssQ0FBQyxDQUFDO0NBQ1AsQ0FBQztRQUNFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQge1xuICBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52LFxuICByZXNvbHZlV29ya2Zsb3dDb3JlUnVudGltZUFsaWFzLFxuICBXT1JLRkxPV19OT0RFX0NPTVBBVF9CQU5ORVIsXG4gIFdPUktGTE9XX09QVElPTkFMX1BHX05BVElWRV9BTElBUyxcbiAgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUixcbiAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgdHlwZSB7IE5pdHJvLCBOaXRyb01vZHVsZSwgUm9sbHVwQ29uZmlnIH0gZnJvbSAnbml0cm8vdHlwZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IExvY2FsQnVpbGRlciwgVmVyY2VsQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9O1xuXG4vKipcbiAqIERldGVjdCB3aGV0aGVyIHRoZSBOaXRybyBpbnN0YW5jZSBpcyB2Mi5cbiAqIE5ld2VyIE5pdHJvIHJlbGVhc2VzIChib3RoIHYyIGFuZCB2MykgZXhwb3NlIGBuaXRyby5tZXRhLm1ham9yVmVyc2lvbmAuXG4gKiBGYWxsIGJhY2sgdG8gYCFuaXRyby5yb3V0aW5nYCAob25seSBwcmVzZW50IGluIHYzKykgZm9yIG9sZGVyIE5pdHJvIHYyXG4gKiB2ZXJzaW9ucyB0aGF0IGRvbid0IGhhdmUgYG1ham9yVmVyc2lvbmAgeWV0IChlLmcuIE51eHQgdXNlcnMgb24gYW4gb2xkZXJcbiAqIG5pdHJvcGFjaykuXG4gKi9cbmZ1bmN0aW9uIGlzTml0cm9WMihuaXRybzogTml0cm8pOiBib29sZWFuIHtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gKG5pdHJvIGFzIHsgbWV0YT86IHsgbWFqb3JWZXJzaW9uPzogbnVtYmVyIH0gfSkubWV0YVxuICAgID8ubWFqb3JWZXJzaW9uO1xuICBpZiAobWFqb3JWZXJzaW9uICE9IG51bGwpIHtcbiAgICByZXR1cm4gbWFqb3JWZXJzaW9uID09PSAyO1xuICB9XG4gIHJldHVybiAhbml0cm8ucm91dGluZztcbn1cblxuLyoqXG4gKiBQcmVwZW5kIGEgYGNyZWF0ZVJlcXVpcmVgLWJhY2tlZCBnbG9iYWwgYHJlcXVpcmVgIHRvIGV2ZXJ5IHNlcnZlciBjaHVuayBzb1xuICogdW5kaWNpJ3MgYnVuZGxlZCBgcmVxdWlyZSgnbm9kZTpodHRwMicpYCByZXNvbHZlcyB0aGUgcmVhbCBidWlsdGluIGluc3RlYWQgb2ZcbiAqIHRocm93aW5nICh3aGljaCB3b3VsZCBtYWtlIHVuZGljaSBmYWxsIGJhY2sgdG8gYSBzdHViIHdpdGhvdXRcbiAqIGBodHRwMi5jb25uZWN0YCwgYnJlYWtpbmcgSFRUUC8yKS4gVGhlIGd1YXJkIGtlZXBzIGl0IGlkZW1wb3RlbnQgYWNyb3NzXG4gKiBjaHVua3MsIGFuZCBgbm9kZTptb2R1bGVgIGlzIGFsd2F5cyBhdmFpbGFibGUgaW4gdGhlIE5vZGUgc2VydmVyIHJ1bnRpbWUuXG4gKlxuICogVGhpcyBpcyBhIE5vZGUtc2VydmVyLXJ1bnRpbWUtb25seSBzaGltIChjYWxsZXJzIGdhdGUgaXQgdG8gdGhlIHByb2R1Y3Rpb25cbiAqIHNlcnZlciBidWlsZCkuIE5vdGUgdGhlIGRlbGliZXJhdGUgZ2xvYmFsIHNpZGUgZWZmZWN0OiBkZWZpbmluZ1xuICogYGdsb2JhbFRoaXMucmVxdWlyZWAgbWFrZXMgYHR5cGVvZiByZXF1aXJlYCB0cnV0aHkgZm9yICpldmVyeSogYnVuZGxlZFxuICogZGVwZW5kZW5jeSBpbiB0aGlzIEVTTSBzZXJ2ZXIgb3V0cHV0LCBzbyBhbnkgbGlicmFyeSB0aGF0IGZlYXR1cmUtZGV0ZWN0c1xuICogYHJlcXVpcmVgIHdpbGwgdGFrZSBpdHMgQ0pTIHBhdGggaGVyZS4gVGhhdCBpcyBzYWZlIGJlY2F1c2UgKGEpIGl0IG5ldmVyXG4gKiB0b3VjaGVzIHRoZSBjbGllbnQgYnVuZGxlLCAoYikgdGhlIGB0eXBlb2YgcmVxdWlyZSA9PT0gJ3VuZGVmaW5lZCdgIGd1YXJkXG4gKiBtYWtlcyBpdCBhIG5vLW9wIGluIENKUyBjaHVua3Mgd2hlcmUgYSByZWFsIGByZXF1aXJlYCBhbHJlYWR5IGV4aXN0cywgYW5kXG4gKiAoYykgdGhlIGByZXF1aXJlYCB3ZSBpbnN0YWxsIGlzIGEgd29ya2luZyBgY3JlYXRlUmVxdWlyZWAsIHNvIGEgbGlicmFyeSB0aGF0XG4gKiBzd2l0Y2hlcyB0byB0aGUgcmVxdWlyZSBwYXRoIGdldHMgYSBmdW5jdGlvbmFsIGByZXF1aXJlYCwgbm90IGEgYnJva2VuIHN0dWIuXG4gKiBUaGUgYmVoYXZpb3IgdG8gd2F0Y2ggZm9yIGlzIGEgYnVuZGxlZCBsaWIgdGhhdCwgb24gc2VlaW5nIGByZXF1aXJlYCwgZG9lc1xuICogYHJlcXVpcmUoKWAgb2YgYW4gRVNNLW9ubHkgZGVwZW5kZW5jeSBvbiBhIE5vZGUgdmVyc2lvbiB3aXRob3V0IGByZXF1aXJlKEVTTSlgXG4gKiBzdXBwb3J0LlxuICovXG5mdW5jdGlvbiBhZGROb2RlUmVxdWlyZUJhbm5lcihjb25maWc6IFJvbGx1cENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBiYW5uZXIgPSBXT1JLRkxPV19OT0RFX0NPTVBBVF9CQU5ORVI7XG4gIGNvbnN0IG91dHB1dCA9IGNvbmZpZy5vdXRwdXQ7XG4gIGlmIChvdXRwdXQgPT0gbnVsbCkge1xuICAgIGNvbmZpZy5vdXRwdXQgPSB7IGJhbm5lciB9O1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvdXRwdXRzID0gQXJyYXkuaXNBcnJheShvdXRwdXQpID8gb3V0cHV0IDogW291dHB1dF07XG4gIGZvciAoY29uc3QgbyBvZiBvdXRwdXRzKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBvLmJhbm5lcjtcbiAgICBvLmJhbm5lciA9XG4gICAgICBleGlzdGluZyA9PSBudWxsXG4gICAgICAgID8gYmFubmVyXG4gICAgICAgIDogdHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBhc3luYyAoY2h1bms6IHVua25vd24pID0+IGAke2Jhbm5lcn1cXG4ke2F3YWl0IGV4aXN0aW5nKGNodW5rKX1gXG4gICAgICAgICAgOiBgJHtiYW5uZXJ9XFxuJHtleGlzdGluZ31gO1xuICB9XG59XG5cbmNvbnN0IFdPUktGTE9XX0lOTElORV9QQUNLQUdFUyA9IG5ldyBTZXQoW1xuICAnd29ya2Zsb3cnLFxuICAnY29yZScsXG4gICdzZXJkZScsXG4gICdlcnJvcnMnLFxuICAndXRpbHMnLFxuICAnYnVpbGRlcnMnLFxuICAncm9sbHVwJyxcbiAgJ2FpJyxcbiAgJ3dvcmxkJyxcbl0pO1xuXG5mdW5jdGlvbiBnZXRXb3JrZmxvd1BhY2thZ2VOYW1lKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHBhY2thZ2VTcGVjaWZpZXIgPSBzb3VyY2UubWF0Y2goL15Ad29ya2Zsb3dcXC8oW14vXSspLyk7XG4gIGlmIChwYWNrYWdlU3BlY2lmaWVyKSB7XG4gICAgcmV0dXJuIHBhY2thZ2VTcGVjaWZpZXJbMV0gPz8gbnVsbDtcbiAgfVxuICBpZiAoc291cmNlID09PSAnd29ya2Zsb3cnIHx8IHNvdXJjZS5zdGFydHNXaXRoKCd3b3JrZmxvdy8nKSkge1xuICAgIHJldHVybiAnd29ya2Zsb3cnO1xuICB9XG4gIGNvbnN0IHBhY2thZ2VQYXRoID0gc291cmNlLm1hdGNoKC9bXFxcXC9dcGFja2FnZXNbXFxcXC9dKFteXFxcXC9dKykvKTtcbiAgcmV0dXJuIHBhY2thZ2VQYXRoPy5bMV0gPz8gbnVsbDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya2Zsb3dGb3JjZUlubGluZVBsdWdpbihcbiAgd29ya2Zsb3dUYXJnZXRXb3JsZDogc3RyaW5nLFxuICB3b3JrZmxvd1RhcmdldFdvcmxkQWxpYXM6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHRhcmdldFdvcmxkUGFja2FnZSA9IGdldFdvcmtmbG93UGFja2FnZU5hbWUod29ya2Zsb3dUYXJnZXRXb3JsZCk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dvcmtmbG93OmZvcmNlLWlubGluZScsXG4gICAgLy8gYG9yZGVyOiAncHJlJ2AgaXMgcmVxdWlyZWQ6IE5pdHJvJ3MgYG5pdHJvOmV4dGVybmFsc2AgcGx1Z2luXG4gICAgLy8gdXNlcyBgb3JkZXI6ICdwcmUnYCBmb3IgaXRzIHJlc29sdmVJZCBob29rIGFuZCBzcHJlYWRzIG91clxuICAgIC8vIHJlc29sdXRpb24gcmVzdWx0IHdoaWxlIGZvcmNpbmcgYGV4dGVybmFsOiB0cnVlYC4gV2l0aG91dFxuICAgIC8vIGBwcmVgIGhlcmUsIG91ciBgZXh0ZXJuYWw6IGZhbHNlYCBkZWNpc2lvbiBnZXRzIG92ZXJ3cml0dGVuXG4gICAgLy8gYW5kIGBAd29ya2Zsb3cvKmAgaW1wb3J0cyBlbmQgdXAgZXh0ZXJuYWxpemVkIGluIHRoZSBidW5kbGUuXG4gICAgcmVzb2x2ZUlkOiB7XG4gICAgICBvcmRlcjogJ3ByZScgYXMgY29uc3QsXG4gICAgICBhc3luYyBoYW5kbGVyKFxuICAgICAgICB0aGlzOiB7XG4gICAgICAgICAgcmVzb2x2ZTogKFxuICAgICAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgICAgICBpbXBvcnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3B0aW9uczogeyBza2lwU2VsZj86IGJvb2xlYW4gfVxuICAgICAgICAgICkgPT4gUHJvbWlzZTx7IGlkOiBzdHJpbmcgfSB8IG51bGw+O1xuICAgICAgICB9LFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgaW1wb3J0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgb3B0aW9uczogeyBza2lwU2VsZj86IGJvb2xlYW4gfVxuICAgICAgKSB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFdPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEUpIHtcbiAgICAgICAgICByZXR1cm4geyBpZDogd29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzLCBleHRlcm5hbDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWltcG9ydGVyKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gTWF0Y2ggd29ya2Zsb3cgcGFja2FnZSBzcGVjaWZpZXJzIE9SIGRpcmVjdCBwYXRocyBpbnRvXG4gICAgICAgIC8vIHBhY2thZ2VzLzxuYW1lPi8uIEJhaWwgb3V0IGVhcmx5IG9uIG5vbi13b3JrZmxvdyBpbXBvcnRzXG4gICAgICAgIC8vIHNvIHdlIGRvbid0IGludGVyY2VwdCB0aGUgcmVzdCBvZiB0aGUgcmVzb2x1dGlvbiBjaGFpbi5cbiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBnZXRXb3JrZmxvd1BhY2thZ2VOYW1lKHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IGlzV29ya2Zsb3dQa2cgPVxuICAgICAgICAgIHBhY2thZ2VOYW1lICE9IG51bGwgJiZcbiAgICAgICAgICAoV09SS0ZMT1dfSU5MSU5FX1BBQ0tBR0VTLmhhcyhwYWNrYWdlTmFtZSkgfHxcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lID09PSB0YXJnZXRXb3JsZFBhY2thZ2UpO1xuICAgICAgICBpZiAoIWlzV29ya2Zsb3dQa2cpIHJldHVybiBudWxsO1xuICAgICAgICAvLyBSZXNvbHZlIHZpYSBvdGhlciByZXNvbHZlcnMsIHNraXBwaW5nIG91cnNlbHZlcyBzbyB3ZVxuICAgICAgICAvLyBnZXQgYSBwYXRoLiBXZSBkb24ndCBnYXRlIG9uIGByZXNvbHZlZC5leHRlcm5hbGAgYmVjYXVzZVxuICAgICAgICAvLyBgbml0cm86ZXh0ZXJuYWxzYCBzcHJlYWRzIG91ciByZXN1bHQgYW5kIG92ZXJyaWRlc1xuICAgICAgICAvLyBgZXh0ZXJuYWw6IHRydWVgIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3ZSByZXR1cm4g4oCUIHdlIHdhbnRcbiAgICAgICAgLy8gdG8gd2luIHRoYXQgcmFjZSBieSByZXR1cm5pbmcgZmlyc3QgdW5kZXIgYG9yZGVyOiAncHJlJ2AuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgdGhpcy5yZXNvbHZlKHNvdXJjZSwgaW1wb3J0ZXIsIHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHNraXBTZWxmOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCByZXNvbHZlZElkID0gcmVzb2x2ZWQuaWQ7XG4gICAgICAgIC8vIFN0cmlwIGZpbGU6Ly8gcHJvdG9jb2wgaWYgcHJlc2VudCDigJQgUm9sbHVwIG5lZWRzIGEgcGxhaW5cbiAgICAgICAgLy8gZmlsZXN5c3RlbSBwYXRoIHRvIGxvYWQgdGhlIG1vZHVsZS4gYGZpbGVVUkxUb1BhdGhgXG4gICAgICAgIC8vIGNvcnJlY3RseSBoYW5kbGVzIFdpbmRvd3MgcGF0aHMgKGUuZy4sIGZpbGU6Ly8vQzovLi4uXG4gICAgICAgIC8vIC0+IEM6XFwuLi4pIGFuZCBwZXJjZW50LWRlY29kaW5nLlxuICAgICAgICBpZiAocmVzb2x2ZWRJZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICByZXNvbHZlZElkID0gZmlsZVVSTFRvUGF0aChyZXNvbHZlZElkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBpZDogcmVzb2x2ZWRJZCwgZXh0ZXJuYWw6IGZhbHNlIH07XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyUmVxdWlyZShuaXRybzogTml0cm8pIHtcbiAgcmV0dXJuIGNyZWF0ZVJlcXVpcmUoam9pbihuaXRyby5vcHRpb25zLnJvb3REaXIsICdwYWNrYWdlLmpzb24nKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoXG4gIG5pdHJvOiBOaXRybyxcbiAgdGFyZ2V0V29ybGQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY3JlYXRlUmVzb2x2ZXJSZXF1aXJlKG5pdHJvKS5yZXNvbHZlKHRhcmdldFdvcmxkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHRhcmdldFdvcmxkO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3dvcmtmbG93L25pdHJvJyxcbiAgYXN5bmMgc2V0dXAobml0cm86IE5pdHJvKSB7XG4gICAgY29uc3QgaXNWZXJjZWxEZXBsb3kgPVxuICAgICAgIW5pdHJvLm9wdGlvbnMuZGV2ICYmIG5pdHJvLm9wdGlvbnMucHJlc2V0ID09PSAndmVyY2VsJztcbiAgICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkID0gZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudigpO1xuICAgIGNvbnN0IG5pdHJvQnVpbGREaXIgPSBgJHtuaXRyby5vcHRpb25zLmJ1aWxkRGlyLnJlcGxhY2UoL1tcXFxcL10rJC8sICcnKX0vYDtcblxuICAgIG5pdHJvLm9wdGlvbnMuYWxpYXNbV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRV0gPVxuICAgICAgcmVzb2x2ZVdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyhuaXRybywgd29ya2Zsb3dUYXJnZXRXb3JsZCk7XG4gICAgbml0cm8ub3B0aW9ucy5hbGlhc1sncGctbmF0aXZlJ10gPz89IFdPUktGTE9XX09QVElPTkFMX1BHX05BVElWRV9BTElBUztcblxuICAgIC8vIEFkZCB0cmFuc2Zvcm0gcGx1Z2luIGF0IHRoZSBCRUdJTk5JTkcgdG8gcnVuIGJlZm9yZSBvdGhlciB0cmFuc2Zvcm1zXG4gICAgLy8gKGVzcGVjaWFsbHkgYmVmb3JlIGNsYXNzIHByb3BlcnR5IHRyYW5zZm9ybXMgdGhhdCByZW5hbWUgY2xhc3NlcyBsaWtlIF9DbGFzc05hbWUpXG4gICAgbml0cm8uaG9va3MuaG9vaygncm9sbHVwOmJlZm9yZScsIChfbml0cm86IE5pdHJvLCBjb25maWc6IFJvbGx1cENvbmZpZykgPT4ge1xuICAgICAgKGNvbmZpZy5wbHVnaW5zIGFzIEFycmF5PHVua25vd24+KS51bnNoaWZ0KFxuICAgICAgICB3b3JrZmxvd1RyYW5zZm9ybVBsdWdpbih7XG4gICAgICAgICAgLy8gTml0cm8gYnVpbGQgYXJ0aWZhY3RzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLlxuICAgICAgICAgIC8vIFJlLXByb2Nlc3NpbmcgdGhlbSBjYW4gZHVwbGljYXRlIGNsYXNzIHJlZ2lzdHJhdGlvbi5cbiAgICAgICAgICBleGNsdWRlOiBbbml0cm9CdWlsZERpcl0sXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBOaXRybyBidW5kbGVzIHVuZGljaSAodmlhIHRoZSB3b3JsZCBhZGFwdGVyKSBpbnRvIHRoZSBFU00gc2VydmVyXG4gICAgICAvLyBvdXRwdXQuIHVuZGljaSBsb2FkcyBtb3N0IG5vZGU6IGJ1aWx0aW5zIGFzIEVTTSBpbXBvcnRzLCBidXQgcHVsbHMgaW5cbiAgICAgIC8vIGBub2RlOmh0dHAyYCBsYXppbHkgdmlhIGEgYmFyZSBgcmVxdWlyZSgnbm9kZTpodHRwMicpYCBpbnNpZGUgYVxuICAgICAgLy8gdHJ5L2NhdGNoIOKAlCB3aGljaCB0aGUgYnVuZGxlciBsZWF2ZXMgdW4td2lyZWQsIHNvIGluIHRoZSBFU00gYnVuZGxlIHRoZVxuICAgICAgLy8gcmVxdWlyZSB0aHJvd3MgYW5kIHVuZGljaSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIGEgc3R1YiB3aG9zZVxuICAgICAgLy8gYGh0dHAyLmNvbm5lY3RgIGlzIHVuZGVmaW5lZC4gVGhhdCBicmVha3MgYW55IEhUVFAvMiByZXF1ZXN0ICh0aGVcbiAgICAgIC8vIHdvcmtmbG93IGZsb3ctcm91dGUgY2FsbGJhY2sgZmFpbHMgd2l0aCBcImZldGNoIGZhaWxlZFwiLCBzbyBydW5zIG5ldmVyXG4gICAgICAvLyBzdGFydCkuIFByZXBlbmQgYSB3b3JraW5nIENKUyBgcmVxdWlyZWAgdG8gdGhlIHNlcnZlciBjaHVua3Mgc28gdGhlXG4gICAgICAvLyByZWFsIGBub2RlOmh0dHAyYCByZXNvbHZlcy4gU2tpcHBlZCBpbiBkZXYgKFZpdGUgU1NSIHByb3ZpZGVzIHJlcXVpcmUpLlxuICAgICAgaWYgKCFuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGROb2RlUmVxdWlyZUJhbm5lcihjb25maWcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTk9URTogVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGRlYnVnIHVuZW52IG1vY2tcbiAgICBpZiAoIW5pdHJvLm9wdGlvbnMud29ya2Zsb3c/Ll92aXRlKSB7XG4gICAgICBuaXRyby5vcHRpb25zLmFsaWFzLmRlYnVnID8/PSAnZGVidWcnO1xuICAgIH1cblxuICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZEdsb2IgPSBgJHtqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpfS8qKmA7XG4gICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucyB8fD0ge307XG4gICAgICBjb25zdCBleGlzdGluZ0lnbm9yZWQgPSBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkO1xuICAgICAgaWYgKCFleGlzdGluZ0lnbm9yZWQpIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy53YXRjaE9wdGlvbnMuaWdub3JlZCA9IFt3b3JrZmxvd0J1aWxkR2xvYl07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdJZ25vcmVkKSkge1xuICAgICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkID0gW1xuICAgICAgICAgIC4uLmV4aXN0aW5nSWdub3JlZCxcbiAgICAgICAgICB3b3JrZmxvd0J1aWxkR2xvYixcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQgPSBbXG4gICAgICAgICAgZXhpc3RpbmdJZ25vcmVkLFxuICAgICAgICAgIHdvcmtmbG93QnVpbGRHbG9iLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmNlIHdvcmtmbG93IFNESyBwYWNrYWdlcyB0byBiZSBidW5kbGVkIGJ5IE5pdHJvJ3MgUm9sbHVwIHJhdGhlciB0aGFuXG4gICAgLy8gZXh0ZXJuYWxpemVkLiBUaGlzIGxldHMgdGhlIHN0YXRpYyB3b3JsZC10YXJnZXQgYWxpYXMgcmVzb2x2ZSBpbnNpZGUgdGhlXG4gICAgLy8gaG9zdCBzZXJ2ZXIgYnVuZGxlIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIHRoZSB1bmFsaWFzZWQgY29yZSBzdHViLlxuICAgIC8vIEl0IGFsc28gZW5zdXJlcyB0aGUgU1dDIHRyYW5zZm9ybSBwbHVnaW4gcHJvY2Vzc2VzIGZpbGVzIGNvbnRhaW5pbmdcbiAgICAvLyB3b3JrZmxvdyBwYXR0ZXJucyAobGlrZSBAd29ya2Zsb3cvY29yZS9kaXN0L3J1bnRpbWUvcnVuLmpzKSBhbmQgYWRkcyB0aGVcbiAgICAvLyBjbGFzc0lkIHJlZ2lzdHJhdGlvbiBJSUZFcyBuZWVkZWQgZm9yIHNlcmlhbGl6YXRpb24uIFdpdGhvdXQgdGhpcywgc2VyZGVcbiAgICAvLyBjbGFzc2VzIGZyb20gbnBtIHBhY2thZ2VzIChsaWtlIGBSdW5gKSB3b3VsZCBiZSBleHRlcm5hbGl6ZWQsIHRoZSBTV0NcbiAgICAvLyB0cmFuc2Zvcm0gd291bGQgbmV2ZXIgZmlyZSBvbiB0aGVtLCBhbmQgc2VyaWFsaXphdGlvbiB3b3VsZCBmYWlsIHdpdGhcbiAgICAvLyBcIm11c3QgaGF2ZSBhIHN0YXRpYyBjbGFzc0lkIHByb3BlcnR5XCIuXG4gICAgLy9cbiAgICAvLyBXZSB1c2UgYSBSb2xsdXAgcmVzb2x2ZUlkIGhvb2sgKGFkZGVkIEJFRk9SRSB0aGUgZXh0ZXJuYWxpemF0aW9uXG4gICAgLy8gcGx1Z2luKSB0aGF0IGludGVyY2VwdHMgd29ya2Zsb3cgcGFja2FnZSBpbXBvcnRzIGFuZCBtYXJrcyB0aGVtXG4gICAgLy8gYXMgbm9uLWV4dGVybmFsLiBUaGlzIGlzIG1vcmUgdGFyZ2V0ZWQgdGhhbiBgbm9FeHRlcm5hbHMgPSB0cnVlYFxuICAgIC8vIHdoaWNoIHdvdWxkIGJ1bmRsZSBBTEwgZGVwZW5kZW5jaWVzIGFuZCBjYXVzZSBURFogZXJyb3JzIGZyb21cbiAgICAvLyBjaXJjdWxhciBpbXBvcnRzIGluIHBhY2thZ2VzIGxpa2UgdnVlLWJ1bmRsZS1yZW5kZXJlci9oMy5cbiAgICBuaXRyby5ob29rcy5ob29rKCdyb2xsdXA6YmVmb3JlJywgKF9uaXRybzogTml0cm8sIGNvbmZpZzogUm9sbHVwQ29uZmlnKSA9PiB7XG4gICAgICAoY29uZmlnLnBsdWdpbnMgYXMgQXJyYXk8dW5rbm93bj4pLnVuc2hpZnQoXG4gICAgICAgIGNyZWF0ZVdvcmtmbG93Rm9yY2VJbmxpbmVQbHVnaW4oXG4gICAgICAgICAgd29ya2Zsb3dUYXJnZXRXb3JsZCxcbiAgICAgICAgICBuaXRyby5vcHRpb25zLmFsaWFzW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdHNDb25maWcgcGx1Z2luXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnR5cGVzY3JpcHRQbHVnaW4pIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZyB8fD0ge307XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zIHx8PSB7fTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMucGx1Z2lucyB8fD0gW107XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zLnBsdWdpbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICd3b3JrZmxvdycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBOaXRybyB2MiBWZXJjZWwgZGVwbG95OiBrZWVwIHRoZSBsZWdhY3kgQnVpbGQgT3V0cHV0IEFQSSBwYXRoIHRoYXRcbiAgICAvLyBidWlsZHMgdGhlIHdvcmtmbG93IGZ1bmN0aW9ucyBzdGFuZGFsb25lIGFuZCBzdGl0Y2hlcyB0aGUgcm91dGVzIGludG9cbiAgICAvLyBgLnZlcmNlbC9vdXRwdXQvY29uZmlnLmpzb25gLiBUaGlzIHBhdGggaXMgaW5kZXBlbmRlbnQgb2Ygbml0cm8ncyBvd25cbiAgICAvLyBidW5kbGUgYW5kIGlzIG9ubHkgdXNlZCBmb3Igbml0cm9wYWNrIHYyIChlLmcuIE51eHQgNCBzdGlsbCB1c2VzIGl0KS5cbiAgICBjb25zdCB1c2VMZWdhY3lWZXJjZWxCdWlsZCA9IGlzVmVyY2VsRGVwbG95ICYmIGlzTml0cm9WMihuaXRybyk7XG5cbiAgICBpZiAodXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2NvbXBpbGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBuZXcgVmVyY2VsQnVpbGRlcihuaXRybykuYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIExvY2FsIGRldi9wcm9kIGFuZCBOaXRybyB2MyBWZXJjZWwgZGVwbG95IHNoYXJlIHRoZSBzYW1lIHBhdGg6XG4gICAgLy8gYnVuZGxlIHRoZSB3b3JrZmxvdyByb3V0ZXMgaW50byBuaXRybyBpdHNlbGYgdmlhIHZpcnR1YWwgaGFuZGxlcnMuXG4gICAgLy8gRm9yIFZlcmNlbCB2MyB3ZSBhZGRpdGlvbmFsbHkgY29uZmlndXJlIGBmdW5jdGlvblJ1bGVzYCBzbyB0aGVcbiAgICAvLyByb3V0ZXMgZ2V0IHF1ZXVlIHRyaWdnZXJzICsgZXh0ZW5kZWQgbWF4RHVyYXRpb24gdmlhIHRoZSBuaXRyb1xuICAgIC8vIHZlcmNlbCBwcmVzZXQuIFRoaXMgbGV0cyB3b3JrZmxvdyBoYW5kbGVycyB1c2Ugbml0cm8gZmVhdHVyZXNcbiAgICAvLyAoc3RvcmFnZSwgZGF0YWJhc2UsIHJ1bnRpbWUgY29uZmlnLCB2aXJ0dWFsIGltcG9ydHMsIGV0Yy4pLlxuICAgIGlmICghdXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgTG9jYWxCdWlsZGVyKG5pdHJvKTtcbiAgICAgIGxldCBpc0luaXRpYWxCdWlsZCA9IHRydWU7XG5cbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2J1aWxkOmJlZm9yZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIC8vIEZvciBwcm9kOiB3cml0ZSB0aGUgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggaW5saW5lZCBjb250ZW50XG4gICAgICAgIC8vIG5vdyB0aGF0IHRoZSBidWlsZGVyIGhhcyBnZW5lcmF0ZWQgdGhlIG1hbmlmZXN0LiBSb2xsdXAgd2lsbFxuICAgICAgICAvLyBidW5kbGUgdGhpcyBmaWxlIGludG8gdGhlIGNvbXBpbGVkIG91dHB1dC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFuaXRyby5vcHRpb25zLmRldiAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnXG4gICAgICAgICkge1xuICAgICAgICAgIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFsbG93cyBmb3IgSE1SIC0gYnV0IHNraXAgdGhlIGZpcnN0IGRldjpyZWxvYWQgc2luY2UgYnVpbGQ6YmVmb3JlIGFscmVhZHkgcmFuXG4gICAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgbml0cm8uaG9va3MuaG9vaygnZGV2OnJlbG9hZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoaXNJbml0aWFsQnVpbGQpIHtcbiAgICAgICAgICAgIGlzSW5pdGlhbEJ1aWxkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIER1cmluZyBkZXYsIGZpbGVzIG1heSBiZSBhZGRlZC9yZW1vdmVkIHdoaWxlIHRoZSBidWlsZGVyXG4gICAgICAgICAgICAvLyBpcyByZWJ1aWxkaW5nIChlLmcuLCBkdXJpbmcgdGVzdCBjbGVhbnVwKS4gTG9nIHRoZSBlcnJvclxuICAgICAgICAgICAgLy8gYnV0IGRvbid0IGNyYXNoIOKAlCB0aGUgbmV4dCBmaWxlIGNoYW5nZSB3aWxsIHRyaWdnZXJcbiAgICAgICAgICAgIC8vIGFub3RoZXIgcmVidWlsZCB3aXRoIHRoZSBjb3JyZWN0IGZpbGUgbGlzdC5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV29ya2Zsb3cgcmVidWlsZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGREYXNoYm9hcmRIYW5kbGVyKG5pdHJvKTtcbiAgICAgIH1cblxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svOnRva2VuJyxcbiAgICAgICAgJ3dvcmtmbG93L3dlYmhvb2subWpzJ1xuICAgICAgKTtcblxuICAgICAgLy8gVjI6IHNpbmdsZSBjb21iaW5lZCBoYW5kbGVyIGZvciBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJlZ2lzdHJhdGlvbnMgYXJlIGltcG9ydGVkIGFzIHNpZGUgZWZmZWN0cyBieSB0aGUgY29tYmluZWRcbiAgICAgIC8vIGhhbmRsZXIg4oCUIG5vIHNlcGFyYXRlIHN0ZXAgcm91dGUgbmVlZGVkLlxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnLFxuICAgICAgICAnd29ya2Zsb3cvd29ya2Zsb3dzLm1qcydcbiAgICAgICk7XG5cbiAgICAgIC8vIE5pdHJvIHYzKyBWZXJjZWwgZGVwbG95OiBjb25maWd1cmUgZnVuY3Rpb24gcnVsZXMgZm9yIHRoZSBjb21iaW5lZFxuICAgICAgLy8gZmxvdyBoYW5kbGVyIHNvIGl0IGdldHMgdGhlIHF1ZXVlIHRyaWdnZXJzICsgbWF4IGR1cmF0aW9uIHRoYXQgdGhlXG4gICAgICAvLyB3b3JrZmxvdyBydW50aW1lIG5lZWRzLiBXb3JrZmxvdy1yZXF1aXJlZCBmaWVsZHMgKGBtYXhEdXJhdGlvbmAsXG4gICAgICAvLyBgZXhwZXJpbWVudGFsVHJpZ2dlcnNgLCBgcnVudGltZWAgd2hlbiBzZXQpIHRha2UgcHJlY2VkZW5jZSBvdmVyXG4gICAgICAvLyB1c2VyLXByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlc2Ugcm91dGVzOyB1bnJlbGF0ZWQgZmllbGRzIHRoZSB1c2VyXG4gICAgICAvLyBzZXRzIChlLmcuIGBtZW1vcnlgKSBwYXNzIHRocm91Z2ggdW50b3VjaGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFBhdHRlcm4ga2V5cyBtdXN0IG1hdGNoIHRoZSByb3V0ZSBwYXR0ZXJucyB0aGUgaGFuZGxlcnMgYXJlXG4gICAgICAvLyByZWdpc3RlcmVkIHdpdGggc28gbml0cm8gcmV1c2VzIHRoZSBzYW1lIGZ1bmN0aW9uIGRpcmVjdG9yeS5cbiAgICAgIC8vIFVzaW5nIGEgYHdlYmhvb2svKipgIGNhdGNoLWFsbCBoZXJlIHdvdWxkIGNyZWF0ZSBhIHNlY29uZFxuICAgICAgLy8gYHdlYmhvb2svWy4uLl0uZnVuY2AgbmV4dCB0byB0aGUgYHdlYmhvb2svW3Rva2VuXS5mdW5jYCB0aGF0XG4gICAgICAvLyBgYWRkVmlydHVhbEhhbmRsZXJgIHByb2R1Y2VzLlxuICAgICAgaWYgKGlzVmVyY2VsRGVwbG95KSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMudmVyY2VsID8/PSB7fTtcbiAgICAgICAgbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcyA/Pz0ge307XG5cbiAgICAgICAgY29uc3QgcnVudGltZSA9IG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnJ1bnRpbWU7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcztcblxuICAgICAgICBjb25zdCBmbG93UGF0aCA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdyc7XG4gICAgICAgIHJ1bGVzW2Zsb3dQYXRoXSA9IHtcbiAgICAgICAgICAuLi5ydWxlc1tmbG93UGF0aF0sXG4gICAgICAgICAgLi4uKHJ1bnRpbWUgJiYgeyBydW50aW1lIH0pLFxuICAgICAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgICAgICAvLyBBIHNpbmdsZSB3b3JrZmxvdyB0cmlnZ2VyIGhhbmRsZXMgb3JjaGVzdHJhdGlvbiBhbmQgcXVldWVkIHN0ZXBcbiAgICAgICAgICAvLyBleGVjdXRpb247IHN0ZXAgbWVzc2FnZXMgaW5jbHVkZSBzdGVwSWQgb24gYF9fd2tmX3dvcmtmbG93XypgLlxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbV09SS0ZMT1dfUVVFVUVfVFJJR0dFUl0sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgICBjb25zdCB3ZWJob29rUGF0aCA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay86dG9rZW4nO1xuICAgICAgICAgIHJ1bGVzW3dlYmhvb2tQYXRoXSA9IHsgLi4ucnVsZXNbd2ViaG9va1BhdGhdLCBydW50aW1lIH07XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuV09SS0ZMT1dfUFVCTElDX01BTklGRVNUID09PSAnMScpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbic7XG4gICAgICAgICAgICBydWxlc1ttYW5pZmVzdFBhdGhdID0geyAuLi5ydWxlc1ttYW5pZmVzdFBhdGhdLCBydW50aW1lIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHB1YmxpYyBIVFRQIHJvdXRlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTFcbiAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19QVUJMSUNfTUFOSUZFU1QgPT09ICcxJykge1xuICAgICAgICAvLyBXcml0ZSBhIHBsYWNlaG9sZGVyIG1hbmlmZXN0LWRhdGEubWpzIHNvIHJvbGx1cCBjYW4gcmVzb2x2ZSB0aGVcbiAgICAgICAgLy8gaW1wb3J0LiBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIHJlYWwgbWFuaWZlc3QgaW4gYnVpbGQ6YmVmb3JlLlxuICAgICAgICAvLyBXcml0ZSBhIHBsYWNlaG9sZGVyIGhhbmRsZXIgZmlsZSBzbyByb2xsdXAgY2FuIHJlc29sdmUgdGhlIHBhdGhcbiAgICAgICAgLy8gZHVyaW5nIHByb2QgY29tcGlsYXRpb24uIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbFxuICAgICAgICAvLyBtYW5pZmVzdCBjb250ZW50IGJ5IHdyaXRlTWFuaWZlc3RIYW5kbGVyKCkgaW4gYnVpbGQ6YmVmb3JlLlxuICAgICAgICBpZiAoIW5pdHJvLm9wdGlvbnMuZGV2KSB7XG4gICAgICAgICAgY29uc3QgZGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgICAgICAgICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyUGF0aCA9IGpvaW4oZGlyLCAnbWFuaWZlc3QtaGFuZGxlci5tanMnKTtcbiAgICAgICAgICB3cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgaGFuZGxlclBhdGgsXG4gICAgICAgICAgICAnZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XFxuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTWFuaWZlc3RIYW5kbGVyKG5pdHJvKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59IHNhdGlzZmllcyBOaXRyb01vZHVsZTtcblxuY29uc3QgREFTSEJPQVJEX1ZJUlRVQUxfSUQgPSAnI3dvcmtmbG93L2Rhc2hib2FyZC1oYW5kbGVyJztcblxuZnVuY3Rpb24gYWRkRGFzaGJvYXJkSGFuZGxlcihuaXRybzogTml0cm8pIHtcbiAgY29uc3Qgcm91dGUgPSAnL193b3JrZmxvdyc7XG4gIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBEQVNIQk9BUkRfVklSVFVBTF9JRCB9KTtcblxuICAvLyBSZXNvbHZlIGBAd29ya2Zsb3cvd2ViL3NlcnZlcmAgcmVsYXRpdmUgdG8gdGhpcyBtb2R1bGUgc28gY29uc3VtZXJzIGRvbid0XG4gIC8vIG5lZWQgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgQHdvcmtmbG93L3dlYmAuIFRoZSBwYXRoIGlzIGlubGluZWQgaW50byB0aGVcbiAgLy8gdmlydHVhbCBoYW5kbGVyIGFzIGEgZmlsZTovLyBVUkwgc28gTm9kZSBjYW4gYGltcG9ydCgpYCBpdCBhdCBydW50aW1lXG4gIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIGdlbmVyYXRlZCBOaXRybyBidW5kbGUgZW5kcyB1cC5cbiAgY29uc3QgcmVxdWlyZV8gPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGxldCB3ZWJTZXJ2ZXJVcmw6IHN0cmluZztcbiAgdHJ5IHtcbiAgICB3ZWJTZXJ2ZXJVcmwgPSBwYXRoVG9GaWxlVVJMKHJlcXVpcmVfLnJlc29sdmUoJ0B3b3JrZmxvdy93ZWIvc2VydmVyJykpLmhyZWY7XG4gIH0gY2F0Y2gge1xuICAgIHdlYlNlcnZlclVybCA9ICdAd29ya2Zsb3cvd2ViL3NlcnZlcic7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyU291cmNlID0gLyoganMgKi8gYFxuICAgIGNvbnN0IF9fd29ya2Zsb3dXZWJTZXJ2ZXJVcmwgPSAke0pTT04uc3RyaW5naWZ5KHdlYlNlcnZlclVybCl9O1xuICAgIGxldCBzZXJ2ZXJQcm9taXNlID0gbnVsbDtcbiAgICBhc3luYyBmdW5jdGlvbiBnZXREYXNoYm9hcmRVcmwoKSB7XG4gICAgICBpZiAoIXNlcnZlclByb21pc2UpIHtcbiAgICAgICAgc2VydmVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBzdGFydFNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovIF9fd29ya2Zsb3dXZWJTZXJ2ZXJVcmwpO1xuICAgICAgICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHN0YXJ0U2VydmVyKDApO1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgICAgIGNvbnN0IHBvcnQgPSB0eXBlb2YgYWRkcmVzcyA9PT0gJ29iamVjdCcgJiYgYWRkcmVzcyA/IGFkZHJlc3MucG9ydCA6IDM0NTY7XG4gICAgICAgICAgcmV0dXJuICdodHRwOi8vbG9jYWxob3N0OicgKyBwb3J0O1xuICAgICAgICB9KSgpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHNlcnZlclByb21pc2UgPSBudWxsO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJ2ZXJQcm9taXNlO1xuICAgIH1cbiAgYDtcblxuICBpZiAoIW5pdHJvLnJvdXRpbmcpIHtcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbREFTSEJPQVJEX1ZJUlRVQUxfSURdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICAgICR7aGFuZGxlclNvdXJjZX1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXREYXNoYm9hcmRVcmwoKTtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QodXJsLCAzMDIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdyBkYXNoYm9hcmQ6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdyBkYXNoYm9hcmQ6ICcgKyBlcnJvci5tZXNzYWdlLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBgO1xuICB9IGVsc2Uge1xuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtEQVNIQk9BUkRfVklSVFVBTF9JRF0gPSAvKiBqcyAqLyBgXG4gICAgICAke2hhbmRsZXJTb3VyY2V9XG4gICAgICBleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgZ2V0RGFzaGJvYXJkVXJsKCk7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KHVybCwgMzAyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgd29ya2Zsb3cgZGFzaGJvYXJkOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdGYWlsZWQgdG8gc3RhcnQgd29ya2Zsb3cgZGFzaGJvYXJkOiAnICsgZXJyb3IubWVzc2FnZSwgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBgO1xuICB9XG59XG5cbnR5cGUgVmlydHVhbEhhbmRsZXJQYXRoID0gJ3dvcmtmbG93L3dlYmhvb2subWpzJyB8ICd3b3JrZmxvdy93b3JrZmxvd3MubWpzJztcblxuZnVuY3Rpb24gZ2V0U3RhdGljSW1wb3J0U3BlY2lmaWVyKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaWQuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGlmIChpZC5zdGFydHNXaXRoKCcvJykgfHwgL15bQS1aYS16XTpbXFxcXC9dLy50ZXN0KGlkKSkge1xuICAgIHJldHVybiBwYXRoVG9GaWxlVVJMKGlkKS5ocmVmO1xuICB9XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGV2V29ybGRUYXJnZXRTb3VyY2Uobml0cm86IE5pdHJvKTogc3RyaW5nIHtcbiAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzID1cbiAgICBuaXRyby5vcHRpb25zLmFsaWFzW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdO1xuICBpZiAodHlwZW9mIHdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyAke1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEV9IGFsaWFzIGZvciBOaXRybyBkZXYgd29ya2Zsb3cgaGFuZGxlcmBcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydCA9IEpTT04uc3RyaW5naWZ5KFxuICAgIGdldFN0YXRpY0ltcG9ydFNwZWNpZmllcih3b3JrZmxvd1RhcmdldFdvcmxkQWxpYXMpXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93Q29yZVJ1bnRpbWVJbXBvcnQgPSBKU09OLnN0cmluZ2lmeShcbiAgICBnZXRTdGF0aWNJbXBvcnRTcGVjaWZpZXIoXG4gICAgICByZXNvbHZlV29ya2Zsb3dDb3JlUnVudGltZUFsaWFzKHsgd29ya2luZ0Rpcjogbml0cm8ub3B0aW9ucy5yb290RGlyIH0pXG4gICAgKVxuICApO1xuXG4gIHJldHVybiAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQge1xuICAgICAgICBjcmVhdGVXb3JsZEZyb21Nb2R1bGUgYXMgX193b3JrZmxvd0NyZWF0ZVdvcmxkRnJvbU1vZHVsZSxcbiAgICAgICAgc2V0V29ybGQgYXMgX193b3JrZmxvd1NldFdvcmxkLFxuICAgICAgfSBmcm9tICR7d29ya2Zsb3dDb3JlUnVudGltZUltcG9ydH07XG4gICAgICBpbXBvcnQgKiBhcyBfX3dvcmtmbG93VGFyZ2V0V29ybGQgZnJvbSAke3dvcmtmbG93VGFyZ2V0V29ybGRJbXBvcnR9O1xuXG4gICAgICBsZXQgX193b3JrZmxvd1dvcmxkUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGVuc3VyZVdvcmtmbG93V29ybGQoKSB7XG4gICAgICAgIGlmICghX193b3JrZmxvd1dvcmxkUHJvbWlzZSkge1xuICAgICAgICAgIF9fd29ya2Zsb3dXb3JsZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBfX3dvcmtmbG93Q3JlYXRlV29ybGRGcm9tTW9kdWxlKF9fd29ya2Zsb3dUYXJnZXRXb3JsZClcbiAgICAgICAgICApLnRoZW4oX193b3JrZmxvd1NldFdvcmxkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBfX3dvcmtmbG93V29ybGRQcm9taXNlO1xuICAgICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBhZGRWaXJ0dWFsSGFuZGxlcihcbiAgbml0cm86IE5pdHJvLFxuICByb3V0ZTogc3RyaW5nLFxuICBidWlsZFBhdGg6IFZpcnR1YWxIYW5kbGVyUGF0aFxuKSB7XG4gIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7XG4gICAgcm91dGUsXG4gICAgaGFuZGxlcjogYCMke2J1aWxkUGF0aH1gLFxuICB9KTtcbiAgY29uc3QgaGFuZGxlckltcG9ydFBhdGggPSBKU09OLnN0cmluZ2lmeShcbiAgICBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsIGJ1aWxkUGF0aClcbiAgKTtcbiAgY29uc3Qgc3RlcHNJbXBvcnRQYXRoID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cvc3RlcHMubWpzJylcbiAgKTtcbiAgY29uc3QgcHJlbG9hZFN0ZXBzOiBSZWNvcmQ8VmlydHVhbEhhbmRsZXJQYXRoLCBzdHJpbmc+ID0ge1xuICAgICd3b3JrZmxvdy93ZWJob29rLm1qcyc6ICcnLFxuICAgICd3b3JrZmxvdy93b3JrZmxvd3MubWpzJzogYGF3YWl0IGltcG9ydCgvKiBAdml0ZS1pZ25vcmUgKi8gcGF0aFRvRmlsZVVSTCgke3N0ZXBzSW1wb3J0UGF0aH0pLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbik7YCxcbiAgfTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICBjb25zdCBkZXZXb3JsZFRhcmdldFNvdXJjZSA9IGNyZWF0ZURldldvcmxkVGFyZ2V0U291cmNlKG5pdHJvKTtcbiAgICAvLyBEZXYgbW9kZTogbG9hZCBnZW5lcmF0ZWQgd29ya2Zsb3cgYnVuZGxlcyBmcm9tIGRpc2sgYXQgcmVxdWVzdCB0aW1lLlxuICAgIC8vIFRoaXMga2VlcHMgYC5uaXRyby93b3JrZmxvdy8qLm1qc2Agb3V0IG9mIE5pdHJvJ3Mgb3duIGJ1bmRsZSBncmFwaCxcbiAgICAvLyB3aGljaCBhdm9pZHMgcmVidWlsZCBsb29wcyBhbmQgc3RhbGUgZGVwZW5kZW5jeSBncmFwaHMgZHVyaW5nIEhNUi5cbiAgICAvLyBDYWNoZS1idXN0IGJ5IGZpbGUgbXRpbWUgc28gZWFjaCBzdWNjZXNzZnVsIHJlYnVpbGQgbG9hZHMgZnJlc2ggY29kZS5cbiAgICBpZiAoIW5pdHJvLnJvdXRpbmcpIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICAgIGltcG9ydCB7IHN0YXRTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbiAgICAgICR7ZGV2V29ybGRUYXJnZXRTb3VyY2V9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgICBsZXQgY3VycmVudFZlcnNpb24gPSBcIlwiO1xuICAgICAgbGV0IGN1cnJlbnRJbXBvcnRQYXRoID0gXCJcIjtcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZFBPU1QoKSB7XG4gICAgICAgIGF3YWl0IGVuc3VyZVdvcmtmbG93V29ybGQoKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFN0cmluZyhzdGF0U3luYyhoYW5kbGVyUGF0aCkubXRpbWVNcyk7XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICBjdXJyZW50SW1wb3J0UGF0aCA9IHBhdGhUb0ZpbGVVUkwoaGFuZGxlclBhdGgpLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbjtcbiAgICAgICAgICAke3ByZWxvYWRTdGVwc1tidWlsZFBhdGhdfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KGN1cnJlbnRJbXBvcnRQYXRoKSkuUE9TVDtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoYXN5bmMgKHJlcXVlc3QsIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgUE9TVCA9IGF3YWl0IGxvYWRQT1NUKCk7XG4gICAgICAgIHJldHVybiBQT1NUKHJlcXVlc3QsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBzdGF0U3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG4gICAgICBpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG4gICAgICAke2RldldvcmxkVGFyZ2V0U291cmNlfVxuXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aCA9ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgICAgbGV0IGN1cnJlbnRWZXJzaW9uID0gXCJcIjtcbiAgICAgIGxldCBjdXJyZW50SW1wb3J0UGF0aCA9IFwiXCI7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRQT1NUKCkge1xuICAgICAgICBhd2FpdCBlbnN1cmVXb3JrZmxvd1dvcmxkKCk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBTdHJpbmcoc3RhdFN5bmMoaGFuZGxlclBhdGgpLm10aW1lTXMpO1xuICAgICAgICBpZiAodmVyc2lvbiAhPT0gY3VycmVudFZlcnNpb24pIHtcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgY3VycmVudEltcG9ydFBhdGggPSBwYXRoVG9GaWxlVVJMKGhhbmRsZXJQYXRoKS5ocmVmICsgXCI/dD1cIiArIHZlcnNpb247XG4gICAgICAgICAgJHtwcmVsb2FkU3RlcHNbYnVpbGRQYXRoXX1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydChjdXJyZW50SW1wb3J0UGF0aCkpLlBPU1Q7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICh7IHJlcSB9KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgUE9TVCA9IGF3YWl0IGxvYWRQT1NUKCk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFBPU1QocmVxKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdIYW5kbGVyIGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEtlZXAgYSBiYXJlIGltcG9ydCBhbG9uZ3NpZGUgYFBPU1RgOiBpbiBOdXh0ICsgTml0cm8gcHJvZHVjdGlvbiBidWlsZHNcbiAgLy8gdXNpbmcgYEB3b3JrZmxvdy9udXh0YCwgaW1wb3J0aW5nIG9ubHkgYFBPU1RgIGNvdWxkIGRyb3AgdGhlIGdlbmVyYXRlZFxuICAvLyBzdGVwIGJ1bmRsZSdzIHRvcC1sZXZlbCByZWdpc3RyYXRpb25zLCBzbyB0aGUgaGFuZGxlciBsb2FkZWQgYnV0IHN0ZXBzXG4gIC8vIHdlcmUgbWlzc2luZyBhdCBydW50aW1lLlxuXG4gIGlmICghbml0cm8ucm91dGluZykge1xuICAgIC8vIE5pdHJvIHYyIChsZWdhY3kpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgaW1wb3J0ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgaW1wb3J0IHsgUE9TVCB9IGZyb20gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoUE9TVCk7XG4gIGA7XG4gIH0gZWxzZSB7XG4gICAgLy8gTml0cm8gdjMrIChuYXRpdmUgd2ViIGhhbmRsZXJzKVxuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgIGltcG9ydCAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBpbXBvcnQgeyBQT1NUIH0gZnJvbSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBleHBvcnQgZGVmYXVsdCBhc3luYyAoeyByZXEgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IFBPU1QocmVxKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgfVxuICAgIH07XG4gIGA7XG4gIH1cbn1cblxuY29uc3QgTUFOSUZFU1RfVklSVFVBTF9JRCA9ICcjd29ya2Zsb3cvbWFuaWZlc3QtaGFuZGxlcic7XG5cbmZ1bmN0aW9uIGFkZE1hbmlmZXN0SGFuZGxlcihuaXRybzogTml0cm8pIHtcbiAgY29uc3Qgcm91dGUgPSAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAvLyBEZXYgbW9kZTogdXNlIGEgdmlydHVhbCBoYW5kbGVyIHRoYXQgcmVhZHMgdGhlIG1hbmlmZXN0IGZyb20gZGlzayBhdFxuICAgIC8vIHJlcXVlc3QgdGltZS4gVGhlIGFic29sdXRlIHBhdGggaXMgdmFsaWQgYmVjYXVzZSB3ZSdyZSBvbiB0aGUgYnVpbGQgbWFjaGluZS5cbiAgICBuaXRyby5vcHRpb25zLmhhbmRsZXJzLnB1c2goeyByb3V0ZSwgaGFuZGxlcjogTUFOSUZFU1RfVklSVFVBTF9JRCB9KTtcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbTUFOSUZFU1RfVklSVFVBTF9JRF0gPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuICAgICAgaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGZ1bmN0aW9uIEdFVCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRGaWxlU3luYygke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0UGF0aCl9LCBcInV0Zi04XCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihHRVQpO1xuICAgIGBcbiAgICAgIDogLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRGaWxlU3luYygke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0UGF0aCl9LCBcInV0Zi04XCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvZCBtb2RlOiByZWdpc3RlciBhIHBoeXNpY2FsIGhhbmRsZXIgZmlsZSB0aGF0IHdpbGwgYmUgd3JpdHRlbiBieVxuICAgIC8vIHdyaXRlTWFuaWZlc3RIYW5kbGVyKCkgYWZ0ZXIgdGhlIGJ1aWxkZXIgZ2VuZXJhdGVzIHRoZSBtYW5pZmVzdC5cbiAgICAvLyBUaGlzIGZpbGUgaXMgYnVuZGxlZCBieSByb2xsdXAgaW50byB0aGUgY29tcGlsZWQgb3V0cHV0LlxuICAgIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBoYW5kbGVyUGF0aCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFdyaXRlcyBhIHBoeXNpY2FsIG1hbmlmZXN0IGhhbmRsZXIgZmlsZSB3aXRoIHRoZSBtYW5pZmVzdCBjb250ZW50IGlubGluZWQuXG4gKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYnVpbGRlciBnZW5lcmF0ZXMgdGhlIG1hbmlmZXN0IChkdXJpbmcgYnVpbGQ6YmVmb3JlKVxuICogYW5kIGJlZm9yZSBOaXRybyBjb21waWxlcyB0aGUgYnVuZGxlIHdpdGggcm9sbHVwLlxuICovXG5mdW5jdGlvbiB3cml0ZU1hbmlmZXN0SGFuZGxlcihuaXRybzogTml0cm8pIHtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cvbWFuaWZlc3QuanNvbicpO1xuICBjb25zdCBoYW5kbGVyUGF0aCA9IGpvaW4oXG4gICAgbml0cm8ub3B0aW9ucy5idWlsZERpcixcbiAgICAnd29ya2Zsb3cvbWFuaWZlc3QtaGFuZGxlci5tanMnXG4gICk7XG4gIGNvbnN0IGRpciA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyk7XG4gIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbWFuaWZlc3RDb250ZW50ID0gcmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgJ3V0Zi04Jyk7XG4gICAgSlNPTi5wYXJzZShtYW5pZmVzdENvbnRlbnQpOyAvLyB2YWxpZGF0ZVxuXG4gICAgY29uc3QgaGFuZGxlckNvZGUgPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyBgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbmNvbnN0IG1hbmlmZXN0ID0gJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdENvbnRlbnQpfTtcbmV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKCgpID0+IG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG59KSk7XG5gXG4gICAgICA6IGBjb25zdCBtYW5pZmVzdCA9ICR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RDb250ZW50KX07XG5leHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxufSk7XG5gO1xuICAgIHdyaXRlRmlsZVN5bmMoaGFuZGxlclBhdGgsIGhhbmRsZXJDb2RlKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gV3JpdGUgYSA0MDQgZmFsbGJhY2sgaGFuZGxlclxuICAgIGNvbnN0IGZhbGxiYWNrID0gIW5pdHJvLnJvdXRpbmdcbiAgICAgID8gYGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG5leHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcigoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KSk7XG5gXG4gICAgICA6IGBleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcbmA7XG4gICAgd3JpdGVGaWxlU3luYyhoYW5kbGVyUGF0aCwgZmFsbGJhY2spO1xuICB9XG59XG4iXX0=
|
|
585
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs1RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sWUFBWSxHQUFJLEtBQThDLENBQUMsSUFBSTtRQUN2RSxFQUFFLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQUMsTUFBb0I7SUFDaEQsTUFBTSxNQUFNLEdBQ1Ysc0tBQXNLLENBQUM7SUFDekssTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTztJQUNULENBQUM7SUFDRCxNQUFN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LFVBQVUsQ0FBQyxDQUFDO0lBQ3JELFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwQyxJQUFJLENBQUM7UUFDSCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBRXhDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDbEMsQ0FBQyxDQUFDO21CQUNXLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDOzs7O0NBSWpEO1lBQ0ssQ0FBQyxDQUFDLG9CQUFvQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQzs7OztDQUkxRCxDQUFDO1FBQ0UsYUFBYSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsK0JBQStCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDL0IsQ0FBQyxDQUFDOztDQUVQO1lBQ0ssQ0FBQyxDQUFDO0NBQ1AsQ0FBQztRQUNFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBXT1JLRkxPV19RVUVVRV9UUklHR0VSIH0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgdHlwZSB7IE5pdHJvLCBOaXRyb01vZHVsZSwgUm9sbHVwQ29uZmlnIH0gZnJvbSAnbml0cm8vdHlwZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IExvY2FsQnVpbGRlciwgVmVyY2VsQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9O1xuXG4vKipcbiAqIERldGVjdCB3aGV0aGVyIHRoZSBOaXRybyBpbnN0YW5jZSBpcyB2Mi5cbiAqIE5ld2VyIE5pdHJvIHJlbGVhc2VzIChib3RoIHYyIGFuZCB2MykgZXhwb3NlIGBuaXRyby5tZXRhLm1ham9yVmVyc2lvbmAuXG4gKiBGYWxsIGJhY2sgdG8gYCFuaXRyby5yb3V0aW5nYCAob25seSBwcmVzZW50IGluIHYzKykgZm9yIG9sZGVyIE5pdHJvIHYyXG4gKiB2ZXJzaW9ucyB0aGF0IGRvbid0IGhhdmUgYG1ham9yVmVyc2lvbmAgeWV0IChlLmcuIE51eHQgdXNlcnMgb24gYW4gb2xkZXJcbiAqIG5pdHJvcGFjaykuXG4gKi9cbmZ1bmN0aW9uIGlzTml0cm9WMihuaXRybzogTml0cm8pOiBib29sZWFuIHtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gKG5pdHJvIGFzIHsgbWV0YT86IHsgbWFqb3JWZXJzaW9uPzogbnVtYmVyIH0gfSkubWV0YVxuICAgID8ubWFqb3JWZXJzaW9uO1xuICBpZiAobWFqb3JWZXJzaW9uICE9IG51bGwpIHtcbiAgICByZXR1cm4gbWFqb3JWZXJzaW9uID09PSAyO1xuICB9XG4gIHJldHVybiAhbml0cm8ucm91dGluZztcbn1cblxuLyoqXG4gKiBQcmVwZW5kIGEgYGNyZWF0ZVJlcXVpcmVgLWJhY2tlZCBnbG9iYWwgYHJlcXVpcmVgIHRvIGV2ZXJ5IHNlcnZlciBjaHVuayBzb1xuICogdW5kaWNpJ3MgYnVuZGxlZCBgcmVxdWlyZSgnbm9kZTpodHRwMicpYCByZXNvbHZlcyB0aGUgcmVhbCBidWlsdGluIGluc3RlYWQgb2ZcbiAqIHRocm93aW5nICh3aGljaCB3b3VsZCBtYWtlIHVuZGljaSBmYWxsIGJhY2sgdG8gYSBzdHViIHdpdGhvdXRcbiAqIGBodHRwMi5jb25uZWN0YCwgYnJlYWtpbmcgSFRUUC8yKS4gVGhlIGd1YXJkIGtlZXBzIGl0IGlkZW1wb3RlbnQgYWNyb3NzXG4gKiBjaHVua3MsIGFuZCBgbm9kZTptb2R1bGVgIGlzIGFsd2F5cyBhdmFpbGFibGUgaW4gdGhlIE5vZGUgc2VydmVyIHJ1bnRpbWUuXG4gKlxuICogVGhpcyBpcyBhIE5vZGUtc2VydmVyLXJ1bnRpbWUtb25seSBzaGltIChjYWxsZXJzIGdhdGUgaXQgdG8gdGhlIHByb2R1Y3Rpb25cbiAqIHNlcnZlciBidWlsZCkuIE5vdGUgdGhlIGRlbGliZXJhdGUgZ2xvYmFsIHNpZGUgZWZmZWN0OiBkZWZpbmluZ1xuICogYGdsb2JhbFRoaXMucmVxdWlyZWAgbWFrZXMgYHR5cGVvZiByZXF1aXJlYCB0cnV0aHkgZm9yICpldmVyeSogYnVuZGxlZFxuICogZGVwZW5kZW5jeSBpbiB0aGlzIEVTTSBzZXJ2ZXIgb3V0cHV0LCBzbyBhbnkgbGlicmFyeSB0aGF0IGZlYXR1cmUtZGV0ZWN0c1xuICogYHJlcXVpcmVgIHdpbGwgdGFrZSBpdHMgQ0pTIHBhdGggaGVyZS4gVGhhdCBpcyBzYWZlIGJlY2F1c2UgKGEpIGl0IG5ldmVyXG4gKiB0b3VjaGVzIHRoZSBjbGllbnQgYnVuZGxlLCAoYikgdGhlIGB0eXBlb2YgcmVxdWlyZSA9PT0gJ3VuZGVmaW5lZCdgIGd1YXJkXG4gKiBtYWtlcyBpdCBhIG5vLW9wIGluIENKUyBjaHVua3Mgd2hlcmUgYSByZWFsIGByZXF1aXJlYCBhbHJlYWR5IGV4aXN0cywgYW5kXG4gKiAoYykgdGhlIGByZXF1aXJlYCB3ZSBpbnN0YWxsIGlzIGEgd29ya2luZyBgY3JlYXRlUmVxdWlyZWAsIHNvIGEgbGlicmFyeSB0aGF0XG4gKiBzd2l0Y2hlcyB0byB0aGUgcmVxdWlyZSBwYXRoIGdldHMgYSBmdW5jdGlvbmFsIGByZXF1aXJlYCwgbm90IGEgYnJva2VuIHN0dWIuXG4gKiBUaGUgYmVoYXZpb3IgdG8gd2F0Y2ggZm9yIGlzIGEgYnVuZGxlZCBsaWIgdGhhdCwgb24gc2VlaW5nIGByZXF1aXJlYCwgZG9lc1xuICogYHJlcXVpcmUoKWAgb2YgYW4gRVNNLW9ubHkgZGVwZW5kZW5jeSBvbiBhIE5vZGUgdmVyc2lvbiB3aXRob3V0IGByZXF1aXJlKEVTTSlgXG4gKiBzdXBwb3J0LlxuICovXG5mdW5jdGlvbiBhZGROb2RlUmVxdWlyZUJhbm5lcihjb25maWc6IFJvbGx1cENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBiYW5uZXIgPVxuICAgIFwiaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSBhcyBfX3drZkNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7IGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ3VuZGVmaW5lZCcpIHsgZ2xvYmFsVGhpcy5yZXF1aXJlID0gX193a2ZDcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7IH1cIjtcbiAgY29uc3Qgb3V0cHV0ID0gY29uZmlnLm91dHB1dDtcbiAgaWYgKG91dHB1dCA9PSBudWxsKSB7XG4gICAgY29uZmlnLm91dHB1dCA9IHsgYmFubmVyIH07XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG91dHB1dHMgPSBBcnJheS5pc0FycmF5KG91dHB1dCkgPyBvdXRwdXQgOiBbb3V0cHV0XTtcbiAgZm9yIChjb25zdCBvIG9mIG91dHB1dHMpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IG8uYmFubmVyO1xuICAgIG8uYmFubmVyID1cbiAgICAgIGV4aXN0aW5nID09IG51bGxcbiAgICAgICAgPyBiYW5uZXJcbiAgICAgICAgOiB0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGFzeW5jIChjaHVuazogdW5rbm93bikgPT4gYCR7YmFubmVyfVxcbiR7YXdhaXQgZXhpc3RpbmcoY2h1bmspfWBcbiAgICAgICAgICA6IGAke2Jhbm5lcn1cXG4ke2V4aXN0aW5nfWA7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnd29ya2Zsb3cvbml0cm8nLFxuICBhc3luYyBzZXR1cChuaXRybzogTml0cm8pIHtcbiAgICBjb25zdCBpc1ZlcmNlbERlcGxveSA9XG4gICAgICAhbml0cm8ub3B0aW9ucy5kZXYgJiYgbml0cm8ub3B0aW9ucy5wcmVzZXQgPT09ICd2ZXJjZWwnO1xuICAgIGNvbnN0IG5pdHJvQnVpbGREaXIgPSBgJHtuaXRyby5vcHRpb25zLmJ1aWxkRGlyLnJlcGxhY2UoL1tcXFxcL10rJC8sICcnKX0vYDtcblxuICAgIC8vIEFkZCB0cmFuc2Zvcm0gcGx1Z2luIGF0IHRoZSBCRUdJTk5JTkcgdG8gcnVuIGJlZm9yZSBvdGhlciB0cmFuc2Zvcm1zXG4gICAgLy8gKGVzcGVjaWFsbHkgYmVmb3JlIGNsYXNzIHByb3BlcnR5IHRyYW5zZm9ybXMgdGhhdCByZW5hbWUgY2xhc3NlcyBsaWtlIF9DbGFzc05hbWUpXG4gICAgbml0cm8uaG9va3MuaG9vaygncm9sbHVwOmJlZm9yZScsIChfbml0cm86IE5pdHJvLCBjb25maWc6IFJvbGx1cENvbmZpZykgPT4ge1xuICAgICAgKGNvbmZpZy5wbHVnaW5zIGFzIEFycmF5PHVua25vd24+KS51bnNoaWZ0KFxuICAgICAgICB3b3JrZmxvd1RyYW5zZm9ybVBsdWdpbih7XG4gICAgICAgICAgLy8gTml0cm8gYnVpbGQgYXJ0aWZhY3RzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLlxuICAgICAgICAgIC8vIFJlLXByb2Nlc3NpbmcgdGhlbSBjYW4gZHVwbGljYXRlIGNsYXNzIHJlZ2lzdHJhdGlvbi5cbiAgICAgICAgICBleGNsdWRlOiBbbml0cm9CdWlsZERpcl0sXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBOaXRybyBidW5kbGVzIHVuZGljaSAodmlhIHRoZSB3b3JsZCBhZGFwdGVyKSBpbnRvIHRoZSBFU00gc2VydmVyXG4gICAgICAvLyBvdXRwdXQuIHVuZGljaSBsb2FkcyBtb3N0IG5vZGU6IGJ1aWx0aW5zIGFzIEVTTSBpbXBvcnRzLCBidXQgcHVsbHMgaW5cbiAgICAgIC8vIGBub2RlOmh0dHAyYCBsYXppbHkgdmlhIGEgYmFyZSBgcmVxdWlyZSgnbm9kZTpodHRwMicpYCBpbnNpZGUgYVxuICAgICAgLy8gdHJ5L2NhdGNoIOKAlCB3aGljaCB0aGUgYnVuZGxlciBsZWF2ZXMgdW4td2lyZWQsIHNvIGluIHRoZSBFU00gYnVuZGxlIHRoZVxuICAgICAgLy8gcmVxdWlyZSB0aHJvd3MgYW5kIHVuZGljaSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIGEgc3R1YiB3aG9zZVxuICAgICAgLy8gYGh0dHAyLmNvbm5lY3RgIGlzIHVuZGVmaW5lZC4gVGhhdCBicmVha3MgYW55IEhUVFAvMiByZXF1ZXN0ICh0aGVcbiAgICAgIC8vIHdvcmtmbG93IGZsb3ctcm91dGUgY2FsbGJhY2sgZmFpbHMgd2l0aCBcImZldGNoIGZhaWxlZFwiLCBzbyBydW5zIG5ldmVyXG4gICAgICAvLyBzdGFydCkuIFByZXBlbmQgYSB3b3JraW5nIENKUyBgcmVxdWlyZWAgdG8gdGhlIHNlcnZlciBjaHVua3Mgc28gdGhlXG4gICAgICAvLyByZWFsIGBub2RlOmh0dHAyYCByZXNvbHZlcy4gU2tpcHBlZCBpbiBkZXYgKFZpdGUgU1NSIHByb3ZpZGVzIHJlcXVpcmUpLlxuICAgICAgaWYgKCFuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGROb2RlUmVxdWlyZUJhbm5lcihjb25maWcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTk9URTogVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGRlYnVnIHVuZW52IG1vY2tcbiAgICBpZiAoIW5pdHJvLm9wdGlvbnMud29ya2Zsb3c/Ll92aXRlKSB7XG4gICAgICBuaXRyby5vcHRpb25zLmFsaWFzLmRlYnVnID8/PSAnZGVidWcnO1xuICAgIH1cblxuICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZEdsb2IgPSBgJHtqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpfS8qKmA7XG4gICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucyB8fD0ge307XG4gICAgICBjb25zdCBleGlzdGluZ0lnbm9yZWQgPSBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkO1xuICAgICAgaWYgKCFleGlzdGluZ0lnbm9yZWQpIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy53YXRjaE9wdGlvbnMuaWdub3JlZCA9IFt3b3JrZmxvd0J1aWxkR2xvYl07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdJZ25vcmVkKSkge1xuICAgICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkID0gW1xuICAgICAgICAgIC4uLmV4aXN0aW5nSWdub3JlZCxcbiAgICAgICAgICB3b3JrZmxvd0J1aWxkR2xvYixcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQgPSBbXG4gICAgICAgICAgZXhpc3RpbmdJZ25vcmVkLFxuICAgICAgICAgIHdvcmtmbG93QnVpbGRHbG9iLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIGRldiBtb2RlLCBmb3JjZSB3b3JrZmxvdyBTREsgcGFja2FnZXMgdG8gYmUgYnVuZGxlZCBieSBOaXRybydzXG4gICAgLy8gUm9sbHVwIHJhdGhlciB0aGFuIGV4dGVybmFsaXplZC4gVGhpcyBlbnN1cmVzIHRoZSBTV0MgdHJhbnNmb3JtXG4gICAgLy8gcGx1Z2luIHByb2Nlc3NlcyBmaWxlcyBjb250YWluaW5nIHdvcmtmbG93IHBhdHRlcm5zIChsaWtlXG4gICAgLy8gQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lL3J1bi5qcykgYW5kIGFkZHMgdGhlIGNsYXNzSWRcbiAgICAvLyByZWdpc3RyYXRpb24gSUlGRXMgbmVlZGVkIGZvciBzZXJpYWxpemF0aW9uLiBXaXRob3V0IHRoaXMsIHNlcmRlXG4gICAgLy8gY2xhc3NlcyBmcm9tIG5wbSBwYWNrYWdlcyAobGlrZSBgUnVuYCkgd291bGQgYmUgZXh0ZXJuYWxpemVkLCB0aGVcbiAgICAvLyBTV0MgdHJhbnNmb3JtIHdvdWxkIG5ldmVyIGZpcmUgb24gdGhlbSwgYW5kIHNlcmlhbGl6YXRpb24gd291bGRcbiAgICAvLyBmYWlsIHdpdGggXCJtdXN0IGhhdmUgYSBzdGF0aWMgY2xhc3NJZCBwcm9wZXJ0eVwiLlxuICAgIC8vXG4gICAgLy8gV2UgdXNlIGEgUm9sbHVwIHJlc29sdmVJZCBob29rIChhZGRlZCBCRUZPUkUgdGhlIGV4dGVybmFsaXphdGlvblxuICAgIC8vIHBsdWdpbikgdGhhdCBpbnRlcmNlcHRzIHdvcmtmbG93IHBhY2thZ2UgaW1wb3J0cyBhbmQgbWFya3MgdGhlbVxuICAgIC8vIGFzIG5vbi1leHRlcm5hbC4gVGhpcyBpcyBtb3JlIHRhcmdldGVkIHRoYW4gYG5vRXh0ZXJuYWxzID0gdHJ1ZWBcbiAgICAvLyB3aGljaCB3b3VsZCBidW5kbGUgQUxMIGRlcGVuZGVuY2llcyBhbmQgY2F1c2UgVERaIGVycm9ycyBmcm9tXG4gICAgLy8gY2lyY3VsYXIgaW1wb3J0cyBpbiBwYWNrYWdlcyBsaWtlIHZ1ZS1idW5kbGUtcmVuZGVyZXIvaDMuXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMuZGV2KSB7XG4gICAgICBuaXRyby5ob29rcy5ob29rKFxuICAgICAgICAncm9sbHVwOmJlZm9yZScsXG4gICAgICAgIChfbml0cm86IE5pdHJvLCBjb25maWc6IFJvbGx1cENvbmZpZykgPT4ge1xuICAgICAgICAgIChjb25maWcucGx1Z2lucyBhcyBBcnJheTx1bmtub3duPikudW5zaGlmdCh7XG4gICAgICAgICAgICBuYW1lOiAnd29ya2Zsb3c6Zm9yY2UtaW5saW5lJyxcbiAgICAgICAgICAgIC8vIGBvcmRlcjogJ3ByZSdgIGlzIHJlcXVpcmVkOiBOaXRybydzIGBuaXRybzpleHRlcm5hbHNgIHBsdWdpblxuICAgICAgICAgICAgLy8gdXNlcyBgb3JkZXI6ICdwcmUnYCBmb3IgaXRzIHJlc29sdmVJZCBob29rIGFuZCBzcHJlYWRzIG91clxuICAgICAgICAgICAgLy8gcmVzb2x1dGlvbiByZXN1bHQgd2hpbGUgZm9yY2luZyBgZXh0ZXJuYWw6IHRydWVgLiBXaXRob3V0XG4gICAgICAgICAgICAvLyBgcHJlYCBoZXJlLCBvdXIgYGV4dGVybmFsOiBmYWxzZWAgZGVjaXNpb24gZ2V0cyBvdmVyd3JpdHRlblxuICAgICAgICAgICAgLy8gYW5kIGBAd29ya2Zsb3cvKmAgaW1wb3J0cyBlbmQgdXAgZXh0ZXJuYWxpemVkIGluIHRoZSBkZXZcbiAgICAgICAgICAgIC8vIGJ1bmRsZSDigJQgd2hpY2ggbWVhbnMgdGhlIFNXQy1pbmplY3RlZCBgc3RhdGljIGNsYXNzSWRgIElJRkVcbiAgICAgICAgICAgIC8vIGluIChlLmcuKSBgQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lL3J1bi5qc2AgaXMgbmV2ZXJcbiAgICAgICAgICAgIC8vIGFwcGxpZWQsIGFuZCBzdGVwIHJldHVybiB2YWx1ZXMgdGhhdCBpbmNsdWRlIGBSdW5gXG4gICAgICAgICAgICAvLyBpbnN0YW5jZXMgZmFpbCB0byBzZXJpYWxpemUgYXQgcnVudGltZS5cbiAgICAgICAgICAgIHJlc29sdmVJZDoge1xuICAgICAgICAgICAgICBvcmRlcjogJ3ByZScsXG4gICAgICAgICAgICAgIGFzeW5jIGhhbmRsZXIoXG4gICAgICAgICAgICAgICAgdGhpczogeyByZXNvbHZlOiBGdW5jdGlvbiB9LFxuICAgICAgICAgICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGltcG9ydGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogeyBza2lwU2VsZj86IGJvb2xlYW4gfVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWltcG9ydGVyKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBNYXRjaCB3b3JrZmxvdyBwYWNrYWdlIHNwZWNpZmllcnMgT1IgZGlyZWN0IHBhdGhzIGludG9cbiAgICAgICAgICAgICAgICAvLyBwYWNrYWdlcy88bmFtZT4vLiBCYWlsIG91dCBlYXJseSBvbiBub24td29ya2Zsb3cgaW1wb3J0c1xuICAgICAgICAgICAgICAgIC8vIHNvIHdlIGRvbid0IGludGVyY2VwdCB0aGUgcmVzdCBvZiB0aGUgcmVzb2x1dGlvbiBjaGFpbi5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1dvcmtmbG93UGtnID1cbiAgICAgICAgICAgICAgICAgIC9eQD93b3JrZmxvdyhcXC98JCkvLnRlc3Qoc291cmNlKSB8fFxuICAgICAgICAgICAgICAgICAgL1tcXFxcL11wYWNrYWdlc1tcXFxcL10od29ya2Zsb3d8Y29yZXxzZXJkZXxlcnJvcnN8dXRpbHN8YnVpbGRlcnN8cm9sbHVwfGFpfHdvcmxkfHdvcmxkLWxvY2FsfHdvcmxkLXZlcmNlbHx3b3JsZC1wb3N0Z3Jlc3x3b3JsZC10ZXN0aW5nfGNsaXxuZXh0fG5pdHJvfG51eHR8dml0ZXx2aXRlc3R8YXN0cm98c3ZlbHRla2l0fG5lc3QpW1xcXFwvXS8udGVzdChcbiAgICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghaXNXb3JrZmxvd1BrZykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB2aWEgb3RoZXIgcmVzb2x2ZXJzLCBza2lwcGluZyBvdXJzZWx2ZXMgc28gd2VcbiAgICAgICAgICAgICAgICAvLyBnZXQgYSBwYXRoLiBXZSBkb24ndCBnYXRlIG9uIGByZXNvbHZlZC5leHRlcm5hbGAgYmVjYXVzZVxuICAgICAgICAgICAgICAgIC8vIGBuaXRybzpleHRlcm5hbHNgIHNwcmVhZHMgb3VyIHJlc3VsdCBhbmQgb3ZlcnJpZGVzXG4gICAgICAgICAgICAgICAgLy8gYGV4dGVybmFsOiB0cnVlYCByZWdhcmRsZXNzIG9mIHdoYXQgd2UgcmV0dXJuIOKAlCB3ZSB3YW50XG4gICAgICAgICAgICAgICAgLy8gdG8gd2luIHRoYXQgcmFjZSBieSByZXR1cm5pbmcgZmlyc3QgdW5kZXIgYG9yZGVyOiAncHJlJ2AuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmUoc291cmNlLCBpbXBvcnRlciwge1xuICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHNraXBTZWxmOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZElkID0gcmVzb2x2ZWQuaWQ7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXAgZmlsZTovLyBwcm90b2NvbCBpZiBwcmVzZW50IOKAlCBSb2xsdXAgbmVlZHMgYSBwbGFpblxuICAgICAgICAgICAgICAgIC8vIGZpbGVzeXN0ZW0gcGF0aCB0byBsb2FkIHRoZSBtb2R1bGUuIGBmaWxlVVJMVG9QYXRoYFxuICAgICAgICAgICAgICAgIC8vIGNvcnJlY3RseSBoYW5kbGVzIFdpbmRvd3MgcGF0aHMgKGUuZy4sIGZpbGU6Ly8vQzovLi4uXG4gICAgICAgICAgICAgICAgLy8gLT4gQzpcXC4uLikgYW5kIHBlcmNlbnQtZGVjb2RpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkSWQuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZElkID0gZmlsZVVSTFRvUGF0aChyZXNvbHZlZElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlc29sdmVkSWQsIGV4dGVybmFsOiBmYWxzZSB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdHNDb25maWcgcGx1Z2luXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnR5cGVzY3JpcHRQbHVnaW4pIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZyB8fD0ge307XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zIHx8PSB7fTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMucGx1Z2lucyB8fD0gW107XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zLnBsdWdpbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICd3b3JrZmxvdycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBOaXRybyB2MiBWZXJjZWwgZGVwbG95OiBrZWVwIHRoZSBsZWdhY3kgQnVpbGQgT3V0cHV0IEFQSSBwYXRoIHRoYXRcbiAgICAvLyBidWlsZHMgdGhlIHdvcmtmbG93IGZ1bmN0aW9ucyBzdGFuZGFsb25lIGFuZCBzdGl0Y2hlcyB0aGUgcm91dGVzIGludG9cbiAgICAvLyBgLnZlcmNlbC9vdXRwdXQvY29uZmlnLmpzb25gLiBUaGlzIHBhdGggaXMgaW5kZXBlbmRlbnQgb2Ygbml0cm8ncyBvd25cbiAgICAvLyBidW5kbGUgYW5kIGlzIG9ubHkgdXNlZCBmb3Igbml0cm9wYWNrIHYyIChlLmcuIE51eHQgNCBzdGlsbCB1c2VzIGl0KS5cbiAgICBjb25zdCB1c2VMZWdhY3lWZXJjZWxCdWlsZCA9IGlzVmVyY2VsRGVwbG95ICYmIGlzTml0cm9WMihuaXRybyk7XG5cbiAgICBpZiAodXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2NvbXBpbGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBuZXcgVmVyY2VsQnVpbGRlcihuaXRybykuYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIExvY2FsIGRldi9wcm9kIGFuZCBOaXRybyB2MyBWZXJjZWwgZGVwbG95IHNoYXJlIHRoZSBzYW1lIHBhdGg6XG4gICAgLy8gYnVuZGxlIHRoZSB3b3JrZmxvdyByb3V0ZXMgaW50byBuaXRybyBpdHNlbGYgdmlhIHZpcnR1YWwgaGFuZGxlcnMuXG4gICAgLy8gRm9yIFZlcmNlbCB2MyB3ZSBhZGRpdGlvbmFsbHkgY29uZmlndXJlIGBmdW5jdGlvblJ1bGVzYCBzbyB0aGVcbiAgICAvLyByb3V0ZXMgZ2V0IHF1ZXVlIHRyaWdnZXJzICsgZXh0ZW5kZWQgbWF4RHVyYXRpb24gdmlhIHRoZSBuaXRyb1xuICAgIC8vIHZlcmNlbCBwcmVzZXQuIFRoaXMgbGV0cyB3b3JrZmxvdyBoYW5kbGVycyB1c2Ugbml0cm8gZmVhdHVyZXNcbiAgICAvLyAoc3RvcmFnZSwgZGF0YWJhc2UsIHJ1bnRpbWUgY29uZmlnLCB2aXJ0dWFsIGltcG9ydHMsIGV0Yy4pLlxuICAgIGlmICghdXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgTG9jYWxCdWlsZGVyKG5pdHJvKTtcbiAgICAgIGxldCBpc0luaXRpYWxCdWlsZCA9IHRydWU7XG5cbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2J1aWxkOmJlZm9yZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIC8vIEZvciBwcm9kOiB3cml0ZSB0aGUgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggaW5saW5lZCBjb250ZW50XG4gICAgICAgIC8vIG5vdyB0aGF0IHRoZSBidWlsZGVyIGhhcyBnZW5lcmF0ZWQgdGhlIG1hbmlmZXN0LiBSb2xsdXAgd2lsbFxuICAgICAgICAvLyBidW5kbGUgdGhpcyBmaWxlIGludG8gdGhlIGNvbXBpbGVkIG91dHB1dC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFuaXRyby5vcHRpb25zLmRldiAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnXG4gICAgICAgICkge1xuICAgICAgICAgIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFsbG93cyBmb3IgSE1SIC0gYnV0IHNraXAgdGhlIGZpcnN0IGRldjpyZWxvYWQgc2luY2UgYnVpbGQ6YmVmb3JlIGFscmVhZHkgcmFuXG4gICAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgbml0cm8uaG9va3MuaG9vaygnZGV2OnJlbG9hZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoaXNJbml0aWFsQnVpbGQpIHtcbiAgICAgICAgICAgIGlzSW5pdGlhbEJ1aWxkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIER1cmluZyBkZXYsIGZpbGVzIG1heSBiZSBhZGRlZC9yZW1vdmVkIHdoaWxlIHRoZSBidWlsZGVyXG4gICAgICAgICAgICAvLyBpcyByZWJ1aWxkaW5nIChlLmcuLCBkdXJpbmcgdGVzdCBjbGVhbnVwKS4gTG9nIHRoZSBlcnJvclxuICAgICAgICAgICAgLy8gYnV0IGRvbid0IGNyYXNoIOKAlCB0aGUgbmV4dCBmaWxlIGNoYW5nZSB3aWxsIHRyaWdnZXJcbiAgICAgICAgICAgIC8vIGFub3RoZXIgcmVidWlsZCB3aXRoIHRoZSBjb3JyZWN0IGZpbGUgbGlzdC5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV29ya2Zsb3cgcmVidWlsZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVtYmVkZGVkIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkLiBEZWZhdWx0cyB0byBvbiBpbiBkZXYgLyBvZmYgaW4gcHJvZFxuICAgICAgLy8gYnVpbGRzOyB3aGVuIGRpc2FibGVkIG5vdGhpbmcgaXMgcmVnaXN0ZXJlZCwgc28gcHJvZCBidW5kbGVzIG5ldmVyXG4gICAgICAvLyBpbXBvcnQgQHdvcmtmbG93L3dlYi4gRXhjbHVkZWQgb24gVmVyY2VsIGRlcGxveXMgKHRoZSBvbi1kaXNrIGJ1aWxkL1xuICAgICAgLy8gYW5kIG5vZGVfbW9kdWxlcyBpbXBvcnQgZG9uJ3Qgc3Vydml2ZSBhIHNlcnZlcmxlc3MgYnVuZGxlIOKAlCB1c2VycyB1c2VcbiAgICAgIC8vIHRoZSBob3N0ZWQgVmVyY2VsIGRhc2hib2FyZCB0aGVyZSkuXG4gICAgICBjb25zdCBkYXNoYm9hcmRPcHRpb24gPSBuaXRyby5vcHRpb25zLndvcmtmbG93Py5kYXNoYm9hcmQ7XG4gICAgICBjb25zdCBkYXNoYm9hcmRFbmFibGVkID1cbiAgICAgICAgdHlwZW9mIGRhc2hib2FyZE9wdGlvbiA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IChkYXNoYm9hcmRPcHRpb24uZW5hYmxlZCA/PyBuaXRyby5vcHRpb25zLmRldilcbiAgICAgICAgICA6IChkYXNoYm9hcmRPcHRpb24gPz8gbml0cm8ub3B0aW9ucy5kZXYpO1xuICAgICAgY29uc3QgZGFzaGJvYXJkUGF0aCA9IG5vcm1hbGl6ZURhc2hib2FyZFBhdGgoXG4gICAgICAgICh0eXBlb2YgZGFzaGJvYXJkT3B0aW9uID09PSAnb2JqZWN0JyAmJiBkYXNoYm9hcmRPcHRpb24ucGF0aCkgfHxcbiAgICAgICAgICBERUZBVUxUX0RBU0hCT0FSRF9QQVRIXG4gICAgICApO1xuICAgICAgaWYgKGRhc2hib2FyZEVuYWJsZWQgJiYgIWlzVmVyY2VsRGVwbG95KSB7XG4gICAgICAgIGFkZERhc2hib2FyZEhhbmRsZXIobml0cm8sIGRhc2hib2FyZFBhdGgpO1xuICAgICAgfVxuXG4gICAgICBhZGRWaXJ0dWFsSGFuZGxlcihcbiAgICAgICAgbml0cm8sXG4gICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay86dG9rZW4nLFxuICAgICAgICAnd29ya2Zsb3cvd2ViaG9vay5tanMnXG4gICAgICApO1xuXG4gICAgICAvLyBWMjogc2luZ2xlIGNvbWJpbmVkIGhhbmRsZXIgZm9yIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAgLy8gVGhlIHN0ZXAgcmVnaXN0cmF0aW9ucyBhcmUgaW1wb3J0ZWQgYXMgc2lkZSBlZmZlY3RzIGJ5IHRoZSBjb21iaW5lZFxuICAgICAgLy8gaGFuZGxlciDigJQgbm8gc2VwYXJhdGUgc3RlcCByb3V0ZSBuZWVkZWQuXG4gICAgICBhZGRWaXJ0dWFsSGFuZGxlcihcbiAgICAgICAgbml0cm8sXG4gICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdycsXG4gICAgICAgICd3b3JrZmxvdy93b3JrZmxvd3MubWpzJ1xuICAgICAgKTtcblxuICAgICAgLy8gTml0cm8gdjMrIFZlcmNlbCBkZXBsb3k6IGNvbmZpZ3VyZSBmdW5jdGlvbiBydWxlcyBmb3IgdGhlIGNvbWJpbmVkXG4gICAgICAvLyBmbG93IGhhbmRsZXIgc28gaXQgZ2V0cyB0aGUgcXVldWUgdHJpZ2dlcnMgKyBtYXggZHVyYXRpb24gdGhhdCB0aGVcbiAgICAgIC8vIHdvcmtmbG93IHJ1bnRpbWUgbmVlZHMuIFdvcmtmbG93LXJlcXVpcmVkIGZpZWxkcyAoYG1heER1cmF0aW9uYCxcbiAgICAgIC8vIGBleHBlcmltZW50YWxUcmlnZ2Vyc2AsIGBydW50aW1lYCB3aGVuIHNldCkgdGFrZSBwcmVjZWRlbmNlIG92ZXJcbiAgICAgIC8vIHVzZXItcHJvdmlkZWQgdmFsdWVzIGZvciB0aGVzZSByb3V0ZXM7IHVucmVsYXRlZCBmaWVsZHMgdGhlIHVzZXJcbiAgICAgIC8vIHNldHMgKGUuZy4gYG1lbW9yeWApIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQuXG4gICAgICAvL1xuICAgICAgLy8gUGF0dGVybiBrZXlzIG11c3QgbWF0Y2ggdGhlIHJvdXRlIHBhdHRlcm5zIHRoZSBoYW5kbGVycyBhcmVcbiAgICAgIC8vIHJlZ2lzdGVyZWQgd2l0aCBzbyBuaXRybyByZXVzZXMgdGhlIHNhbWUgZnVuY3Rpb24gZGlyZWN0b3J5LlxuICAgICAgLy8gVXNpbmcgYSBgd2ViaG9vay8qKmAgY2F0Y2gtYWxsIGhlcmUgd291bGQgY3JlYXRlIGEgc2Vjb25kXG4gICAgICAvLyBgd2ViaG9vay9bLi4uXS5mdW5jYCBuZXh0IHRvIHRoZSBgd2ViaG9vay9bdG9rZW5dLmZ1bmNgIHRoYXRcbiAgICAgIC8vIGBhZGRWaXJ0dWFsSGFuZGxlcmAgcHJvZHVjZXMuXG4gICAgICBpZiAoaXNWZXJjZWxEZXBsb3kpIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy52ZXJjZWwgPz89IHt9O1xuICAgICAgICBuaXRyby5vcHRpb25zLnZlcmNlbC5mdW5jdGlvblJ1bGVzID8/PSB7fTtcblxuICAgICAgICBjb25zdCBydW50aW1lID0gbml0cm8ub3B0aW9ucy53b3JrZmxvdz8ucnVudGltZTtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBuaXRyby5vcHRpb25zLnZlcmNlbC5mdW5jdGlvblJ1bGVzO1xuXG4gICAgICAgIGNvbnN0IGZsb3dQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9mbG93JztcbiAgICAgICAgcnVsZXNbZmxvd1BhdGhdID0ge1xuICAgICAgICAgIC4uLnJ1bGVzW2Zsb3dQYXRoXSxcbiAgICAgICAgICAuLi4ocnVudGltZSAmJiB7IHJ1bnRpbWUgfSksXG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIC8vIEEgc2luZ2xlIHdvcmtmbG93IHRyaWdnZXIgaGFuZGxlcyBvcmNoZXN0cmF0aW9uIGFuZCBxdWV1ZWQgc3RlcFxuICAgICAgICAgIC8vIGV4ZWN1dGlvbjsgc3RlcCBtZXNzYWdlcyBpbmNsdWRlIHN0ZXBJZCBvbiBgX193a2Zfd29ya2Zsb3dfKmAuXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocnVudGltZSkge1xuICAgICAgICAgIGNvbnN0IHdlYmhvb2tQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rLzp0b2tlbic7XG4gICAgICAgICAgcnVsZXNbd2ViaG9va1BhdGhdID0geyAuLi5ydWxlc1t3ZWJob29rUGF0aF0sIHJ1bnRpbWUgfTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19QVUJMSUNfTUFOSUZFU1QgPT09ICcxJykge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJztcbiAgICAgICAgICAgIHJ1bGVzW21hbmlmZXN0UGF0aF0gPSB7IC4uLnJ1bGVzW21hbmlmZXN0UGF0aF0sIHJ1bnRpbWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgcHVibGljIEhUVFAgcm91dGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MVxuICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnKSB7XG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgbWFuaWZlc3QtZGF0YS5tanMgc28gcm9sbHVwIGNhbiByZXNvbHZlIHRoZVxuICAgICAgICAvLyBpbXBvcnQuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbCBtYW5pZmVzdCBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgaGFuZGxlciBmaWxlIHNvIHJvbGx1cCBjYW4gcmVzb2x2ZSB0aGUgcGF0aFxuICAgICAgICAvLyBkdXJpbmcgcHJvZCBjb21waWxhdGlvbi4gSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsXG4gICAgICAgIC8vIG1hbmlmZXN0IGNvbnRlbnQgYnkgd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIGlmICghbml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICBjb25zdCBkaXIgPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpO1xuICAgICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihkaXIsICdtYW5pZmVzdC1oYW5kbGVyLm1qcycpO1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBoYW5kbGVyUGF0aCxcbiAgICAgICAgICAgICdleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcXG4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNYW5pZmVzdEhhbmRsZXIobml0cm8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIE5pdHJvTW9kdWxlO1xuXG5jb25zdCBEQVNIQk9BUkRfVklSVFVBTF9JRCA9ICcjd29ya2Zsb3cvZGFzaGJvYXJkLWhhbmRsZXInO1xuY29uc3QgREVGQVVMVF9EQVNIQk9BUkRfUEFUSCA9ICcvX3dvcmtmbG93JztcblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGRhc2hib2FyZCBtb3VudCBwYXRoIHNvIHRoZSBOaXRybyByb3V0ZSByZWdpc3RyYXRpb24gYW5kIHRoZVxuICogZW1iZWRkZWQgaGFuZGxlcidzIG93biBiYXNlbmFtZSBub3JtYWxpemF0aW9uIGNhbid0IGRpc2FncmVlLlxuICpcbiAqIGBkYXNoYm9hcmRQYXRoYCBmZWVkcyB0d28gY29uc3VtZXJzOiB0aGUgTml0cm8gcm91dGUgcmVnaXN0cmF0aW9uXG4gKiAoYFtwYXRoLCBwYXRoICsgJy8qKiddYCkgYW5kIHRoZSBoYW5kbGVyJ3MgYGJhc2VuYW1lYCAod2hpY2ggcmUtbm9ybWFsaXplc1xuICogaW50ZXJuYWxseSB2aWEgYG5vcm1hbGl6ZUJhc2VuYW1lYCkuIE5vcm1hbGl6aW5nIG9uY2UsIGhlcmUsIGtlZXBzIHRoZW0gaW5cbiAqIHN5bmMuIFdlIGZvcmNlIGEgc2luZ2xlIGxlYWRpbmcgc2xhc2gsIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMsIGFuZCByZWplY3RcbiAqIHRoZSByb290IG1vdW50ICh3aG9zZSBgLyoqYCBjYXRjaC1hbGwgd291bGQgc3dhbGxvdyB0aGUgaG9zdCBhcHApLCBmYWxsaW5nXG4gKiBiYWNrIHRvIHRoZSBkZWZhdWx0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEYXNoYm9hcmRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBgLyR7cGF0aC50cmltKCkucmVwbGFjZSgvXlxcLysvLCAnJykucmVwbGFjZSgvXFwvKyQvLCAnJyl9YDtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICcvJyA/IERFRkFVTFRfREFTSEJPQVJEX1BBVEggOiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIE1vdW50IHRoZSBvYnNlcnZhYmlsaXR5IGRhc2hib2FyZCBpbi1wcm9jZXNzIGF0IGBiYXNlbmFtZWAgKGUuZy4gYC9fd29ya2Zsb3dgKS5cbiAqXG4gKiBUaGUgZW50aXJlIGBAd29ya2Zsb3cvd2ViYCBVSSAoU1NSICsgc3RhdGljIGNsaWVudCBhc3NldHMgKyBSUEMpIGlzIHNlcnZlZCBieVxuICogYSBzaW5nbGUgV2ViLXN0YW5kYXJkIGZldGNoIGhhbmRsZXIgcnVubmluZyBpbnNpZGUgdGhpcyBOaXRybyBwcm9jZXNzIOKAlCBub1xuICogc2Vjb25kIHNlcnZlciwgbm8gc2VwYXJhdGUgcG9ydCwgbm8gcmVkaXJlY3QuIFRoZSBoYW5kbGVyIGlzIGZyYW1ld29yay1cbiAqIG5ldXRyYWw7IHRoaXMgaXMganVzdCBpdHMgZmlyc3QgY29uc3VtZXIuXG4gKi9cbmZ1bmN0aW9uIGFkZERhc2hib2FyZEhhbmRsZXIobml0cm86IE5pdHJvLCBiYXNlbmFtZTogc3RyaW5nKSB7XG4gIC8vIFJlc29sdmUgYEB3b3JrZmxvdy93ZWIvaGFuZGxlcmAgcmVsYXRpdmUgdG8gdGhpcyBtb2R1bGUgc28gY29uc3VtZXJzIGRvbid0XG4gIC8vIG5lZWQgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgQHdvcmtmbG93L3dlYmAuIElubGluZWQgaW50byB0aGUgdmlydHVhbFxuICAvLyBoYW5kbGVyIGFzIGEgZmlsZTovLyBVUkwgYW5kIGltcG9ydGVkIHdpdGggQHZpdGUtaWdub3JlL3dlYnBhY2tJZ25vcmUgc29cbiAgLy8gTm9kZSBgaW1wb3J0KClgcyBpdCBmcm9tIG5vZGVfbW9kdWxlcyBhdCBydW50aW1lIOKAlCBrZWVwaW5nIEB3b3JrZmxvdy93ZWInc1xuICAvLyAobGFyZ2UsIFJlYWN0KSBkZXBlbmRlbmN5IGdyYXBoIG91dCBvZiB0aGUgTml0cm8gc2VydmVyIGJ1bmRsZS5cbiAgY29uc3QgcmVxdWlyZV8gPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGxldCB3ZWJIYW5kbGVyVXJsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgd2ViSGFuZGxlclVybCA9IHBhdGhUb0ZpbGVVUkwoXG4gICAgICByZXF1aXJlXy5yZXNvbHZlKCdAd29ya2Zsb3cvd2ViL2hhbmRsZXInKVxuICAgICkuaHJlZjtcbiAgfSBjYXRjaCB7XG4gICAgd2ViSGFuZGxlclVybCA9ICdAd29ya2Zsb3cvd2ViL2hhbmRsZXInO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlclNvdXJjZSA9IC8qIGpzICovIGBcbiAgICBjb25zdCBfX3dvcmtmbG93V2ViSGFuZGxlclVybCA9ICR7SlNPTi5zdHJpbmdpZnkod2ViSGFuZGxlclVybCl9O1xuICAgIGNvbnN0IF9fd29ya2Zsb3dEYXNoYm9hcmRCYXNlbmFtZSA9ICR7SlNPTi5zdHJpbmdpZnkoYmFzZW5hbWUpfTtcbiAgICBsZXQgaGFuZGxlclByb21pc2UgPSBudWxsO1xuICAgIGFzeW5jIGZ1bmN0aW9uIGdldERhc2hib2FyZEhhbmRsZXIoKSB7XG4gICAgICBpZiAoIWhhbmRsZXJQcm9taXNlKSB7XG4gICAgICAgIGhhbmRsZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQoLyogQHZpdGUtaWdub3JlICovIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8gX193b3JrZmxvd1dlYkhhbmRsZXJVcmwpO1xuICAgICAgICAgIHJldHVybiBtb2QuY3JlYXRlV29ya2Zsb3dXZWJIYW5kbGVyKHsgYmFzZW5hbWU6IF9fd29ya2Zsb3dEYXNoYm9hcmRCYXNlbmFtZSB9KTtcbiAgICAgICAgfSkoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBoYW5kbGVyUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhbmRsZXJQcm9taXNlO1xuICAgIH1cbiAgYDtcblxuICBpZiAoaXNOaXRyb1YyKG5pdHJvKSkge1xuICAgIC8vIE5pdHJvIHYyIChsZWdhY3kgaDMpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW0RBU0hCT0FSRF9WSVJUVUFMX0lEXSA9IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICAke2hhbmRsZXJTb3VyY2V9XG4gICAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBnZXREYXNoYm9hcmRIYW5kbGVyKCk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGhhbmRsZXIocmVxdWVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlbmRlciB3b3JrZmxvdyBkYXNoYm9hcmQ6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ZhaWxlZCB0byByZW5kZXIgd29ya2Zsb3cgZGFzaGJvYXJkOiAnICsgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBgO1xuICB9IGVsc2Uge1xuICAgIC8vIE5pdHJvIHYzKyAobmF0aXZlIHdlYiBoYW5kbGVycylcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbREFTSEJPQVJEX1ZJUlRVQUxfSURdID0gLyoganMgKi8gYFxuICAgICAgJHtoYW5kbGVyU291cmNlfVxuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgZ2V0RGFzaGJvYXJkSGFuZGxlcigpO1xuICAgICAgICAgIHJldHVybiBhd2FpdCBoYW5kbGVyKHJlcSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlbmRlciB3b3JrZmxvdyBkYXNoYm9hcmQ6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ZhaWxlZCB0byByZW5kZXIgd29ya2Zsb3cgZGFzaGJvYXJkOiAnICsgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gIH1cblxuICAvLyBSZWdpc3RlciB0aGUgZXhhY3QgbW91bnQgcGF0aCBhbmQgYSBjYXRjaC1hbGwgYmVuZWF0aCBpdCBzbyB0aGUgaW5kZXgsXG4gIC8vIGNsaWVudCByb3V0ZXMsIEFQSSByb3V0ZXMgKFJQQy9zdHJlYW0pLCBhbmQgc3RhdGljIGFzc2V0cyBhbGwgcm91dGUgdG8gdGhlXG4gIC8vIGVtYmVkZGVkIGhhbmRsZXIsIHdoaWNoIHJlc29sdmVzIHRoZW0gYWdhaW5zdCBgYmFzZW5hbWVgIGludGVybmFsbHkuXG4gIGZvciAoY29uc3Qgcm91dGUgb2YgW2Jhc2VuYW1lLCBgJHtiYXNlbmFtZX0vKipgXSkge1xuICAgIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBEQVNIQk9BUkRfVklSVFVBTF9JRCB9KTtcbiAgfVxufVxuXG50eXBlIFZpcnR1YWxIYW5kbGVyUGF0aCA9ICd3b3JrZmxvdy93ZWJob29rLm1qcycgfCAnd29ya2Zsb3cvd29ya2Zsb3dzLm1qcyc7XG5cbmZ1bmN0aW9uIGFkZFZpcnR1YWxIYW5kbGVyKFxuICBuaXRybzogTml0cm8sXG4gIHJvdXRlOiBzdHJpbmcsXG4gIGJ1aWxkUGF0aDogVmlydHVhbEhhbmRsZXJQYXRoXG4pIHtcbiAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHtcbiAgICByb3V0ZSxcbiAgICBoYW5kbGVyOiBgIyR7YnVpbGRQYXRofWAsXG4gIH0pO1xuICBjb25zdCBoYW5kbGVySW1wb3J0UGF0aCA9IEpTT04uc3RyaW5naWZ5KFxuICAgIGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgYnVpbGRQYXRoKVxuICApO1xuICBjb25zdCBzdGVwc0ltcG9ydFBhdGggPSBKU09OLnN0cmluZ2lmeShcbiAgICBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9zdGVwcy5tanMnKVxuICApO1xuICBjb25zdCBwcmVsb2FkU3RlcHM6IFJlY29yZDxWaXJ0dWFsSGFuZGxlclBhdGgsIHN0cmluZz4gPSB7XG4gICAgJ3dvcmtmbG93L3dlYmhvb2subWpzJzogJycsXG4gICAgJ3dvcmtmbG93L3dvcmtmbG93cy5tanMnOiBgYXdhaXQgaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyBwYXRoVG9GaWxlVVJMKCR7c3RlcHNJbXBvcnRQYXRofSkuaHJlZiArIFwiP3Q9XCIgKyB2ZXJzaW9uKTtgLFxuICB9O1xuXG4gIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgIC8vIERldiBtb2RlOiBsb2FkIGdlbmVyYXRlZCB3b3JrZmxvdyBidW5kbGVzIGZyb20gZGlzayBhdCByZXF1ZXN0IHRpbWUuXG4gICAgLy8gVGhpcyBrZWVwcyBgLm5pdHJvL3dvcmtmbG93LyoubWpzYCBvdXQgb2YgTml0cm8ncyBvd24gYnVuZGxlIGdyYXBoLFxuICAgIC8vIHdoaWNoIGF2b2lkcyByZWJ1aWxkIGxvb3BzIGFuZCBzdGFsZSBkZXBlbmRlbmN5IGdyYXBocyBkdXJpbmcgSE1SLlxuICAgIC8vIENhY2hlLWJ1c3QgYnkgZmlsZSBtdGltZSBzbyBlYWNoIHN1Y2Nlc3NmdWwgcmVidWlsZCBsb2FkcyBmcmVzaCBjb2RlLlxuICAgIGlmIChpc05pdHJvVjIobml0cm8pKSB7XG4gICAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbYCMke2J1aWxkUGF0aH1gXSA9IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICBpbXBvcnQgeyBzdGF0U3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG4gICAgICBpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgICBsZXQgY3VycmVudFZlcnNpb24gPSBcIlwiO1xuICAgICAgbGV0IGN1cnJlbnRJbXBvcnRQYXRoID0gXCJcIjtcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZFBPU1QoKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBTdHJpbmcoc3RhdFN5bmMoaGFuZGxlclBhdGgpLm10aW1lTXMpO1xuICAgICAgICBpZiAodmVyc2lvbiAhPT0gY3VycmVudFZlcnNpb24pIHtcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgY3VycmVudEltcG9ydFBhdGggPSBwYXRoVG9GaWxlVVJMKGhhbmRsZXJQYXRoKS5ocmVmICsgXCI/dD1cIiArIHZlcnNpb247XG4gICAgICAgICAgJHtwcmVsb2FkU3RlcHNbYnVpbGRQYXRoXX1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydChjdXJyZW50SW1wb3J0UGF0aCkpLlBPU1Q7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKGFzeW5jIChyZXF1ZXN0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IFBPU1QgPSBhd2FpdCBsb2FkUE9TVCgpO1xuICAgICAgICByZXR1cm4gUE9TVChyZXF1ZXN0LCBjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aCA9ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgICAgbGV0IGN1cnJlbnRWZXJzaW9uID0gXCJcIjtcbiAgICAgIGxldCBjdXJyZW50SW1wb3J0UGF0aCA9IFwiXCI7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRQT1NUKCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gU3RyaW5nKHN0YXRTeW5jKGhhbmRsZXJQYXRoKS5tdGltZU1zKTtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICAgICAgY3VycmVudFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgIGN1cnJlbnRJbXBvcnRQYXRoID0gcGF0aFRvRmlsZVVSTChoYW5kbGVyUGF0aCkuaHJlZiArIFwiP3Q9XCIgKyB2ZXJzaW9uO1xuICAgICAgICAgICR7cHJlbG9hZFN0ZXBzW2J1aWxkUGF0aF19XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCBpbXBvcnQoY3VycmVudEltcG9ydFBhdGgpKS5QT1NUO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgZGVmYXVsdCBhc3luYyAoeyByZXEgfSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFBPU1QgPSBhd2FpdCBsb2FkUE9TVCgpO1xuICAgICAgICAgIHJldHVybiBhd2FpdCBQT1NUKHJlcSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignSGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBgO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBLZWVwIGEgYmFyZSBpbXBvcnQgYWxvbmdzaWRlIGBQT1NUYDogaW4gTnV4dCArIE5pdHJvIHByb2R1Y3Rpb24gYnVpbGRzXG4gIC8vIHVzaW5nIGBAd29ya2Zsb3cvbnV4dGAsIGltcG9ydGluZyBvbmx5IGBQT1NUYCBjb3VsZCBkcm9wIHRoZSBnZW5lcmF0ZWRcbiAgLy8gc3RlcCBidW5kbGUncyB0b3AtbGV2ZWwgcmVnaXN0cmF0aW9ucywgc28gdGhlIGhhbmRsZXIgbG9hZGVkIGJ1dCBzdGVwc1xuICAvLyB3ZXJlIG1pc3NpbmcgYXQgcnVudGltZS5cblxuICBpZiAoaXNOaXRyb1YyKG5pdHJvKSkge1xuICAgIC8vIE5pdHJvIHYyIChsZWdhY3kpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgaW1wb3J0ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgaW1wb3J0IHsgUE9TVCB9IGZyb20gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoUE9TVCk7XG4gIGA7XG4gIH0gZWxzZSB7XG4gICAgLy8gTml0cm8gdjMrIChuYXRpdmUgd2ViIGhhbmRsZXJzKVxuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgIGltcG9ydCAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBpbXBvcnQgeyBQT1NUIH0gZnJvbSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBleHBvcnQgZGVmYXVsdCBhc3luYyAoeyByZXEgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IFBPU1QocmVxKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgfVxuICAgIH07XG4gIGA7XG4gIH1cbn1cblxuY29uc3QgTUFOSUZFU1RfVklSVFVBTF9JRCA9ICcjd29ya2Zsb3cvbWFuaWZlc3QtaGFuZGxlcic7XG5cbmZ1bmN0aW9uIGFkZE1hbmlmZXN0SGFuZGxlcihuaXRybzogTml0cm8pIHtcbiAgY29uc3Qgcm91dGUgPSAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAvLyBEZXYgbW9kZTogdXNlIGEgdmlydHVhbCBoYW5kbGVyIHRoYXQgcmVhZHMgdGhlIG1hbmlmZXN0IGZyb20gZGlzayBhdFxuICAgIC8vIHJlcXVlc3QgdGltZS4gVGhlIGFic29sdXRlIHBhdGggaXMgdmFsaWQgYmVjYXVzZSB3ZSdyZSBvbiB0aGUgYnVpbGQgbWFjaGluZS5cbiAgICBuaXRyby5vcHRpb25zLmhhbmRsZXJzLnB1c2goeyByb3V0ZSwgaGFuZGxlcjogTUFOSUZFU1RfVklSVFVBTF9JRCB9KTtcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbTUFOSUZFU1RfVklSVFVBTF9JRF0gPSBpc05pdHJvVjIobml0cm8pXG4gICAgICA/IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZnVuY3Rpb24gR0VUKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKEdFVCk7XG4gICAgYFxuICAgICAgOiAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9kIG1vZGU6IHJlZ2lzdGVyIGEgcGh5c2ljYWwgaGFuZGxlciBmaWxlIHRoYXQgd2lsbCBiZSB3cml0dGVuIGJ5XG4gICAgLy8gd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBhZnRlciB0aGUgYnVpbGRlciBnZW5lcmF0ZXMgdGhlIG1hbmlmZXN0LlxuICAgIC8vIFRoaXMgZmlsZSBpcyBidW5kbGVkIGJ5IHJvbGx1cCBpbnRvIHRoZSBjb21waWxlZCBvdXRwdXQuXG4gICAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHsgcm91dGUsIGhhbmRsZXI6IGhhbmRsZXJQYXRoIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGEgcGh5c2ljYWwgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggdGhlIG1hbmlmZXN0IGNvbnRlbnQgaW5saW5lZC5cbiAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBidWlsZGVyIGdlbmVyYXRlcyB0aGUgbWFuaWZlc3QgKGR1cmluZyBidWlsZDpiZWZvcmUpXG4gKiBhbmQgYmVmb3JlIE5pdHJvIGNvbXBpbGVzIHRoZSBidW5kbGUgd2l0aCByb2xsdXAuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcbiAgY29uc3QgZGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdENvbnRlbnQgPSByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmLTgnKTtcbiAgICBKU09OLnBhcnNlKG1hbmlmZXN0Q29udGVudCk7IC8vIHZhbGlkYXRlXG5cbiAgICBjb25zdCBoYW5kbGVyQ29kZSA9IGlzTml0cm9WMihuaXRybylcbiAgICAgID8gYGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG5jb25zdCBtYW5pZmVzdCA9ICR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RDb250ZW50KX07XG5leHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcigoKSA9PiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxufSkpO1xuYFxuICAgICAgOiBgY29uc3QgbWFuaWZlc3QgPSAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0Q29udGVudCl9O1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4gbmV3IFJlc3BvbnNlKG1hbmlmZXN0LCB7XG4gIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbn0pO1xuYDtcbiAgICB3cml0ZUZpbGVTeW5jKGhhbmRsZXJQYXRoLCBoYW5kbGVyQ29kZSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFdyaXRlIGEgNDA0IGZhbGxiYWNrIGhhbmRsZXJcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzTml0cm9WMihuaXRybylcbiAgICAgID8gYGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG5leHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcigoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KSk7XG5gXG4gICAgICA6IGBleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcbmA7XG4gICAgd3JpdGVGaWxlU3luYyhoYW5kbGVyUGF0aCwgZmFsbGJhY2spO1xuICB9XG59XG4iXX0=
|
package/dist/types.d.ts
CHANGED
|
@@ -31,6 +31,25 @@ export interface ModuleOptions {
|
|
|
31
31
|
* Can also be set via the `WORKFLOW_SOURCEMAP` environment variable.
|
|
32
32
|
*/
|
|
33
33
|
sourcemap?: boolean | 'inline' | 'linked' | 'external' | 'both';
|
|
34
|
+
/**
|
|
35
|
+
* Embed the workflow observability dashboard in-process on this server,
|
|
36
|
+
* served at `/_workflow` (configurable). The UI runs inside the same Nitro
|
|
37
|
+
* process — no separate server or port.
|
|
38
|
+
*
|
|
39
|
+
* - `true` / `false` — force the dashboard on or off.
|
|
40
|
+
* - `{ enabled, path }` — toggle and/or change the mount path.
|
|
41
|
+
*
|
|
42
|
+
* Defaults to **on in dev, off in production builds**. When disabled the
|
|
43
|
+
* route is never registered, so production bundles carry no `@workflow/web`
|
|
44
|
+
* import and pay zero bundle-size or startup cost. Never mounted for Vercel
|
|
45
|
+
* deploys (use the hosted Vercel dashboard there).
|
|
46
|
+
*
|
|
47
|
+
* @default nitro.options.dev
|
|
48
|
+
*/
|
|
49
|
+
dashboard?: boolean | {
|
|
50
|
+
enabled?: boolean;
|
|
51
|
+
path?: string;
|
|
52
|
+
};
|
|
34
53
|
}
|
|
35
54
|
declare module 'nitro/types' {
|
|
36
55
|
interface NitroOptions {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IAEhE;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,YAAY;QACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;KAC1B;CACF;AAGD,OAAO,QAAQ,WAAW,CAAC;IACzB,UAAU,YAAY;QACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;KAC1B;CACF"}
|
package/dist/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlT3B0aW9ucyB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3ZpdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcmllcyB0byBzY2FuIGZvciB3b3JrZmxvd3MgYW5kIHN0ZXBzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBgd29ya2Zsb3dzL2AgZGlyZWN0b3J5IHdpbGwgYmUgc2Nhbm5lZCBmcm9tIHJvb3QgYW5kIGFsbCBsYXllciBzb3VyY2UgZGlycy5cbiAgICovXG4gIGRpcnM/
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlT3B0aW9ucyB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3ZpdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcmllcyB0byBzY2FuIGZvciB3b3JrZmxvd3MgYW5kIHN0ZXBzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBgd29ya2Zsb3dzL2AgZGlyZWN0b3J5IHdpbGwgYmUgc2Nhbm5lZCBmcm9tIHJvb3QgYW5kIGFsbCBsYXllciBzb3VyY2UgZGlycy5cbiAgICovXG4gIGRpcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW5hYmxlIHdvcmtmbG93IFR5cGVTY3JpcHQgcGx1Z2luIGluIGdlbmVyYXRlZCB0c2NvbmZpZy5qc29uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0eXBlc2NyaXB0UGx1Z2luPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTm9kZS5qcyBydW50aW1lIHZlcnNpb24gZm9yIFZlcmNlbCBGdW5jdGlvbnMuXG4gICAqIEBleGFtcGxlIFwibm9kZWpzMjIueFwiXG4gICAqIEBleGFtcGxlIFwibm9kZWpzMjQueFwiXG4gICAqL1xuICBydW50aW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHMgdGhlXG4gICAqIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb246IGB0cnVlYC9gJ2lubGluZSdgIChkZWZhdWx0XG4gICAqIGZvciBzdGVwL3dvcmtmbG93IGJ1bmRsZXMpLCBgJ2xpbmtlZCdgLCBgJ2V4dGVybmFsJ2AsIGAnYm90aCdgLCBvclxuICAgKiBgZmFsc2VgIHRvIG9taXQgc291cmNlIG1hcHMuXG4gICAqXG4gICAqIFNldCB0byBgZmFsc2VgIGZvciBzbWFsbGVyIGZ1bmN0aW9uIGJ1bmRsZXMg4oCUIHVzZWZ1bCBmb3Igc3RheWluZyB1bmRlclxuICAgKiB0aGUgVmVyY2VsIDI1ME1CIGZ1bmN0aW9uIHNpemUgbGltaXQg4oCUIGF0IHRoZSBjb3N0IG9mIHN0YWNrIHRyYWNlcyB0aGF0XG4gICAqIHBvaW50IGF0IGdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgeW91ciBzb3VyY2UgZmlsZXMuXG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBFbWJlZCB0aGUgd29ya2Zsb3cgb2JzZXJ2YWJpbGl0eSBkYXNoYm9hcmQgaW4tcHJvY2VzcyBvbiB0aGlzIHNlcnZlcixcbiAgICogc2VydmVkIGF0IGAvX3dvcmtmbG93YCAoY29uZmlndXJhYmxlKS4gVGhlIFVJIHJ1bnMgaW5zaWRlIHRoZSBzYW1lIE5pdHJvXG4gICAqIHByb2Nlc3Mg4oCUIG5vIHNlcGFyYXRlIHNlcnZlciBvciBwb3J0LlxuICAgKlxuICAgKiAtIGB0cnVlYCAvIGBmYWxzZWAg4oCUIGZvcmNlIHRoZSBkYXNoYm9hcmQgb24gb3Igb2ZmLlxuICAgKiAtIGB7IGVuYWJsZWQsIHBhdGggfWAg4oCUIHRvZ2dsZSBhbmQvb3IgY2hhbmdlIHRoZSBtb3VudCBwYXRoLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byAqKm9uIGluIGRldiwgb2ZmIGluIHByb2R1Y3Rpb24gYnVpbGRzKiouIFdoZW4gZGlzYWJsZWQgdGhlXG4gICAqIHJvdXRlIGlzIG5ldmVyIHJlZ2lzdGVyZWQsIHNvIHByb2R1Y3Rpb24gYnVuZGxlcyBjYXJyeSBubyBgQHdvcmtmbG93L3dlYmBcbiAgICogaW1wb3J0IGFuZCBwYXkgemVybyBidW5kbGUtc2l6ZSBvciBzdGFydHVwIGNvc3QuIE5ldmVyIG1vdW50ZWQgZm9yIFZlcmNlbFxuICAgKiBkZXBsb3lzICh1c2UgdGhlIGhvc3RlZCBWZXJjZWwgZGFzaGJvYXJkIHRoZXJlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgbml0cm8ub3B0aW9ucy5kZXZcbiAgICovXG4gIGRhc2hib2FyZD86IGJvb2xlYW4gfCB7IGVuYWJsZWQ/OiBib29sZWFuOyBwYXRoPzogc3RyaW5nIH07XG59XG5cbmRlY2xhcmUgbW9kdWxlICduaXRyby90eXBlcycge1xuICBpbnRlcmZhY2UgTml0cm9PcHRpb25zIHtcbiAgICB3b3JrZmxvdz86IE1vZHVsZU9wdGlvbnM7XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAobGVnYWN5KVxuZGVjbGFyZSBtb2R1bGUgJ25pdHJvcGFjaycge1xuICBpbnRlcmZhY2UgTml0cm9PcHRpb25zIHtcbiAgICB3b3JrZmxvdz86IE1vZHVsZU9wdGlvbnM7XG4gIH1cbn1cbiJdfQ==
|
package/dist/vite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAmB,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CA2F1D"}
|
package/dist/vite.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createBuildQueue
|
|
1
|
+
import { createBuildQueue } from '@workflow/builders';
|
|
2
2
|
import { workflowTransformPlugin } from '@workflow/rollup';
|
|
3
3
|
import { workflowHotUpdatePlugin } from '@workflow/vite';
|
|
4
4
|
import { LocalBuilder } from './builders.js';
|
|
@@ -12,35 +12,6 @@ export function workflow(options) {
|
|
|
12
12
|
// The exclusion path is set during nitro setup, so we need to defer plugin creation
|
|
13
13
|
const lazyTransformPlugin = {
|
|
14
14
|
name: 'workflow:transform',
|
|
15
|
-
config() {
|
|
16
|
-
const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
|
|
17
|
-
const workflowTargetWorldAlias = resolveWorkflowTargetWorldAlias({
|
|
18
|
-
workingDir: process.cwd(),
|
|
19
|
-
targetWorld: workflowTargetWorld,
|
|
20
|
-
});
|
|
21
|
-
return {
|
|
22
|
-
define: {
|
|
23
|
-
'process.env.WORKFLOW_TARGET_WORLD': JSON.stringify(workflowTargetWorld),
|
|
24
|
-
},
|
|
25
|
-
resolve: {
|
|
26
|
-
alias: {
|
|
27
|
-
[WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldAlias,
|
|
28
|
-
'pg-native': WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS,
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
},
|
|
33
|
-
async resolveId(source, importer, options) {
|
|
34
|
-
if (source !== WORKFLOW_WORLD_TARGET_MODULE) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
|
|
38
|
-
const resolved = await this.resolve(workflowTargetWorld, importer, {
|
|
39
|
-
...options,
|
|
40
|
-
skipSelf: true,
|
|
41
|
-
});
|
|
42
|
-
return resolved ?? { id: workflowTargetWorld, external: true };
|
|
43
|
-
},
|
|
44
15
|
transform(code, id, options) {
|
|
45
16
|
// Delegate to the actual transform plugin with exclusion
|
|
46
17
|
// nitroBuildDir is set during nitro setup before transforms run
|
|
@@ -111,4 +82,4 @@ export function workflow(options) {
|
|
|
111
82
|
}),
|
|
112
83
|
];
|
|
113
84
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixpQ0FBaUMsRUFDakMsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLFdBQVcsTUFBTSxZQUFZLENBQUM7QUFFckMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUF1QjtJQUM5QyxJQUFJLE9BQXFCLENBQUM7SUFDMUIsSUFBSSxRQUEyQixDQUFDO0lBQ2hDLElBQUksYUFBcUIsQ0FBQztJQUMxQixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRW5DLHNFQUFzRTtJQUN0RSxvRkFBb0Y7SUFDcEYsTUFBTSxtQkFBbUIsR0FBVztRQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLE1BQU07WUFDSixNQUFNLG1CQUFtQixHQUFHLDRCQUE0QixFQUFFLENBQUM7WUFDM0QsTUFBTSx3QkFBd0IsR0FBRywrQkFBK0IsQ0FBQztnQkFDL0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLFdBQVcsRUFBRSxtQkFBbUI7YUFDakMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxNQUFNLEVBQUU7b0JBQ04sbUNBQW1DLEVBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUM7aUJBQ3RDO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxLQUFLLEVBQUU7d0JBQ0wsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLHdCQUF3Qjt3QkFDeEQsV0FBVyxFQUFFLGlDQUFp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S0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDOzRCQUUvRCw0RUFBNEU7NEJBQzVFLDBEQUEwRDs0QkFDMUQsc0VBQXNFOzRCQUN0RSxJQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQ0FDdkIsMERBQTBEO2dDQUMxRCxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN2QyxDQUFDOzRCQUVELGdEQUFnRDs0QkFDaEQsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUM3QyxDQUFRLENBQUM7d0JBRVQsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO1lBQ0osQ0FBQztTQUNGO1FBQ0QsdUJBQXVCLENBQUM7WUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU87WUFDdEIsT0FBTztTQUNSLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZUJ1aWxkUXVldWUsXG4gIGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYsXG4gIHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMsXG4gIFdPUktGTE9XX09QVElPTkFMX1BHX05BVElWRV9BTElBUyxcbiAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgeyB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbiB9IGZyb20gJ0B3b3JrZmxvdy92aXRlJztcbmltcG9ydCB0eXBlIHsgTml0cm8gfSBmcm9tICduaXRyby90eXBlcyc7XG5pbXBvcnQgdHlwZSB7fSBmcm9tICduaXRyby92aXRlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBUcmFuc2Zvcm1SZXN1bHQgfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IExvY2FsQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgbml0cm9Nb2R1bGUgZnJvbSAnLi9pbmRleC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvdyhvcHRpb25zPzogTW9kdWxlT3B0aW9ucyk6IFBsdWdpbltdIHtcbiAgbGV0IGJ1aWxkZXI6IExvY2FsQnVpbGRlcjtcbiAgbGV0IGRldk5pdHJvOiBOaXRybyB8IHVuZGVmaW5lZDtcbiAgbGV0IG5pdHJvQnVpbGREaXI6IHN0cmluZztcbiAgY29uc3QgZW5xdWV1ZSA9IGNyZWF0ZUJ1aWxkUXVldWUoKTtcblxuICAvLyBDcmVhdGUgYSBsYXp5IHRyYW5zZm9ybSBwbHVnaW4gdGhhdCBleGNsdWRlcyBOaXRybyBidWlsZCBhcnRpZmFjdHMuXG4gIC8vIFRoZSBleGNsdXNpb24gcGF0aCBpcyBzZXQgZHVyaW5nIG5pdHJvIHNldHVwLCBzbyB3ZSBuZWVkIHRvIGRlZmVyIHBsdWdpbiBjcmVhdGlvblxuICBjb25zdCBsYXp5VHJhbnNmb3JtUGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogJ3dvcmtmbG93OnRyYW5zZm9ybScsXG4gICAgY29uZmlnKCkge1xuICAgICAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZCA9IGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYoKTtcbiAgICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyA9IHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICAgICAgICB3b3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICB0YXJnZXRXb3JsZDogd29ya2Zsb3dUYXJnZXRXb3JsZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVmaW5lOiB7XG4gICAgICAgICAgJ3Byb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCc6XG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh3b3JrZmxvd1RhcmdldFdvcmxkKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZToge1xuICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICBbV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRV06IHdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyxcbiAgICAgICAgICAgICdwZy1uYXRpdmUnOiBXT1JLRkxPV19PUFRJT05BTF9QR19OQVRJVkVfQUxJQVMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luYyByZXNvbHZlSWQoc291cmNlLCBpbXBvcnRlciwgb3B0aW9ucykge1xuICAgICAgaWYgKHNvdXJjZSAhPT0gV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGQgPSBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KCk7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZSh3b3JrZmxvd1RhcmdldFdvcmxkLCBpbXBvcnRlciwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBza2lwU2VsZjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc29sdmVkID8/IHsgaWQ6IHdvcmtmbG93VGFyZ2V0V29ybGQsIGV4dGVybmFsOiB0cnVlIH07XG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY29kZSwgaWQsIG9wdGlvbnMpIHtcbiAgICAgIC8vIERlbGVnYXRlIHRvIHRoZSBhY3R1YWwgdHJhbnNmb3JtIHBsdWdpbiB3aXRoIGV4Y2x1c2lvblxuICAgICAgLy8gbml0cm9CdWlsZERpciBpcyBzZXQgZHVyaW5nIG5pdHJvIHNldHVwIGJlZm9yZSB0cmFuc2Zvcm1zIHJ1blxuICAgICAgY29uc3QgcGx1Z2luID0gd29ya2Zsb3dUcmFuc2Zvcm1QbHVnaW4oe1xuICAgICAgICBleGNsdWRlOiBuaXRyb0J1aWxkRGlyID8gW25pdHJvQnVpbGREaXJdIDogW10sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBsdWdpbi50cmFuc2Zvcm0gYXNcbiAgICAgICAgfCAoKFxuICAgICAgICAgICAgdGhpczogdW5rbm93bixcbiAgICAgICAgICAgIGNvZGU6IHN0cmluZyxcbiAgICAgICAgICAgIGlkOiBzdHJpbmcsXG4gICAgICAgICAgICBvcHRpb25zPzogeyBzc3I/OiBib29sZWFuIH1cbiAgICAgICAgICApID0+IFRyYW5zZm9ybVJlc3VsdCB8IFByb21pc2U8VHJhbnNmb3JtUmVzdWx0PilcbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtPy5jYWxsKHRoaXMsIGNvZGUsIGlkLCBvcHRpb25zKTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBbXG4gICAgbGF6eVRyYW5zZm9ybVBsdWdpbixcbiAgICB7XG4gICAgICBuYW1lOiAnd29ya2Zsb3c6bml0cm8nLFxuICAgICAgbml0cm86IHtcbiAgICAgICAgc2V0dXA6IChuaXRybzogTml0cm8pID0+IHtcbiAgICAgICAgICAvLyBDYXB0dXJlIHRoZSBOaXRybyBidWlsZCBkaXJlY3RvcnkgZm9yIGV4Y2x1c2lvblxuICAgICAgICAgIG5pdHJvQnVpbGREaXIgPSBgJHtuaXRyby5vcHRpb25zLmJ1aWxkRGlyLnJlcGxhY2UoL1tcXFxcL10rJC8sICcnKX0vYDtcbiAgICAgICAgICBuaXRyby5vcHRpb25zLndvcmtmbG93ID0ge1xuICAgICAgICAgICAgLi4ubml0cm8ub3B0aW9ucy53b3JrZmxvdyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBfdml0ZTogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICAgICAgZGV2Tml0cm8gPSBuaXRybztcbiAgICAgICAgICAgIGJ1aWxkZXIgPSBuZXcgTG9jYWxCdWlsZGVyKG5pdHJvKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5pdHJvTW9kdWxlLnNldHVwKG5pdHJvKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhc3luYyBidWlsZEVuZCgpIHtcbiAgICAgICAgY29uc3Qgbml0cm8gPSBkZXZOaXRybztcbiAgICAgICAgZGV2Tml0cm8gPSB1bmRlZmluZWQ7XG4gICAgICAgIGF3YWl0IG5pdHJvPy5jbG9zZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgTml0cm8gcGFzc2VzIHRoZSA0MDQgcmVxdWVzdHMgdG8gdGhlIGRldiBzZXJ2ZXIgdG8gaGFuZGxlLlxuICAgICAgLy8gRm9yIHdvcmtmbG93IHJvdXRlcywgd2Ugb3ZlcnJpZGUgdG8gc2VuZCBhbiBlbXB0eSBib2R5IHRvIHByZXZlbnQgSG9uby9WaXRlJ3MgU1BBIGZhbGxiYWNrLlxuICAgICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgICAvLyBBZGQgbWlkZGxld2FyZSB0byBpbnRlcmNlcHQgNDA0cyBvbiB3b3JrZmxvdyByb3V0ZXMgYmVmb3JlIFZpdGUncyBTUEEgZmFsbGJhY2tcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgICAgICAgLy8gT25seSBoYW5kbGUgd29ya2Zsb3cgd2ViaG9vayByb3V0ZXNcbiAgICAgICAgICAgIGlmICghcmVxLnVybD8uc3RhcnRzV2l0aCgnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxLycpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFdyYXAgd3JpdGVIZWFkIHRvIGVuc3VyZSB3ZSBzZW5kIGVtcHR5IGJvZHkgZm9yIDQwNHNcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsV3JpdGVIZWFkID0gcmVzLndyaXRlSGVhZDtcbiAgICAgICAgICAgIHJlcy53cml0ZUhlYWQgPSBmdW5jdGlvbiAodGhpczogdHlwZW9mIHJlcywgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJyA/IGFyZ3NbMF0gOiAyMDA7XG5cbiAgICAgICAgICAgICAgLy8gTk9URTogV29ya2Fyb3VuZCBiZWNhdXNlIE5pdHJvIHBhc3NlcyA0MDQgcmVxdWVzdHMgdG8gdGhlIHZpdGUgdG8gaGFuZGxlLlxuICAgICAgICAgICAgICAvLyBDYXVzZXMgYHdlYmhvb2sgcm91dGUgd2l0aCBpbnZhbGlkIHRva2VuYCB0ZXN0IHRvIGZhaWwuXG4gICAgICAgICAgICAgIC8vIEZvciA0MDRzIG9uIHdvcmtmbG93IHJvdXRlcywgZW5zdXJlIHdlJ3JlIHNlbmRpbmcgdGhlIHJpZ2h0IGhlYWRlcnNcbiAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIC8vIFNldCBjb250ZW50LWxlbmd0aCB0byAwIHRvIHByZXZlbnQgVml0ZSBmcm9tIG92ZXJyaWRpbmdcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICcwJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gQ29tcGxleCBvdmVybG9hZCBzaWduYXR1cmVcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsV3JpdGVIZWFkLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSBhcyBhbnk7XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbih7XG4gICAgICBidWlsZGVyOiAoKSA9PiBidWlsZGVyLFxuICAgICAgZW5xdWV1ZSxcbiAgICB9KSxcbiAgXTtcbn1cbiJdfQ==
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0MsT0FBTyxXQUFXLE1BQU0sWUFBWSxDQUFDO0FBRXJDLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBdUI7SUFDOUMsSUFBSSxPQUFxQixDQUFDO0lBQzFCLElBQUksUUFBMkIsQ0FBQztJQUNoQyxJQUFJLGFBQXFCLENBQUM7SUFDMUIsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUVuQyxzRUFBc0U7SUFDdEUsb0ZBQW9GO0lBQ3BGLE1BQU0sbUJBQW1CLEdBQVc7UUFDbEMsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPO1lBQ3pCLHlEQUF5RDtZQUN6RCxnRUFBZ0U7WUFDaEUsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDOUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBT1osQ0FBQztZQUNkLE9BQU8sU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRCxDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU87UUFDTCxtQkFBbUI7UUFDbkI7WUFDRSxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtvQkFDdEIsa0RBQWtEO29CQUNsRCxhQUFhLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQ3BFLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHO3dCQUN2QixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUTt3QkFDekIsR0FBRyxPQUFPO3dCQUNWLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7b0JBQ0YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUN0QixRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUNqQixPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0Y7WUFDRCxLQUFLLENBQUMsUUFBUTtnQkFDWixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ3ZCLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQ3JCLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxnR0FBZ0c7WUFDaEcsOEZBQThGO1lBQzlGLGVBQWUsQ0FBQyxNQUFNO2dCQUNwQixpRkFBaUY7Z0JBQ2pGLE9BQU8sR0FBRyxFQUFFO29CQUNWLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTt3QkFDeEMsc0NBQXNDO3dCQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDOzRCQUN0RCxPQUFPLElBQUksRUFBRSxDQUFDO3dCQUNoQixDQUFDO3dCQUVELHVEQUF1RDt3QkFDdkQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO3dCQUN4QyxHQUFHLENBQUMsU0FBUyxHQUFHLFVBQTRCLEdBQUcsSUFBVzs0QkFDeEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzs0QkFFL0QsNEVBQTRFOzRCQUM1RSwwREFBMEQ7NEJBQzFELHNFQUFzRTs0QkFDdEUsSUFBSSxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUM7Z0NBQ3ZCLDBEQUEwRDtnQ0FDMUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDdkMsQ0FBQzs0QkFFRCxnREFBZ0Q7NEJBQ2hELE9BQU8saUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDN0MsQ0FBUSxDQUFDO3dCQUVULElBQUksRUFBRSxDQUFDO29CQUNULENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUNELHVCQUF1QixDQUFDO1lBQ3RCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPO1lBQ3RCLE9BQU87U0FDUixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVCdWlsZFF1ZXVlIH0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgeyB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbiB9IGZyb20gJ0B3b3JrZmxvdy92aXRlJztcbmltcG9ydCB0eXBlIHsgTml0cm8gfSBmcm9tICduaXRyby90eXBlcyc7XG5pbXBvcnQgdHlwZSB7fSBmcm9tICduaXRyby92aXRlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBUcmFuc2Zvcm1SZXN1bHQgfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IExvY2FsQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgbml0cm9Nb2R1bGUgZnJvbSAnLi9pbmRleC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvdyhvcHRpb25zPzogTW9kdWxlT3B0aW9ucyk6IFBsdWdpbltdIHtcbiAgbGV0IGJ1aWxkZXI6IExvY2FsQnVpbGRlcjtcbiAgbGV0IGRldk5pdHJvOiBOaXRybyB8IHVuZGVmaW5lZDtcbiAgbGV0IG5pdHJvQnVpbGREaXI6IHN0cmluZztcbiAgY29uc3QgZW5xdWV1ZSA9IGNyZWF0ZUJ1aWxkUXVldWUoKTtcblxuICAvLyBDcmVhdGUgYSBsYXp5IHRyYW5zZm9ybSBwbHVnaW4gdGhhdCBleGNsdWRlcyBOaXRybyBidWlsZCBhcnRpZmFjdHMuXG4gIC8vIFRoZSBleGNsdXNpb24gcGF0aCBpcyBzZXQgZHVyaW5nIG5pdHJvIHNldHVwLCBzbyB3ZSBuZWVkIHRvIGRlZmVyIHBsdWdpbiBjcmVhdGlvblxuICBjb25zdCBsYXp5VHJhbnNmb3JtUGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogJ3dvcmtmbG93OnRyYW5zZm9ybScsXG4gICAgdHJhbnNmb3JtKGNvZGUsIGlkLCBvcHRpb25zKSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgYWN0dWFsIHRyYW5zZm9ybSBwbHVnaW4gd2l0aCBleGNsdXNpb25cbiAgICAgIC8vIG5pdHJvQnVpbGREaXIgaXMgc2V0IGR1cmluZyBuaXRybyBzZXR1cCBiZWZvcmUgdHJhbnNmb3JtcyBydW5cbiAgICAgIGNvbnN0IHBsdWdpbiA9IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luKHtcbiAgICAgICAgZXhjbHVkZTogbml0cm9CdWlsZERpciA/IFtuaXRyb0J1aWxkRGlyXSA6IFtdLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBwbHVnaW4udHJhbnNmb3JtIGFzXG4gICAgICAgIHwgKChcbiAgICAgICAgICAgIHRoaXM6IHVua25vd24sXG4gICAgICAgICAgICBjb2RlOiBzdHJpbmcsXG4gICAgICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICAgICAgb3B0aW9ucz86IHsgc3NyPzogYm9vbGVhbiB9XG4gICAgICAgICAgKSA9PiBUcmFuc2Zvcm1SZXN1bHQgfCBQcm9taXNlPFRyYW5zZm9ybVJlc3VsdD4pXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybT8uY2FsbCh0aGlzLCBjb2RlLCBpZCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW1xuICAgIGxhenlUcmFuc2Zvcm1QbHVnaW4sXG4gICAge1xuICAgICAgbmFtZTogJ3dvcmtmbG93Om5pdHJvJyxcbiAgICAgIG5pdHJvOiB7XG4gICAgICAgIHNldHVwOiAobml0cm86IE5pdHJvKSA9PiB7XG4gICAgICAgICAgLy8gQ2FwdHVyZSB0aGUgTml0cm8gYnVpbGQgZGlyZWN0b3J5IGZvciBleGNsdXNpb25cbiAgICAgICAgICBuaXRyb0J1aWxkRGlyID0gYCR7bml0cm8ub3B0aW9ucy5idWlsZERpci5yZXBsYWNlKC9bXFxcXC9dKyQvLCAnJyl9L2A7XG4gICAgICAgICAgbml0cm8ub3B0aW9ucy53b3JrZmxvdyA9IHtcbiAgICAgICAgICAgIC4uLm5pdHJvLm9wdGlvbnMud29ya2Zsb3csXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgX3ZpdGU6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICAgIGRldk5pdHJvID0gbml0cm87XG4gICAgICAgICAgICBidWlsZGVyID0gbmV3IExvY2FsQnVpbGRlcihuaXRybyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuaXRyb01vZHVsZS5zZXR1cChuaXRybyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXN5bmMgYnVpbGRFbmQoKSB7XG4gICAgICAgIGNvbnN0IG5pdHJvID0gZGV2Tml0cm87XG4gICAgICAgIGRldk5pdHJvID0gdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBuaXRybz8uY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBiZWNhdXNlIE5pdHJvIHBhc3NlcyB0aGUgNDA0IHJlcXVlc3RzIHRvIHRoZSBkZXYgc2VydmVyIHRvIGhhbmRsZS5cbiAgICAgIC8vIEZvciB3b3JrZmxvdyByb3V0ZXMsIHdlIG92ZXJyaWRlIHRvIHNlbmQgYW4gZW1wdHkgYm9keSB0byBwcmV2ZW50IEhvbm8vVml0ZSdzIFNQQSBmYWxsYmFjay5cbiAgICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXIpIHtcbiAgICAgICAgLy8gQWRkIG1pZGRsZXdhcmUgdG8gaW50ZXJjZXB0IDQwNHMgb24gd29ya2Zsb3cgcm91dGVzIGJlZm9yZSBWaXRlJ3MgU1BBIGZhbGxiYWNrXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgc2VydmVyLm1pZGRsZXdhcmVzLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgICAgICAgIC8vIE9ubHkgaGFuZGxlIHdvcmtmbG93IHdlYmhvb2sgcm91dGVzXG4gICAgICAgICAgICBpZiAoIXJlcS51cmw/LnN0YXJ0c1dpdGgoJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS8nKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXcmFwIHdyaXRlSGVhZCB0byBlbnN1cmUgd2Ugc2VuZCBlbXB0eSBib2R5IGZvciA0MDRzXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFdyaXRlSGVhZCA9IHJlcy53cml0ZUhlYWQ7XG4gICAgICAgICAgICByZXMud3JpdGVIZWFkID0gZnVuY3Rpb24gKHRoaXM6IHR5cGVvZiByZXMsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSB0eXBlb2YgYXJnc1swXSA9PT0gJ251bWJlcicgPyBhcmdzWzBdIDogMjAwO1xuXG4gICAgICAgICAgICAgIC8vIE5PVEU6IFdvcmthcm91bmQgYmVjYXVzZSBOaXRybyBwYXNzZXMgNDA0IHJlcXVlc3RzIHRvIHRoZSB2aXRlIHRvIGhhbmRsZS5cbiAgICAgICAgICAgICAgLy8gQ2F1c2VzIGB3ZWJob29rIHJvdXRlIHdpdGggaW52YWxpZCB0b2tlbmAgdGVzdCB0byBmYWlsLlxuICAgICAgICAgICAgICAvLyBGb3IgNDA0cyBvbiB3b3JrZmxvdyByb3V0ZXMsIGVuc3VyZSB3ZSdyZSBzZW5kaW5nIHRoZSByaWdodCBoZWFkZXJzXG4gICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAvLyBTZXQgY29udGVudC1sZW5ndGggdG8gMCB0byBwcmV2ZW50IFZpdGUgZnJvbSBvdmVycmlkaW5nXG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCAnMCcpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIENvbXBsZXggb3ZlcmxvYWQgc2lnbmF0dXJlXG4gICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFdyaXRlSGVhZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gYXMgYW55O1xuXG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0sXG4gICAgd29ya2Zsb3dIb3RVcGRhdGVQbHVnaW4oe1xuICAgICAgYnVpbGRlcjogKCkgPT4gYnVpbGRlcixcbiAgICAgIGVucXVldWUsXG4gICAgfSksXG4gIF07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/nitro",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.39",
|
|
4
4
|
"description": "Nitro integration for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
"@swc/core": "1.15.3",
|
|
25
25
|
"exsolve": "1.0.8",
|
|
26
26
|
"pathe": "2.0.3",
|
|
27
|
-
"@workflow/builders": "5.0.0-beta.
|
|
28
|
-
"@workflow/core": "5.0.0-beta.
|
|
29
|
-
"@workflow/rollup": "5.0.0-beta.
|
|
27
|
+
"@workflow/builders": "5.0.0-beta.39",
|
|
28
|
+
"@workflow/core": "5.0.0-beta.39",
|
|
29
|
+
"@workflow/rollup": "5.0.0-beta.39",
|
|
30
30
|
"@workflow/swc-plugin": "5.0.0-beta.5",
|
|
31
|
-
"@workflow/vite": "5.0.0-beta.
|
|
32
|
-
"@workflow/web": "5.0.0-beta.
|
|
31
|
+
"@workflow/vite": "5.0.0-beta.39",
|
|
32
|
+
"@workflow/web": "5.0.0-beta.39"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "22.19.0",
|