@workflow/nitro 5.0.0-beta.10 → 5.0.0-beta.12

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,aAAa,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,YAAY,EAAE,aAAa,EAAE,CAAC;;;6BAoBT,KAAK;;AAF1B,wBAoQwB"}
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;;;6BAoBT,KAAK;;AAF1B,wBAwQwB"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
+ import { createRequire } from 'node:module';
1
2
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { fileURLToPath } from 'node:url';
3
+ import { fileURLToPath, pathToFileURL } from 'node:url';
3
4
  import { WORKFLOW_QUEUE_TRIGGER } from '@workflow/builders';
4
5
  import { workflowTransformPlugin } from '@workflow/rollup';
5
6
  import { join } from 'pathe';
@@ -95,7 +96,7 @@ export default {
95
96
  // packages/<name>/. Bail out early on non-workflow imports
96
97
  // so we don't intercept the rest of the resolution chain.
97
98
  const isWorkflowPkg = /^@?workflow(\/|$)/.test(source) ||
98
- /[\\/]packages[\\/](workflow|core|serde|errors|utils|builders|rollup|ai|world|world-local|world-vercel|world-postgres|world-testing|cli|next|nitro|nuxt|vite|vitest|web|web-shared|astro|sveltekit|nest)[\\/]/.test(source);
99
+ /[\\/]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);
99
100
  if (!isWorkflowPkg)
100
101
  return null;
101
102
  // Resolve via other resolvers, skipping ourselves so we
@@ -180,6 +181,9 @@ export default {
180
181
  }
181
182
  });
182
183
  }
184
+ if (nitro.options.dev) {
185
+ addDashboardHandler(nitro);
186
+ }
183
187
  addVirtualHandler(nitro, '/.well-known/workflow/v1/webhook/:token', 'workflow/webhook.mjs');
184
188
  // V2: single combined handler for both workflow and step execution.
185
189
  // The step registrations are imported as side effects by the combined
@@ -239,6 +243,71 @@ export default {
239
243
  }
240
244
  },
241
245
  };
246
+ const DASHBOARD_VIRTUAL_ID = '#workflow/dashboard-handler';
247
+ function addDashboardHandler(nitro) {
248
+ const route = '/_workflow';
249
+ nitro.options.handlers.push({ route, handler: DASHBOARD_VIRTUAL_ID });
250
+ // Resolve `@workflow/web/server` relative to this module so consumers don't
251
+ // need a direct dependency on `@workflow/web`. The path is inlined into the
252
+ // virtual handler as a file:// URL so Node can `import()` it at runtime
253
+ // regardless of where the generated Nitro bundle ends up.
254
+ const require_ = createRequire(import.meta.url);
255
+ let webServerUrl;
256
+ try {
257
+ webServerUrl = pathToFileURL(require_.resolve('@workflow/web/server')).href;
258
+ }
259
+ catch {
260
+ webServerUrl = '@workflow/web/server';
261
+ }
262
+ const handlerSource = /* js */ `
263
+ const __workflowWebServerUrl = ${JSON.stringify(webServerUrl)};
264
+ let serverPromise = null;
265
+ async function getDashboardUrl() {
266
+ if (!serverPromise) {
267
+ serverPromise = (async () => {
268
+ const { startServer } = await import(/* @vite-ignore */ /* webpackIgnore: true */ __workflowWebServerUrl);
269
+ const server = await startServer(0);
270
+ const address = server.address();
271
+ const port = typeof address === 'object' && address ? address.port : 3456;
272
+ return 'http://localhost:' + port;
273
+ })().catch((error) => {
274
+ serverPromise = null;
275
+ throw error;
276
+ });
277
+ }
278
+ return serverPromise;
279
+ }
280
+ `;
281
+ if (!nitro.routing) {
282
+ nitro.options.virtual[DASHBOARD_VIRTUAL_ID] = /* js */ `
283
+ import { fromWebHandler } from "h3";
284
+ ${handlerSource}
285
+ export default fromWebHandler(async () => {
286
+ try {
287
+ const url = await getDashboardUrl();
288
+ return Response.redirect(url, 302);
289
+ } catch (error) {
290
+ console.error('Failed to start workflow dashboard:', error);
291
+ return new Response('Failed to start workflow dashboard: ' + error.message, { status: 500 });
292
+ }
293
+ });
294
+ `;
295
+ }
296
+ else {
297
+ nitro.options.virtual[DASHBOARD_VIRTUAL_ID] = /* js */ `
298
+ ${handlerSource}
299
+ export default async () => {
300
+ try {
301
+ const url = await getDashboardUrl();
302
+ return Response.redirect(url, 302);
303
+ } catch (error) {
304
+ console.error('Failed to start workflow dashboard:', error);
305
+ return new Response('Failed to start workflow dashboard: ' + error.message, { status: 500 });
306
+ }
307
+ };
308
+ `;
309
+ }
310
+ }
242
311
  function addVirtualHandler(nitro, route, buildPath) {
243
312
  nitro.options.handlers.push({
244
313
  route,
@@ -419,4 +488,4 @@ export default fromWebHandler(() => new Response("Manifest not found", { status:
419
488
  writeFileSync(handlerPath, fallback);
420
489
  }
421
490
  }
422
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs1RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sWUFBWSxHQUFJLEtBQThDLENBQUMsSUFBSTtRQUN2RSxFQUFFLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxlQUFlO0lBQ2IsSUFBSSxFQUFFLGdCQUFnQjtJQUN0QixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQVk7UUFDdEIsTUFBTSxjQUFjLEdBQ2xCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBRTFELGlGQUFpRjtRQUNqRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVsRSx1RUFBdUU7UUFDdkUsb0ZBQW9GO1FBQ3BGLEtBQUssQ0FBQyxL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QUlqRDtZQUNLLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7Ozs7Q0FJMUQsQ0FBQztRQUNFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLCtCQUErQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzdCLENBQUMsQ0FBQzs7Q0FFUDtZQUNLLENBQUMsQ0FBQztDQUNQLENBQUM7UUFDRSxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBXT1JLRkxPV19RVUVVRV9UUklHR0VSIH0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgdHlwZSB7IE5pdHJvLCBOaXRyb01vZHVsZSwgUm9sbHVwQ29uZmlnIH0gZnJvbSAnbml0cm8vdHlwZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IExvY2FsQnVpbGRlciwgVmVyY2VsQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9O1xuXG4vKipcbiAqIERldGVjdCB3aGV0aGVyIHRoZSBOaXRybyBpbnN0YW5jZSBpcyB2Mi5cbiAqIE5ld2VyIE5pdHJvIHJlbGVhc2VzIChib3RoIHYyIGFuZCB2MykgZXhwb3NlIGBuaXRyby5tZXRhLm1ham9yVmVyc2lvbmAuXG4gKiBGYWxsIGJhY2sgdG8gYCFuaXRyby5yb3V0aW5nYCAob25seSBwcmVzZW50IGluIHYzKykgZm9yIG9sZGVyIE5pdHJvIHYyXG4gKiB2ZXJzaW9ucyB0aGF0IGRvbid0IGhhdmUgYG1ham9yVmVyc2lvbmAgeWV0IChlLmcuIE51eHQgdXNlcnMgb24gYW4gb2xkZXJcbiAqIG5pdHJvcGFjaykuXG4gKi9cbmZ1bmN0aW9uIGlzTml0cm9WMihuaXRybzogTml0cm8pOiBib29sZWFuIHtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gKG5pdHJvIGFzIHsgbWV0YT86IHsgbWFqb3JWZXJzaW9uPzogbnVtYmVyIH0gfSkubWV0YVxuICAgID8ubWFqb3JWZXJzaW9uO1xuICBpZiAobWFqb3JWZXJzaW9uICE9IG51bGwpIHtcbiAgICByZXR1cm4gbWFqb3JWZXJzaW9uID09PSAyO1xuICB9XG4gIHJldHVybiAhbml0cm8ucm91dGluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnd29ya2Zsb3cvbml0cm8nLFxuICBhc3luYyBzZXR1cChuaXRybzogTml0cm8pIHtcbiAgICBjb25zdCBpc1ZlcmNlbERlcGxveSA9XG4gICAgICAhbml0cm8ub3B0aW9ucy5kZXYgJiYgbml0cm8ub3B0aW9ucy5wcmVzZXQgPT09ICd2ZXJjZWwnO1xuXG4gICAgLy8gUHJlLWJ1aWx0IHdvcmtmbG93IGJ1bmRsZXMgZGlyZWN0b3J5IC0gbXVzdCBiZSBleGNsdWRlZCBmcm9tIHJlLXRyYW5zZm9ybWF0aW9uXG4gICAgY29uc3Qgd29ya2Zsb3dCdWlsZERpciA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyk7XG5cbiAgICAvLyBBZGQgdHJhbnNmb3JtIHBsdWdpbiBhdCB0aGUgQkVHSU5OSU5HIHRvIHJ1biBiZWZvcmUgb3RoZXIgdHJhbnNmb3Jtc1xuICAgIC8vIChlc3BlY2lhbGx5IGJlZm9yZSBjbGFzcyBwcm9wZXJ0eSB0cmFuc2Zvcm1zIHRoYXQgcmVuYW1lIGNsYXNzZXMgbGlrZSBfQ2xhc3NOYW1lKVxuICAgIG5pdHJvLmhvb2tzLmhvb2soJ3JvbGx1cDpiZWZvcmUnLCAoX25pdHJvOiBOaXRybywgY29uZmlnOiBSb2xsdXBDb25maWcpID0+IHtcbiAgICAgIChjb25maWcucGx1Z2lucyBhcyBBcnJheTx1bmtub3duPikudW5zaGlmdChcbiAgICAgICAgd29ya2Zsb3dUcmFuc2Zvcm1QbHVnaW4oe1xuICAgICAgICAgIC8vIEV4Y2x1ZGUgcHJlLWJ1aWx0IHdvcmtmbG93IGJ1bmRsZXMgZnJvbSByZS10cmFuc2Zvcm1hdGlvblxuICAgICAgICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHByb2Nlc3NlZCBhbmQgcmUtcHJvY2Vzc2luZyBjYXVzZXMgaXNzdWVzIGxpa2VcbiAgICAgICAgICAvLyB1bmRlZmluZWQgY2xhc3MgcmVmZXJlbmNlcyB3aGVuIE5pdHJvJ3MgYnVuZGxlciByZW5hbWVzIHZhcmlhYmxlc1xuICAgICAgICAgIGV4Y2x1ZGU6IFt3b3JrZmxvd0J1aWxkRGlyXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBOT1RFOiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgZGVidWcgdW5lbnYgbW9ja1xuICAgIGlmICghbml0cm8ub3B0aW9ucy53b3JrZmxvdz8uX3ZpdGUpIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMuYWxpYXNbJ2RlYnVnJ10gPz89ICdkZWJ1Zyc7XG4gICAgfVxuXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMuZGV2KSB7XG4gICAgICBjb25zdCB3b3JrZmxvd0J1aWxkR2xvYiA9IGAke2pvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyl9LyoqYDtcbiAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zIHx8PSB7fTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nSWdub3JlZCA9IG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQ7XG4gICAgICBpZiAoIWV4aXN0aW5nSWdub3JlZCkge1xuICAgICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkID0gW3dvcmtmbG93QnVpbGRHbG9iXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ0lnbm9yZWQpKSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQgPSBbXG4gICAgICAgICAgLi4uZXhpc3RpbmdJZ25vcmVkLFxuICAgICAgICAgIHdvcmtmbG93QnVpbGRHbG9iLFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy53YXRjaE9wdGlvbnMuaWdub3JlZCA9IFtcbiAgICAgICAgICBleGlzdGluZ0lnbm9yZWQsXG4gICAgICAgICAgd29ya2Zsb3dCdWlsZEdsb2IsXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gZGV2IG1vZGUsIGZvcmNlIHdvcmtmbG93IFNESyBwYWNrYWdlcyB0byBiZSBidW5kbGVkIGJ5IE5pdHJvJ3NcbiAgICAvLyBSb2xsdXAgcmF0aGVyIHRoYW4gZXh0ZXJuYWxpemVkLiBUaGlzIGVuc3VyZXMgdGhlIFNXQyB0cmFuc2Zvcm1cbiAgICAvLyBwbHVnaW4gcHJvY2Vzc2VzIGZpbGVzIGNvbnRhaW5pbmcgd29ya2Zsb3cgcGF0dGVybnMgKGxpa2VcbiAgICAvLyBAd29ya2Zsb3cvY29yZS9kaXN0L3J1bnRpbWUvcnVuLmpzKSBhbmQgYWRkcyB0aGUgY2xhc3NJZFxuICAgIC8vIHJlZ2lzdHJhdGlvbiBJSUZFcyBuZWVkZWQgZm9yIHNlcmlhbGl6YXRpb24uIFdpdGhvdXQgdGhpcywgc2VyZGVcbiAgICAvLyBjbGFzc2VzIGZyb20gbnBtIHBhY2thZ2VzIChsaWtlIGBSdW5gKSB3b3VsZCBiZSBleHRlcm5hbGl6ZWQsIHRoZVxuICAgIC8vIFNXQyB0cmFuc2Zvcm0gd291bGQgbmV2ZXIgZmlyZSBvbiB0aGVtLCBhbmQgc2VyaWFsaXphdGlvbiB3b3VsZFxuICAgIC8vIGZhaWwgd2l0aCBcIm11c3QgaGF2ZSBhIHN0YXRpYyBjbGFzc0lkIHByb3BlcnR5XCIuXG4gICAgLy9cbiAgICAvLyBXZSB1c2UgYSBSb2xsdXAgcmVzb2x2ZUlkIGhvb2sgKGFkZGVkIEJFRk9SRSB0aGUgZXh0ZXJuYWxpemF0aW9uXG4gICAgLy8gcGx1Z2luKSB0aGF0IGludGVyY2VwdHMgd29ya2Zsb3cgcGFja2FnZSBpbXBvcnRzIGFuZCBtYXJrcyB0aGVtXG4gICAgLy8gYXMgbm9uLWV4dGVybmFsLiBUaGlzIGlzIG1vcmUgdGFyZ2V0ZWQgdGhhbiBgbm9FeHRlcm5hbHMgPSB0cnVlYFxuICAgIC8vIHdoaWNoIHdvdWxkIGJ1bmRsZSBBTEwgZGVwZW5kZW5jaWVzIGFuZCBjYXVzZSBURFogZXJyb3JzIGZyb21cbiAgICAvLyBjaXJjdWxhciBpbXBvcnRzIGluIHBhY2thZ2VzIGxpa2UgdnVlLWJ1bmRsZS1yZW5kZXJlci9oMy5cbiAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soXG4gICAgICAgICdyb2xsdXA6YmVmb3JlJyxcbiAgICAgICAgKF9uaXRybzogTml0cm8sIGNvbmZpZzogUm9sbHVwQ29uZmlnKSA9PiB7XG4gICAgICAgICAgKGNvbmZpZy5wbHVnaW5zIGFzIEFycmF5PHVua25vd24+KS51bnNoaWZ0KHtcbiAgICAgICAgICAgIG5hbWU6ICd3b3JrZmxvdzpmb3JjZS1pbmxpbmUnLFxuICAgICAgICAgICAgLy8gYG9yZGVyOiAncHJlJ2AgaXMgcmVxdWlyZWQ6IE5pdHJvJ3MgYG5pdHJvOmV4dGVybmFsc2AgcGx1Z2luXG4gICAgICAgICAgICAvLyB1c2VzIGBvcmRlcjogJ3ByZSdgIGZvciBpdHMgcmVzb2x2ZUlkIGhvb2sgYW5kIHNwcmVhZHMgb3VyXG4gICAgICAgICAgICAvLyByZXNvbHV0aW9uIHJlc3VsdCB3aGlsZSBmb3JjaW5nIGBleHRlcm5hbDogdHJ1ZWAuIFdpdGhvdXRcbiAgICAgICAgICAgIC8vIGBwcmVgIGhlcmUsIG91ciBgZXh0ZXJuYWw6IGZhbHNlYCBkZWNpc2lvbiBnZXRzIG92ZXJ3cml0dGVuXG4gICAgICAgICAgICAvLyBhbmQgYEB3b3JrZmxvdy8qYCBpbXBvcnRzIGVuZCB1cCBleHRlcm5hbGl6ZWQgaW4gdGhlIGRldlxuICAgICAgICAgICAgLy8gYnVuZGxlIOKAlCB3aGljaCBtZWFucyB0aGUgU1dDLWluamVjdGVkIGBzdGF0aWMgY2xhc3NJZGAgSUlGRVxuICAgICAgICAgICAgLy8gaW4gKGUuZy4pIGBAd29ya2Zsb3cvY29yZS9kaXN0L3J1bnRpbWUvcnVuLmpzYCBpcyBuZXZlclxuICAgICAgICAgICAgLy8gYXBwbGllZCwgYW5kIHN0ZXAgcmV0dXJuIHZhbHVlcyB0aGF0IGluY2x1ZGUgYFJ1bmBcbiAgICAgICAgICAgIC8vIGluc3RhbmNlcyBmYWlsIHRvIHNlcmlhbGl6ZSBhdCBydW50aW1lLlxuICAgICAgICAgICAgcmVzb2x2ZUlkOiB7XG4gICAgICAgICAgICAgIG9yZGVyOiAncHJlJyxcbiAgICAgICAgICAgICAgYXN5bmMgaGFuZGxlcihcbiAgICAgICAgICAgICAgICB0aGlzOiB7IHJlc29sdmU6IEZ1bmN0aW9uIH0sXG4gICAgICAgICAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgaW1wb3J0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7IHNraXBTZWxmPzogYm9vbGVhbiB9XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICghaW1wb3J0ZXIpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHdvcmtmbG93IHBhY2thZ2Ugc3BlY2lmaWVycyBPUiBkaXJlY3QgcGF0aHMgaW50b1xuICAgICAgICAgICAgICAgIC8vIHBhY2thZ2VzLzxuYW1lPi8uIEJhaWwgb3V0IGVhcmx5IG9uIG5vbi13b3JrZmxvdyBpbXBvcnRzXG4gICAgICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgaW50ZXJjZXB0IHRoZSByZXN0IG9mIHRoZSByZXNvbHV0aW9uIGNoYWluLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzV29ya2Zsb3dQa2cgPVxuICAgICAgICAgICAgICAgICAgL15AP3dvcmtmbG93KFxcL3wkKS8udGVzdChzb3VyY2UpIHx8XG4gICAgICAgICAgICAgICAgICAvW1xcXFwvXXBhY2thZ2VzW1xcXFwvXSh3b3JrZmxvd3xjb3JlfHNlcmRlfGVycm9yc3x1dGlsc3xidWlsZGVyc3xyb2xsdXB8YWl8d29ybGR8d29ybGQtbG9jYWx8d29ybGQtdmVyY2VsfHdvcmxkLXBvc3RncmVzfHdvcmxkLXRlc3Rpbmd8Y2xpfG5leHR8bml0cm98bnV4dHx2aXRlfHZpdGVzdHx3ZWJ8d2ViLXNoYXJlZHxhc3Ryb3xzdmVsdGVraXR8bmVzdClbXFxcXC9dLy50ZXN0KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1dvcmtmbG93UGtnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSZXNvbHZlIHZpYSBvdGhlciByZXNvbHZlcnMsIHNraXBwaW5nIG91cnNlbHZlcyBzbyB3ZVxuICAgICAgICAgICAgICAgIC8vIGdldCBhIHBhdGguIFdlIGRvbid0IGdhdGUgb24gYHJlc29sdmVkLmV4dGVybmFsYCBiZWNhdXNlXG4gICAgICAgICAgICAgICAgLy8gYG5pdHJvOmV4dGVybmFsc2Agc3ByZWFkcyBvdXIgcmVzdWx0IGFuZCBvdmVycmlkZXNcbiAgICAgICAgICAgICAgICAvLyBgZXh0ZXJuYWw6IHRydWVgIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3ZSByZXR1cm4g4oCUIHdlIHdhbnRcbiAgICAgICAgICAgICAgICAvLyB0byB3aW4gdGhhdCByYWNlIGJ5IHJldHVybmluZyBmaXJzdCB1bmRlciBgb3JkZXI6ICdwcmUnYC5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZShzb3VyY2UsIGltcG9ydGVyLCB7XG4gICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgc2tpcFNlbGY6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkSWQgPSByZXNvbHZlZC5pZDtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCBmaWxlOi8vIHByb3RvY29sIGlmIHByZXNlbnQg4oCUIFJvbGx1cCBuZWVkcyBhIHBsYWluXG4gICAgICAgICAgICAgICAgLy8gZmlsZXN5c3RlbSBwYXRoIHRvIGxvYWQgdGhlIG1vZHVsZS4gYGZpbGVVUkxUb1BhdGhgXG4gICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5IGhhbmRsZXMgV2luZG93cyBwYXRocyAoZS5nLiwgZmlsZTovLy9DOi8uLi5cbiAgICAgICAgICAgICAgICAvLyAtPiBDOlxcLi4uKSBhbmQgcGVyY2VudC1kZWNvZGluZy5cbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRJZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkSWQgPSBmaWxlVVJMVG9QYXRoKHJlc29sdmVkSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogcmVzb2x2ZWRJZCwgZXh0ZXJuYWw6IGZhbHNlIH07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCB0c0NvbmZpZyBwbHVnaW5cbiAgICBpZiAobml0cm8ub3B0aW9ucy53b3JrZmxvdz8udHlwZXNjcmlwdFBsdWdpbikge1xuICAgICAgbml0cm8ub3B0aW9ucy50eXBlc2NyaXB0LnRzQ29uZmlnIHx8PSB7fTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMgfHw9IHt9O1xuICAgICAgbml0cm8ub3B0aW9ucy50eXBlc2NyaXB0LnRzQ29uZmlnLmNvbXBpbGVyT3B0aW9ucy5wbHVnaW5zIHx8PSBbXTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMucGx1Z2lucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93JyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5pdHJvIHYyIFZlcmNlbCBkZXBsb3k6IGtlZXAgdGhlIGxlZ2FjeSBCdWlsZCBPdXRwdXQgQVBJIHBhdGggdGhhdFxuICAgIC8vIGJ1aWxkcyB0aGUgd29ya2Zsb3cgZnVuY3Rpb25zIHN0YW5kYWxvbmUgYW5kIHN0aXRjaGVzIHRoZSByb3V0ZXMgaW50b1xuICAgIC8vIGAudmVyY2VsL291dHB1dC9jb25maWcuanNvbmAuIFRoaXMgcGF0aCBpcyBpbmRlcGVuZGVudCBvZiBuaXRybydzIG93blxuICAgIC8vIGJ1bmRsZSBhbmQgaXMgb25seSB1c2VkIGZvciBuaXRyb3BhY2sgdjIgKGUuZy4gTnV4dCA0IHN0aWxsIHVzZXMgaXQpLlxuICAgIGNvbnN0IHVzZUxlZ2FjeVZlcmNlbEJ1aWxkID0gaXNWZXJjZWxEZXBsb3kgJiYgaXNOaXRyb1YyKG5pdHJvKTtcblxuICAgIGlmICh1c2VMZWdhY3lWZXJjZWxCdWlsZCkge1xuICAgICAgbml0cm8uaG9va3MuaG9vaygnY29tcGlsZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IG5ldyBWZXJjZWxCdWlsZGVyKG5pdHJvKS5idWlsZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTG9jYWwgZGV2L3Byb2QgYW5kIE5pdHJvIHYzIFZlcmNlbCBkZXBsb3kgc2hhcmUgdGhlIHNhbWUgcGF0aDpcbiAgICAvLyBidW5kbGUgdGhlIHdvcmtmbG93IHJvdXRlcyBpbnRvIG5pdHJvIGl0c2VsZiB2aWEgdmlydHVhbCBoYW5kbGVycy5cbiAgICAvLyBGb3IgVmVyY2VsIHYzIHdlIGFkZGl0aW9uYWxseSBjb25maWd1cmUgYGZ1bmN0aW9uUnVsZXNgIHNvIHRoZVxuICAgIC8vIHJvdXRlcyBnZXQgcXVldWUgdHJpZ2dlcnMgKyBleHRlbmRlZCBtYXhEdXJhdGlvbiB2aWEgdGhlIG5pdHJvXG4gICAgLy8gdmVyY2VsIHByZXNldC4gVGhpcyBsZXRzIHdvcmtmbG93IGhhbmRsZXJzIHVzZSBuaXRybyBmZWF0dXJlc1xuICAgIC8vIChzdG9yYWdlLCBkYXRhYmFzZSwgcnVudGltZSBjb25maWcsIHZpcnR1YWwgaW1wb3J0cywgZXRjLikuXG4gICAgaWYgKCF1c2VMZWdhY3lWZXJjZWxCdWlsZCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBMb2NhbEJ1aWxkZXIobml0cm8pO1xuICAgICAgbGV0IGlzSW5pdGlhbEJ1aWxkID0gdHJ1ZTtcblxuICAgICAgbml0cm8uaG9va3MuaG9vaygnYnVpbGQ6YmVmb3JlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgLy8gRm9yIHByb2Q6IHdyaXRlIHRoZSBtYW5pZmVzdCBoYW5kbGVyIGZpbGUgd2l0aCBpbmxpbmVkIGNvbnRlbnRcbiAgICAgICAgLy8gbm93IHRoYXQgdGhlIGJ1aWxkZXIgaGFzIGdlbmVyYXRlZCB0aGUgbWFuaWZlc3QuIFJvbGx1cCB3aWxsXG4gICAgICAgIC8vIGJ1bmRsZSB0aGlzIGZpbGUgaW50byB0aGUgY29tcGlsZWQgb3V0cHV0LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5pdHJvLm9wdGlvbnMuZGV2ICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUFVCTElDX01BTklGRVNUID09PSAnMSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgd3JpdGVNYW5pZmVzdEhhbmRsZXIobml0cm8pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQWxsb3dzIGZvciBITVIgLSBidXQgc2tpcCB0aGUgZmlyc3QgZGV2OnJlbG9hZCBzaW5jZSBidWlsZDpiZWZvcmUgYWxyZWFkeSByYW5cbiAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBuaXRyby5ob29rcy5ob29rKCdkZXY6cmVsb2FkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmIChpc0luaXRpYWxCdWlsZCkge1xuICAgICAgICAgICAgaXNJbml0aWFsQnVpbGQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gRHVyaW5nIGRldiwgZmlsZXMgbWF5IGJlIGFkZGVkL3JlbW92ZWQgd2hpbGUgdGhlIGJ1aWxkZXJcbiAgICAgICAgICAgIC8vIGlzIHJlYnVpbGRpbmcgKGUuZy4sIGR1cmluZyB0ZXN0IGNsZWFudXApLiBMb2cgdGhlIGVycm9yXG4gICAgICAgICAgICAvLyBidXQgZG9uJ3QgY3Jhc2gg4oCUIHRoZSBuZXh0IGZpbGUgY2hhbmdlIHdpbGwgdHJpZ2dlclxuICAgICAgICAgICAgLy8gYW5vdGhlciByZWJ1aWxkIHdpdGggdGhlIGNvcnJlY3QgZmlsZSBsaXN0LlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBXb3JrZmxvdyByZWJ1aWxkIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svOnRva2VuJyxcbiAgICAgICAgJ3dvcmtmbG93L3dlYmhvb2subWpzJ1xuICAgICAgKTtcblxuICAgICAgLy8gVjI6IHNpbmdsZSBjb21iaW5lZCBoYW5kbGVyIGZvciBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJlZ2lzdHJhdGlvbnMgYXJlIGltcG9ydGVkIGFzIHNpZGUgZWZmZWN0cyBieSB0aGUgY29tYmluZWRcbiAgICAgIC8vIGhhbmRsZXIg4oCUIG5vIHNlcGFyYXRlIHN0ZXAgcm91dGUgbmVlZGVkLlxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnLFxuICAgICAgICAnd29ya2Zsb3cvd29ya2Zsb3dzLm1qcydcbiAgICAgICk7XG5cbiAgICAgIC8vIE5pdHJvIHYzKyBWZXJjZWwgZGVwbG95OiBjb25maWd1cmUgZnVuY3Rpb24gcnVsZXMgZm9yIHRoZSBjb21iaW5lZFxuICAgICAgLy8gZmxvdyBoYW5kbGVyIHNvIGl0IGdldHMgdGhlIHF1ZXVlIHRyaWdnZXJzICsgbWF4IGR1cmF0aW9uIHRoYXQgdGhlXG4gICAgICAvLyB3b3JrZmxvdyBydW50aW1lIG5lZWRzLiBXb3JrZmxvdy1yZXF1aXJlZCBmaWVsZHMgKGBtYXhEdXJhdGlvbmAsXG4gICAgICAvLyBgZXhwZXJpbWVudGFsVHJpZ2dlcnNgLCBgcnVudGltZWAgd2hlbiBzZXQpIHRha2UgcHJlY2VkZW5jZSBvdmVyXG4gICAgICAvLyB1c2VyLXByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlc2Ugcm91dGVzOyB1bnJlbGF0ZWQgZmllbGRzIHRoZSB1c2VyXG4gICAgICAvLyBzZXRzIChlLmcuIGBtZW1vcnlgKSBwYXNzIHRocm91Z2ggdW50b3VjaGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFBhdHRlcm4ga2V5cyBtdXN0IG1hdGNoIHRoZSByb3V0ZSBwYXR0ZXJucyB0aGUgaGFuZGxlcnMgYXJlXG4gICAgICAvLyByZWdpc3RlcmVkIHdpdGggc28gbml0cm8gcmV1c2VzIHRoZSBzYW1lIGZ1bmN0aW9uIGRpcmVjdG9yeS5cbiAgICAgIC8vIFVzaW5nIGEgYHdlYmhvb2svKipgIGNhdGNoLWFsbCBoZXJlIHdvdWxkIGNyZWF0ZSBhIHNlY29uZFxuICAgICAgLy8gYHdlYmhvb2svWy4uLl0uZnVuY2AgbmV4dCB0byB0aGUgYHdlYmhvb2svW3Rva2VuXS5mdW5jYCB0aGF0XG4gICAgICAvLyBgYWRkVmlydHVhbEhhbmRsZXJgIHByb2R1Y2VzLlxuICAgICAgaWYgKGlzVmVyY2VsRGVwbG95KSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMudmVyY2VsID8/PSB7fTtcbiAgICAgICAgbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcyA/Pz0ge307XG5cbiAgICAgICAgY29uc3QgcnVudGltZSA9IG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnJ1bnRpbWU7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcztcblxuICAgICAgICBjb25zdCBmbG93UGF0aCA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdyc7XG4gICAgICAgIHJ1bGVzW2Zsb3dQYXRoXSA9IHtcbiAgICAgICAgICAuLi5ydWxlc1tmbG93UGF0aF0sXG4gICAgICAgICAgLi4uKHJ1bnRpbWUgJiYgeyBydW50aW1lIH0pLFxuICAgICAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgICAgICAvLyBWMiBjb21iaW5lZDogYSBzaW5nbGUgdHJpZ2dlciBjb3ZlcnMgYm90aCBgX193a2Zfd29ya2Zsb3dfKmBcbiAgICAgICAgICAvLyAod29ya2Zsb3cgb3JjaGVzdHJhdGlvbikgYW5kIGBfX3drZl9zdGVwXypgIChzdGVwIGV4ZWN1dGlvbiksXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHNhbWUgaGFuZGxlciBkaXNwYXRjaGVzIGJvdGguXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocnVudGltZSkge1xuICAgICAgICAgIGNvbnN0IHdlYmhvb2tQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rLzp0b2tlbic7XG4gICAgICAgICAgcnVsZXNbd2ViaG9va1BhdGhdID0geyAuLi5ydWxlc1t3ZWJob29rUGF0aF0sIHJ1bnRpbWUgfTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19QVUJMSUNfTUFOSUZFU1QgPT09ICcxJykge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJztcbiAgICAgICAgICAgIHJ1bGVzW21hbmlmZXN0UGF0aF0gPSB7IC4uLnJ1bGVzW21hbmlmZXN0UGF0aF0sIHJ1bnRpbWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgcHVibGljIEhUVFAgcm91dGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MVxuICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnKSB7XG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgbWFuaWZlc3QtZGF0YS5tanMgc28gcm9sbHVwIGNhbiByZXNvbHZlIHRoZVxuICAgICAgICAvLyBpbXBvcnQuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbCBtYW5pZmVzdCBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgaGFuZGxlciBmaWxlIHNvIHJvbGx1cCBjYW4gcmVzb2x2ZSB0aGUgcGF0aFxuICAgICAgICAvLyBkdXJpbmcgcHJvZCBjb21waWxhdGlvbi4gSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsXG4gICAgICAgIC8vIG1hbmlmZXN0IGNvbnRlbnQgYnkgd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIGlmICghbml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICBjb25zdCBkaXIgPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpO1xuICAgICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihkaXIsICdtYW5pZmVzdC1oYW5kbGVyLm1qcycpO1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBoYW5kbGVyUGF0aCxcbiAgICAgICAgICAgICdleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcXG4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNYW5pZmVzdEhhbmRsZXIobml0cm8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIE5pdHJvTW9kdWxlO1xuXG5mdW5jdGlvbiBhZGRWaXJ0dWFsSGFuZGxlcihuaXRybzogTml0cm8sIHJvdXRlOiBzdHJpbmcsIGJ1aWxkUGF0aDogc3RyaW5nKSB7XG4gIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7XG4gICAgcm91dGUsXG4gICAgaGFuZGxlcjogYCMke2J1aWxkUGF0aH1gLFxuICB9KTtcbiAgY29uc3QgaGFuZGxlckltcG9ydFBhdGggPSBKU09OLnN0cmluZ2lmeShcbiAgICBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsIGJ1aWxkUGF0aClcbiAgKTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAvLyBEZXYgbW9kZTogbG9hZCBnZW5lcmF0ZWQgd29ya2Zsb3cgYnVuZGxlcyBmcm9tIGRpc2sgYXQgcmVxdWVzdCB0aW1lLlxuICAgIC8vIFRoaXMga2VlcHMgYC5uaXRyby93b3JrZmxvdy8qLm1qc2Agb3V0IG9mIE5pdHJvJ3Mgb3duIGJ1bmRsZSBncmFwaCxcbiAgICAvLyB3aGljaCBhdm9pZHMgcmVidWlsZCBsb29wcyBhbmQgc3RhbGUgZGVwZW5kZW5jeSBncmFwaHMgZHVyaW5nIEhNUi5cbiAgICAvLyBDYWNoZS1idXN0IGJ5IGZpbGUgbXRpbWUgc28gZWFjaCBzdWNjZXNzZnVsIHJlYnVpbGQgbG9hZHMgZnJlc2ggY29kZS5cbiAgICBpZiAoIW5pdHJvLnJvdXRpbmcpIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICAgIGltcG9ydCB7IHN0YXRTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuICAgICAgY29uc3QgaGFuZGxlclBhdGggPSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICAgIGxldCBjdXJyZW50VmVyc2lvbiA9IFwiXCI7XG4gICAgICBsZXQgY3VycmVudEltcG9ydFBhdGggPSBcIlwiO1xuXG4gICAgICBhc3luYyBmdW5jdGlvbiBsb2FkUE9TVCgpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFN0cmluZyhzdGF0U3luYyhoYW5kbGVyUGF0aCkubXRpbWVNcyk7XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICBjdXJyZW50SW1wb3J0UGF0aCA9IHBhdGhUb0ZpbGVVUkwoaGFuZGxlclBhdGgpLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydChjdXJyZW50SW1wb3J0UGF0aCkpLlBPU1Q7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKGFzeW5jIChyZXF1ZXN0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IFBPU1QgPSBhd2FpdCBsb2FkUE9TVCgpO1xuICAgICAgICByZXR1cm4gUE9TVChyZXF1ZXN0LCBjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aCA9ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgICAgbGV0IGN1cnJlbnRWZXJzaW9uID0gXCJcIjtcbiAgICAgIGxldCBjdXJyZW50SW1wb3J0UGF0aCA9IFwiXCI7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRQT1NUKCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gU3RyaW5nKHN0YXRTeW5jKGhhbmRsZXJQYXRoKS5tdGltZU1zKTtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICAgICAgY3VycmVudFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgIGN1cnJlbnRJbXBvcnRQYXRoID0gcGF0aFRvRmlsZVVSTChoYW5kbGVyUGF0aCkuaHJlZiArIFwiP3Q9XCIgKyB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KGN1cnJlbnRJbXBvcnRQYXRoKSkuUE9TVDtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBQT1NUID0gYXdhaXQgbG9hZFBPU1QoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgUE9TVChyZXEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gS2VlcCBhIGJhcmUgaW1wb3J0IGFsb25nc2lkZSBgUE9TVGA6IGluIE51eHQgKyBOaXRybyBwcm9kdWN0aW9uIGJ1aWxkc1xuICAvLyB1c2luZyBgQHdvcmtmbG93L251eHRgLCBpbXBvcnRpbmcgb25seSBgUE9TVGAgY291bGQgZHJvcCB0aGUgZ2VuZXJhdGVkXG4gIC8vIHN0ZXAgYnVuZGxlJ3MgdG9wLWxldmVsIHJlZ2lzdHJhdGlvbnMsIHNvIHRoZSBoYW5kbGVyIGxvYWRlZCBidXQgc3RlcHNcbiAgLy8gd2VyZSBtaXNzaW5nIGF0IHJ1bnRpbWUuXG5cbiAgaWYgKCFuaXRyby5yb3V0aW5nKSB7XG4gICAgLy8gTml0cm8gdjIgKGxlZ2FjeSlcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbYCMke2J1aWxkUGF0aH1gXSA9IC8qIGpzICovIGBcbiAgICBpbXBvcnQgJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICBpbXBvcnQgeyBQT1NUIH0gZnJvbSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihQT1NUKTtcbiAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBOaXRybyB2MysgKG5hdGl2ZSB3ZWIgaGFuZGxlcnMpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgaW1wb3J0ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGltcG9ydCB7IFBPU1QgfSBmcm9tICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICh7IHJlcSB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgUE9TVChyZXEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgYDtcbiAgfVxufVxuXG5jb25zdCBNQU5JRkVTVF9WSVJUVUFMX0lEID0gJyN3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyJztcblxuZnVuY3Rpb24gYWRkTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCByb3V0ZSA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbic7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93L21hbmlmZXN0Lmpzb24nKTtcbiAgY29uc3QgaGFuZGxlclBhdGggPSBqb2luKFxuICAgIG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsXG4gICAgJ3dvcmtmbG93L21hbmlmZXN0LWhhbmRsZXIubWpzJ1xuICApO1xuXG4gIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgIC8vIERldiBtb2RlOiB1c2UgYSB2aXJ0dWFsIGhhbmRsZXIgdGhhdCByZWFkcyB0aGUgbWFuaWZlc3QgZnJvbSBkaXNrIGF0XG4gICAgLy8gcmVxdWVzdCB0aW1lLiBUaGUgYWJzb2x1dGUgcGF0aCBpcyB2YWxpZCBiZWNhdXNlIHdlJ3JlIG9uIHRoZSBidWlsZCBtYWNoaW5lLlxuICAgIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBNQU5JRkVTVF9WSVJUVUFMX0lEIH0pO1xuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtNQU5JRkVTVF9WSVJUVUFMX0lEXSA9ICFuaXRyby5yb3V0aW5nXG4gICAgICA/IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZnVuY3Rpb24gR0VUKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKEdFVCk7XG4gICAgYFxuICAgICAgOiAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9kIG1vZGU6IHJlZ2lzdGVyIGEgcGh5c2ljYWwgaGFuZGxlciBmaWxlIHRoYXQgd2lsbCBiZSB3cml0dGVuIGJ5XG4gICAgLy8gd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBhZnRlciB0aGUgYnVpbGRlciBnZW5lcmF0ZXMgdGhlIG1hbmlmZXN0LlxuICAgIC8vIFRoaXMgZmlsZSBpcyBidW5kbGVkIGJ5IHJvbGx1cCBpbnRvIHRoZSBjb21waWxlZCBvdXRwdXQuXG4gICAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHsgcm91dGUsIGhhbmRsZXI6IGhhbmRsZXJQYXRoIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGEgcGh5c2ljYWwgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggdGhlIG1hbmlmZXN0IGNvbnRlbnQgaW5saW5lZC5cbiAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBidWlsZGVyIGdlbmVyYXRlcyB0aGUgbWFuaWZlc3QgKGR1cmluZyBidWlsZDpiZWZvcmUpXG4gKiBhbmQgYmVmb3JlIE5pdHJvIGNvbXBpbGVzIHRoZSBidW5kbGUgd2l0aCByb2xsdXAuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcbiAgY29uc3QgZGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdENvbnRlbnQgPSByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmLTgnKTtcbiAgICBKU09OLnBhcnNlKG1hbmlmZXN0Q29udGVudCk7IC8vIHZhbGlkYXRlXG5cbiAgICBjb25zdCBoYW5kbGVyQ29kZSA9ICFuaXRyby5yb3V0aW5nXG4gICAgICA/IGBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuY29uc3QgbWFuaWZlc3QgPSAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0Q29udGVudCl9O1xuZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoKCkgPT4gbmV3IFJlc3BvbnNlKG1hbmlmZXN0LCB7XG4gIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbn0pKTtcbmBcbiAgICAgIDogYGNvbnN0IG1hbmlmZXN0ID0gJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdENvbnRlbnQpfTtcbmV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG59KTtcbmA7XG4gICAgd3JpdGVGaWxlU3luYyhoYW5kbGVyUGF0aCwgaGFuZGxlckNvZGUpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBXcml0ZSBhIDQwNCBmYWxsYmFjayBoYW5kbGVyXG4gICAgY29uc3QgZmFsbGJhY2sgPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyBgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbmV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKCgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pKTtcbmBcbiAgICAgIDogYGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuYDtcbiAgICB3cml0ZUZpbGVTeW5jKGhhbmRsZXJQYXRoLCBmYWxsYmFjayk7XG4gIH1cbn1cbiJdfQ==
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs1RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sWUFBWSxHQUFJLEtBQThDLENBQUMsSUFBSTtRQUN2RSxFQUFFLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxlQUFlO0lBQ2IsSUFBSSxFQUFFLGdCQUFnQjtJQUN0QixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQVk7UUFDdEIsTUFBTSxjQUFjLEdBQ2xCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBRTFELGlGQUFpRjtRQUNqRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENB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V0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDaEMsQ0FBQyxDQUFDO21CQUNXLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDOzs7O0NBSWpEO1lBQ0ssQ0FBQyxDQUFDLG9CQUFvQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQzs7OztDQUkxRCxDQUFDO1FBQ0UsYUFBYSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsK0JBQStCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDN0IsQ0FBQyxDQUFDOztDQUVQO1lBQ0ssQ0FBQyxDQUFDO0NBQ1AsQ0FBQztRQUNFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBXT1JLRkxPV19RVUVVRV9UUklHR0VSIH0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgdHlwZSB7IE5pdHJvLCBOaXRyb01vZHVsZSwgUm9sbHVwQ29uZmlnIH0gZnJvbSAnbml0cm8vdHlwZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IExvY2FsQnVpbGRlciwgVmVyY2VsQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9O1xuXG4vKipcbiAqIERldGVjdCB3aGV0aGVyIHRoZSBOaXRybyBpbnN0YW5jZSBpcyB2Mi5cbiAqIE5ld2VyIE5pdHJvIHJlbGVhc2VzIChib3RoIHYyIGFuZCB2MykgZXhwb3NlIGBuaXRyby5tZXRhLm1ham9yVmVyc2lvbmAuXG4gKiBGYWxsIGJhY2sgdG8gYCFuaXRyby5yb3V0aW5nYCAob25seSBwcmVzZW50IGluIHYzKykgZm9yIG9sZGVyIE5pdHJvIHYyXG4gKiB2ZXJzaW9ucyB0aGF0IGRvbid0IGhhdmUgYG1ham9yVmVyc2lvbmAgeWV0IChlLmcuIE51eHQgdXNlcnMgb24gYW4gb2xkZXJcbiAqIG5pdHJvcGFjaykuXG4gKi9cbmZ1bmN0aW9uIGlzTml0cm9WMihuaXRybzogTml0cm8pOiBib29sZWFuIHtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gKG5pdHJvIGFzIHsgbWV0YT86IHsgbWFqb3JWZXJzaW9uPzogbnVtYmVyIH0gfSkubWV0YVxuICAgID8ubWFqb3JWZXJzaW9uO1xuICBpZiAobWFqb3JWZXJzaW9uICE9IG51bGwpIHtcbiAgICByZXR1cm4gbWFqb3JWZXJzaW9uID09PSAyO1xuICB9XG4gIHJldHVybiAhbml0cm8ucm91dGluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnd29ya2Zsb3cvbml0cm8nLFxuICBhc3luYyBzZXR1cChuaXRybzogTml0cm8pIHtcbiAgICBjb25zdCBpc1ZlcmNlbERlcGxveSA9XG4gICAgICAhbml0cm8ub3B0aW9ucy5kZXYgJiYgbml0cm8ub3B0aW9ucy5wcmVzZXQgPT09ICd2ZXJjZWwnO1xuXG4gICAgLy8gUHJlLWJ1aWx0IHdvcmtmbG93IGJ1bmRsZXMgZGlyZWN0b3J5IC0gbXVzdCBiZSBleGNsdWRlZCBmcm9tIHJlLXRyYW5zZm9ybWF0aW9uXG4gICAgY29uc3Qgd29ya2Zsb3dCdWlsZERpciA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyk7XG5cbiAgICAvLyBBZGQgdHJhbnNmb3JtIHBsdWdpbiBhdCB0aGUgQkVHSU5OSU5HIHRvIHJ1biBiZWZvcmUgb3RoZXIgdHJhbnNmb3Jtc1xuICAgIC8vIChlc3BlY2lhbGx5IGJlZm9yZSBjbGFzcyBwcm9wZXJ0eSB0cmFuc2Zvcm1zIHRoYXQgcmVuYW1lIGNsYXNzZXMgbGlrZSBfQ2xhc3NOYW1lKVxuICAgIG5pdHJvLmhvb2tzLmhvb2soJ3JvbGx1cDpiZWZvcmUnLCAoX25pdHJvOiBOaXRybywgY29uZmlnOiBSb2xsdXBDb25maWcpID0+IHtcbiAgICAgIChjb25maWcucGx1Z2lucyBhcyBBcnJheTx1bmtub3duPikudW5zaGlmdChcbiAgICAgICAgd29ya2Zsb3dUcmFuc2Zvcm1QbHVnaW4oe1xuICAgICAgICAgIC8vIEV4Y2x1ZGUgcHJlLWJ1aWx0IHdvcmtmbG93IGJ1bmRsZXMgZnJvbSByZS10cmFuc2Zvcm1hdGlvblxuICAgICAgICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHByb2Nlc3NlZCBhbmQgcmUtcHJvY2Vzc2luZyBjYXVzZXMgaXNzdWVzIGxpa2VcbiAgICAgICAgICAvLyB1bmRlZmluZWQgY2xhc3MgcmVmZXJlbmNlcyB3aGVuIE5pdHJvJ3MgYnVuZGxlciByZW5hbWVzIHZhcmlhYmxlc1xuICAgICAgICAgIGV4Y2x1ZGU6IFt3b3JrZmxvd0J1aWxkRGlyXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBOT1RFOiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgZGVidWcgdW5lbnYgbW9ja1xuICAgIGlmICghbml0cm8ub3B0aW9ucy53b3JrZmxvdz8uX3ZpdGUpIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMuYWxpYXNbJ2RlYnVnJ10gPz89ICdkZWJ1Zyc7XG4gICAgfVxuXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMuZGV2KSB7XG4gICAgICBjb25zdCB3b3JrZmxvd0J1aWxkR2xvYiA9IGAke2pvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyl9LyoqYDtcbiAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zIHx8PSB7fTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nSWdub3JlZCA9IG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQ7XG4gICAgICBpZiAoIWV4aXN0aW5nSWdub3JlZCkge1xuICAgICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkID0gW3dvcmtmbG93QnVpbGRHbG9iXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ0lnbm9yZWQpKSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQgPSBbXG4gICAgICAgICAgLi4uZXhpc3RpbmdJZ25vcmVkLFxuICAgICAgICAgIHdvcmtmbG93QnVpbGRHbG9iLFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy53YXRjaE9wdGlvbnMuaWdub3JlZCA9IFtcbiAgICAgICAgICBleGlzdGluZ0lnbm9yZWQsXG4gICAgICAgICAgd29ya2Zsb3dCdWlsZEdsb2IsXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gZGV2IG1vZGUsIGZvcmNlIHdvcmtmbG93IFNESyBwYWNrYWdlcyB0byBiZSBidW5kbGVkIGJ5IE5pdHJvJ3NcbiAgICAvLyBSb2xsdXAgcmF0aGVyIHRoYW4gZXh0ZXJuYWxpemVkLiBUaGlzIGVuc3VyZXMgdGhlIFNXQyB0cmFuc2Zvcm1cbiAgICAvLyBwbHVnaW4gcHJvY2Vzc2VzIGZpbGVzIGNvbnRhaW5pbmcgd29ya2Zsb3cgcGF0dGVybnMgKGxpa2VcbiAgICAvLyBAd29ya2Zsb3cvY29yZS9kaXN0L3J1bnRpbWUvcnVuLmpzKSBhbmQgYWRkcyB0aGUgY2xhc3NJZFxuICAgIC8vIHJlZ2lzdHJhdGlvbiBJSUZFcyBuZWVkZWQgZm9yIHNlcmlhbGl6YXRpb24uIFdpdGhvdXQgdGhpcywgc2VyZGVcbiAgICAvLyBjbGFzc2VzIGZyb20gbnBtIHBhY2thZ2VzIChsaWtlIGBSdW5gKSB3b3VsZCBiZSBleHRlcm5hbGl6ZWQsIHRoZVxuICAgIC8vIFNXQyB0cmFuc2Zvcm0gd291bGQgbmV2ZXIgZmlyZSBvbiB0aGVtLCBhbmQgc2VyaWFsaXphdGlvbiB3b3VsZFxuICAgIC8vIGZhaWwgd2l0aCBcIm11c3QgaGF2ZSBhIHN0YXRpYyBjbGFzc0lkIHByb3BlcnR5XCIuXG4gICAgLy9cbiAgICAvLyBXZSB1c2UgYSBSb2xsdXAgcmVzb2x2ZUlkIGhvb2sgKGFkZGVkIEJFRk9SRSB0aGUgZXh0ZXJuYWxpemF0aW9uXG4gICAgLy8gcGx1Z2luKSB0aGF0IGludGVyY2VwdHMgd29ya2Zsb3cgcGFja2FnZSBpbXBvcnRzIGFuZCBtYXJrcyB0aGVtXG4gICAgLy8gYXMgbm9uLWV4dGVybmFsLiBUaGlzIGlzIG1vcmUgdGFyZ2V0ZWQgdGhhbiBgbm9FeHRlcm5hbHMgPSB0cnVlYFxuICAgIC8vIHdoaWNoIHdvdWxkIGJ1bmRsZSBBTEwgZGVwZW5kZW5jaWVzIGFuZCBjYXVzZSBURFogZXJyb3JzIGZyb21cbiAgICAvLyBjaXJjdWxhciBpbXBvcnRzIGluIHBhY2thZ2VzIGxpa2UgdnVlLWJ1bmRsZS1yZW5kZXJlci9oMy5cbiAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soXG4gICAgICAgICdyb2xsdXA6YmVmb3JlJyxcbiAgICAgICAgKF9uaXRybzogTml0cm8sIGNvbmZpZzogUm9sbHVwQ29uZmlnKSA9PiB7XG4gICAgICAgICAgKGNvbmZpZy5wbHVnaW5zIGFzIEFycmF5PHVua25vd24+KS51bnNoaWZ0KHtcbiAgICAgICAgICAgIG5hbWU6ICd3b3JrZmxvdzpmb3JjZS1pbmxpbmUnLFxuICAgICAgICAgICAgLy8gYG9yZGVyOiAncHJlJ2AgaXMgcmVxdWlyZWQ6IE5pdHJvJ3MgYG5pdHJvOmV4dGVybmFsc2AgcGx1Z2luXG4gICAgICAgICAgICAvLyB1c2VzIGBvcmRlcjogJ3ByZSdgIGZvciBpdHMgcmVzb2x2ZUlkIGhvb2sgYW5kIHNwcmVhZHMgb3VyXG4gICAgICAgICAgICAvLyByZXNvbHV0aW9uIHJlc3VsdCB3aGlsZSBmb3JjaW5nIGBleHRlcm5hbDogdHJ1ZWAuIFdpdGhvdXRcbiAgICAgICAgICAgIC8vIGBwcmVgIGhlcmUsIG91ciBgZXh0ZXJuYWw6IGZhbHNlYCBkZWNpc2lvbiBnZXRzIG92ZXJ3cml0dGVuXG4gICAgICAgICAgICAvLyBhbmQgYEB3b3JrZmxvdy8qYCBpbXBvcnRzIGVuZCB1cCBleHRlcm5hbGl6ZWQgaW4gdGhlIGRldlxuICAgICAgICAgICAgLy8gYnVuZGxlIOKAlCB3aGljaCBtZWFucyB0aGUgU1dDLWluamVjdGVkIGBzdGF0aWMgY2xhc3NJZGAgSUlGRVxuICAgICAgICAgICAgLy8gaW4gKGUuZy4pIGBAd29ya2Zsb3cvY29yZS9kaXN0L3J1bnRpbWUvcnVuLmpzYCBpcyBuZXZlclxuICAgICAgICAgICAgLy8gYXBwbGllZCwgYW5kIHN0ZXAgcmV0dXJuIHZhbHVlcyB0aGF0IGluY2x1ZGUgYFJ1bmBcbiAgICAgICAgICAgIC8vIGluc3RhbmNlcyBmYWlsIHRvIHNlcmlhbGl6ZSBhdCBydW50aW1lLlxuICAgICAgICAgICAgcmVzb2x2ZUlkOiB7XG4gICAgICAgICAgICAgIG9yZGVyOiAncHJlJyxcbiAgICAgICAgICAgICAgYXN5bmMgaGFuZGxlcihcbiAgICAgICAgICAgICAgICB0aGlzOiB7IHJlc29sdmU6IEZ1bmN0aW9uIH0sXG4gICAgICAgICAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgaW1wb3J0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7IHNraXBTZWxmPzogYm9vbGVhbiB9XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICghaW1wb3J0ZXIpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHdvcmtmbG93IHBhY2thZ2Ugc3BlY2lmaWVycyBPUiBkaXJlY3QgcGF0aHMgaW50b1xuICAgICAgICAgICAgICAgIC8vIHBhY2thZ2VzLzxuYW1lPi8uIEJhaWwgb3V0IGVhcmx5IG9uIG5vbi13b3JrZmxvdyBpbXBvcnRzXG4gICAgICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgaW50ZXJjZXB0IHRoZSByZXN0IG9mIHRoZSByZXNvbHV0aW9uIGNoYWluLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzV29ya2Zsb3dQa2cgPVxuICAgICAgICAgICAgICAgICAgL15AP3dvcmtmbG93KFxcL3wkKS8udGVzdChzb3VyY2UpIHx8XG4gICAgICAgICAgICAgICAgICAvW1xcXFwvXXBhY2thZ2VzW1xcXFwvXSh3b3JrZmxvd3xjb3JlfHNlcmRlfGVycm9yc3x1dGlsc3xidWlsZGVyc3xyb2xsdXB8YWl8d29ybGR8d29ybGQtbG9jYWx8d29ybGQtdmVyY2VsfHdvcmxkLXBvc3RncmVzfHdvcmxkLXRlc3Rpbmd8Y2xpfG5leHR8bml0cm98bnV4dHx2aXRlfHZpdGVzdHxhc3Ryb3xzdmVsdGVraXR8bmVzdClbXFxcXC9dLy50ZXN0KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1dvcmtmbG93UGtnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSZXNvbHZlIHZpYSBvdGhlciByZXNvbHZlcnMsIHNraXBwaW5nIG91cnNlbHZlcyBzbyB3ZVxuICAgICAgICAgICAgICAgIC8vIGdldCBhIHBhdGguIFdlIGRvbid0IGdhdGUgb24gYHJlc29sdmVkLmV4dGVybmFsYCBiZWNhdXNlXG4gICAgICAgICAgICAgICAgLy8gYG5pdHJvOmV4dGVybmFsc2Agc3ByZWFkcyBvdXIgcmVzdWx0IGFuZCBvdmVycmlkZXNcbiAgICAgICAgICAgICAgICAvLyBgZXh0ZXJuYWw6IHRydWVgIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3ZSByZXR1cm4g4oCUIHdlIHdhbnRcbiAgICAgICAgICAgICAgICAvLyB0byB3aW4gdGhhdCByYWNlIGJ5IHJldHVybmluZyBmaXJzdCB1bmRlciBgb3JkZXI6ICdwcmUnYC5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZShzb3VyY2UsIGltcG9ydGVyLCB7XG4gICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgc2tpcFNlbGY6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkSWQgPSByZXNvbHZlZC5pZDtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCBmaWxlOi8vIHByb3RvY29sIGlmIHByZXNlbnQg4oCUIFJvbGx1cCBuZWVkcyBhIHBsYWluXG4gICAgICAgICAgICAgICAgLy8gZmlsZXN5c3RlbSBwYXRoIHRvIGxvYWQgdGhlIG1vZHVsZS4gYGZpbGVVUkxUb1BhdGhgXG4gICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5IGhhbmRsZXMgV2luZG93cyBwYXRocyAoZS5nLiwgZmlsZTovLy9DOi8uLi5cbiAgICAgICAgICAgICAgICAvLyAtPiBDOlxcLi4uKSBhbmQgcGVyY2VudC1kZWNvZGluZy5cbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRJZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkSWQgPSBmaWxlVVJMVG9QYXRoKHJlc29sdmVkSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogcmVzb2x2ZWRJZCwgZXh0ZXJuYWw6IGZhbHNlIH07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCB0c0NvbmZpZyBwbHVnaW5cbiAgICBpZiAobml0cm8ub3B0aW9ucy53b3JrZmxvdz8udHlwZXNjcmlwdFBsdWdpbikge1xuICAgICAgbml0cm8ub3B0aW9ucy50eXBlc2NyaXB0LnRzQ29uZmlnIHx8PSB7fTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMgfHw9IHt9O1xuICAgICAgbml0cm8ub3B0aW9ucy50eXBlc2NyaXB0LnRzQ29uZmlnLmNvbXBpbGVyT3B0aW9ucy5wbHVnaW5zIHx8PSBbXTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMucGx1Z2lucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93JyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5pdHJvIHYyIFZlcmNlbCBkZXBsb3k6IGtlZXAgdGhlIGxlZ2FjeSBCdWlsZCBPdXRwdXQgQVBJIHBhdGggdGhhdFxuICAgIC8vIGJ1aWxkcyB0aGUgd29ya2Zsb3cgZnVuY3Rpb25zIHN0YW5kYWxvbmUgYW5kIHN0aXRjaGVzIHRoZSByb3V0ZXMgaW50b1xuICAgIC8vIGAudmVyY2VsL291dHB1dC9jb25maWcuanNvbmAuIFRoaXMgcGF0aCBpcyBpbmRlcGVuZGVudCBvZiBuaXRybydzIG93blxuICAgIC8vIGJ1bmRsZSBhbmQgaXMgb25seSB1c2VkIGZvciBuaXRyb3BhY2sgdjIgKGUuZy4gTnV4dCA0IHN0aWxsIHVzZXMgaXQpLlxuICAgIGNvbnN0IHVzZUxlZ2FjeVZlcmNlbEJ1aWxkID0gaXNWZXJjZWxEZXBsb3kgJiYgaXNOaXRyb1YyKG5pdHJvKTtcblxuICAgIGlmICh1c2VMZWdhY3lWZXJjZWxCdWlsZCkge1xuICAgICAgbml0cm8uaG9va3MuaG9vaygnY29tcGlsZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IG5ldyBWZXJjZWxCdWlsZGVyKG5pdHJvKS5idWlsZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTG9jYWwgZGV2L3Byb2QgYW5kIE5pdHJvIHYzIFZlcmNlbCBkZXBsb3kgc2hhcmUgdGhlIHNhbWUgcGF0aDpcbiAgICAvLyBidW5kbGUgdGhlIHdvcmtmbG93IHJvdXRlcyBpbnRvIG5pdHJvIGl0c2VsZiB2aWEgdmlydHVhbCBoYW5kbGVycy5cbiAgICAvLyBGb3IgVmVyY2VsIHYzIHdlIGFkZGl0aW9uYWxseSBjb25maWd1cmUgYGZ1bmN0aW9uUnVsZXNgIHNvIHRoZVxuICAgIC8vIHJvdXRlcyBnZXQgcXVldWUgdHJpZ2dlcnMgKyBleHRlbmRlZCBtYXhEdXJhdGlvbiB2aWEgdGhlIG5pdHJvXG4gICAgLy8gdmVyY2VsIHByZXNldC4gVGhpcyBsZXRzIHdvcmtmbG93IGhhbmRsZXJzIHVzZSBuaXRybyBmZWF0dXJlc1xuICAgIC8vIChzdG9yYWdlLCBkYXRhYmFzZSwgcnVudGltZSBjb25maWcsIHZpcnR1YWwgaW1wb3J0cywgZXRjLikuXG4gICAgaWYgKCF1c2VMZWdhY3lWZXJjZWxCdWlsZCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBMb2NhbEJ1aWxkZXIobml0cm8pO1xuICAgICAgbGV0IGlzSW5pdGlhbEJ1aWxkID0gdHJ1ZTtcblxuICAgICAgbml0cm8uaG9va3MuaG9vaygnYnVpbGQ6YmVmb3JlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgLy8gRm9yIHByb2Q6IHdyaXRlIHRoZSBtYW5pZmVzdCBoYW5kbGVyIGZpbGUgd2l0aCBpbmxpbmVkIGNvbnRlbnRcbiAgICAgICAgLy8gbm93IHRoYXQgdGhlIGJ1aWxkZXIgaGFzIGdlbmVyYXRlZCB0aGUgbWFuaWZlc3QuIFJvbGx1cCB3aWxsXG4gICAgICAgIC8vIGJ1bmRsZSB0aGlzIGZpbGUgaW50byB0aGUgY29tcGlsZWQgb3V0cHV0LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5pdHJvLm9wdGlvbnMuZGV2ICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUFVCTElDX01BTklGRVNUID09PSAnMSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgd3JpdGVNYW5pZmVzdEhhbmRsZXIobml0cm8pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQWxsb3dzIGZvciBITVIgLSBidXQgc2tpcCB0aGUgZmlyc3QgZGV2OnJlbG9hZCBzaW5jZSBidWlsZDpiZWZvcmUgYWxyZWFkeSByYW5cbiAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBuaXRyby5ob29rcy5ob29rKCdkZXY6cmVsb2FkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmIChpc0luaXRpYWxCdWlsZCkge1xuICAgICAgICAgICAgaXNJbml0aWFsQnVpbGQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gRHVyaW5nIGRldiwgZmlsZXMgbWF5IGJlIGFkZGVkL3JlbW92ZWQgd2hpbGUgdGhlIGJ1aWxkZXJcbiAgICAgICAgICAgIC8vIGlzIHJlYnVpbGRpbmcgKGUuZy4sIGR1cmluZyB0ZXN0IGNsZWFudXApLiBMb2cgdGhlIGVycm9yXG4gICAgICAgICAgICAvLyBidXQgZG9uJ3QgY3Jhc2gg4oCUIHRoZSBuZXh0IGZpbGUgY2hhbmdlIHdpbGwgdHJpZ2dlclxuICAgICAgICAgICAgLy8gYW5vdGhlciByZWJ1aWxkIHdpdGggdGhlIGNvcnJlY3QgZmlsZSBsaXN0LlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBXb3JrZmxvdyByZWJ1aWxkIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5pdHJvLm9wdGlvbnMuZGV2KSB7XG4gICAgICAgIGFkZERhc2hib2FyZEhhbmRsZXIobml0cm8pO1xuICAgICAgfVxuXG4gICAgICBhZGRWaXJ0dWFsSGFuZGxlcihcbiAgICAgICAgbml0cm8sXG4gICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay86dG9rZW4nLFxuICAgICAgICAnd29ya2Zsb3cvd2ViaG9vay5tanMnXG4gICAgICApO1xuXG4gICAgICAvLyBWMjogc2luZ2xlIGNvbWJpbmVkIGhhbmRsZXIgZm9yIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAgLy8gVGhlIHN0ZXAgcmVnaXN0cmF0aW9ucyBhcmUgaW1wb3J0ZWQgYXMgc2lkZSBlZmZlY3RzIGJ5IHRoZSBjb21iaW5lZFxuICAgICAgLy8gaGFuZGxlciDigJQgbm8gc2VwYXJhdGUgc3RlcCByb3V0ZSBuZWVkZWQuXG4gICAgICBhZGRWaXJ0dWFsSGFuZGxlcihcbiAgICAgICAgbml0cm8sXG4gICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdycsXG4gICAgICAgICd3b3JrZmxvdy93b3JrZmxvd3MubWpzJ1xuICAgICAgKTtcblxuICAgICAgLy8gTml0cm8gdjMrIFZlcmNlbCBkZXBsb3k6IGNvbmZpZ3VyZSBmdW5jdGlvbiBydWxlcyBmb3IgdGhlIGNvbWJpbmVkXG4gICAgICAvLyBmbG93IGhhbmRsZXIgc28gaXQgZ2V0cyB0aGUgcXVldWUgdHJpZ2dlcnMgKyBtYXggZHVyYXRpb24gdGhhdCB0aGVcbiAgICAgIC8vIHdvcmtmbG93IHJ1bnRpbWUgbmVlZHMuIFdvcmtmbG93LXJlcXVpcmVkIGZpZWxkcyAoYG1heER1cmF0aW9uYCxcbiAgICAgIC8vIGBleHBlcmltZW50YWxUcmlnZ2Vyc2AsIGBydW50aW1lYCB3aGVuIHNldCkgdGFrZSBwcmVjZWRlbmNlIG92ZXJcbiAgICAgIC8vIHVzZXItcHJvdmlkZWQgdmFsdWVzIGZvciB0aGVzZSByb3V0ZXM7IHVucmVsYXRlZCBmaWVsZHMgdGhlIHVzZXJcbiAgICAgIC8vIHNldHMgKGUuZy4gYG1lbW9yeWApIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQuXG4gICAgICAvL1xuICAgICAgLy8gUGF0dGVybiBrZXlzIG11c3QgbWF0Y2ggdGhlIHJvdXRlIHBhdHRlcm5zIHRoZSBoYW5kbGVycyBhcmVcbiAgICAgIC8vIHJlZ2lzdGVyZWQgd2l0aCBzbyBuaXRybyByZXVzZXMgdGhlIHNhbWUgZnVuY3Rpb24gZGlyZWN0b3J5LlxuICAgICAgLy8gVXNpbmcgYSBgd2ViaG9vay8qKmAgY2F0Y2gtYWxsIGhlcmUgd291bGQgY3JlYXRlIGEgc2Vjb25kXG4gICAgICAvLyBgd2ViaG9vay9bLi4uXS5mdW5jYCBuZXh0IHRvIHRoZSBgd2ViaG9vay9bdG9rZW5dLmZ1bmNgIHRoYXRcbiAgICAgIC8vIGBhZGRWaXJ0dWFsSGFuZGxlcmAgcHJvZHVjZXMuXG4gICAgICBpZiAoaXNWZXJjZWxEZXBsb3kpIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy52ZXJjZWwgPz89IHt9O1xuICAgICAgICBuaXRyby5vcHRpb25zLnZlcmNlbC5mdW5jdGlvblJ1bGVzID8/PSB7fTtcblxuICAgICAgICBjb25zdCBydW50aW1lID0gbml0cm8ub3B0aW9ucy53b3JrZmxvdz8ucnVudGltZTtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBuaXRyby5vcHRpb25zLnZlcmNlbC5mdW5jdGlvblJ1bGVzO1xuXG4gICAgICAgIGNvbnN0IGZsb3dQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9mbG93JztcbiAgICAgICAgcnVsZXNbZmxvd1BhdGhdID0ge1xuICAgICAgICAgIC4uLnJ1bGVzW2Zsb3dQYXRoXSxcbiAgICAgICAgICAuLi4ocnVudGltZSAmJiB7IHJ1bnRpbWUgfSksXG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIC8vIFYyIGNvbWJpbmVkOiBhIHNpbmdsZSB0cmlnZ2VyIGNvdmVycyBib3RoIGBfX3drZl93b3JrZmxvd18qYFxuICAgICAgICAgIC8vICh3b3JrZmxvdyBvcmNoZXN0cmF0aW9uKSBhbmQgYF9fd2tmX3N0ZXBfKmAgKHN0ZXAgZXhlY3V0aW9uKSxcbiAgICAgICAgICAvLyBzaW5jZSB0aGUgc2FtZSBoYW5kbGVyIGRpc3BhdGNoZXMgYm90aC5cbiAgICAgICAgICBleHBlcmltZW50YWxUcmlnZ2VyczogW1dPUktGTE9XX1FVRVVFX1RSSUdHRVJdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChydW50aW1lKSB7XG4gICAgICAgICAgY29uc3Qgd2ViaG9va1BhdGggPSAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svOnRva2VuJztcbiAgICAgICAgICBydWxlc1t3ZWJob29rUGF0aF0gPSB7IC4uLnJ1bGVzW3dlYmhvb2tQYXRoXSwgcnVudGltZSB9O1xuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnKSB7XG4gICAgICAgICAgICBjb25zdCBtYW5pZmVzdFBhdGggPSAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nO1xuICAgICAgICAgICAgcnVsZXNbbWFuaWZlc3RQYXRoXSA9IHsgLi4ucnVsZXNbbWFuaWZlc3RQYXRoXSwgcnVudGltZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHBvc2UgbWFuaWZlc3QgYXMgYSBwdWJsaWMgSFRUUCByb3V0ZSB3aGVuIFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVD0xXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuV09SS0ZMT1dfUFVCTElDX01BTklGRVNUID09PSAnMScpIHtcbiAgICAgICAgLy8gV3JpdGUgYSBwbGFjZWhvbGRlciBtYW5pZmVzdC1kYXRhLm1qcyBzbyByb2xsdXAgY2FuIHJlc29sdmUgdGhlXG4gICAgICAgIC8vIGltcG9ydC4gSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsIG1hbmlmZXN0IGluIGJ1aWxkOmJlZm9yZS5cbiAgICAgICAgLy8gV3JpdGUgYSBwbGFjZWhvbGRlciBoYW5kbGVyIGZpbGUgc28gcm9sbHVwIGNhbiByZXNvbHZlIHRoZSBwYXRoXG4gICAgICAgIC8vIGR1cmluZyBwcm9kIGNvbXBpbGF0aW9uLiBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIHJlYWxcbiAgICAgICAgLy8gbWFuaWZlc3QgY29udGVudCBieSB3cml0ZU1hbmlmZXN0SGFuZGxlcigpIGluIGJ1aWxkOmJlZm9yZS5cbiAgICAgICAgaWYgKCFuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICAgIGNvbnN0IGRpciA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyk7XG4gICAgICAgICAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBqb2luKGRpciwgJ21hbmlmZXN0LWhhbmRsZXIubWpzJyk7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgIGhhbmRsZXJQYXRoLFxuICAgICAgICAgICAgJ2V4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xcbidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFkZE1hbmlmZXN0SGFuZGxlcihuaXRybyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSBzYXRpc2ZpZXMgTml0cm9Nb2R1bGU7XG5cbmNvbnN0IERBU0hCT0FSRF9WSVJUVUFMX0lEID0gJyN3b3JrZmxvdy9kYXNoYm9hcmQtaGFuZGxlcic7XG5cbmZ1bmN0aW9uIGFkZERhc2hib2FyZEhhbmRsZXIobml0cm86IE5pdHJvKSB7XG4gIGNvbnN0IHJvdXRlID0gJy9fd29ya2Zsb3cnO1xuICBuaXRyby5vcHRpb25zLmhhbmRsZXJzLnB1c2goeyByb3V0ZSwgaGFuZGxlcjogREFTSEJPQVJEX1ZJUlRVQUxfSUQgfSk7XG5cbiAgLy8gUmVzb2x2ZSBgQHdvcmtmbG93L3dlYi9zZXJ2ZXJgIHJlbGF0aXZlIHRvIHRoaXMgbW9kdWxlIHNvIGNvbnN1bWVycyBkb24ndFxuICAvLyBuZWVkIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYEB3b3JrZmxvdy93ZWJgLiBUaGUgcGF0aCBpcyBpbmxpbmVkIGludG8gdGhlXG4gIC8vIHZpcnR1YWwgaGFuZGxlciBhcyBhIGZpbGU6Ly8gVVJMIHNvIE5vZGUgY2FuIGBpbXBvcnQoKWAgaXQgYXQgcnVudGltZVxuICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBnZW5lcmF0ZWQgTml0cm8gYnVuZGxlIGVuZHMgdXAuXG4gIGNvbnN0IHJlcXVpcmVfID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICBsZXQgd2ViU2VydmVyVXJsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgd2ViU2VydmVyVXJsID0gcGF0aFRvRmlsZVVSTChyZXF1aXJlXy5yZXNvbHZlKCdAd29ya2Zsb3cvd2ViL3NlcnZlcicpKS5ocmVmO1xuICB9IGNhdGNoIHtcbiAgICB3ZWJTZXJ2ZXJVcmwgPSAnQHdvcmtmbG93L3dlYi9zZXJ2ZXInO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlclNvdXJjZSA9IC8qIGpzICovIGBcbiAgICBjb25zdCBfX3dvcmtmbG93V2ViU2VydmVyVXJsID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJTZXJ2ZXJVcmwpfTtcbiAgICBsZXQgc2VydmVyUHJvbWlzZSA9IG51bGw7XG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0RGFzaGJvYXJkVXJsKCkge1xuICAgICAgaWYgKCFzZXJ2ZXJQcm9taXNlKSB7XG4gICAgICAgIHNlcnZlclByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RhcnRTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgvKiBAdml0ZS1pZ25vcmUgKi8gLyogd2VicGFja0lnbm9yZTogdHJ1ZSAqLyBfX3dvcmtmbG93V2ViU2VydmVyVXJsKTtcbiAgICAgICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcigwKTtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgICAgICBjb25zdCBwb3J0ID0gdHlwZW9mIGFkZHJlc3MgPT09ICdvYmplY3QnICYmIGFkZHJlc3MgPyBhZGRyZXNzLnBvcnQgOiAzNDU2O1xuICAgICAgICAgIHJldHVybiAnaHR0cDovL2xvY2FsaG9zdDonICsgcG9ydDtcbiAgICAgICAgfSkoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBzZXJ2ZXJQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VydmVyUHJvbWlzZTtcbiAgICB9XG4gIGA7XG5cbiAgaWYgKCFuaXRyby5yb3V0aW5nKSB7XG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW0RBU0hCT0FSRF9WSVJUVUFMX0lEXSA9IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICAke2hhbmRsZXJTb3VyY2V9XG4gICAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgZ2V0RGFzaGJvYXJkVXJsKCk7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KHVybCwgMzAyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgd29ya2Zsb3cgZGFzaGJvYXJkOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdGYWlsZWQgdG8gc3RhcnQgd29ya2Zsb3cgZGFzaGJvYXJkOiAnICsgZXJyb3IubWVzc2FnZSwgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgYDtcbiAgfSBlbHNlIHtcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbREFTSEJPQVJEX1ZJUlRVQUxfSURdID0gLyoganMgKi8gYFxuICAgICAgJHtoYW5kbGVyU291cmNlfVxuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGdldERhc2hib2FyZFVybCgpO1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdCh1cmwsIDMwMik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93IGRhc2hib2FyZDonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgnRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93IGRhc2hib2FyZDogJyArIGVycm9yLm1lc3NhZ2UsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRWaXJ0dWFsSGFuZGxlcihuaXRybzogTml0cm8sIHJvdXRlOiBzdHJpbmcsIGJ1aWxkUGF0aDogc3RyaW5nKSB7XG4gIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7XG4gICAgcm91dGUsXG4gICAgaGFuZGxlcjogYCMke2J1aWxkUGF0aH1gLFxuICB9KTtcbiAgY29uc3QgaGFuZGxlckltcG9ydFBhdGggPSBKU09OLnN0cmluZ2lmeShcbiAgICBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsIGJ1aWxkUGF0aClcbiAgKTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAvLyBEZXYgbW9kZTogbG9hZCBnZW5lcmF0ZWQgd29ya2Zsb3cgYnVuZGxlcyBmcm9tIGRpc2sgYXQgcmVxdWVzdCB0aW1lLlxuICAgIC8vIFRoaXMga2VlcHMgYC5uaXRyby93b3JrZmxvdy8qLm1qc2Agb3V0IG9mIE5pdHJvJ3Mgb3duIGJ1bmRsZSBncmFwaCxcbiAgICAvLyB3aGljaCBhdm9pZHMgcmVidWlsZCBsb29wcyBhbmQgc3RhbGUgZGVwZW5kZW5jeSBncmFwaHMgZHVyaW5nIEhNUi5cbiAgICAvLyBDYWNoZS1idXN0IGJ5IGZpbGUgbXRpbWUgc28gZWFjaCBzdWNjZXNzZnVsIHJlYnVpbGQgbG9hZHMgZnJlc2ggY29kZS5cbiAgICBpZiAoIW5pdHJvLnJvdXRpbmcpIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICAgIGltcG9ydCB7IHN0YXRTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuICAgICAgY29uc3QgaGFuZGxlclBhdGggPSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICAgIGxldCBjdXJyZW50VmVyc2lvbiA9IFwiXCI7XG4gICAgICBsZXQgY3VycmVudEltcG9ydFBhdGggPSBcIlwiO1xuXG4gICAgICBhc3luYyBmdW5jdGlvbiBsb2FkUE9TVCgpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFN0cmluZyhzdGF0U3luYyhoYW5kbGVyUGF0aCkubXRpbWVNcyk7XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICBjdXJyZW50SW1wb3J0UGF0aCA9IHBhdGhUb0ZpbGVVUkwoaGFuZGxlclBhdGgpLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydChjdXJyZW50SW1wb3J0UGF0aCkpLlBPU1Q7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKGFzeW5jIChyZXF1ZXN0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IFBPU1QgPSBhd2FpdCBsb2FkUE9TVCgpO1xuICAgICAgICByZXR1cm4gUE9TVChyZXF1ZXN0LCBjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aCA9ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgICAgbGV0IGN1cnJlbnRWZXJzaW9uID0gXCJcIjtcbiAgICAgIGxldCBjdXJyZW50SW1wb3J0UGF0aCA9IFwiXCI7XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRQT1NUKCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gU3RyaW5nKHN0YXRTeW5jKGhhbmRsZXJQYXRoKS5tdGltZU1zKTtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICAgICAgY3VycmVudFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgIGN1cnJlbnRJbXBvcnRQYXRoID0gcGF0aFRvRmlsZVVSTChoYW5kbGVyUGF0aCkuaHJlZiArIFwiP3Q9XCIgKyB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KGN1cnJlbnRJbXBvcnRQYXRoKSkuUE9TVDtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBQT1NUID0gYXdhaXQgbG9hZFBPU1QoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgUE9TVChyZXEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gS2VlcCBhIGJhcmUgaW1wb3J0IGFsb25nc2lkZSBgUE9TVGA6IGluIE51eHQgKyBOaXRybyBwcm9kdWN0aW9uIGJ1aWxkc1xuICAvLyB1c2luZyBgQHdvcmtmbG93L251eHRgLCBpbXBvcnRpbmcgb25seSBgUE9TVGAgY291bGQgZHJvcCB0aGUgZ2VuZXJhdGVkXG4gIC8vIHN0ZXAgYnVuZGxlJ3MgdG9wLWxldmVsIHJlZ2lzdHJhdGlvbnMsIHNvIHRoZSBoYW5kbGVyIGxvYWRlZCBidXQgc3RlcHNcbiAgLy8gd2VyZSBtaXNzaW5nIGF0IHJ1bnRpbWUuXG5cbiAgaWYgKCFuaXRyby5yb3V0aW5nKSB7XG4gICAgLy8gTml0cm8gdjIgKGxlZ2FjeSlcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbYCMke2J1aWxkUGF0aH1gXSA9IC8qIGpzICovIGBcbiAgICBpbXBvcnQgJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICBpbXBvcnQgeyBQT1NUIH0gZnJvbSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihQT1NUKTtcbiAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBOaXRybyB2MysgKG5hdGl2ZSB3ZWIgaGFuZGxlcnMpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgaW1wb3J0ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGltcG9ydCB7IFBPU1QgfSBmcm9tICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICh7IHJlcSB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgUE9TVChyZXEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgYDtcbiAgfVxufVxuXG5jb25zdCBNQU5JRkVTVF9WSVJUVUFMX0lEID0gJyN3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyJztcblxuZnVuY3Rpb24gYWRkTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCByb3V0ZSA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbic7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93L21hbmlmZXN0Lmpzb24nKTtcbiAgY29uc3QgaGFuZGxlclBhdGggPSBqb2luKFxuICAgIG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsXG4gICAgJ3dvcmtmbG93L21hbmlmZXN0LWhhbmRsZXIubWpzJ1xuICApO1xuXG4gIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgIC8vIERldiBtb2RlOiB1c2UgYSB2aXJ0dWFsIGhhbmRsZXIgdGhhdCByZWFkcyB0aGUgbWFuaWZlc3QgZnJvbSBkaXNrIGF0XG4gICAgLy8gcmVxdWVzdCB0aW1lLiBUaGUgYWJzb2x1dGUgcGF0aCBpcyB2YWxpZCBiZWNhdXNlIHdlJ3JlIG9uIHRoZSBidWlsZCBtYWNoaW5lLlxuICAgIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBNQU5JRkVTVF9WSVJUVUFMX0lEIH0pO1xuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtNQU5JRkVTVF9WSVJUVUFMX0lEXSA9ICFuaXRyby5yb3V0aW5nXG4gICAgICA/IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZnVuY3Rpb24gR0VUKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKEdFVCk7XG4gICAgYFxuICAgICAgOiAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9kIG1vZGU6IHJlZ2lzdGVyIGEgcGh5c2ljYWwgaGFuZGxlciBmaWxlIHRoYXQgd2lsbCBiZSB3cml0dGVuIGJ5XG4gICAgLy8gd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBhZnRlciB0aGUgYnVpbGRlciBnZW5lcmF0ZXMgdGhlIG1hbmlmZXN0LlxuICAgIC8vIFRoaXMgZmlsZSBpcyBidW5kbGVkIGJ5IHJvbGx1cCBpbnRvIHRoZSBjb21waWxlZCBvdXRwdXQuXG4gICAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHsgcm91dGUsIGhhbmRsZXI6IGhhbmRsZXJQYXRoIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGEgcGh5c2ljYWwgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggdGhlIG1hbmlmZXN0IGNvbnRlbnQgaW5saW5lZC5cbiAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBidWlsZGVyIGdlbmVyYXRlcyB0aGUgbWFuaWZlc3QgKGR1cmluZyBidWlsZDpiZWZvcmUpXG4gKiBhbmQgYmVmb3JlIE5pdHJvIGNvbXBpbGVzIHRoZSBidW5kbGUgd2l0aCByb2xsdXAuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcbiAgY29uc3QgZGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdENvbnRlbnQgPSByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmLTgnKTtcbiAgICBKU09OLnBhcnNlKG1hbmlmZXN0Q29udGVudCk7IC8vIHZhbGlkYXRlXG5cbiAgICBjb25zdCBoYW5kbGVyQ29kZSA9ICFuaXRyby5yb3V0aW5nXG4gICAgICA/IGBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuY29uc3QgbWFuaWZlc3QgPSAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0Q29udGVudCl9O1xuZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoKCkgPT4gbmV3IFJlc3BvbnNlKG1hbmlmZXN0LCB7XG4gIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbn0pKTtcbmBcbiAgICAgIDogYGNvbnN0IG1hbmlmZXN0ID0gJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdENvbnRlbnQpfTtcbmV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG59KTtcbmA7XG4gICAgd3JpdGVGaWxlU3luYyhoYW5kbGVyUGF0aCwgaGFuZGxlckNvZGUpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBXcml0ZSBhIDQwNCBmYWxsYmFjayBoYW5kbGVyXG4gICAgY29uc3QgZmFsbGJhY2sgPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyBgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbmV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKCgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pKTtcbmBcbiAgICAgIDogYGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuYDtcbiAgICB3cml0ZUZpbGVTeW5jKGhhbmRsZXJQYXRoLCBmYWxsYmFjayk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/nitro",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
4
4
  "description": "Nitro integration for Workflow SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,11 +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.10",
28
- "@workflow/core": "5.0.0-beta.10",
29
- "@workflow/rollup": "5.0.0-beta.10",
27
+ "@workflow/builders": "5.0.0-beta.12",
28
+ "@workflow/core": "5.0.0-beta.12",
29
+ "@workflow/rollup": "5.0.0-beta.12",
30
30
  "@workflow/swc-plugin": "5.0.0-beta.4",
31
- "@workflow/vite": "5.0.0-beta.10"
31
+ "@workflow/vite": "5.0.0-beta.12",
32
+ "@workflow/web": "5.0.0-beta.12"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@types/node": "22.19.0",