@workflow/cli 5.0.0-beta.29 → 5.0.0-beta.30

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":"cancel.d.ts","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAUzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAC4C;IAE9D,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAKb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IAUtB,MAAM,CAAC,IAAI;;MAKA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;MAgCV;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsIlC"}
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAUzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAC4C;IAE9D,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAKb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IAUtB,MAAM,CAAC,IAAI;;MAKA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;MAgCV;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwIlC"}
@@ -2,6 +2,7 @@ import readline from 'node:readline';
2
2
  import { Args, Flags } from '@oclif/core';
3
3
  import { cancelRun } from '@workflow/core/runtime';
4
4
  import { parseWorkflowName } from '@workflow/utils/parse-name';
5
+ import { WorkflowRunStatusSchema } from '@workflow/world';
5
6
  import chalk from 'chalk';
6
7
  import Table from 'easy-table';
7
8
  import { BaseCommand } from '../base.js';
@@ -40,7 +41,7 @@ export default class Cancel extends BaseCommand {
40
41
  status: Flags.string({
41
42
  description: 'Filter runs by status for bulk cancel',
42
43
  required: false,
43
- options: ['running', 'completed', 'failed', 'cancelled', 'pending'],
44
+ options: [...WorkflowRunStatusSchema.options],
44
45
  helpGroup: 'Bulk Cancel',
45
46
  helpLabel: '--status',
46
47
  }),
@@ -91,7 +92,9 @@ export default class Cancel extends BaseCommand {
91
92
  }
92
93
  // Fetch matching runs. Only metadata is needed to display and cancel, so
93
94
  // prefer the analytics read path when the backend provides one.
94
- const status = flags.status;
95
+ const status = flags.status
96
+ ? WorkflowRunStatusSchema.parse(flags.status)
97
+ : undefined;
95
98
  const limit = flags.limit || 50;
96
99
  const analytics = world.analytics;
97
100
  const fetchMatches = async () => {
@@ -194,4 +197,4 @@ async function promptConfirm(message) {
194
197
  });
195
198
  });
196
199
  }
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NhbmNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsbUNBQW1DLEdBQ3BDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RSxNQUFNLENBQUMsT0FBTyxPQUFPLE1BQU8sU0FBUSxXQUFXO0lBQzdDLE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLDJEQUEyRCxDQUFDO0lBRTlELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QixNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLDRCQUE0QjtRQUM1QixvQ0FBb0M7UUFDcEMsOERBQThEO1FBQzlELHVDQUF1QztLQUN4QyxDQUFDO0lBRUYsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFVO1FBQ3BCLElBQUksbUNBQW1DLENBQUMsS0FB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QUMsT0FBTyxFQUFFLEVBQUU7UUFDdEMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCB7IEFyZ3MsIEZsYWdzIH0gZnJvbSAnQG9jbGlmL2NvcmUnO1xuaW1wb3J0IHsgY2FuY2VsUnVuIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5pbXBvcnQgeyBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBUYWJsZSBmcm9tICdlYXN5LXRhYmxlJztcbmltcG9ydCB7IEJhc2VDb21tYW5kIH0gZnJvbSAnLi4vYmFzZS5qcyc7XG5pbXBvcnQgeyBMT0dHSU5HX0NPTkZJRywgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHtcbiAgZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UsXG4gIGlzT2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZEVycm9yLFxufSBmcm9tICcuLi9saWIvaW5zcGVjdC9lcnJvcnMuanMnO1xuaW1wb3J0IHsgY2xpRmxhZ3MgfSBmcm9tICcuLi9saWIvaW5zcGVjdC9mbGFncy5qcyc7XG5pbXBvcnQgeyBzZXR1cENsaVdvcmxkIH0gZnJvbSAnLi4vbGliL2luc3BlY3Qvc2V0dXAuanMnO1xuaW1wb3J0IHsgcGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlIH0gZnJvbSAnLi4vbGliL2luc3BlY3QvdGltZS13aW5kb3cuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYW5jZWwgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgJ0NhbmNlbCBhIHdvcmtmbG93IHJ1biwgb3IgYnVsay1jYW5jZWwgcnVucyBieSBzdGF0dXMvbmFtZSc7XG5cbiAgc3RhdGljIGFsaWFzZXMgPSBbJ2MnXTtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJyQgd29ya2Zsb3cgY2FuY2VsIDxydW4taWQ+JyxcbiAgICAnJCB3b3JrZmxvdyBjYW5jZWwgLS1zdGF0dXM9cnVubmluZycsXG4gICAgJyQgd29ya2Zsb3cgY2FuY2VsIC0tc3RhdHVzPXJ1bm5pbmcgLS13b3JrZmxvd05hbWU9bXlXb3JrZmxvdycsXG4gICAgJyQgd29ya2Zsb3cgY2FuY2VsIC0tc3RhdHVzPXJ1bm5pbmcgLXknLFxuICBdO1xuXG4gIGFzeW5jIGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UoKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSBlbHNlIGlmIChMT0dHSU5HX0NPTkZJRy5WRVJCT1NFX01PREUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIHJ1bklkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ0lEIG9mIHRoZSBydW4gdG8gY2FuY2VsIChvbWl0IGZvciBidWxrIG1vZGUgd2l0aCBmaWx0ZXJzKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgfSksXG4gIH0gYXMgY29uc3Q7XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLmNsaUZsYWdzLFxuICAgIHN0YXR1czogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIHJ1bnMgYnkgc3RhdHVzIGZvciBidWxrIGNhbmNlbCcsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbJ3J1bm5pbmcnLCAnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnLCAncGVuZGluZyddLFxuICAgICAgaGVscEdyb3VwOiAnQnVsayBDYW5jZWwnLFxuICAgICAgaGVscExhYmVsOiAnLS1zdGF0dXMnLFxuICAgIH0pLFxuICAgIHdvcmtmbG93TmFtZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIHJ1bnMgYnkgd29ya2Zsb3cgbmFtZSBmb3IgYnVsayBjYW5jZWwnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hhcjogJ24nLFxuICAgICAgaGVscEdyb3VwOiAnQnVsayBDYW5jZWwnLFxuICAgICAgaGVscExhYmVsOiAnLW4sIC0td29ya2Zsb3dOYW1lJyxcbiAgICB9KSxcbiAgICBsaW1pdDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBkZXNjcmlwdGlvbjogJ01heCBydW5zIHRvIGNhbmNlbCBpbiBidWxrIG1vZGUnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogNTAsXG4gICAgICBoZWxwR3JvdXA6ICdCdWxrIENhbmNlbCcsXG4gICAgICBoZWxwTGFiZWw6ICctLWxpbWl0JyxcbiAgICAgIGhlbHBWYWx1ZTogJ05VTUJFUicsXG4gICAgfSksXG4gICAgY29uZmlybTogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogJ1NraXAgaW50ZXJhY3RpdmUgY29uZmlybWF0aW9uIHByb21wdCcsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaGFyOiAneScsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGhlbHBHcm91cDogJ0J1bGsgQ2FuY2VsJyxcbiAgICAgIGhlbHBMYWJlbDogJy15LCAtLWNvbmZpcm0nLFxuICAgIH0pLFxuICB9O1xuXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncywgYXJncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDYW5jZWwpO1xuXG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCBzZXR1cENsaVdvcmxkKGZsYWdzLCB0aGlzLmNvbmZpZy52ZXJzaW9uKTtcbiAgICBpZiAoIXdvcmxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGYWlsZWQgdG8gY29ubmVjdCB0byBiYWNrZW5kLiBDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTaW5nbGUtcnVuIGNhbmNlbCAoZXhpc3RpbmcgYmVoYXZpb3IpXG4gICAgaWYgKGFyZ3MucnVuSWQpIHtcbiAgICAgIGF3YWl0IGNhbmNlbFJ1bih3b3JsZCwgYXJncy5ydW5JZCk7XG4gICAgICBsb2dnZXIubG9nKGNoYWxrLmdyZWVuKGBDYW5jZWxsZWQgcnVuICR7YXJncy5ydW5JZH1gKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQnVsayBtb2RlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBmaWx0ZXJcbiAgICBpZiAoIWZsYWdzLnN0YXR1cyAmJiAhZmxhZ3Mud29ya2Zsb3dOYW1lKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdQcm92aWRlIGEgcnVuIElEIG9yIHVzZSAtLXN0YXR1cy8tLXdvcmtmbG93TmFtZSB0byBidWxrIGNhbmNlbC5cXG4nICtcbiAgICAgICAgICAnRXhhbXBsZXM6XFxuJyArXG4gICAgICAgICAgJyAgd29ya2Zsb3cgY2FuY2VsIDxydW4taWQ+XFxuJyArXG4gICAgICAgICAgJyAgd29ya2Zsb3cgY2FuY2VsIC0tc3RhdHVzPXJ1bm5pbmdcXG4nICtcbiAgICAgICAgICAnICB3b3JrZmxvdyBjYW5jZWwgLS1zdGF0dXM9cnVubmluZyAtLXdvcmtmbG93TmFtZT1teVdvcmtmbG93J1xuICAgICAgKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBtYXRjaGluZyBydW5zLiBPbmx5IG1ldGFkYXRhIGlzIG5lZWRlZCB0byBkaXNwbGF5IGFuZCBjYW5jZWwsIHNvXG4gICAgLy8gcHJlZmVyIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoIHdoZW4gdGhlIGJhY2tlbmQgcHJvdmlkZXMgb25lLlxuICAgIGNvbnN0IHN0YXR1cyA9IGZsYWdzLnN0YXR1cyBhcyBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGltaXQgPSBmbGFncy5saW1pdCB8fCA1MDtcbiAgICBjb25zdCBhbmFseXRpY3MgPSB3b3JsZC5hbmFseXRpY3M7XG4gICAgY29uc3QgZmV0Y2hNYXRjaGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFhbmFseXRpY3MpIHtcbiAgICAgICAgcmV0dXJuIHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHdvcmtmbG93TmFtZTogZmxhZ3Mud29ya2Zsb3dOYW1lLFxuICAgICAgICAgIHBhZ2luYXRpb246IHsgbGltaXQgfSxcbiAgICAgICAgICByZXNvbHZlRGF0YTogJ25vbmUnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBhbmFseXRpY3MgYmFja2VuZCBkZWZhdWx0cyBpdHMgbGlzdGluZyB0byBhIHJlY2VudCB3aW5kb3dcbiAgICAgIC8vICh0cmFpbGluZyAyNGggb24gdGhlIFZlcmNlbCBiYWNrZW5kKSwgYnV0IGJ1bGsgY2FuY2VsIG11c3QgbWF0Y2hcbiAgICAgIC8vIGFjcm9zcyB0aGUgcGxhbidzIHdob2xlIG9ic2VydmFiaWxpdHkgd2luZG93IOKAlCBhIHJ1biBjYW4gc2xlZXAgb3JcbiAgICAgIC8vIHdhaXQgb24gYSBob29rIGZvciBkYXlzIHdpdGhvdXQgZW1pdHRpbmcgcmVjZW50IGV2ZW50cy4gUHJvYmUgZm9yXG4gICAgICAvLyB0aGUgcGxhbiB3aW5kb3cgYm91bmRzIGZpcnN0LCB0aGVuIG1hdGNoIGFjcm9zcyB0aGVtLlxuICAgICAgY29uc3QgcHJvYmUgPSBhd2FpdCBhbmFseXRpY3MucnVucy5saXN0KHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICB3b3JrZmxvd05hbWU6IGZsYWdzLndvcmtmbG93TmFtZSxcbiAgICAgICAgcGFnaW5hdGlvbjogeyBsaW1pdDogMSB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCB3aW5kb3dTdGFydCA9IHBsYW5XaW5kb3dTdGFydEZyb21SZXNwb25zZShwcm9iZSk7XG4gICAgICByZXR1cm4gYW5hbHl0aWNzLnJ1bnMubGlzdCh7XG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgd29ya2Zsb3dOYW1lOiBmbGFncy53b3JrZmxvd05hbWUsXG4gICAgICAgIC4uLih3aW5kb3dTdGFydFxuICAgICAgICAgID8geyBzdGFydFRpbWU6IHdpbmRvd1N0YXJ0LCBlbmRUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBwYWdpbmF0aW9uOiB7IGxpbWl0IH0sXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bkxpc3QgPSBhd2FpdCBmZXRjaE1hdGNoZXMoKTtcbiAgICBjb25zdCBydW5zID0ge1xuICAgICAgZGF0YTogcnVuTGlzdC5kYXRhLm1hcCgocnVuKSA9PiAoe1xuICAgICAgICBydW5JZDogcnVuLnJ1bklkLFxuICAgICAgICB3b3JrZmxvd05hbWU6IHJ1bi53b3JrZmxvd05hbWUsXG4gICAgICAgIHN0YXR1czogcnVuLnN0YXR1cyxcbiAgICAgICAgc3RhcnRlZEF0OiBydW4uc3RhcnRlZEF0LFxuICAgICAgfSkpLFxuICAgICAgaGFzTW9yZTogcnVuTGlzdC5oYXNNb3JlLFxuICAgIH07XG5cbiAgICBpZiAocnVucy5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIG1hdGNoaW5nIHJ1bnMgZm91bmQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSB3aGF0IHdpbGwgYmUgY2FuY2VsbGVkXG4gICAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoKTtcbiAgICBmb3IgKGNvbnN0IHJ1biBvZiBydW5zLmRhdGEpIHtcbiAgICAgIGNvbnN0IHNob3J0TmFtZSA9XG4gICAgICAgIHBhcnNlV29ya2Zsb3dOYW1lKHJ1bi53b3JrZmxvd05hbWUpPy5zaG9ydE5hbWUgfHwgcnVuLndvcmtmbG93TmFtZTtcbiAgICAgIHRhYmxlLmNlbGwoJ3J1bklkJywgcnVuLnJ1bklkKTtcbiAgICAgIHRhYmxlLmNlbGwoJ3dvcmtmbG93JywgY2hhbGsuYmx1ZUJyaWdodChzaG9ydE5hbWUpKTtcbiAgICAgIHRhYmxlLmNlbGwoJ3N0YXR1cycsIHJ1bi5zdGF0dXMpO1xuICAgICAgdGFibGUuY2VsbChcbiAgICAgICAgJ3N0YXJ0ZWRBdCcsXG4gICAgICAgIHJ1bi5zdGFydGVkQXQgPyBuZXcgRGF0ZShydW4uc3RhcnRlZEF0KS50b0lTT1N0cmluZygpIDogJy0nXG4gICAgICApO1xuICAgICAgdGFibGUubmV3Um93KCk7XG4gICAgfVxuICAgIGxvZ2dlci5sb2coYFxcbkZvdW5kICR7Y2hhbGsuYm9sZChydW5zLmRhdGEubGVuZ3RoKX0gcnVucyB0byBjYW5jZWw6XFxuYCk7XG4gICAgbG9nZ2VyLmxvZyh0YWJsZS50b1N0cmluZygpKTtcblxuICAgIGlmIChydW5zLmhhc01vcmUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgTW9yZSBydW5zIG1hdGNoIHRoZXNlIGZpbHRlcnMuIEluY3JlYXNlIC0tbGltaXQgKGN1cnJlbnRseSAke2ZsYWdzLmxpbWl0IHx8IDUwfSkgb3IgcmUtcnVuIHRvIGNhbmNlbCBhZGRpdGlvbmFsIHJ1bnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25maXJtIHVubGVzcyAtLWNvbmZpcm0vLXlcbiAgICBpZiAoIWZsYWdzLmNvbmZpcm0pIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHByb21wdENvbmZpcm0oXG4gICAgICAgIGBDYW5jZWwgJHtydW5zLmRhdGEubGVuZ3RofSBydW4ke3J1bnMuZGF0YS5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30/YFxuICAgICAgKTtcbiAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ0Fib3J0ZWQuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYW5jZWwgZWFjaCBydW4gd2l0aCBwcm9ncmVzc1xuICAgIGxldCBjYW5jZWxsZWQgPSAwO1xuICAgIGxldCBmYWlsZWQgPSAwO1xuICAgIGZvciAoY29uc3QgcnVuIG9mIHJ1bnMuZGF0YSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2FuY2VsUnVuKHdvcmxkLCBydW4ucnVuSWQpO1xuICAgICAgICBjYW5jZWxsZWQrKztcbiAgICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgICBjaGFsay5ncmVlbihgICDinJMgJHtydW4ucnVuSWR9YCkgK1xuICAgICAgICAgICAgY2hhbGsuZ3JheShgICgke2NhbmNlbGxlZH0vJHtydW5zLmRhdGEubGVuZ3RofSlgKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgZmFpbGVkKys7XG4gICAgICAgIGxvZ2dlci53YXJuKGAgIOKclyAke3J1bi5ydW5JZH06ICR7ZXJyLm1lc3NhZ2UgfHwgU3RyaW5nKGVycil9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmxvZyhcbiAgICAgIGBcXG5Eb25lOiAke2NoYWxrLmdyZWVuKGAke2NhbmNlbGxlZH0gY2FuY2VsbGVkYCl9JHtmYWlsZWQgPiAwID8gYCwgJHtjaGFsay5yZWQoYCR7ZmFpbGVkfSBmYWlsZWRgKX1gIDogJyd9YFxuICAgICk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0Q29uZmlybShtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gTm9uLVRUWTogYWJvcnQgc2luY2UgdXNlciBjYW5ub3QgY29uZmlybSBpbnRlcmFjdGl2ZWx5ICh1c2UgLXkvLS1jb25maXJtIHRvIHNraXAgcHJvbXB0KVxuICBpZiAoIXByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24oYCR7bWVzc2FnZX0gW3kvTl0gYCwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSAneScpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NhbmNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsbUNBQW1DLEdBQ3BDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RSxNQUFNLENBQUMsT0FBTyxPQUFPLE1BQU8sU0FBUSxXQUFXO0lBQzdDLE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLDJEQUEyRCxDQUFDO0lBRTlELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QixNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLDRCQUE0QjtRQUM1QixvQ0FBb0M7UUFDcEMsOERBQThEO1FBQzlELHVDQUF1QztLQUN4QyxDQUFDO0lBRUYsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFVO1FBQ3BCLElBQUksbUNBQW1DLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLDJEQUEyRDtZQUN4RSxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDO0tBQ00sQ0FBQztJQUVYLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLFFBQVE7UUFDWCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNuQixXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7WUFDN0MsU0FBUyxFQUFFLGFBQWE7WUFDeEIsU0FBUyxFQUFFLFVBQVU7U0FDdEIsQ0FBQztRQUNGLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLFdBQVcsRUFBRSw4Q0FBOEM7WUFDM0QsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsR0FBRztZQUNULFNBQVMsRUFBRSxhQUFhO1lBQ3hCLFNBQVMsRUFBRSxvQkFBb0I7U0FDaEMsQ0FBQztRQUNGLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25CLFdBQVcsRUFBRSxpQ0FBaUM7WUFDOUMsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUM7UUFDRixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNyQixXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxPQUFPLEVBQUUsS0FBSztZQUNkLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLFNBQVMsRUFBRSxlQUFlO1NBQzNCLENBQUM7S0FDSCxDQUFDO0lBRUssS0FBSyxDQUFDLEdBQUc7UUFDZCxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCxNQUFNLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUNiLHlEQUF5RCxDQUMxRCxDQUFDO1FBQ0osQ0FBQztRQUVELHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQ1YsbUVBQW1FO2dCQUNqRSxhQUFhO2dCQUNiLDhCQUE4QjtnQkFDOUIsc0NBQXNDO2dCQUN0Qyw4REFBOEQsQ0FDakUsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxnRUFBZ0U7UUFDaEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07WUFDekIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzdDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNyQixNQUFNO29CQUNOLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtvQkFDaEMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO29CQUNyQixXQUFXLEVBQUUsTUFBTTtpQkFDcEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELGdFQUFnRTtZQUNoRSxtRUFBbUU7WUFDbkUsb0VBQW9FO1lBQ3BFLG9FQUFvRTtZQUNwRSx3REFBd0Q7WUFDeEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDdEMsTUFBTTtnQkFDTixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQ2hDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDekIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDekIsTUFBTTtnQkFDTixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQ2hDLEdBQUcsQ0FBQyxXQUFXO29CQUNiLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQy9ELENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUc7WUFDWCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9CLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO2dCQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07Z0JBQ2xCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUzthQUN6QixDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87U0FDekIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxTQUFTLEdBQ2IsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQ3JFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQ1IsV0FBVyxFQUNYLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUM1RCxDQUFDO1lBQ0YsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FDVCw4REFBOEQsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLHdDQUF3QyxDQUN4SCxDQUFDO1FBQ0osQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBYSxDQUNuQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FDdEUsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QixPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNLENBQUMsR0FBRyxDQUNSLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNwRCxDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxDQUFDO2dCQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLENBQ1IsV0FBVyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxZQUFZLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM1RyxDQUFDO0lBQ0osQ0FBQzs7QUFHSCxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQWU7SUFDMUMsMkZBQTJGO0lBQzNGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksT0FBTyxDQUFVLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDdEMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCB7IEFyZ3MsIEZsYWdzIH0gZnJvbSAnQG9jbGlmL2NvcmUnO1xuaW1wb3J0IHsgY2FuY2VsUnVuIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5pbXBvcnQgeyBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7IFdvcmtmbG93UnVuU3RhdHVzU2NoZW1hIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgVGFibGUgZnJvbSAnZWFzeS10YWJsZSc7XG5pbXBvcnQgeyBCYXNlQ29tbWFuZCB9IGZyb20gJy4uL2Jhc2UuanMnO1xuaW1wb3J0IHsgTE9HR0lOR19DT05GSUcsIGxvZ2dlciB9IGZyb20gJy4uL2xpYi9jb25maWcvbG9nLmpzJztcbmltcG9ydCB7XG4gIGdldE9ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRNZXNzYWdlLFxuICBpc09ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRFcnJvcixcbn0gZnJvbSAnLi4vbGliL2luc3BlY3QvZXJyb3JzLmpzJztcbmltcG9ydCB7IGNsaUZsYWdzIH0gZnJvbSAnLi4vbGliL2luc3BlY3QvZmxhZ3MuanMnO1xuaW1wb3J0IHsgc2V0dXBDbGlXb3JsZCB9IGZyb20gJy4uL2xpYi9pbnNwZWN0L3NldHVwLmpzJztcbmltcG9ydCB7IHBsYW5XaW5kb3dTdGFydEZyb21SZXNwb25zZSB9IGZyb20gJy4uL2xpYi9pbnNwZWN0L3RpbWUtd2luZG93LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FuY2VsIGV4dGVuZHMgQmFzZUNvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgICdDYW5jZWwgYSB3b3JrZmxvdyBydW4sIG9yIGJ1bGstY2FuY2VsIHJ1bnMgYnkgc3RhdHVzL25hbWUnO1xuXG4gIHN0YXRpYyBhbGlhc2VzID0gWydjJ107XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICckIHdvcmtmbG93IGNhbmNlbCA8cnVuLWlkPicsXG4gICAgJyQgd29ya2Zsb3cgY2FuY2VsIC0tc3RhdHVzPXJ1bm5pbmcnLFxuICAgICckIHdvcmtmbG93IGNhbmNlbCAtLXN0YXR1cz1ydW5uaW5nIC0td29ya2Zsb3dOYW1lPW15V29ya2Zsb3cnLFxuICAgICckIHdvcmtmbG93IGNhbmNlbCAtLXN0YXR1cz1ydW5uaW5nIC15JyxcbiAgXTtcblxuICBhc3luYyBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGdldE9ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRNZXNzYWdlKCkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH0gZWxzZSBpZiAoTE9HR0lOR19DT05GSUcuVkVSQk9TRV9NT0RFKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBydW5JZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246ICdJRCBvZiB0aGUgcnVuIHRvIGNhbmNlbCAob21pdCBmb3IgYnVsayBtb2RlIHdpdGggZmlsdGVycyknLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0pLFxuICB9IGFzIGNvbnN0O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5jbGlGbGFncyxcbiAgICBzdGF0dXM6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ0ZpbHRlciBydW5zIGJ5IHN0YXR1cyBmb3IgYnVsayBjYW5jZWwnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgb3B0aW9uczogWy4uLldvcmtmbG93UnVuU3RhdHVzU2NoZW1hLm9wdGlvbnNdLFxuICAgICAgaGVscEdyb3VwOiAnQnVsayBDYW5jZWwnLFxuICAgICAgaGVscExhYmVsOiAnLS1zdGF0dXMnLFxuICAgIH0pLFxuICAgIHdvcmtmbG93TmFtZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIHJ1bnMgYnkgd29ya2Zsb3cgbmFtZSBmb3IgYnVsayBjYW5jZWwnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hhcjogJ24nLFxuICAgICAgaGVscEdyb3VwOiAnQnVsayBDYW5jZWwnLFxuICAgICAgaGVscExhYmVsOiAnLW4sIC0td29ya2Zsb3dOYW1lJyxcbiAgICB9KSxcbiAgICBsaW1pdDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBkZXNjcmlwdGlvbjogJ01heCBydW5zIHRvIGNhbmNlbCBpbiBidWxrIG1vZGUnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogNTAsXG4gICAgICBoZWxwR3JvdXA6ICdCdWxrIENhbmNlbCcsXG4gICAgICBoZWxwTGFiZWw6ICctLWxpbWl0JyxcbiAgICAgIGhlbHBWYWx1ZTogJ05VTUJFUicsXG4gICAgfSksXG4gICAgY29uZmlybTogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogJ1NraXAgaW50ZXJhY3RpdmUgY29uZmlybWF0aW9uIHByb21wdCcsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaGFyOiAneScsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGhlbHBHcm91cDogJ0J1bGsgQ2FuY2VsJyxcbiAgICAgIGhlbHBMYWJlbDogJy15LCAtLWNvbmZpcm0nLFxuICAgIH0pLFxuICB9O1xuXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncywgYXJncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDYW5jZWwpO1xuXG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCBzZXR1cENsaVdvcmxkKGZsYWdzLCB0aGlzLmNvbmZpZy52ZXJzaW9uKTtcbiAgICBpZiAoIXdvcmxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGYWlsZWQgdG8gY29ubmVjdCB0byBiYWNrZW5kLiBDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTaW5nbGUtcnVuIGNhbmNlbCAoZXhpc3RpbmcgYmVoYXZpb3IpXG4gICAgaWYgKGFyZ3MucnVuSWQpIHtcbiAgICAgIGF3YWl0IGNhbmNlbFJ1bih3b3JsZCwgYXJncy5ydW5JZCk7XG4gICAgICBsb2dnZXIubG9nKGNoYWxrLmdyZWVuKGBDYW5jZWxsZWQgcnVuICR7YXJncy5ydW5JZH1gKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQnVsayBtb2RlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBmaWx0ZXJcbiAgICBpZiAoIWZsYWdzLnN0YXR1cyAmJiAhZmxhZ3Mud29ya2Zsb3dOYW1lKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdQcm92aWRlIGEgcnVuIElEIG9yIHVzZSAtLXN0YXR1cy8tLXdvcmtmbG93TmFtZSB0byBidWxrIGNhbmNlbC5cXG4nICtcbiAgICAgICAgICAnRXhhbXBsZXM6XFxuJyArXG4gICAgICAgICAgJyAgd29ya2Zsb3cgY2FuY2VsIDxydW4taWQ+XFxuJyArXG4gICAgICAgICAgJyAgd29ya2Zsb3cgY2FuY2VsIC0tc3RhdHVzPXJ1bm5pbmdcXG4nICtcbiAgICAgICAgICAnICB3b3JrZmxvdyBjYW5jZWwgLS1zdGF0dXM9cnVubmluZyAtLXdvcmtmbG93TmFtZT1teVdvcmtmbG93J1xuICAgICAgKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBtYXRjaGluZyBydW5zLiBPbmx5IG1ldGFkYXRhIGlzIG5lZWRlZCB0byBkaXNwbGF5IGFuZCBjYW5jZWwsIHNvXG4gICAgLy8gcHJlZmVyIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoIHdoZW4gdGhlIGJhY2tlbmQgcHJvdmlkZXMgb25lLlxuICAgIGNvbnN0IHN0YXR1cyA9IGZsYWdzLnN0YXR1c1xuICAgICAgPyBXb3JrZmxvd1J1blN0YXR1c1NjaGVtYS5wYXJzZShmbGFncy5zdGF0dXMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW1pdCA9IGZsYWdzLmxpbWl0IHx8IDUwO1xuICAgIGNvbnN0IGFuYWx5dGljcyA9IHdvcmxkLmFuYWx5dGljcztcbiAgICBjb25zdCBmZXRjaE1hdGNoZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWFuYWx5dGljcykge1xuICAgICAgICByZXR1cm4gd29ybGQucnVucy5saXN0KHtcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgd29ya2Zsb3dOYW1lOiBmbGFncy53b3JrZmxvd05hbWUsXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBsaW1pdCB9LFxuICAgICAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGFuYWx5dGljcyBiYWNrZW5kIGRlZmF1bHRzIGl0cyBsaXN0aW5nIHRvIGEgcmVjZW50IHdpbmRvd1xuICAgICAgLy8gKHRyYWlsaW5nIDI0aCBvbiB0aGUgVmVyY2VsIGJhY2tlbmQpLCBidXQgYnVsayBjYW5jZWwgbXVzdCBtYXRjaFxuICAgICAgLy8gYWNyb3NzIHRoZSBwbGFuJ3Mgd2hvbGUgb2JzZXJ2YWJpbGl0eSB3aW5kb3cg4oCUIGEgcnVuIGNhbiBzbGVlcCBvclxuICAgICAgLy8gd2FpdCBvbiBhIGhvb2sgZm9yIGRheXMgd2l0aG91dCBlbWl0dGluZyByZWNlbnQgZXZlbnRzLiBQcm9iZSBmb3JcbiAgICAgIC8vIHRoZSBwbGFuIHdpbmRvdyBib3VuZHMgZmlyc3QsIHRoZW4gbWF0Y2ggYWNyb3NzIHRoZW0uXG4gICAgICBjb25zdCBwcm9iZSA9IGF3YWl0IGFuYWx5dGljcy5ydW5zLmxpc3Qoe1xuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHdvcmtmbG93TmFtZTogZmxhZ3Mud29ya2Zsb3dOYW1lLFxuICAgICAgICBwYWdpbmF0aW9uOiB7IGxpbWl0OiAxIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHdpbmRvd1N0YXJ0ID0gcGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlKHByb2JlKTtcbiAgICAgIHJldHVybiBhbmFseXRpY3MucnVucy5saXN0KHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICB3b3JrZmxvd05hbWU6IGZsYWdzLndvcmtmbG93TmFtZSxcbiAgICAgICAgLi4uKHdpbmRvd1N0YXJ0XG4gICAgICAgICAgPyB7IHN0YXJ0VGltZTogd2luZG93U3RhcnQsIGVuZFRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIHBhZ2luYXRpb246IHsgbGltaXQgfSxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcnVuTGlzdCA9IGF3YWl0IGZldGNoTWF0Y2hlcygpO1xuICAgIGNvbnN0IHJ1bnMgPSB7XG4gICAgICBkYXRhOiBydW5MaXN0LmRhdGEubWFwKChydW4pID0+ICh7XG4gICAgICAgIHJ1bklkOiBydW4ucnVuSWQsXG4gICAgICAgIHdvcmtmbG93TmFtZTogcnVuLndvcmtmbG93TmFtZSxcbiAgICAgICAgc3RhdHVzOiBydW4uc3RhdHVzLFxuICAgICAgICBzdGFydGVkQXQ6IHJ1bi5zdGFydGVkQXQsXG4gICAgICB9KSksXG4gICAgICBoYXNNb3JlOiBydW5MaXN0Lmhhc01vcmUsXG4gICAgfTtcblxuICAgIGlmIChydW5zLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gbWF0Y2hpbmcgcnVucyBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEaXNwbGF5IHdoYXQgd2lsbCBiZSBjYW5jZWxsZWRcbiAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSgpO1xuICAgIGZvciAoY29uc3QgcnVuIG9mIHJ1bnMuZGF0YSkge1xuICAgICAgY29uc3Qgc2hvcnROYW1lID1cbiAgICAgICAgcGFyc2VXb3JrZmxvd05hbWUocnVuLndvcmtmbG93TmFtZSk/LnNob3J0TmFtZSB8fCBydW4ud29ya2Zsb3dOYW1lO1xuICAgICAgdGFibGUuY2VsbCgncnVuSWQnLCBydW4ucnVuSWQpO1xuICAgICAgdGFibGUuY2VsbCgnd29ya2Zsb3cnLCBjaGFsay5ibHVlQnJpZ2h0KHNob3J0TmFtZSkpO1xuICAgICAgdGFibGUuY2VsbCgnc3RhdHVzJywgcnVuLnN0YXR1cyk7XG4gICAgICB0YWJsZS5jZWxsKFxuICAgICAgICAnc3RhcnRlZEF0JyxcbiAgICAgICAgcnVuLnN0YXJ0ZWRBdCA/IG5ldyBEYXRlKHJ1bi5zdGFydGVkQXQpLnRvSVNPU3RyaW5nKCkgOiAnLSdcbiAgICAgICk7XG4gICAgICB0YWJsZS5uZXdSb3coKTtcbiAgICB9XG4gICAgbG9nZ2VyLmxvZyhgXFxuRm91bmQgJHtjaGFsay5ib2xkKHJ1bnMuZGF0YS5sZW5ndGgpfSBydW5zIHRvIGNhbmNlbDpcXG5gKTtcbiAgICBsb2dnZXIubG9nKHRhYmxlLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKHJ1bnMuaGFzTW9yZSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBNb3JlIHJ1bnMgbWF0Y2ggdGhlc2UgZmlsdGVycy4gSW5jcmVhc2UgLS1saW1pdCAoY3VycmVudGx5ICR7ZmxhZ3MubGltaXQgfHwgNTB9KSBvciByZS1ydW4gdG8gY2FuY2VsIGFkZGl0aW9uYWwgcnVucy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbmZpcm0gdW5sZXNzIC0tY29uZmlybS8teVxuICAgIGlmICghZmxhZ3MuY29uZmlybSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgcHJvbXB0Q29uZmlybShcbiAgICAgICAgYENhbmNlbCAke3J1bnMuZGF0YS5sZW5ndGh9IHJ1biR7cnVucy5kYXRhLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfT9gXG4gICAgICApO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZygnQWJvcnRlZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbmNlbCBlYWNoIHJ1biB3aXRoIHByb2dyZXNzXG4gICAgbGV0IGNhbmNlbGxlZCA9IDA7XG4gICAgbGV0IGZhaWxlZCA9IDA7XG4gICAgZm9yIChjb25zdCBydW4gb2YgcnVucy5kYXRhKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjYW5jZWxSdW4od29ybGQsIHJ1bi5ydW5JZCk7XG4gICAgICAgIGNhbmNlbGxlZCsrO1xuICAgICAgICBsb2dnZXIubG9nKFxuICAgICAgICAgIGNoYWxrLmdyZWVuKGAgIOKckyAke3J1bi5ydW5JZH1gKSArXG4gICAgICAgICAgICBjaGFsay5ncmF5KGAgKCR7Y2FuY2VsbGVkfS8ke3J1bnMuZGF0YS5sZW5ndGh9KWApXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBmYWlsZWQrKztcbiAgICAgICAgbG9nZ2VyLndhcm4oYCAg4pyXICR7cnVuLnJ1bklkfTogJHtlcnIubWVzc2FnZSB8fCBTdHJpbmcoZXJyKX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKFxuICAgICAgYFxcbkRvbmU6ICR7Y2hhbGsuZ3JlZW4oYCR7Y2FuY2VsbGVkfSBjYW5jZWxsZWRgKX0ke2ZhaWxlZCA+IDAgPyBgLCAke2NoYWxrLnJlZChgJHtmYWlsZWR9IGZhaWxlZGApfWAgOiAnJ31gXG4gICAgKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRDb25maXJtKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyBOb24tVFRZOiBhYm9ydCBzaW5jZSB1c2VyIGNhbm5vdCBjb25maXJtIGludGVyYWN0aXZlbHkgKHVzZSAteS8tLWNvbmZpcm0gdG8gc2tpcCBwcm9tcHQpXG4gIGlmICghcHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICBybC5xdWVzdGlvbihgJHttZXNzYWdlfSBbeS9OXSBgLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICd5Jyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuBzC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,WAAW,SAA6C;IAE/D,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAOb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IAgBtB,MAAM,CAAC,IAAI;;;MA+BA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;MA8ED;IAEE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwHlC"}
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuBzC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,WAAW,SAA6C;IAE/D,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAOb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IAgBtB,MAAM,CAAC,IAAI;;;MA+BA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;MA8ED;IAEE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwHlC"}
@@ -1,5 +1,6 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';
3
+ import { WorkflowRunStatusSchema } from '@workflow/world';
3
4
  import { BaseCommand } from '../base.js';
4
5
  import { LOGGING_CONFIG, logger } from '../lib/config/log.js';
5
6
  import { getObservabilityUpgradeRequiredMessage, isObservabilityUpgradeRequiredError, } from '../lib/inspect/errors.js';
@@ -105,7 +106,7 @@ export default class Inspect extends BaseCommand {
105
106
  status: Flags.string({
106
107
  description: 'filter runs by status (only for runs)',
107
108
  required: false,
108
- options: ['running', 'completed', 'failed', 'cancelled', 'pending'],
109
+ options: [...WorkflowRunStatusSchema.options],
109
110
  helpGroup: 'Filtering',
110
111
  helpLabel: '--status',
111
112
  }),
@@ -250,7 +251,9 @@ function toInspectOptions(flags) {
250
251
  sort: flags.sort,
251
252
  limit: flags.limit,
252
253
  workflowName: flags.workflowName,
253
- status: flags.status,
254
+ status: flags.status
255
+ ? WorkflowRunStatusSchema.parse(flags.status)
256
+ : undefined,
254
257
  since: flags.since,
255
258
  until: flags.until,
256
259
  withData: flags.withData,
@@ -279,4 +282,4 @@ function normalizeResource(value) {
279
282
  return 'web';
280
283
  return undefined;
281
284
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zcGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbnNwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLG1DQUFtQyxHQUNwQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLFdBQVc7SUFDOUMsTUFBTSxDQUFDLFdBQVcsR0FBRyx5Q0FBeUMsQ0FBQztJQUUvRCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdkIsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLGtFQUFrRTtRQUNsRSwwQkFBMEI7UUFDMUIseURBQXlEO1FBQ3pELGtFQUFrRTtLQUNuRSxDQUFDO0lBRUYsS0FBSyxD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VSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3pDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUN2QyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDckMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNwQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tICdAb2NsaWYvY29yZSc7XG5pbXBvcnQgeyBWRVJDRUxfNDAzX0VSUk9SX01FU1NBR0UgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IEJhc2VDb21tYW5kIH0gZnJvbSAnLi4vYmFzZS5qcyc7XG5pbXBvcnQgeyBMT0dHSU5HX0NPTkZJRywgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnNwZWN0Q0xJT3B0aW9ucyB9IGZyb20gJy4uL2xpYi9jb25maWcvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UsXG4gIGlzT2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZEVycm9yLFxufSBmcm9tICcuLi9saWIvaW5zcGVjdC9lcnJvcnMuanMnO1xuaW1wb3J0IHsgY2xpRmxhZ3MsIHVybEZsYWcgfSBmcm9tICcuLi9saWIvaW5zcGVjdC9mbGFncy5qcyc7XG5pbXBvcnQge1xuICBsaXN0RXZlbnRzLFxuICBsaXN0SG9va3MsXG4gIGxpc3RSdW5zLFxuICBsaXN0U2xlZXBzLFxuICBsaXN0U3RlcHMsXG4gIGxpc3RTdHJlYW1zQnlSdW5JZCxcbiAgc2hvd0hvb2ssXG4gIHNob3dSdW4sXG4gIHNob3dTdGVwLFxuICBzaG93U3RyZWFtLFxufSBmcm9tICcuLi9saWIvaW5zcGVjdC9vdXRwdXQuanMnO1xuaW1wb3J0IHsgc2V0dXBDbGlXb3JsZCB9IGZyb20gJy4uL2xpYi9pbnNwZWN0L3NldHVwLmpzJztcbmltcG9ydCB7IGxhdW5jaFdlYlVJLCBwcmludERlZXBMaW5rIH0gZnJvbSAnLi4vbGliL2luc3BlY3Qvd2ViLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zcGVjdCBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gJ0luc3BlY3QgcnVucywgc3RlcHMsIHN0cmVhbXMsIG9yIGV2ZW50cyc7XG5cbiAgc3RhdGljIGFsaWFzZXMgPSBbJ2knXTtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJyQgd29ya2Zsb3cgaW5zcGVjdCBydW5zJyxcbiAgICAnJCB3b3JrZmxvdyBpbnNwZWN0IHJ1bnMnLFxuICAgICckIHdvcmtmbG93IGluc3BlY3QgZXZlbnRzIC0tc3RlcD1zdGVwXzAxSzVXQUpaOFczNjdDVjJSRktEU0ROV0I4JyxcbiAgICAnJCB3b3JrZmxvdyBpbnNwZWN0IGhvb2tzJyxcbiAgICAnJCB3b3JrZmxvdyBpbnNwZWN0IGhvb2sgaG9va18wMUs1V0FKWjhXMzY3Q1YyUkZLRFNETldCOCcsXG4gICAgJyQgd29ya2Zsb3cgaW5zcGVjdCBzbGVlcHMgLS1ydW5JZD1ydW5fMDFLNVdBSlo4VzM2N0NWMlJGS0RTRE5XQjgnLFxuICBdO1xuXG4gIGFzeW5jIGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgNDAzIGVycm9yIGZyb20gdGhlIFZlcmNlbCBiYWNrZW5kXG4gICAgaWYgKGlzT2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGdldE9ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRNZXNzYWdlKCkpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3I/LnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFO1xuICAgICAgbG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgIH0gZWxzZSBpZiAoTE9HR0lOR19DT05GSUcuVkVSQk9TRV9NT0RFKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3I6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICByZXNvdXJjZTogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICd3aGF0IHRvIGluc3BlY3Q6IHJ1bihzKSB8IHN0ZXAocykgfCBzdHJlYW0ocykgfCBldmVudChzKSB8IGhvb2socykgfCBzbGVlcChzKScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgJ3InLFxuICAgICAgICAncnVuJyxcbiAgICAgICAgJ3J1bnMnLFxuICAgICAgICAncycsXG4gICAgICAgICdzdGVwJyxcbiAgICAgICAgJ3N0ZXBzJyxcbiAgICAgICAgJ2UnLFxuICAgICAgICAnZXZlbnQnLFxuICAgICAgICAnZXZlbnRzJyxcbiAgICAgICAgJ3N0JyxcbiAgICAgICAgJ3N0cmVhbScsXG4gICAgICAgICdzdHJlYW1zJyxcbiAgICAgICAgJ2gnLFxuICAgICAgICAnaG9vaycsXG4gICAgICAgICdob29rcycsXG4gICAgICAgICd3JyxcbiAgICAgICAgJ3dlYicsXG4gICAgICAgICdzbGVlcCcsXG4gICAgICAgICdzbGVlcHMnLFxuICAgICAgXSxcbiAgICB9KSxcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246ICdJRCBvZiB0aGUgcmVzb3VyY2UgaWYgaW5zcGVjdGluZyBhIHNwZWNpZmljIGl0ZW0nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0pLFxuICB9IGFzIGNvbnN0O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICBydW5JZDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUnVuIElEIHRvIGZpbHRlciBieSAocmVxdWlyZWQgZm9yIHN0ZXBzLCBzbGVlcHMsIGFuZCBldmVudHMuIE9wdGlvbmFsIGZvciBob29rcy4pJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNoYXI6ICdyJyxcbiAgICAgIGFsaWFzZXM6IFsncnVuJ10sXG4gICAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgICAgaGVscExhYmVsOiAnLXIsIC0tcnVuSWQnLFxuICAgICAgaGVscFZhbHVlOiAnUlVOX0lEJyxcbiAgICB9KSxcbiAgICBzdGVwSWQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3N0ZXAgSUQgdG8gZmlsdGVyIGJ5IChvbmx5IGZvciBldmVudHMpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNoYXI6ICdzJyxcbiAgICAgIGFsaWFzZXM6IFsnc3RlcCddLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy1zLCAtLXN0ZXBJZCcsXG4gICAgICBoZWxwVmFsdWU6ICdTVEVQX0lEJyxcbiAgICB9KSxcbiAgICBob29rSWQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ2hvb2sgSUQgdG8gZmlsdGVyIGJ5IChvbmx5IGZvciBldmVudHMpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGFsaWFzZXM6IFsnaG9vayddLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy0taG9va0lkJyxcbiAgICAgIGhlbHBWYWx1ZTogJ0hPT0tfSUQnLFxuICAgIH0pLFxuICAgIHdvcmtmbG93TmFtZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnd29ya2Zsb3cgbmFtZSB0byBmaWx0ZXIgYnkgKG9ubHkgZm9yIHJ1bnMpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNoYXI6ICduJyxcbiAgICAgIGFsaWFzZXM6IFsnd29ya2Zsb3cnXSxcbiAgICAgIGhlbHBHcm91cDogJ0ZpbHRlcmluZycsXG4gICAgICBoZWxwTGFiZWw6ICctbiwgLS13b3JrZmxvd05hbWUnLFxuICAgIH0pLFxuICAgIHN0YXR1czogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnZmlsdGVyIHJ1bnMgYnkgc3RhdHVzIChvbmx5IGZvciBydW5zKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbJ3J1bm5pbmcnLCAnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnLCAncGVuZGluZyddLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy0tc3RhdHVzJyxcbiAgICB9KSxcbiAgICBzaW5jZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnbGlzdCBydW5zIGFjdGl2ZSBzaW5jZSBhIHJlbGF0aXZlIGR1cmF0aW9uICgzMG0sIDEyaCwgN2QsIDJ3KSBvciB0aW1lc3RhbXA7IGRlZmF1bHRzIHRvIHRoZSBiYWNrZW5kIHdpbmRvdyAob25seSBmb3IgcnVucyknLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy0tc2luY2UnLFxuICAgICAgaGVscFZhbHVlOiAnRFVSQVRJT058VElNRVNUQU1QJyxcbiAgICB9KSxcbiAgICB1bnRpbDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnZW5kIG9mIHRoZSAtLXNpbmNlIGxpc3Rpbmcgd2luZG93LCBhcyBhIHJlbGF0aXZlIGR1cmF0aW9uIG9yIHRpbWVzdGFtcDsgZGVmYXVsdHMgdG8gbm93IChvbmx5IGZvciBydW5zKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgICAgaGVscExhYmVsOiAnLS11bnRpbCcsXG4gICAgICBoZWxwVmFsdWU6ICdEVVJBVElPTnxUSU1FU1RBTVAnLFxuICAgIH0pLFxuICAgIHdpdGhEYXRhOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnaW5jbHVkZSBmdWxsIGlucHV0L291dHB1dCBkYXRhIGluIGxpc3Qgdmlld3MgKGRlcHJlY2F0ZWQgZm9yIGxpc3Qgdmlld3Mg4oCUIHVzZSBgaW5zcGVjdCA8cmVzb3VyY2U+IDxpZD5gIHRvIHZpZXcgcGF5bG9hZHMpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNoYXI6ICdkJyxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnRGlzcGxheScsXG4gICAgICBoZWxwTGFiZWw6ICctZCwgLS13aXRoRGF0YScsXG4gICAgfSksXG4gICAgZGVjcnlwdDogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ2RlY3J5cHQgZW5jcnlwdGVkIHZhbHVlcyAodHJpZ2dlcnMgYXVkaXQtbG9nZ2VkIGtleSByZXRyaWV2YWwpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnRGlzcGxheScsXG4gICAgICBoZWxwTGFiZWw6ICctLWRlY3J5cHQnLFxuICAgIH0pLFxuICAgIC4uLmNsaUZsYWdzLFxuICAgIC4uLnVybEZsYWcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShJbnNwZWN0KTtcblxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBub3JtYWxpemVSZXNvdXJjZShhcmdzLnJlc291cmNlKTtcbiAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5sb2dFcnJvcihcbiAgICAgICAgICBgVW5rbm93biByZXNvdXJjZSBcIiR7YXJncy5yZXNvdXJjZX1cIjogbXVzdCBiZSBvbmUgb2Y6IHJ1bihzKSwgc3RlcChzKSwgc3RyZWFtKHMpLCBldmVudChzKSwgaG9vayhzKSwgc2xlZXAocylgXG4gICAgICAgICk7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlkID0gYXJncy5pZDtcblxuICAgICAgLy8gUHJpbnQtb25seSBkZWVwIGxpbms6IHJlc29sdmUgY29uZmlnIGFuZCBlbWl0IHRoZSBVUkwsIG5vIGJyb3dzZXIvc2VydmVyLlxuICAgICAgaWYgKGZsYWdzLnVybCkge1xuICAgICAgICBjb25zdCBhY3R1YWxSZXNvdXJjZSA9IHJlc291cmNlID09PSAnd2ViJyA/ICdydW4nIDogcmVzb3VyY2U7XG4gICAgICAgIGF3YWl0IHByaW50RGVlcExpbmsoYWN0dWFsUmVzb3VyY2UsIGlkLCBmbGFncywgdGhpcy5jb25maWcudmVyc2lvbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHdlYiBtb2RlLCBhbGxvdyBjb25maWcgZXJyb3JzIHNvIHdlIGNhbiBvcGVuIHRoZSB3ZWIgVUkgZm9yIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IGlzV2ViTW9kZSA9IGZsYWdzLndlYiB8fCByZXNvdXJjZSA9PT0gJ3dlYic7XG4gICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHNldHVwQ2xpV29ybGQoZmxhZ3MsIHRoaXMuY29uZmlnLnZlcnNpb24sIGlzV2ViTW9kZSk7XG5cbiAgICAgIC8vIEhhbmRsZSB3ZWIgVUkgbW9kZVxuICAgICAgaWYgKGlzV2ViTW9kZSkge1xuICAgICAgICBjb25zdCBhY3R1YWxSZXNvdXJjZSA9IHJlc291cmNlID09PSAnd2ViJyA/ICdydW4nIDogcmVzb3VyY2U7XG4gICAgICAgIGF3YWl0IGxhdW5jaFdlYlVJKGFjdHVhbFJlc291cmNlLCBpZCwgZmxhZ3MsIHRoaXMuY29uZmlnLnZlcnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBub24td2ViIGNvbW1hbmRzLCB3ZSBuZWVkIGEgdmFsaWQgd29ybGRcbiAgICAgIGlmICghd29ybGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdGYWlsZWQgdG8gY29ubmVjdCB0byBiYWNrZW5kLiBDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDb252ZXJ0IGZsYWdzIHRvIEluc3BlY3RDTElPcHRpb25zIHdpdGggcHJvcGVyIHR5cGluZ1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRvSW5zcGVjdE9wdGlvbnMoZmxhZ3MpO1xuXG4gICAgICBpZiAocmVzb3VyY2UgPT09ICdydW4nKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dSdW4od29ybGQsIGlkLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBsaXN0UnVucyh3b3JsZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2UgPT09ICdzdGVwJykge1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICBhd2FpdCBzaG93U3RlcCh3b3JsZCwgaWQsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGxpc3RTdGVwcyh3b3JsZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2UgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dTdHJlYW0od29ybGQsIGlkLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBsaXN0U3RyZWFtc0J5UnVuSWQod29ybGQsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlID09PSAnZXZlbnQnKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIHRoaXMubG9nRXJyb3IoXG4gICAgICAgICAgICAnRXZlbnQtSUQgaXMgbm90IHN1cHBvcnRlZCBmb3IgZXZlbnRzLiBGaWx0ZXIgYnkgcnVuLWlkIG9yIHN0ZXAtaWQgaW5zdGVhZC4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IGV2ZW50cyAtLXJ1bklkPTxpZD5gJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGxpc3RFdmVudHMod29ybGQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dIb29rKHdvcmxkLCBpZCwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgbGlzdEhvb2tzKHdvcmxkLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ3NsZWVwJykge1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICB0aGlzLmxvZ0Vycm9yKFxuICAgICAgICAgICAgJ1NsZWVwLUlEIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsZWVwcy4gRmlsdGVyIGJ5IHJ1bi1pZCBpbnN0ZWFkLiBVc2FnZTogYHdvcmtmbG93IGluc3BlY3Qgc2xlZXBzIC0tcnVuSWQ9PGlkPmAnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmbGFncy5ydW5JZCkge1xuICAgICAgICAgIHRoaXMubG9nRXJyb3IoXG4gICAgICAgICAgICAncnVuLWlkIGlzIHJlcXVpcmVkIGZvciBsaXN0aW5nIHNsZWVwcy4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IHNsZWVwcyAtLXJ1bklkPTxpZD5gJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGxpc3RTbGVlcHMod29ybGQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nRXJyb3IoXG4gICAgICAgIGBVbmtub3duIHJlc291cmNlOiAke3Jlc291cmNlfS4gVXNhZ2U6ICR7SW5zcGVjdC5leGFtcGxlcy5qb2luKCdcXG4nKX1gXG4gICAgICApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExldCB0aGUgY2F0Y2ggaGFuZGxlciBkZWFsIHdpdGggaXQsIGJ1dCBlbnN1cmUgd2UgZXhpdFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvSW5zcGVjdE9wdGlvbnMoZmxhZ3M6IGFueSk6IEluc3BlY3RDTElPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBqc29uOiBmbGFncy5qc29uLFxuICAgIHJ1bklkOiBmbGFncy5ydW5JZCxcbiAgICBzdGVwSWQ6IGZsYWdzLnN0ZXBJZCxcbiAgICBjdXJzb3I6IGZsYWdzLmN1cnNvcixcbiAgICBzb3J0OiBmbGFncy5zb3J0IGFzICdhc2MnIHwgJ2Rlc2MnIHwgdW5kZWZpbmVkLFxuICAgIGxpbWl0OiBmbGFncy5saW1pdCxcbiAgICB3b3JrZmxvd05hbWU6IGZsYWdzLndvcmtmbG93TmFtZSxcbiAgICBzdGF0dXM6IGZsYWdzLnN0YXR1cyxcbiAgICBzaW5jZTogZmxhZ3Muc2luY2UsXG4gICAgdW50aWw6IGZsYWdzLnVudGlsLFxuICAgIHdpdGhEYXRhOiBmbGFncy53aXRoRGF0YSxcbiAgICBkZWNyeXB0OiBmbGFncy5kZWNyeXB0LFxuICAgIGJhY2tlbmQ6IGZsYWdzLmJhY2tlbmQsXG4gICAgaW50ZXJhY3RpdmU6IGZsYWdzLmludGVyYWN0aXZlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSZXNvdXJjZShcbiAgdmFsdWU/OiBzdHJpbmdcbik6ICdydW4nIHwgJ3N0ZXAnIHwgJ3N0cmVhbScgfCAnZXZlbnQnIHwgJ2hvb2snIHwgJ3dlYicgfCAnc2xlZXAnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdiA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIGlmICh2LnN0YXJ0c1dpdGgoJ3InKSkgcmV0dXJuICdydW4nO1xuICBpZiAodi5zdGFydHNXaXRoKCdlJykpIHJldHVybiAnZXZlbnQnO1xuICBpZiAodi5zdGFydHNXaXRoKCdzdHInKSkgcmV0dXJuICdzdHJlYW0nO1xuICBpZiAodi5zdGFydHNXaXRoKCdzbCcpKSByZXR1cm4gJ3NsZWVwJztcbiAgaWYgKHYuc3RhcnRzV2l0aCgncycpKSByZXR1cm4gJ3N0ZXAnO1xuICBpZiAodi5zdGFydHNXaXRoKCdoJykpIHJldHVybiAnaG9vayc7XG4gIGlmICh2LnN0YXJ0c1dpdGgoJ3cnKSkgcmV0dXJuICd3ZWInO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zcGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbnNwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLG1DQUFtQyxHQUNwQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLFdBQVc7SUFDOUMsTUFBTSxDQUFDLFdBQVcsR0FBRyx5Q0FBeUMsQ0FBQztJQUUvRCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdkIsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLGtFQUFrRTtRQUNsRSwwQkFBMEI7UUFD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T0FBTyxLQUFLLENBQUM7SUFDcEMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN6QyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDdkMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MsIEZsYWdzIH0gZnJvbSAnQG9jbGlmL2NvcmUnO1xuaW1wb3J0IHsgVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBXb3JrZmxvd1J1blN0YXR1c1NjaGVtYSB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBCYXNlQ29tbWFuZCB9IGZyb20gJy4uL2Jhc2UuanMnO1xuaW1wb3J0IHsgTE9HR0lOR19DT05GSUcsIGxvZ2dlciB9IGZyb20gJy4uL2xpYi9jb25maWcvbG9nLmpzJztcbmltcG9ydCB0eXBlIHsgSW5zcGVjdENMSU9wdGlvbnMgfSBmcm9tICcuLi9saWIvY29uZmlnL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGdldE9ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRNZXNzYWdlLFxuICBpc09ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRFcnJvcixcbn0gZnJvbSAnLi4vbGliL2luc3BlY3QvZXJyb3JzLmpzJztcbmltcG9ydCB7IGNsaUZsYWdzLCB1cmxGbGFnIH0gZnJvbSAnLi4vbGliL2luc3BlY3QvZmxhZ3MuanMnO1xuaW1wb3J0IHtcbiAgbGlzdEV2ZW50cyxcbiAgbGlzdEhvb2tzLFxuICBsaXN0UnVucyxcbiAgbGlzdFNsZWVwcyxcbiAgbGlzdFN0ZXBzLFxuICBsaXN0U3RyZWFtc0J5UnVuSWQsXG4gIHNob3dIb29rLFxuICBzaG93UnVuLFxuICBzaG93U3RlcCxcbiAgc2hvd1N0cmVhbSxcbn0gZnJvbSAnLi4vbGliL2luc3BlY3Qvb3V0cHV0LmpzJztcbmltcG9ydCB7IHNldHVwQ2xpV29ybGQgfSBmcm9tICcuLi9saWIvaW5zcGVjdC9zZXR1cC5qcyc7XG5pbXBvcnQgeyBsYXVuY2hXZWJVSSwgcHJpbnREZWVwTGluayB9IGZyb20gJy4uL2xpYi9pbnNwZWN0L3dlYi5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc3BlY3QgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9ICdJbnNwZWN0IHJ1bnMsIHN0ZXBzLCBzdHJlYW1zLCBvciBldmVudHMnO1xuXG4gIHN0YXRpYyBhbGlhc2VzID0gWydpJ107XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICckIHdvcmtmbG93IGluc3BlY3QgcnVucycsXG4gICAgJyQgd29ya2Zsb3cgaW5zcGVjdCBydW5zJyxcbiAgICAnJCB3b3JrZmxvdyBpbnNwZWN0IGV2ZW50cyAtLXN0ZXA9c3RlcF8wMUs1V0FKWjhXMzY3Q1YyUkZLRFNETldCOCcsXG4gICAgJyQgd29ya2Zsb3cgaW5zcGVjdCBob29rcycsXG4gICAgJyQgd29ya2Zsb3cgaW5zcGVjdCBob29rIGhvb2tfMDFLNVdBSlo4VzM2N0NWMlJGS0RTRE5XQjgnLFxuICAgICckIHdvcmtmbG93IGluc3BlY3Qgc2xlZXBzIC0tcnVuSWQ9cnVuXzAxSzVXQUpaOFczNjdDVjJSRktEU0ROV0I4JyxcbiAgXTtcblxuICBhc3luYyBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIDQwMyBlcnJvciBmcm9tIHRoZSBWZXJjZWwgYmFja2VuZFxuICAgIGlmIChpc09ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihnZXRPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkTWVzc2FnZSgpKTtcbiAgICB9IGVsc2UgaWYgKGVycm9yPy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IFZFUkNFTF80MDNfRVJST1JfTUVTU0FHRTtcbiAgICAgIGxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICB9IGVsc2UgaWYgKExPR0dJTkdfQ09ORklHLlZFUkJPU0VfTU9ERSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSB8fCAnVW5rbm93biBlcnJvcic7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgcmVzb3VyY2U6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnd2hhdCB0byBpbnNwZWN0OiBydW4ocykgfCBzdGVwKHMpIHwgc3RyZWFtKHMpIHwgZXZlbnQocykgfCBob29rKHMpIHwgc2xlZXAocyknLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgICdyJyxcbiAgICAgICAgJ3J1bicsXG4gICAgICAgICdydW5zJyxcbiAgICAgICAgJ3MnLFxuICAgICAgICAnc3RlcCcsXG4gICAgICAgICdzdGVwcycsXG4gICAgICAgICdlJyxcbiAgICAgICAgJ2V2ZW50JyxcbiAgICAgICAgJ2V2ZW50cycsXG4gICAgICAgICdzdCcsXG4gICAgICAgICdzdHJlYW0nLFxuICAgICAgICAnc3RyZWFtcycsXG4gICAgICAgICdoJyxcbiAgICAgICAgJ2hvb2snLFxuICAgICAgICAnaG9va3MnLFxuICAgICAgICAndycsXG4gICAgICAgICd3ZWInLFxuICAgICAgICAnc2xlZXAnLFxuICAgICAgICAnc2xlZXBzJyxcbiAgICAgIF0sXG4gICAgfSksXG4gICAgaWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnSUQgb2YgdGhlIHJlc291cmNlIGlmIGluc3BlY3RpbmcgYSBzcGVjaWZpYyBpdGVtJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB9KSxcbiAgfSBhcyBjb25zdDtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgcnVuSWQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1J1biBJRCB0byBmaWx0ZXIgYnkgKHJlcXVpcmVkIGZvciBzdGVwcywgc2xlZXBzLCBhbmQgZXZlbnRzLiBPcHRpb25hbCBmb3IgaG9va3MuKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaGFyOiAncicsXG4gICAgICBhbGlhc2VzOiBbJ3J1biddLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy1yLCAtLXJ1bklkJyxcbiAgICAgIGhlbHBWYWx1ZTogJ1JVTl9JRCcsXG4gICAgfSksXG4gICAgc3RlcElkOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246ICdzdGVwIElEIHRvIGZpbHRlciBieSAob25seSBmb3IgZXZlbnRzKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaGFyOiAncycsXG4gICAgICBhbGlhc2VzOiBbJ3N0ZXAnXSxcbiAgICAgIGhlbHBHcm91cDogJ0ZpbHRlcmluZycsXG4gICAgICBoZWxwTGFiZWw6ICctcywgLS1zdGVwSWQnLFxuICAgICAgaGVscFZhbHVlOiAnU1RFUF9JRCcsXG4gICAgfSksXG4gICAgaG9va0lkOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246ICdob29rIElEIHRvIGZpbHRlciBieSAob25seSBmb3IgZXZlbnRzKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBhbGlhc2VzOiBbJ2hvb2snXSxcbiAgICAgIGhlbHBHcm91cDogJ0ZpbHRlcmluZycsXG4gICAgICBoZWxwTGFiZWw6ICctLWhvb2tJZCcsXG4gICAgICBoZWxwVmFsdWU6ICdIT09LX0lEJyxcbiAgICB9KSxcbiAgICB3b3JrZmxvd05hbWU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3dvcmtmbG93IG5hbWUgdG8gZmlsdGVyIGJ5IChvbmx5IGZvciBydW5zKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaGFyOiAnbicsXG4gICAgICBhbGlhc2VzOiBbJ3dvcmtmbG93J10sXG4gICAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgICAgaGVscExhYmVsOiAnLW4sIC0td29ya2Zsb3dOYW1lJyxcbiAgICB9KSxcbiAgICBzdGF0dXM6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ2ZpbHRlciBydW5zIGJ5IHN0YXR1cyAob25seSBmb3IgcnVucyknLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgb3B0aW9uczogWy4uLldvcmtmbG93UnVuU3RhdHVzU2NoZW1hLm9wdGlvbnNdLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy0tc3RhdHVzJyxcbiAgICB9KSxcbiAgICBzaW5jZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnbGlzdCBydW5zIGFjdGl2ZSBzaW5jZSBhIHJlbGF0aXZlIGR1cmF0aW9uICgzMG0sIDEyaCwgN2QsIDJ3KSBvciB0aW1lc3RhbXA7IGRlZmF1bHRzIHRvIHRoZSBiYWNrZW5kIHdpbmRvdyAob25seSBmb3IgcnVucyknLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnRmlsdGVyaW5nJyxcbiAgICAgIGhlbHBMYWJlbDogJy0tc2luY2UnLFxuICAgICAgaGVscFZhbHVlOiAnRFVSQVRJT058VElNRVNUQU1QJyxcbiAgICB9KSxcbiAgICB1bnRpbDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnZW5kIG9mIHRoZSAtLXNpbmNlIGxpc3Rpbmcgd2luZG93LCBhcyBhIHJlbGF0aXZlIGR1cmF0aW9uIG9yIHRpbWVzdGFtcDsgZGVmYXVsdHMgdG8gbm93IChvbmx5IGZvciBydW5zKScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwR3JvdXA6ICdGaWx0ZXJpbmcnLFxuICAgICAgaGVscExhYmVsOiAnLS11bnRpbCcsXG4gICAgICBoZWxwVmFsdWU6ICdEVVJBVElPTnxUSU1FU1RBTVAnLFxuICAgIH0pLFxuICAgIHdpdGhEYXRhOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnaW5jbHVkZSBmdWxsIGlucHV0L291dHB1dCBkYXRhIGluIGxpc3Qgdmlld3MgKGRlcHJlY2F0ZWQgZm9yIGxpc3Qgdmlld3Mg4oCUIHVzZSBgaW5zcGVjdCA8cmVzb3VyY2U+IDxpZD5gIHRvIHZpZXcgcGF5bG9hZHMpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNoYXI6ICdkJyxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnRGlzcGxheScsXG4gICAgICBoZWxwTGFiZWw6ICctZCwgLS13aXRoRGF0YScsXG4gICAgfSksXG4gICAgZGVjcnlwdDogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ2RlY3J5cHQgZW5jcnlwdGVkIHZhbHVlcyAodHJpZ2dlcnMgYXVkaXQtbG9nZ2VkIGtleSByZXRyaWV2YWwpJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgaGVscEdyb3VwOiAnRGlzcGxheScsXG4gICAgICBoZWxwTGFiZWw6ICctLWRlY3J5cHQnLFxuICAgIH0pLFxuICAgIC4uLmNsaUZsYWdzLFxuICAgIC4uLnVybEZsYWcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShJbnNwZWN0KTtcblxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBub3JtYWxpemVSZXNvdXJjZShhcmdzLnJlc291cmNlKTtcbiAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5sb2dFcnJvcihcbiAgICAgICAgICBgVW5rbm93biByZXNvdXJjZSBcIiR7YXJncy5yZXNvdXJjZX1cIjogbXVzdCBiZSBvbmUgb2Y6IHJ1bihzKSwgc3RlcChzKSwgc3RyZWFtKHMpLCBldmVudChzKSwgaG9vayhzKSwgc2xlZXAocylgXG4gICAgICAgICk7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlkID0gYXJncy5pZDtcblxuICAgICAgLy8gUHJpbnQtb25seSBkZWVwIGxpbms6IHJlc29sdmUgY29uZmlnIGFuZCBlbWl0IHRoZSBVUkwsIG5vIGJyb3dzZXIvc2VydmVyLlxuICAgICAgaWYgKGZsYWdzLnVybCkge1xuICAgICAgICBjb25zdCBhY3R1YWxSZXNvdXJjZSA9IHJlc291cmNlID09PSAnd2ViJyA/ICdydW4nIDogcmVzb3VyY2U7XG4gICAgICAgIGF3YWl0IHByaW50RGVlcExpbmsoYWN0dWFsUmVzb3VyY2UsIGlkLCBmbGFncywgdGhpcy5jb25maWcudmVyc2lvbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHdlYiBtb2RlLCBhbGxvdyBjb25maWcgZXJyb3JzIHNvIHdlIGNhbiBvcGVuIHRoZSB3ZWIgVUkgZm9yIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IGlzV2ViTW9kZSA9IGZsYWdzLndlYiB8fCByZXNvdXJjZSA9PT0gJ3dlYic7XG4gICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHNldHVwQ2xpV29ybGQoZmxhZ3MsIHRoaXMuY29uZmlnLnZlcnNpb24sIGlzV2ViTW9kZSk7XG5cbiAgICAgIC8vIEhhbmRsZSB3ZWIgVUkgbW9kZVxuICAgICAgaWYgKGlzV2ViTW9kZSkge1xuICAgICAgICBjb25zdCBhY3R1YWxSZXNvdXJjZSA9IHJlc291cmNlID09PSAnd2ViJyA/ICdydW4nIDogcmVzb3VyY2U7XG4gICAgICAgIGF3YWl0IGxhdW5jaFdlYlVJKGFjdHVhbFJlc291cmNlLCBpZCwgZmxhZ3MsIHRoaXMuY29uZmlnLnZlcnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBub24td2ViIGNvbW1hbmRzLCB3ZSBuZWVkIGEgdmFsaWQgd29ybGRcbiAgICAgIGlmICghd29ybGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdGYWlsZWQgdG8gY29ubmVjdCB0byBiYWNrZW5kLiBDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDb252ZXJ0IGZsYWdzIHRvIEluc3BlY3RDTElPcHRpb25zIHdpdGggcHJvcGVyIHR5cGluZ1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRvSW5zcGVjdE9wdGlvbnMoZmxhZ3MpO1xuXG4gICAgICBpZiAocmVzb3VyY2UgPT09ICdydW4nKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dSdW4od29ybGQsIGlkLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBsaXN0UnVucyh3b3JsZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2UgPT09ICdzdGVwJykge1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICBhd2FpdCBzaG93U3RlcCh3b3JsZCwgaWQsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGxpc3RTdGVwcyh3b3JsZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2UgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dTdHJlYW0od29ybGQsIGlkLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBsaXN0U3RyZWFtc0J5UnVuSWQod29ybGQsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlID09PSAnZXZlbnQnKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIHRoaXMubG9nRXJyb3IoXG4gICAgICAgICAgICAnRXZlbnQtSUQgaXMgbm90IHN1cHBvcnRlZCBmb3IgZXZlbnRzLiBGaWx0ZXIgYnkgcnVuLWlkIG9yIHN0ZXAtaWQgaW5zdGVhZC4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IGV2ZW50cyAtLXJ1bklkPTxpZD5gJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGxpc3RFdmVudHMod29ybGQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dIb29rKHdvcmxkLCBpZCwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgbGlzdEhvb2tzKHdvcmxkLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ3NsZWVwJykge1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICB0aGlzLmxvZ0Vycm9yKFxuICAgICAgICAgICAgJ1NsZWVwLUlEIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsZWVwcy4gRmlsdGVyIGJ5IHJ1bi1pZCBpbnN0ZWFkLiBVc2FnZTogYHdvcmtmbG93IGluc3BlY3Qgc2xlZXBzIC0tcnVuSWQ9PGlkPmAnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmbGFncy5ydW5JZCkge1xuICAgICAgICAgIHRoaXMubG9nRXJyb3IoXG4gICAgICAgICAgICAncnVuLWlkIGlzIHJlcXVpcmVkIGZvciBsaXN0aW5nIHNsZWVwcy4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IHNsZWVwcyAtLXJ1bklkPTxpZD5gJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGxpc3RTbGVlcHMod29ybGQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nRXJyb3IoXG4gICAgICAgIGBVbmtub3duIHJlc291cmNlOiAke3Jlc291cmNlfS4gVXNhZ2U6ICR7SW5zcGVjdC5leGFtcGxlcy5qb2luKCdcXG4nKX1gXG4gICAgICApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExldCB0aGUgY2F0Y2ggaGFuZGxlciBkZWFsIHdpdGggaXQsIGJ1dCBlbnN1cmUgd2UgZXhpdFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvSW5zcGVjdE9wdGlvbnMoZmxhZ3M6IGFueSk6IEluc3BlY3RDTElPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBqc29uOiBmbGFncy5qc29uLFxuICAgIHJ1bklkOiBmbGFncy5ydW5JZCxcbiAgICBzdGVwSWQ6IGZsYWdzLnN0ZXBJZCxcbiAgICBjdXJzb3I6IGZsYWdzLmN1cnNvcixcbiAgICBzb3J0OiBmbGFncy5zb3J0IGFzICdhc2MnIHwgJ2Rlc2MnIHwgdW5kZWZpbmVkLFxuICAgIGxpbWl0OiBmbGFncy5saW1pdCxcbiAgICB3b3JrZmxvd05hbWU6IGZsYWdzLndvcmtmbG93TmFtZSxcbiAgICBzdGF0dXM6IGZsYWdzLnN0YXR1c1xuICAgICAgPyBXb3JrZmxvd1J1blN0YXR1c1NjaGVtYS5wYXJzZShmbGFncy5zdGF0dXMpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBzaW5jZTogZmxhZ3Muc2luY2UsXG4gICAgdW50aWw6IGZsYWdzLnVudGlsLFxuICAgIHdpdGhEYXRhOiBmbGFncy53aXRoRGF0YSxcbiAgICBkZWNyeXB0OiBmbGFncy5kZWNyeXB0LFxuICAgIGJhY2tlbmQ6IGZsYWdzLmJhY2tlbmQsXG4gICAgaW50ZXJhY3RpdmU6IGZsYWdzLmludGVyYWN0aXZlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSZXNvdXJjZShcbiAgdmFsdWU/OiBzdHJpbmdcbik6ICdydW4nIHwgJ3N0ZXAnIHwgJ3N0cmVhbScgfCAnZXZlbnQnIHwgJ2hvb2snIHwgJ3dlYicgfCAnc2xlZXAnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdiA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIGlmICh2LnN0YXJ0c1dpdGgoJ3InKSkgcmV0dXJuICdydW4nO1xuICBpZiAodi5zdGFydHNXaXRoKCdlJykpIHJldHVybiAnZXZlbnQnO1xuICBpZiAodi5zdGFydHNXaXRoKCdzdHInKSkgcmV0dXJuICdzdHJlYW0nO1xuICBpZiAodi5zdGFydHNXaXRoKCdzbCcpKSByZXR1cm4gJ3NsZWVwJztcbiAgaWYgKHYuc3RhcnRzV2l0aCgncycpKSByZXR1cm4gJ3N0ZXAnO1xuICBpZiAodi5zdGFydHNXaXRoKCdoJykpIHJldHVybiAnaG9vayc7XG4gIGlmICh2LnN0YXJ0c1dpdGgoJ3cnKSkgcmV0dXJuICd3ZWInO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -1,3 +1,4 @@
1
+ import type { WorkflowRunStatus } from '@workflow/world';
1
2
  export type { BuildTarget, WorkflowConfig, } from '@workflow/builders';
2
3
  export { isValidBuildTarget, validBuildTargets, } from '@workflow/builders';
3
4
  export type InspectCLIOptions = {
@@ -10,7 +11,7 @@ export type InspectCLIOptions = {
10
11
  sort?: 'asc' | 'desc';
11
12
  limit?: number;
12
13
  workflowName?: string;
13
- status?: string;
14
+ status?: WorkflowRunStatus;
14
15
  /** Listing window start: relative duration (12h, 7d) or timestamp (runs only) */
15
16
  since?: string;
16
17
  /** Listing window end: relative duration or timestamp; requires --since */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,YAAY,EACV,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export { isValidBuildTarget, validBuildTargets, } from '@workflow/builders';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbmZpZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUmUtZXhwb3J0IGJ1aWxkZXIgdHlwZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkVGFyZ2V0LFxuICBXb3JrZmxvd0NvbmZpZyxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmV4cG9ydCB7XG4gIGlzVmFsaWRCdWlsZFRhcmdldCxcbiAgdmFsaWRCdWlsZFRhcmdldHMsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5cbmV4cG9ydCB0eXBlIEluc3BlY3RDTElPcHRpb25zID0ge1xuICBqc29uPzogYm9vbGVhbjtcbiAgd2F0Y2g/OiBib29sZWFuO1xuICBydW5JZD86IHN0cmluZztcbiAgc3RlcElkPzogc3RyaW5nO1xuICBob29rSWQ/OiBzdHJpbmc7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgc29ydD86ICdhc2MnIHwgJ2Rlc2MnO1xuICBsaW1pdD86IG51bWJlcjtcbiAgd29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKiBMaXN0aW5nIHdpbmRvdyBzdGFydDogcmVsYXRpdmUgZHVyYXRpb24gKDEyaCwgN2QpIG9yIHRpbWVzdGFtcCAocnVucyBvbmx5KSAqL1xuICBzaW5jZT86IHN0cmluZztcbiAgLyoqIExpc3Rpbmcgd2luZG93IGVuZDogcmVsYXRpdmUgZHVyYXRpb24gb3IgdGltZXN0YW1wOyByZXF1aXJlcyAtLXNpbmNlICovXG4gIHVudGlsPzogc3RyaW5nO1xuICB3aXRoRGF0YT86IGJvb2xlYW47XG4gIGJhY2tlbmQ/OiBzdHJpbmc7XG4gIGRpc2FibGVSZWxhdGl2ZURhdGVzPzogYm9vbGVhbjtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBkZWNyeXB0IGVuY3J5cHRlZCB2YWx1ZXMgKHRyaWdnZXJzIGF1ZGl0LWxvZ2dlZCBrZXkgcmV0cmlldmFsKSAqL1xuICBkZWNyeXB0PzogYm9vbGVhbjtcbn07XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbmZpZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUmUtZXhwb3J0IGJ1aWxkZXIgdHlwZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93UnVuU3RhdHVzIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuZXhwb3J0IHR5cGUge1xuICBCdWlsZFRhcmdldCxcbiAgV29ya2Zsb3dDb25maWcsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5leHBvcnQge1xuICBpc1ZhbGlkQnVpbGRUYXJnZXQsXG4gIHZhbGlkQnVpbGRUYXJnZXRzLFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuXG5leHBvcnQgdHlwZSBJbnNwZWN0Q0xJT3B0aW9ucyA9IHtcbiAganNvbj86IGJvb2xlYW47XG4gIHdhdGNoPzogYm9vbGVhbjtcbiAgcnVuSWQ/OiBzdHJpbmc7XG4gIHN0ZXBJZD86IHN0cmluZztcbiAgaG9va0lkPzogc3RyaW5nO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIHNvcnQ/OiAnYXNjJyB8ICdkZXNjJztcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHdvcmtmbG93TmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogV29ya2Zsb3dSdW5TdGF0dXM7XG4gIC8qKiBMaXN0aW5nIHdpbmRvdyBzdGFydDogcmVsYXRpdmUgZHVyYXRpb24gKDEyaCwgN2QpIG9yIHRpbWVzdGFtcCAocnVucyBvbmx5KSAqL1xuICBzaW5jZT86IHN0cmluZztcbiAgLyoqIExpc3Rpbmcgd2luZG93IGVuZDogcmVsYXRpdmUgZHVyYXRpb24gb3IgdGltZXN0YW1wOyByZXF1aXJlcyAtLXNpbmNlICovXG4gIHVudGlsPzogc3RyaW5nO1xuICB3aXRoRGF0YT86IGJvb2xlYW47XG4gIGJhY2tlbmQ/OiBzdHJpbmc7XG4gIGRpc2FibGVSZWxhdGl2ZURhdGVzPzogYm9vbGVhbjtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBkZWNyeXB0IGVuY3J5cHRlZCB2YWx1ZXMgKHRyaWdnZXJzIGF1ZGl0LWxvZ2dlZCBrZXkgcmV0cmlldmFsKSAqL1xuICBkZWNyeXB0PzogYm9vbGVhbjtcbn07XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,GACpD,IAAI,CAAC;AAGT,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,SAAS,EACd,UAAU,GACX,MAAM,qCAAqC,CAAC;AA8B7C;;;;;;GAMG;AACH,cAAM,gBAAgB;IACpB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAExE;AAMD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;AAwED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA6DzC;AA8HD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,EACX,WAAW,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,CAAC,CAAC,CASZ"}
1
+ {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAK7C;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,GACpD,IAAI,CAAC;AAGT,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,SAAS,EACd,UAAU,GACX,MAAM,qCAAqC,CAAC;AA8B7C;;;;;;GAMG;AACH,cAAM,gBAAgB;IACpB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAExE;AAMD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAKD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;AAwED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA6DzC;AA2HD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,EACX,WAAW,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,CAAC,CAAC,CASZ"}
@@ -8,6 +8,7 @@ import { inspect } from 'node:util';
8
8
  import { getCommonRevivers, maybeDecrypt } from '@workflow/core/serialization';
9
9
  import { ClassInstanceRef, extractClassName, hydrateResourceIO as hydrateResourceIOGeneric, isEncryptedData, isExpiredStub, isRunRef, observabilityRevivers, serializedInstanceToRef, } from '@workflow/core/serialization-format';
10
10
  import { parseClassName } from '@workflow/utils/parse-name';
11
+ import { getEventDataRefFields } from '@workflow/world';
11
12
  import chalk from 'chalk';
12
13
  // Re-export types and utilities that consumers need
13
14
  export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, isClassInstanceRef, isEncryptedData, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from '@workflow/core/serialization-format';
@@ -271,13 +272,7 @@ async function maybeDecryptFields(resource, resolver) {
271
272
  // Decrypt eventData fields (Event)
272
273
  if (result.eventData && typeof result.eventData === 'object') {
273
274
  const eventData = { ...result.eventData };
274
- for (const field of [
275
- 'result',
276
- 'input',
277
- 'output',
278
- 'metadata',
279
- 'payload',
280
- ]) {
275
+ for (const field of getEventDataRefFields(result.eventType ?? '')) {
281
276
  eventData[field] = await maybeDecrypt(eventData[field], k);
282
277
  }
283
278
  result.eventData = eventData;
@@ -323,7 +318,8 @@ function replaceEncryptedAndExpiredWithRef(resource) {
323
318
  }
324
319
  if (result.eventData && typeof result.eventData === 'object') {
325
320
  const ed = { ...result.eventData };
326
- for (const key of ['result', 'input', 'output', 'metadata', 'payload']) {
321
+ const eventType = typeof result.eventType === 'string' ? result.eventType : '';
322
+ for (const key of getEventDataRefFields(eventType)) {
327
323
  ed[key] = toDisplayRef(ed[key]);
328
324
  }
329
325
  result.eventData = ed;
@@ -346,4 +342,4 @@ export async function hydrateResourceIO(resource, keyResolver) {
346
342
  // Post-process: swap encrypted Uint8Arrays and expired stubs for CLI-styled objects
347
343
  return replaceEncryptedAndExpiredWithRef(hydrated);
348
344
  }
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L2h5ZHJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixJQUFJLHdCQUF3QixFQUM3QyxlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsdUJBQXVCLEdBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVcxQixvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEVBRVgsZUFBZSxFQUVmLFVBQVUsR0FDWCxNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLDhFQUE4RTtBQUM5RSwyQ0FBMkM7QUFDM0MsOEVBQThFO0FBRTlFOzs7R0FHRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQ2hELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNkLE1BQWMsRUFDZCxPQUFtRDtRQUVuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8s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QU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3RCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUksTUFBTSxDQUFDLFNBQXFDLEVBQUUsQ0FBQztRQUNoRSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sTUFBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQVcsRUFDWCxXQUFtQztJQUVuQyx3RUFBd0U7SUFDeEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxrQkFBa0IsQ0FDM0MsUUFBZSxFQUNmLFdBQVcsSUFBSSxJQUFJLENBQ3BCLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQU0sQ0FBQztJQUM1RSxvRkFBb0Y7SUFDcEYsT0FBTyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEktc3BlY2lmaWMgaHlkcmF0aW9uIGZvciBvMTF5IGRpc3BsYXkuXG4gKlxuICogTm9kZS5qcyByZXZpdmVycyB0aGF0IHVzZSBgQnVmZmVyLmZyb20oKWAgZm9yIGJhc2U2NCBkZWNvZGluZyBhbmQgYWRkXG4gKiBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgdG8gQ2xhc3NJbnN0YW5jZVJlZiBmb3IgcHJldHR5IENMSSBvdXRwdXQuXG4gKi9cblxuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBnZXRDb21tb25SZXZpdmVycywgbWF5YmVEZWNyeXB0IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1xuICBDbGFzc0luc3RhbmNlUmVmLFxuICBleHRyYWN0Q2xhc3NOYW1lLFxuICBoeWRyYXRlUmVzb3VyY2VJTyBhcyBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMsXG4gIGlzRW5jcnlwdGVkRGF0YSxcbiAgaXNFeHBpcmVkU3R1YixcbiAgaXNSdW5SZWYsXG4gIG9ic2VydmFiaWxpdHlSZXZpdmVycyxcbiAgdHlwZSBSZXZpdmVycyxcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcbmltcG9ydCB7IHBhcnNlQ2xhc3NOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYW4gZW5jcnlwdGlvbiBrZXkgZm9yIGEgcnVuLCBvciBudWxsIHRvIHNraXBcbiAqIGRlY3J5cHRpb24uIEFjY2VwdHMgYSBydW5JZCDigJQgdGhlIHJlc29sdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBsb29raW5nXG4gKiB1cCB0aGUgV29ya2Zsb3dSdW4gaW50ZXJuYWxseSAod2l0aCBjYWNoaW5nKSBpZiB0aGUgV29ybGQgbmVlZHMgaXQuXG4gKi9cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25LZXlSZXNvbHZlciA9XG4gIHwgKChydW5JZDogc3RyaW5nKSA9PiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+KVxuICB8IG51bGw7XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBhbmQgdXRpbGl0aWVzIHRoYXQgY29uc3VtZXJzIG5lZWRcbmV4cG9ydCB7XG4gIENMQVNTX0lOU1RBTkNFX1JFRl9UWVBFLFxuICBDbGFzc0luc3RhbmNlUmVmLFxuICBFTkNSWVBURURfUExBQ0VIT0xERVIsXG4gIGV4dHJhY3RTdHJlYW1JZHMsXG4gIGlzQ2xhc3NJbnN0YW5jZVJlZixcbiAgaXNFbmNyeXB0ZWREYXRhLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgdHlwZSBSZXZpdmVycyxcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0eXBlIFN0cmVhbVJlZixcbiAgdHJ1bmNhdGVJZCxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENMSSBDbGFzc0luc3RhbmNlUmVmIHdpdGggaW5zcGVjdC5jdXN0b21cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4dGVuZGVkIENsYXNzSW5zdGFuY2VSZWYgd2l0aCBOb2RlLmpzIGB1dGlsLmluc3BlY3QuY3VzdG9tYCBmb3JcbiAqIHByZXR0eSBDTEkgb3V0cHV0OiBgQ2xhc3NOYW1lQGZpbGVuYW1lIHsgLi4uZGF0YSB9YFxuICovXG5jbGFzcyBDTElDbGFzc0luc3RhbmNlUmVmIGV4dGVuZHMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIFtpbnNwZWN0LmN1c3RvbV0oXG4gICAgX2RlcHRoOiBudW1iZXIsXG4gICAgb3B0aW9uczogaW1wb3J0KCdub2RlOnV0aWwnKS5JbnNwZWN0T3B0aW9uc1N0eWxpemVkXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YVN0ciA9IGluc3BlY3QodGhpcy5kYXRhLCB7IC4uLm9wdGlvbnMsIGRlcHRoOiBvcHRpb25zLmRlcHRoIH0pO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ2xhc3NOYW1lKHRoaXMuY2xhc3NJZCk7XG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gcGFyc2VkPy5tb2R1bGVTcGVjaWZpZXIgPz8gdGhpcy5jbGFzc0lkO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gbW9kdWxlU3BlY2lmaWVyLnNwbGl0KCcvJykucG9wKCkgPz8gbW9kdWxlU3BlY2lmaWVyO1xuICAgIGNvbnN0IHN0eWxlZEZpbGVOYW1lID0gb3B0aW9ucy5zdHlsaXplXG4gICAgICA/IG9wdGlvbnMuc3R5bGl6ZShgQCR7ZmlsZU5hbWV9YCwgJ3VuZGVmaW5lZCcpXG4gICAgICA6IGBAJHtmaWxlTmFtZX1gO1xuICAgIHJldHVybiBgJHt0aGlzLmNsYXNzTmFtZX0ke3N0eWxlZEZpbGVOYW1lfSAke2RhdGFTdHJ9YDtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENMSSBlbmNyeXB0ZWQgZGF0YSBwbGFjZWhvbGRlciB3aXRoIGN1c3RvbSBpbnNwZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciBvYmplY3QgZm9yIGVuY3J5cHRlZCBkYXRhIGZpZWxkcyBpbiBDTEkgb3V0cHV0LlxuICpcbiAqIFVzZXMgYHV0aWwuaW5zcGVjdC5jdXN0b21gIHRvIHJlbmRlciBhcyBhIHN0eWxlZCwgdW5xdW90ZWQgc3RyaW5nXG4gKiAoZS5nLiwgZGltIHllbGxvdyBcIvCflJIgRW5jcnlwdGVkXCIpIGluc3RlYWQgb2YgYSBwbGFpbiBxdW90ZWQgc3RyaW5nLlxuICogQWxzbyBwcm92aWRlcyBgdG9KU09OKClgIGZvciBgLS1qc29uYCBvdXRwdXQuXG4gKi9cbmNsYXNzIEVuY3J5cHRlZERhdGFSZWYge1xuICBbaW5zcGVjdC5jdXN0b21dKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNoYWxrLmRpbS55ZWxsb3coJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJyk7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJztcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdcXHV7MUY1MTJ9IEVuY3J5cHRlZCc7XG4gIH1cbn1cblxuLyoqIFNpbmdsZXRvbiBlbmNyeXB0ZWQgZGF0YSBwbGFjZWhvbGRlciBmb3IgQ0xJIGRpc3BsYXkgKi9cbmNvbnN0IEVOQ1JZUFRFRF9SRUYgPSBuZXcgRW5jcnlwdGVkRGF0YVJlZigpO1xuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBFbmNyeXB0ZWREYXRhUmVmIChmb3IgY3VzdG9tIHRhYmxlIGZvcm1hdHRpbmcgaW4gQ0xJKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW5jcnlwdGVkUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5jcnlwdGVkRGF0YVJlZiB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVuY3J5cHRlZERhdGFSZWY7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIGV4cGlyZWQgZGF0YSBwbGFjZWhvbGRlciB3aXRoIGN1c3RvbSBpbnNwZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciBvYmplY3QgZm9yIGV4cGlyZWQgZGF0YSBmaWVsZHMgaW4gQ0xJIG91dHB1dC5cbiAqXG4gKiBVc2VzIGB1dGlsLmluc3BlY3QuY3VzdG9tYCB0byByZW5kZXIgYXMgYSBzdHlsZWQsIHVucXVvdGVkIHN0cmluZ1xuICogKGUuZy4sIGRpbSBncmF5IFwiPGRhdGEgZXhwaXJlZD5cIikgaW5zdGVhZCBvZiBhIHJhdyBzdHViIG9iamVjdC5cbiAqIEFsc28gcHJvdmlkZXMgYHRvSlNPTigpYCBmb3IgYC0tanNvbmAgb3V0cHV0LlxuICovXG5jbGFzcyBFeHBpcmVkRGF0YVJlZiB7XG4gIFtpbnNwZWN0LmN1c3RvbV0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JheSgnPGRhdGEgZXhwaXJlZD4nKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnPGRhdGEgZXhwaXJlZD4nO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJzxkYXRhIGV4cGlyZWQ+JztcbiAgfVxufVxuXG4vKiogU2luZ2xldG9uIGV4cGlyZWQgZGF0YSBwbGFjZWhvbGRlciBmb3IgQ0xJIGRpc3BsYXkgKi9cbmNvbnN0IEVYUElSRURfUkVGID0gbmV3IEV4cGlyZWREYXRhUmVmKCk7XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIEV4cGlyZWREYXRhUmVmIChmb3IgY3VzdG9tIHRhYmxlIGZvcm1hdHRpbmcgaW4gQ0xJKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwaXJlZFJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEV4cGlyZWREYXRhUmVmIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXhwaXJlZERhdGFSZWY7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIHJldml2ZXJzIChOb2RlLmpzLCB1c2VzIEJ1ZmZlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgcmVkdWNlciBrZXlzIHdob3NlIGBnZXRDb21tb25SZXZpdmVycygpYCBvdXRwdXQgcHJvZHVjZXMgYVxuICogbmF0aXZlIGBFcnJvcmAgaW5zdGFuY2UuIFdlIHdyYXAgZWFjaCBvZiB0aGVzZSB3aXRoIGFuIGFkZGl0aW9uYWxcbiAqIGB0b0pTT05gIGF0dGFjaG1lbnQgaW4gQ0xJIG1vZGUgKHNlZSBgd3JhcEVycm9yUmV2aXZlcldpdGhUb0pTT05gKS5cbiAqL1xuY29uc3QgRVJST1JfUkVWSVZFUl9LRVlTID0gW1xuICAnQWdncmVnYXRlRXJyb3InLFxuICAnRE9NRXhjZXB0aW9uJyxcbiAgJ0Vycm9yJyxcbiAgJ0V2YWxFcnJvcicsXG4gICdGYXRhbEVycm9yJyxcbiAgJ0hvb2tDb25mbGljdEVycm9yJyxcbiAgJ1JhbmdlRXJyb3InLFxuICAnUmVmZXJlbmNlRXJyb3InLFxuICAnUmV0cnlhYmxlRXJyb3InLFxuICAnUnVudGltZURlY3J5cHRpb25FcnJvcicsXG4gICdTeW50YXhFcnJvcicsXG4gICdUeXBlRXJyb3InLFxuICAnVVJJRXJyb3InLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBXcmFwcyBhIHJ1bnRpbWUgRXJyb3IgcmV2aXZlciBzbyB0aGF0IHRoZSBwcm9kdWNlZCBpbnN0YW5jZSBjYXJyaWVzIGFcbiAqIG5vbi1lbnVtZXJhYmxlIGB0b0pTT05gIG1ldGhvZC4gVGhlIHJ1bnRpbWUgcmV2aXZlcnMgcmV0dXJuIHJlYWwgYEVycm9yYFxuICogaW5zdGFuY2VzIChnb29kIGZvciBgdXRpbC5pbnNwZWN0YCwgYGluc3RhbmNlb2ZgLCBgdG9TdHJpbmdgLCBldGMuKSwgYnV0XG4gKiBgRXJyb3IucHJvdG90eXBlYCdzIGBuYW1lYCAvIGBtZXNzYWdlYCAvIGBzdGFja2AgLyBgY2F1c2VgIGFyZVxuICogbm9uLWVudW1lcmFibGUgYW5kIHdvdWxkIGJlIGRyb3BwZWQgYnkgYEpTT04uc3RyaW5naWZ5YCDigJQgd2hpY2ggaXMgaG93XG4gKiB0aGUgQ0xJIGVtaXRzIGl0cyBgLS1qc29uYCBvdXRwdXQuIEFkZGluZyBgdG9KU09OYCAod2hpY2ggYEpTT04uc3RyaW5naWZ5YFxuICogY2FsbHMgYnV0IGB1dGlsLmluc3BlY3RgIGlnbm9yZXMpIGdpdmVzIHVzIHRoZSBiZXN0IG9mIGJvdGggd29ybGRzOlxuICogcm91bmQtdHJpcHBlZCBlcnJvcnMgcmVuZGVyIGNsZWFubHkgaW4gYm90aCBtb2RlcyB3aXRob3V0IHRoZVxuICogZGF0YS12ZXJzdXMtZGlzcGxheSB0cmFkZW9mZiB0aGF0IHBsYWluLW9iamVjdCByZXZpdmVycyB3b3VsZCBmb3JjZS5cbiAqXG4gKiBTdWJjbGFzcy1zcGVjaWZpYyBlbnVtZXJhYmxlIGZpZWxkcyAoZS5nLiBgUmV0cnlhYmxlRXJyb3IucmV0cnlBZnRlcmAsXG4gKiBgQWdncmVnYXRlRXJyb3IuZXJyb3JzYCwgYEZhdGFsRXJyb3IuZmF0YWxgKSBhcmUgcGlja2VkIHVwIGF1dG9tYXRpY2FsbHlcbiAqIHZpYSBgT2JqZWN0LmFzc2lnbmAgYWZ0ZXIgdGhlIGJhc2UgZmllbGRzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGVudW1lcmF0ZVxuICogdGhlbSBwZXItc3ViY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHdyYXBFcnJvclJldml2ZXJXaXRoVG9KU09OKFxuICByZXZpdmVyOiAodmFsdWU6IGFueSkgPT4gdW5rbm93blxuKTogKHZhbHVlOiBhbnkpID0+IHVua25vd24ge1xuICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmV2aXZlcih2YWx1ZSk7XG4gICAgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gcmVzdWx0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICd0b0pTT04nLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKHRoaXM6IEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAgIH07XG4gICAgICAgIGlmICgnY2F1c2UnIGluIHRoaXMpIHtcbiAgICAgICAgICBqc29uLmNhdXNlID0gKHRoaXMgYXMgeyBjYXVzZTogdW5rbm93biB9KS5jYXVzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQaWNrIHVwIHN1YmNsYXNzLXNwZWNpZmljIGVudW1lcmFibGUgZmllbGRzIChlLmcuIEZhdGFsRXJyb3IuZmF0YWwsXG4gICAgICAgIC8vIFJldHJ5YWJsZUVycm9yLnJldHJ5QWZ0ZXIsIEFnZ3JlZ2F0ZUVycm9yLmVycm9ycykuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbiwgdGhpcyk7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIHJldml2ZXJzIHVzZWQgYnkgQ0xJIGluc3BlY3Qgb3V0cHV0LlxuICpcbiAqIEJ1aWx0IG9uIHRvcCBvZiBgZ2V0Q29tbW9uUmV2aXZlcnMoKWAgZnJvbSBgQHdvcmtmbG93L2NvcmVgIHNvIHRoYXQgdGhlXG4gKiBDTEkgc3RheXMgaW4gc3luYyB3aXRoIHRoZSBydW50aW1lJ3MgcmV2aXZlciBzZXQgYXV0b21hdGljYWxseS4gV2l0aG91dFxuICogdGhpcywgZXZlcnkgbmV3IHJldml2ZXIgYWRkZWQgdG8gY29yZSAoZS5nLiBgRmF0YWxFcnJvcmAsXG4gKiBgUmV0cnlhYmxlRXJyb3JgLCB0aGUgYnVpbHQtaW4gYEVycm9yYCBzdWJjbGFzc2VzKSB3b3VsZCBzaWxlbnRseVxuICogZGlzYXBwZWFyIGZyb20gQ0xJIG91dHB1dDogZGV2YWx1ZSB0aHJvd3MgXCJVbmtub3duIHR5cGUgWFwiIGZvclxuICogdW5yZWNvZ25pemVkIHJlZHVjZWQgdHlwZXMsIGFuZCBgaHlkcmF0ZVJlc291cmNlSU9gIHN3YWxsb3dzIHRoYXQgZXJyb3JcbiAqIGFuZCBzdXJmYWNlcyB0aGUgcmF3IGBVaW50OEFycmF5YCBwYXlsb2FkIHRvIGNvbnN1bWVycyDigJQgd2hpY2ggdGhlblxuICogc2hvd3MgdXAgYXMgYHN0ZXAuZXJyb3JgIC8gYHJ1bi5lcnJvcmAgYnl0ZSBkdW1wcyBpbnN0ZWFkIG9mIHVzYWJsZVxuICogYHsgbWVzc2FnZSwgc3RhY2ssIOKApiB9YCBvYmplY3RzLlxuICpcbiAqIE9uIHRvcCBvZiB0aGUgY29tbW9uIHNldCB3ZSBsYXllcjpcbiAqICAgLSBBIGB0b0pTT05gIHNoaW0gb24gZWFjaCBFcnJvciByZXZpdmVyIHNvIG5vbi1lbnVtZXJhYmxlXG4gKiAgICAgYEVycm9yLnByb3RvdHlwZWAgZmllbGRzIHN1cnZpdmUgYEpTT04uc3RyaW5naWZ5YCBmb3IgYC0tanNvbmAgb3V0cHV0XG4gKiAgICAgd2hpbGUgbGVhdmluZyBgdXRpbC5pbnNwZWN0YCByZW5kZXJpbmcgdW50b3VjaGVkXG4gKiAgIC0gYG9ic2VydmFiaWxpdHlSZXZpdmVyc2AgZm9yIHN0cmVhbXMgLyBzdGVwK3dvcmtmbG93IGZ1bmN0aW9uIHJlZnNcbiAqICAgLSBDTEktc3BlY2lmaWMgb3ZlcnJpZGVzIHRoYXQgcHJvZHVjZSBkaXNwbGF5LWZyaWVuZGx5IHBsYWNlaG9sZGVyc1xuICogICAgIGZvciBgQ2xhc3NgIC8gYEluc3RhbmNlYCAodGhlIHJ1bnRpbWUgdmVyc2lvbnMgbmVlZCBmdWxsIGNsYXNzXG4gKiAgICAgaWRlbnRpdHkgd2hpY2ggdGhlIENMSSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q0xJUmV2aXZlcnMoKTogUmV2aXZlcnMge1xuICBjb25zdCBiYXNlUmV2aXZlcnMgPSBnZXRDb21tb25SZXZpdmVycyhnbG9iYWxUaGlzKTtcbiAgY29uc3QgZXJyb3JSZXZpdmVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBFUlJPUl9SRVZJVkVSX0tFWVMuZmxhdE1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCByZXZpdmVyID0gKGJhc2VSZXZpdmVycyBhcyBSZXZpdmVycylba2V5XTtcbiAgICAgIHJldHVybiByZXZpdmVyID8gW1trZXksIHdyYXBFcnJvclJldml2ZXJXaXRoVG9KU09OKHJldml2ZXIpXV0gOiBbXTtcbiAgICB9KVxuICApO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VSZXZpdmVycyxcbiAgICAuLi5lcnJvclJldml2ZXJzLFxuICAgIC8vIE8xMXktc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbXMsIHN0ZXAgZnVuY3Rpb25zIOKGkiBkaXNwbGF5IG9iamVjdHMpLlxuICAgIC4uLm9ic2VydmFiaWxpdHlSZXZpdmVycyxcbiAgICAvLyBOb2RlIGBSZXF1ZXN0YCAvIGBSZXNwb25zZWAgcmV2aXZlcnMgdGhhdCBkb24ndCByZWx5IG9uIHJ1bm5pbmcgYW5cbiAgICAvLyBhY3R1YWwgZmV0Y2ggaGFuZGxlciDigJQgdXNlZCB0byByZW5kZXIgcmVxdWVzdC9yZXNwb25zZSBJTyBpbmxpbmUuXG4gICAgUmVxdWVzdDogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHt9IH0uUmVxdWVzdCE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIGR1cGxleDogdmFsdWUuZHVwbGV4LFxuICAgICAgICAuLi4odmFsdWUucmVzcG9uc2VXcml0YWJsZVxuICAgICAgICAgID8geyByZXNwb25zZVdyaXRhYmxlOiB2YWx1ZS5yZXNwb25zZVdyaXRhYmxlIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIFJlc3BvbnNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVzcG9uc2U6IGZ1bmN0aW9uICgpIHt9IH0uUmVzcG9uc2UhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBzdGF0dXM6IHZhbHVlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogdmFsdWUuc3RhdHVzVGV4dCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICByZWRpcmVjdGVkOiB2YWx1ZS5yZWRpcmVjdGVkLFxuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgLy8gQ0xJLXNwZWNpZmljIG92ZXJyaWRlcyBmb3IgY2xhc3MgaW5zdGFuY2VzIHdpdGggaW5zcGVjdC5jdXN0b21cbiAgICBDbGFzczogKHZhbHVlKSA9PiBgPGNsYXNzOiR7ZXh0cmFjdENsYXNzTmFtZSh2YWx1ZS5jbGFzc0lkKX0+YCxcbiAgICBJbnN0YW5jZTogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBSdW4gaW5zdGFuY2VzIGFyZSByZW5kZXJlZCBhcyBSdW5SZWYgZm9yIGNsaWNrYWJsZSByZW5kZXJpbmdcbiAgICAgIGNvbnN0IHJ1blJlZiA9IHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmKHZhbHVlKTtcbiAgICAgIGlmIChpc1J1blJlZihydW5SZWYpKSB7XG4gICAgICAgIHJldHVybiBydW5SZWY7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENMSUNsYXNzSW5zdGFuY2VSZWYoXG4gICAgICAgIGV4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCksXG4gICAgICAgIHZhbHVlLmNsYXNzSWQsXG4gICAgICAgIHZhbHVlLmRhdGFcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcmUtYnVpbHQgQ0xJIHJldml2ZXJzIChjYWNoZWQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGNhY2hlZFJldml2ZXJzOiBSZXZpdmVycyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGlmICghY2FjaGVkUmV2aXZlcnMpIHtcbiAgICBjYWNoZWRSZXZpdmVycyA9IGdldENMSVJldml2ZXJzKCk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZFJldml2ZXJzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlY3J5cHRpb24gaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUHJlLXByb2Nlc3MgYSByZXNvdXJjZSdzIGRhdGEgZmllbGRzOiBpZiB0aGUgcmVzb2x2ZXIgaXMgcHJvdmlkZWQgYW5kXG4gKiB0aGUgZmllbGQgaXMgZW5jcnlwdGVkLCBkZWNyeXB0IGl0IGJlZm9yZSBnZW5lcmljIGh5ZHJhdGlvbi5cbiAqXG4gKiBVc2VzIGNvcmUncyBgbWF5YmVEZWNyeXB0KClgIHdoaWNoIGhhbmRsZXMgdGhlICdlbmNyJyBwcmVmaXggc3RyaXBwaW5nXG4gKiBhbmQgQUVTLUdDTSBkZWNyeXB0aW9uIHRyYW5zcGFyZW50bHkuXG4gKlxuICogV2hlbiB0aGUgcmVzb2x2ZXIgaXMgbnVsbCAobm8gLS1kZWNyeXB0IGZsYWcpLCBlbmNyeXB0ZWQgZmllbGRzIHBhc3NcbiAqIHRocm91Z2ggYXMgVWludDhBcnJheSBhbmQgYXJlIHJlcGxhY2VkIHdpdGggRW5jcnlwdGVkRGF0YVJlZiBpbiBwb3N0LXByb2Nlc3NpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1heWJlRGVjcnlwdEZpZWxkczxcbiAgVCBleHRlbmRzIHtcbiAgICBydW5JZD86IHN0cmluZztcbiAgICBpbnB1dD86IGFueTtcbiAgICBvdXRwdXQ/OiBhbnk7XG4gICAgbWV0YWRhdGE/OiBhbnk7XG4gICAgZXZlbnREYXRhPzogYW55O1xuICB9LFxuPihyZXNvdXJjZTogVCwgcmVzb2x2ZXI6IEVuY3J5cHRpb25LZXlSZXNvbHZlcik6IFByb21pc2U8VD4ge1xuICBpZiAoIXJlc29sdmVyKSByZXR1cm4gcmVzb3VyY2U7XG5cbiAgY29uc3QgcnVuSWQgPSAocmVzb3VyY2UgYXMgYW55KS5ydW5JZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmICghcnVuSWQpIHJldHVybiByZXNvdXJjZTtcblxuICBjb25zdCByZXN1bHQgPSB7IC4uLnJlc291cmNlIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXdLZXkgPSBhd2FpdCByZXNvbHZlcihydW5JZCk7XG4gICAgY29uc3QgeyBpbXBvcnRLZXkgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbicpO1xuICAgIGNvbnN0IGsgPSByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIERlY3J5cHQgaW5wdXQvb3V0cHV0L2Vycm9yIGZpZWxkcyAoV29ya2Zsb3dSdW4sIFN0ZXApXG4gICAgcmVzdWx0LmlucHV0ID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5pbnB1dCwgayk7XG4gICAgcmVzdWx0Lm91dHB1dCA9IGF3YWl0IG1heWJlRGVjcnlwdChyZXN1bHQub3V0cHV0LCBrKTtcbiAgICAocmVzdWx0IGFzIGFueSkuZXJyb3IgPSBhd2FpdCBtYXliZURlY3J5cHQoKHJlc3VsdCBhcyBhbnkpLmVycm9yLCBrKTtcblxuICAgIC8vIERlY3J5cHQgbWV0YWRhdGEgZmllbGQgKEhvb2spXG4gICAgcmVzdWx0Lm1ldGFkYXRhID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5tZXRhZGF0YSwgayk7XG5cbiAgICAvLyBEZWNyeXB0IGV2ZW50RGF0YSBmaWVsZHMgKEV2ZW50KVxuICAgIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgZXZlbnREYXRhID0geyAuLi5yZXN1bHQuZXZlbnREYXRhIH07XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIFtcbiAgICAgICAgJ3Jlc3VsdCcsXG4gICAgICAgICdpbnB1dCcsXG4gICAgICAgICdvdXRwdXQnLFxuICAgICAgICAnbWV0YWRhdGEnLFxuICAgICAgICAncGF5bG9hZCcsXG4gICAgICBdKSB7XG4gICAgICAgIGV2ZW50RGF0YVtmaWVsZF0gPSBhd2FpdCBtYXliZURlY3J5cHQoZXZlbnREYXRhW2ZpZWxkXSwgayk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZXZlbnREYXRhID0gZXZlbnREYXRhO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblxuICAgIC8vIElmIHRoZSBrZXkgZmV0Y2ggZmFpbGVkIGR1ZSB0byBhbiBIVFRQIGVycm9yIChlLmcuIDQyOSByYXRlIGxpbWl0LFxuICAgIC8vIDUwMCBzZXJ2ZXIgZXJyb3IpLCByZS10aHJvdyBzbyB0aGUgY2FsbGVyIHN1cmZhY2VzIGEgY2xlYXIgZmFpbHVyZVxuICAgIC8vIGluc3RlYWQgb2Ygc2lsZW50bHkgc2hvd2luZyBlbmNyeXB0ZWQgcGxhY2Vob2xkZXJzLlxuICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdIVFRQICcpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgLy8gRGVjcnlwdGlvbiBmYWlsZWQgKGJhZCBrZXksIGNvcnJ1cHRlZCBjaXBoZXJ0ZXh0LCBldGMuKSDigJQgZmFsbCBiYWNrXG4gICAgLy8gdG8gc2hvd2luZyBlbmNyeXB0ZWQgcGxhY2Vob2xkZXJzIGluc3RlYWQgb2YgY3Jhc2hpbmcgdGhlIENMSS5cbiAgICBjb25zdCB7IGxvZ2dlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9jb25maWcvbG9nLmpzJyk7XG4gICAgbG9nZ2VyLndhcm4oYERlY3J5cHRpb24gZmFpbGVkIGZvciByZXNvdXJjZSAke3J1bklkfTogJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgQVBJXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFJlcGxhY2UgYSBzaW5nbGUgZmllbGQgdmFsdWUgd2l0aCBhIGRpc3BsYXkgcmVmIGlmIGl0J3MgZW5jcnlwdGVkIG9yIGV4cGlyZWQuICovXG5mdW5jdGlvbiB0b0Rpc3BsYXlSZWYodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzRW5jcnlwdGVkRGF0YSh2YWx1ZSkpIHJldHVybiBFTkNSWVBURURfUkVGO1xuICBpZiAoaXNFeHBpcmVkU3R1Yih2YWx1ZSkpIHJldHVybiBFWFBJUkVEX1JFRjtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgZW5jcnlwdGVkIFVpbnQ4QXJyYXkgdmFsdWVzIGFuZCBleHBpcmVkIHN0dWJzIHdpdGggc3R5bGVkXG4gKiByZWYgb2JqZWN0cyBpbiBrbm93biBkYXRhIGZpZWxkcyBmb3IgY3VzdG9tIGluc3BlY3QgcmVuZGVyaW5nLlxuICovXG5mdW5jdGlvbiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhSZWY8VD4ocmVzb3VyY2U6IFQpOiBUIHtcbiAgaWYgKCFyZXNvdXJjZSB8fCB0eXBlb2YgcmVzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gcmVzb3VyY2U7XG4gIGNvbnN0IHIgPSByZXNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5yIH07XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIHJlc3VsdFtrZXldID0gdG9EaXNwbGF5UmVmKHJlc3VsdFtrZXldKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGVkID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ3Jlc3VsdCcsICdpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAncGF5bG9hZCddKSB7XG4gICAgICBlZFtrZXldID0gdG9EaXNwbGF5UmVmKGVkW2tleV0pO1xuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCBkYXRhIGZpZWxkcyBvZiBhIHJlc291cmNlIGZvciBDTEkgZGlzcGxheS5cbiAqXG4gKiBXaGVuIGBlbmNyeXB0b3JSZXNvbHZlcmAgaXMgbnVsbCAoZGVmYXVsdCAvIG5vIC0tZGVjcnlwdCBmbGFnKSwgZW5jcnlwdGVkXG4gKiBmaWVsZHMgYXJlIHNob3duIGFzIHN0eWxlZCBcIvCflJIgRW5jcnlwdGVkXCIgcGxhY2Vob2xkZXJzIHZpYSBFbmNyeXB0ZWREYXRhUmVmLlxuICpcbiAqIFdoZW4gYGVuY3J5cHRvclJlc29sdmVyYCBpcyBwcm92aWRlZCAoLS1kZWNyeXB0IGZsYWcpLCBlbmNyeXB0ZWQgZmllbGRzXG4gKiBhcmUgZGVjcnlwdGVkIGJlZm9yZSBoeWRyYXRpb24gc28gdGhlIGFjdHVhbCB1c2VyIGRhdGEgaXMgZGlzcGxheWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZVJlc291cmNlSU88VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXlSZXNvbHZlcj86IEVuY3J5cHRpb25LZXlSZXNvbHZlclxuKTogUHJvbWlzZTxUPiB7XG4gIC8vIFByZS1wcm9jZXNzOiBkZWNyeXB0IGFueSBlbmNyeXB0ZWQgZmllbGRzIHdoZW4gYSByZXNvbHZlciBpcyBwcm92aWRlZFxuICBjb25zdCBwcmVwcm9jZXNzZWQgPSBhd2FpdCBtYXliZURlY3J5cHRGaWVsZHMoXG4gICAgcmVzb3VyY2UgYXMgYW55LFxuICAgIGtleVJlc29sdmVyID8/IG51bGxcbiAgKTtcbiAgY29uc3QgaHlkcmF0ZWQgPSBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMocHJlcHJvY2Vzc2VkLCBnZXRSZXZpdmVycygpKSBhcyBUO1xuICAvLyBQb3N0LXByb2Nlc3M6IHN3YXAgZW5jcnlwdGVkIFVpbnQ4QXJyYXlzIGFuZCBleHBpcmVkIHN0dWJzIGZvciBDTEktc3R5bGVkIG9iamVjdHNcbiAgcmV0dXJuIHJlcGxhY2VFbmNyeXB0ZWRBbmRFeHBpcmVkV2l0aFJlZihoeWRyYXRlZCk7XG59XG4iXX0=
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L2h5ZHJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixJQUFJLHdCQUF3QixFQUM3QyxlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsdUJBQXVCLEdBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVcxQixvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEVBRVgsZUFBZSxFQUVmLFVBQVUsR0FDWCxNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLDhFQUE4RTtBQUM5RSwyQ0FBMkM7QUFDM0MsOEVBQThFO0FBRTlFOzs7R0FHRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQ2hELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNkLE1BQWMsRUFDZCxPQUFtRDtRQUVuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztR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b250ZW50IjpbIi8qKlxuICogQ0xJLXNwZWNpZmljIGh5ZHJhdGlvbiBmb3IgbzExeSBkaXNwbGF5LlxuICpcbiAqIE5vZGUuanMgcmV2aXZlcnMgdGhhdCB1c2UgYEJ1ZmZlci5mcm9tKClgIGZvciBiYXNlNjQgZGVjb2RpbmcgYW5kIGFkZFxuICogYHV0aWwuaW5zcGVjdC5jdXN0b21gIHRvIENsYXNzSW5zdGFuY2VSZWYgZm9yIHByZXR0eSBDTEkgb3V0cHV0LlxuICovXG5cbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgZ2V0Q29tbW9uUmV2aXZlcnMsIG1heWJlRGVjcnlwdCB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgQ2xhc3NJbnN0YW5jZVJlZixcbiAgZXh0cmFjdENsYXNzTmFtZSxcbiAgaHlkcmF0ZVJlc291cmNlSU8gYXMgaHlkcmF0ZVJlc291cmNlSU9HZW5lcmljLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzRXhwaXJlZFN0dWIsXG4gIGlzUnVuUmVmLFxuICBvYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG4gIHR5cGUgUmV2aXZlcnMsXG4gIHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCc7XG5pbXBvcnQgeyBwYXJzZUNsYXNzTmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7IGdldEV2ZW50RGF0YVJlZkZpZWxkcyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyBhbiBlbmNyeXB0aW9uIGtleSBmb3IgYSBydW4sIG9yIG51bGwgdG8gc2tpcFxuICogZGVjcnlwdGlvbi4gQWNjZXB0cyBhIHJ1bklkIOKAlCB0aGUgcmVzb2x2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGxvb2tpbmdcbiAqIHVwIHRoZSBXb3JrZmxvd1J1biBpbnRlcm5hbGx5ICh3aXRoIGNhY2hpbmcpIGlmIHRoZSBXb3JsZCBuZWVkcyBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbktleVJlc29sdmVyID1cbiAgfCAoKHJ1bklkOiBzdHJpbmcpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD4pXG4gIHwgbnVsbDtcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgdGhhdCBjb25zdW1lcnMgbmVlZFxuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzU3RyZWFtSWQsXG4gIGlzU3RyZWFtUmVmLFxuICB0eXBlIFJldml2ZXJzLFxuICBTVFJFQU1fUkVGX1RZUEUsXG4gIHR5cGUgU3RyZWFtUmVmLFxuICB0cnVuY2F0ZUlkLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIENsYXNzSW5zdGFuY2VSZWYgd2l0aCBpbnNwZWN0LmN1c3RvbVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXh0ZW5kZWQgQ2xhc3NJbnN0YW5jZVJlZiB3aXRoIE5vZGUuanMgYHV0aWwuaW5zcGVjdC5jdXN0b21gIGZvclxuICogcHJldHR5IENMSSBvdXRwdXQ6IGBDbGFzc05hbWVAZmlsZW5hbWUgeyAuLi5kYXRhIH1gXG4gKi9cbmNsYXNzIENMSUNsYXNzSW5zdGFuY2VSZWYgZXh0ZW5kcyBDbGFzc0luc3RhbmNlUmVmIHtcbiAgW2luc3BlY3QuY3VzdG9tXShcbiAgICBfZGVwdGg6IG51bWJlcixcbiAgICBvcHRpb25zOiBpbXBvcnQoJ25vZGU6dXRpbCcpLkluc3BlY3RPcHRpb25zU3R5bGl6ZWRcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhU3RyID0gaW5zcGVjdCh0aGlzLmRhdGEsIHsgLi4ub3B0aW9ucywgZGVwdGg6IG9wdGlvbnMuZGVwdGggfSk7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VDbGFzc05hbWUodGhpcy5jbGFzc0lkKTtcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBwYXJzZWQ/Lm1vZHVsZVNwZWNpZmllciA/PyB0aGlzLmNsYXNzSWQ7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBtb2R1bGVTcGVjaWZpZXIuc3BsaXQoJy8nKS5wb3AoKSA/PyBtb2R1bGVTcGVjaWZpZXI7XG4gICAgY29uc3Qgc3R5bGVkRmlsZU5hbWUgPSBvcHRpb25zLnN0eWxpemVcbiAgICAgID8gb3B0aW9ucy5zdHlsaXplKGBAJHtmaWxlTmFtZX1gLCAndW5kZWZpbmVkJylcbiAgICAgIDogYEAke2ZpbGVOYW1lfWA7XG4gICAgcmV0dXJuIGAke3RoaXMuY2xhc3NOYW1lfSR7c3R5bGVkRmlsZU5hbWV9ICR7ZGF0YVN0cn1gO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0xJIGVuY3J5cHRlZCBkYXRhIHBsYWNlaG9sZGVyIHdpdGggY3VzdG9tIGluc3BlY3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFBsYWNlaG9sZGVyIG9iamVjdCBmb3IgZW5jcnlwdGVkIGRhdGEgZmllbGRzIGluIENMSSBvdXRwdXQuXG4gKlxuICogVXNlcyBgdXRpbC5pbnNwZWN0LmN1c3RvbWAgdG8gcmVuZGVyIGFzIGEgc3R5bGVkLCB1bnF1b3RlZCBzdHJpbmdcbiAqIChlLmcuLCBkaW0geWVsbG93IFwi8J+UkiBFbmNyeXB0ZWRcIikgaW5zdGVhZCBvZiBhIHBsYWluIHF1b3RlZCBzdHJpbmcuXG4gKiBBbHNvIHByb3ZpZGVzIGB0b0pTT04oKWAgZm9yIGAtLWpzb25gIG91dHB1dC5cbiAqL1xuY2xhc3MgRW5jcnlwdGVkRGF0YVJlZiB7XG4gIFtpbnNwZWN0LmN1c3RvbV0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGsuZGltLnllbGxvdygnXFx1ezFGNTEyfSBFbmNyeXB0ZWQnKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFx1ezFGNTEyfSBFbmNyeXB0ZWQnO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1xcdXsxRjUxMn0gRW5jcnlwdGVkJztcbiAgfVxufVxuXG4vKiogU2luZ2xldG9uIGVuY3J5cHRlZCBkYXRhIHBsYWNlaG9sZGVyIGZvciBDTEkgZGlzcGxheSAqL1xuY29uc3QgRU5DUllQVEVEX1JFRiA9IG5ldyBFbmNyeXB0ZWREYXRhUmVmKCk7XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIEVuY3J5cHRlZERhdGFSZWYgKGZvciBjdXN0b20gdGFibGUgZm9ybWF0dGluZyBpbiBDTEkpICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWRSZWYodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFbmNyeXB0ZWREYXRhUmVmIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRW5jcnlwdGVkRGF0YVJlZjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDTEkgZXhwaXJlZCBkYXRhIHBsYWNlaG9sZGVyIHdpdGggY3VzdG9tIGluc3BlY3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFBsYWNlaG9sZGVyIG9iamVjdCBmb3IgZXhwaXJlZCBkYXRhIGZpZWxkcyBpbiBDTEkgb3V0cHV0LlxuICpcbiAqIFVzZXMgYHV0aWwuaW5zcGVjdC5jdXN0b21gIHRvIHJlbmRlciBhcyBhIHN0eWxlZCwgdW5xdW90ZWQgc3RyaW5nXG4gKiAoZS5nLiwgZGltIGdyYXkgXCI8ZGF0YSBleHBpcmVkPlwiKSBpbnN0ZWFkIG9mIGEgcmF3IHN0dWIgb2JqZWN0LlxuICogQWxzbyBwcm92aWRlcyBgdG9KU09OKClgIGZvciBgLS1qc29uYCBvdXRwdXQuXG4gKi9cbmNsYXNzIEV4cGlyZWREYXRhUmVmIHtcbiAgW2luc3BlY3QuY3VzdG9tXSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjaGFsay5ncmF5KCc8ZGF0YSBleHBpcmVkPicpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICc8ZGF0YSBleHBpcmVkPic7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnPGRhdGEgZXhwaXJlZD4nO1xuICB9XG59XG5cbi8qKiBTaW5nbGV0b24gZXhwaXJlZCBkYXRhIHBsYWNlaG9sZGVyIGZvciBDTEkgZGlzcGxheSAqL1xuY29uc3QgRVhQSVJFRF9SRUYgPSBuZXcgRXhwaXJlZERhdGFSZWYoKTtcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gRXhwaXJlZERhdGFSZWYgKGZvciBjdXN0b20gdGFibGUgZm9ybWF0dGluZyBpbiBDTEkpICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBpcmVkUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRXhwaXJlZERhdGFSZWYge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFeHBpcmVkRGF0YVJlZjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDTEkgcmV2aXZlcnMgKE5vZGUuanMsIHVzZXMgQnVmZmVyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogVGhlIHNldCBvZiByZWR1Y2VyIGtleXMgd2hvc2UgYGdldENvbW1vblJldml2ZXJzKClgIG91dHB1dCBwcm9kdWNlcyBhXG4gKiBuYXRpdmUgYEVycm9yYCBpbnN0YW5jZS4gV2Ugd3JhcCBlYWNoIG9mIHRoZXNlIHdpdGggYW4gYWRkaXRpb25hbFxuICogYHRvSlNPTmAgYXR0YWNobWVudCBpbiBDTEkgbW9kZSAoc2VlIGB3cmFwRXJyb3JSZXZpdmVyV2l0aFRvSlNPTmApLlxuICovXG5jb25zdCBFUlJPUl9SRVZJVkVSX0tFWVMgPSBbXG4gICdBZ2dyZWdhdGVFcnJvcicsXG4gICdET01FeGNlcHRpb24nLFxuICAnRXJyb3InLFxuICAnRXZhbEVycm9yJyxcbiAgJ0ZhdGFsRXJyb3InLFxuICAnSG9va0NvbmZsaWN0RXJyb3InLFxuICAnUmFuZ2VFcnJvcicsXG4gICdSZWZlcmVuY2VFcnJvcicsXG4gICdSZXRyeWFibGVFcnJvcicsXG4gICdSdW50aW1lRGVjcnlwdGlvbkVycm9yJyxcbiAgJ1N5bnRheEVycm9yJyxcbiAgJ1R5cGVFcnJvcicsXG4gICdVUklFcnJvcicsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFdyYXBzIGEgcnVudGltZSBFcnJvciByZXZpdmVyIHNvIHRoYXQgdGhlIHByb2R1Y2VkIGluc3RhbmNlIGNhcnJpZXMgYVxuICogbm9uLWVudW1lcmFibGUgYHRvSlNPTmAgbWV0aG9kLiBUaGUgcnVudGltZSByZXZpdmVycyByZXR1cm4gcmVhbCBgRXJyb3JgXG4gKiBpbnN0YW5jZXMgKGdvb2QgZm9yIGB1dGlsLmluc3BlY3RgLCBgaW5zdGFuY2VvZmAsIGB0b1N0cmluZ2AsIGV0Yy4pLCBidXRcbiAqIGBFcnJvci5wcm90b3R5cGVgJ3MgYG5hbWVgIC8gYG1lc3NhZ2VgIC8gYHN0YWNrYCAvIGBjYXVzZWAgYXJlXG4gKiBub24tZW51bWVyYWJsZSBhbmQgd291bGQgYmUgZHJvcHBlZCBieSBgSlNPTi5zdHJpbmdpZnlgIOKAlCB3aGljaCBpcyBob3dcbiAqIHRoZSBDTEkgZW1pdHMgaXRzIGAtLWpzb25gIG91dHB1dC4gQWRkaW5nIGB0b0pTT05gICh3aGljaCBgSlNPTi5zdHJpbmdpZnlgXG4gKiBjYWxscyBidXQgYHV0aWwuaW5zcGVjdGAgaWdub3JlcykgZ2l2ZXMgdXMgdGhlIGJlc3Qgb2YgYm90aCB3b3JsZHM6XG4gKiByb3VuZC10cmlwcGVkIGVycm9ycyByZW5kZXIgY2xlYW5seSBpbiBib3RoIG1vZGVzIHdpdGhvdXQgdGhlXG4gKiBkYXRhLXZlcnN1cy1kaXNwbGF5IHRyYWRlb2ZmIHRoYXQgcGxhaW4tb2JqZWN0IHJldml2ZXJzIHdvdWxkIGZvcmNlLlxuICpcbiAqIFN1YmNsYXNzLXNwZWNpZmljIGVudW1lcmFibGUgZmllbGRzIChlLmcuIGBSZXRyeWFibGVFcnJvci5yZXRyeUFmdGVyYCxcbiAqIGBBZ2dyZWdhdGVFcnJvci5lcnJvcnNgLCBgRmF0YWxFcnJvci5mYXRhbGApIGFyZSBwaWNrZWQgdXAgYXV0b21hdGljYWxseVxuICogdmlhIGBPYmplY3QuYXNzaWduYCBhZnRlciB0aGUgYmFzZSBmaWVsZHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gZW51bWVyYXRlXG4gKiB0aGVtIHBlci1zdWJjbGFzcy5cbiAqL1xuZnVuY3Rpb24gd3JhcEVycm9yUmV2aXZlcldpdGhUb0pTT04oXG4gIHJldml2ZXI6ICh2YWx1ZTogYW55KSA9PiB1bmtub3duXG4pOiAodmFsdWU6IGFueSkgPT4gdW5rbm93biB7XG4gIHJldHVybiAodmFsdWUpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSByZXZpdmVyKHZhbHVlKTtcbiAgICBpZiAoIShyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikpIHJldHVybiByZXN1bHQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgJ3RvSlNPTicsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAodGhpczogRXJyb3IpIHtcbiAgICAgICAgY29uc3QganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCdjYXVzZScgaW4gdGhpcykge1xuICAgICAgICAgIGpzb24uY2F1c2UgPSAodGhpcyBhcyB7IGNhdXNlOiB1bmtub3duIH0pLmNhdXNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBpY2sgdXAgc3ViY2xhc3Mtc3BlY2lmaWMgZW51bWVyYWJsZSBmaWVsZHMgKGUuZy4gRmF0YWxFcnJvci5mYXRhbCxcbiAgICAgICAgLy8gUmV0cnlhYmxlRXJyb3IucmV0cnlBZnRlciwgQWdncmVnYXRlRXJyb3IuZXJyb3JzKS5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgcmV2aXZlcnMgdXNlZCBieSBDTEkgaW5zcGVjdCBvdXRwdXQuXG4gKlxuICogQnVpbHQgb24gdG9wIG9mIGBnZXRDb21tb25SZXZpdmVycygpYCBmcm9tIGBAd29ya2Zsb3cvY29yZWAgc28gdGhhdCB0aGVcbiAqIENMSSBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIHJ1bnRpbWUncyByZXZpdmVyIHNldCBhdXRvbWF0aWNhbGx5LiBXaXRob3V0XG4gKiB0aGlzLCBldmVyeSBuZXcgcmV2aXZlciBhZGRlZCB0byBjb3JlIChlLmcuIGBGYXRhbEVycm9yYCxcbiAqIGBSZXRyeWFibGVFcnJvcmAsIHRoZSBidWlsdC1pbiBgRXJyb3JgIHN1YmNsYXNzZXMpIHdvdWxkIHNpbGVudGx5XG4gKiBkaXNhcHBlYXIgZnJvbSBDTEkgb3V0cHV0OiBkZXZhbHVlIHRocm93cyBcIlVua25vd24gdHlwZSBYXCIgZm9yXG4gKiB1bnJlY29nbml6ZWQgcmVkdWNlZCB0eXBlcywgYW5kIGBoeWRyYXRlUmVzb3VyY2VJT2Agc3dhbGxvd3MgdGhhdCBlcnJvclxuICogYW5kIHN1cmZhY2VzIHRoZSByYXcgYFVpbnQ4QXJyYXlgIHBheWxvYWQgdG8gY29uc3VtZXJzIOKAlCB3aGljaCB0aGVuXG4gKiBzaG93cyB1cCBhcyBgc3RlcC5lcnJvcmAgLyBgcnVuLmVycm9yYCBieXRlIGR1bXBzIGluc3RlYWQgb2YgdXNhYmxlXG4gKiBgeyBtZXNzYWdlLCBzdGFjaywg4oCmIH1gIG9iamVjdHMuXG4gKlxuICogT24gdG9wIG9mIHRoZSBjb21tb24gc2V0IHdlIGxheWVyOlxuICogICAtIEEgYHRvSlNPTmAgc2hpbSBvbiBlYWNoIEVycm9yIHJldml2ZXIgc28gbm9uLWVudW1lcmFibGVcbiAqICAgICBgRXJyb3IucHJvdG90eXBlYCBmaWVsZHMgc3Vydml2ZSBgSlNPTi5zdHJpbmdpZnlgIGZvciBgLS1qc29uYCBvdXRwdXRcbiAqICAgICB3aGlsZSBsZWF2aW5nIGB1dGlsLmluc3BlY3RgIHJlbmRlcmluZyB1bnRvdWNoZWRcbiAqICAgLSBgb2JzZXJ2YWJpbGl0eVJldml2ZXJzYCBmb3Igc3RyZWFtcyAvIHN0ZXArd29ya2Zsb3cgZnVuY3Rpb24gcmVmc1xuICogICAtIENMSS1zcGVjaWZpYyBvdmVycmlkZXMgdGhhdCBwcm9kdWNlIGRpc3BsYXktZnJpZW5kbHkgcGxhY2Vob2xkZXJzXG4gKiAgICAgZm9yIGBDbGFzc2AgLyBgSW5zdGFuY2VgICh0aGUgcnVudGltZSB2ZXJzaW9ucyBuZWVkIGZ1bGwgY2xhc3NcbiAqICAgICBpZGVudGl0eSB3aGljaCB0aGUgQ0xJIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDTElSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGNvbnN0IGJhc2VSZXZpdmVycyA9IGdldENvbW1vblJldml2ZXJzKGdsb2JhbFRoaXMpO1xuICBjb25zdCBlcnJvclJldml2ZXJzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIEVSUk9SX1JFVklWRVJfS0VZUy5mbGF0TWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJldml2ZXIgPSAoYmFzZVJldml2ZXJzIGFzIFJldml2ZXJzKVtrZXldO1xuICAgICAgcmV0dXJuIHJldml2ZXIgPyBbW2tleSwgd3JhcEVycm9yUmV2aXZlcldpdGhUb0pTT04ocmV2aXZlcildXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVJldml2ZXJzLFxuICAgIC4uLmVycm9yUmV2aXZlcnMsXG4gICAgLy8gTzExeS1zcGVjaWZpYyByZXZpdmVycyAoc3RyZWFtcywgc3RlcCBmdW5jdGlvbnMg4oaSIGRpc3BsYXkgb2JqZWN0cykuXG4gICAgLi4ub2JzZXJ2YWJpbGl0eVJldml2ZXJzLFxuICAgIC8vIE5vZGUgYFJlcXVlc3RgIC8gYFJlc3BvbnNlYCByZXZpdmVycyB0aGF0IGRvbid0IHJlbHkgb24gcnVubmluZyBhblxuICAgIC8vIGFjdHVhbCBmZXRjaCBoYW5kbGVyIOKAlCB1c2VkIHRvIHJlbmRlciByZXF1ZXN0L3Jlc3BvbnNlIElPIGlubGluZS5cbiAgICBSZXF1ZXN0OiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVxdWVzdDogZnVuY3Rpb24gKCkge30gfS5SZXF1ZXN0ITtcbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgbWV0aG9kOiB2YWx1ZS5tZXRob2QsXG4gICAgICAgIHVybDogdmFsdWUudXJsLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh2YWx1ZS5oZWFkZXJzKSxcbiAgICAgICAgYm9keTogdmFsdWUuYm9keSxcbiAgICAgICAgZHVwbGV4OiB2YWx1ZS5kdXBsZXgsXG4gICAgICAgIC4uLih2YWx1ZS5yZXNwb25zZVdyaXRhYmxlXG4gICAgICAgICAgPyB7IHJlc3BvbnNlV3JpdGFibGU6IHZhbHVlLnJlc3BvbnNlV3JpdGFibGUgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgUmVzcG9uc2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gICAgICBjb25zdCBjdG9yID0geyBSZXNwb25zZTogZnVuY3Rpb24gKCkge30gfS5SZXNwb25zZSE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIHN0YXR1czogdmFsdWUuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB2YWx1ZS5zdGF0dXNUZXh0LFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIHJlZGlyZWN0ZWQ6IHZhbHVlLnJlZGlyZWN0ZWQsXG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBDTEktc3BlY2lmaWMgb3ZlcnJpZGVzIGZvciBjbGFzcyBpbnN0YW5jZXMgd2l0aCBpbnNwZWN0LmN1c3RvbVxuICAgIENsYXNzOiAodmFsdWUpID0+IGA8Y2xhc3M6JHtleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpfT5gLFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIFJ1biBpbnN0YW5jZXMgYXJlIHJlbmRlcmVkIGFzIFJ1blJlZiBmb3IgY2xpY2thYmxlIHJlbmRlcmluZ1xuICAgICAgY29uc3QgcnVuUmVmID0gc2VyaWFsaXplZEluc3RhbmNlVG9SZWYodmFsdWUpO1xuICAgICAgaWYgKGlzUnVuUmVmKHJ1blJlZikpIHtcbiAgICAgICAgcmV0dXJuIHJ1blJlZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ0xJQ2xhc3NJbnN0YW5jZVJlZihcbiAgICAgICAgZXh0cmFjdENsYXNzTmFtZSh2YWx1ZS5jbGFzc0lkKSxcbiAgICAgICAgdmFsdWUuY2xhc3NJZCxcbiAgICAgICAgdmFsdWUuZGF0YVxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByZS1idWlsdCBDTEkgcmV2aXZlcnMgKGNhY2hlZClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgY2FjaGVkUmV2aXZlcnM6IFJldml2ZXJzIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldFJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgaWYgKCFjYWNoZWRSZXZpdmVycykge1xuICAgIGNhY2hlZFJldml2ZXJzID0gZ2V0Q0xJUmV2aXZlcnMoKTtcbiAgfVxuICByZXR1cm4gY2FjaGVkUmV2aXZlcnM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGVjcnlwdGlvbiBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQcmUtcHJvY2VzcyBhIHJlc291cmNlJ3MgZGF0YSBmaWVsZHM6IGlmIHRoZSByZXNvbHZlciBpcyBwcm92aWRlZCBhbmRcbiAqIHRoZSBmaWVsZCBpcyBlbmNyeXB0ZWQsIGRlY3J5cHQgaXQgYmVmb3JlIGdlbmVyaWMgaHlkcmF0aW9uLlxuICpcbiAqIFVzZXMgY29yZSdzIGBtYXliZURlY3J5cHQoKWAgd2hpY2ggaGFuZGxlcyB0aGUgJ2VuY3InIHByZWZpeCBzdHJpcHBpbmdcbiAqIGFuZCBBRVMtR0NNIGRlY3J5cHRpb24gdHJhbnNwYXJlbnRseS5cbiAqXG4gKiBXaGVuIHRoZSByZXNvbHZlciBpcyBudWxsIChubyAtLWRlY3J5cHQgZmxhZyksIGVuY3J5cHRlZCBmaWVsZHMgcGFzc1xuICogdGhyb3VnaCBhcyBVaW50OEFycmF5IGFuZCBhcmUgcmVwbGFjZWQgd2l0aCBFbmNyeXB0ZWREYXRhUmVmIGluIHBvc3QtcHJvY2Vzc2luZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWF5YmVEZWNyeXB0RmllbGRzPFxuICBUIGV4dGVuZHMge1xuICAgIHJ1bklkPzogc3RyaW5nO1xuICAgIGlucHV0PzogYW55O1xuICAgIG91dHB1dD86IGFueTtcbiAgICBtZXRhZGF0YT86IGFueTtcbiAgICBldmVudFR5cGU/OiBzdHJpbmc7XG4gICAgZXZlbnREYXRhPzogYW55O1xuICB9LFxuPihyZXNvdXJjZTogVCwgcmVzb2x2ZXI6IEVuY3J5cHRpb25LZXlSZXNvbHZlcik6IFByb21pc2U8VD4ge1xuICBpZiAoIXJlc29sdmVyKSByZXR1cm4gcmVzb3VyY2U7XG5cbiAgY29uc3QgcnVuSWQgPSAocmVzb3VyY2UgYXMgYW55KS5ydW5JZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmICghcnVuSWQpIHJldHVybiByZXNvdXJjZTtcblxuICBjb25zdCByZXN1bHQgPSB7IC4uLnJlc291cmNlIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXdLZXkgPSBhd2FpdCByZXNvbHZlcihydW5JZCk7XG4gICAgY29uc3QgeyBpbXBvcnRLZXkgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbicpO1xuICAgIGNvbnN0IGsgPSByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIERlY3J5cHQgaW5wdXQvb3V0cHV0L2Vycm9yIGZpZWxkcyAoV29ya2Zsb3dSdW4sIFN0ZXApXG4gICAgcmVzdWx0LmlucHV0ID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5pbnB1dCwgayk7XG4gICAgcmVzdWx0Lm91dHB1dCA9IGF3YWl0IG1heWJlRGVjcnlwdChyZXN1bHQub3V0cHV0LCBrKTtcbiAgICAocmVzdWx0IGFzIGFueSkuZXJyb3IgPSBhd2FpdCBtYXliZURlY3J5cHQoKHJlc3VsdCBhcyBhbnkpLmVycm9yLCBrKTtcblxuICAgIC8vIERlY3J5cHQgbWV0YWRhdGEgZmllbGQgKEhvb2spXG4gICAgcmVzdWx0Lm1ldGFkYXRhID0gYXdhaXQgbWF5YmVEZWNyeXB0KHJlc3VsdC5tZXRhZGF0YSwgayk7XG5cbiAgICAvLyBEZWNyeXB0IGV2ZW50RGF0YSBmaWVsZHMgKEV2ZW50KVxuICAgIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgZXZlbnREYXRhID0geyAuLi5yZXN1bHQuZXZlbnREYXRhIH07XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGdldEV2ZW50RGF0YVJlZkZpZWxkcyhyZXN1bHQuZXZlbnRUeXBlID8/ICcnKSkge1xuICAgICAgICBldmVudERhdGFbZmllbGRdID0gYXdhaXQgbWF5YmVEZWNyeXB0KGV2ZW50RGF0YVtmaWVsZF0sIGspO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmV2ZW50RGF0YSA9IGV2ZW50RGF0YTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cbiAgICAvLyBJZiB0aGUga2V5IGZldGNoIGZhaWxlZCBkdWUgdG8gYW4gSFRUUCBlcnJvciAoZS5nLiA0MjkgcmF0ZSBsaW1pdCxcbiAgICAvLyA1MDAgc2VydmVyIGVycm9yKSwgcmUtdGhyb3cgc28gdGhlIGNhbGxlciBzdXJmYWNlcyBhIGNsZWFyIGZhaWx1cmVcbiAgICAvLyBpbnN0ZWFkIG9mIHNpbGVudGx5IHNob3dpbmcgZW5jcnlwdGVkIHBsYWNlaG9sZGVycy5cbiAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnSFRUUCAnKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIERlY3J5cHRpb24gZmFpbGVkIChiYWQga2V5LCBjb3JydXB0ZWQgY2lwaGVydGV4dCwgZXRjLikg4oCUIGZhbGwgYmFja1xuICAgIC8vIHRvIHNob3dpbmcgZW5jcnlwdGVkIHBsYWNlaG9sZGVycyBpbnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBDTEkuXG4gICAgY29uc3QgeyBsb2dnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vY29uZmlnL2xvZy5qcycpO1xuICAgIGxvZ2dlci53YXJuKGBEZWNyeXB0aW9uIGZhaWxlZCBmb3IgcmVzb3VyY2UgJHtydW5JZH06ICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIEFQSVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBSZXBsYWNlIGEgc2luZ2xlIGZpZWxkIHZhbHVlIHdpdGggYSBkaXNwbGF5IHJlZiBpZiBpdCdzIGVuY3J5cHRlZCBvciBleHBpcmVkLiAqL1xuZnVuY3Rpb24gdG9EaXNwbGF5UmVmKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmIChpc0VuY3J5cHRlZERhdGEodmFsdWUpKSByZXR1cm4gRU5DUllQVEVEX1JFRjtcbiAgaWYgKGlzRXhwaXJlZFN0dWIodmFsdWUpKSByZXR1cm4gRVhQSVJFRF9SRUY7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGVuY3J5cHRlZCBVaW50OEFycmF5IHZhbHVlcyBhbmQgZXhwaXJlZCBzdHVicyB3aXRoIHN0eWxlZFxuICogcmVmIG9iamVjdHMgaW4ga25vd24gZGF0YSBmaWVsZHMgZm9yIGN1c3RvbSBpbnNwZWN0IHJlbmRlcmluZy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUVuY3J5cHRlZEFuZEV4cGlyZWRXaXRoUmVmPFQ+KHJlc291cmNlOiBUKTogVCB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIHJlc291cmNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICByZXN1bHRba2V5XSA9IHRvRGlzcGxheVJlZihyZXN1bHRba2V5XSk7XG4gIH1cblxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlZCA9IHsgLi4uKHJlc3VsdC5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gICAgY29uc3QgZXZlbnRUeXBlID1cbiAgICAgIHR5cGVvZiByZXN1bHQuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHJlc3VsdC5ldmVudFR5cGUgOiAnJztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnRUeXBlKSkge1xuICAgICAgZWRba2V5XSA9IHRvRGlzcGxheVJlZihlZFtrZXldKTtcbiAgICB9XG4gICAgcmVzdWx0LmV2ZW50RGF0YSA9IGVkO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgZGF0YSBmaWVsZHMgb2YgYSByZXNvdXJjZSBmb3IgQ0xJIGRpc3BsYXkuXG4gKlxuICogV2hlbiBgZW5jcnlwdG9yUmVzb2x2ZXJgIGlzIG51bGwgKGRlZmF1bHQgLyBubyAtLWRlY3J5cHQgZmxhZyksIGVuY3J5cHRlZFxuICogZmllbGRzIGFyZSBzaG93biBhcyBzdHlsZWQgXCLwn5SSIEVuY3J5cHRlZFwiIHBsYWNlaG9sZGVycyB2aWEgRW5jcnlwdGVkRGF0YVJlZi5cbiAqXG4gKiBXaGVuIGBlbmNyeXB0b3JSZXNvbHZlcmAgaXMgcHJvdmlkZWQgKC0tZGVjcnlwdCBmbGFnKSwgZW5jcnlwdGVkIGZpZWxkc1xuICogYXJlIGRlY3J5cHRlZCBiZWZvcmUgaHlkcmF0aW9uIHNvIHRoZSBhY3R1YWwgdXNlciBkYXRhIGlzIGRpc3BsYXllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPPFQ+KFxuICByZXNvdXJjZTogVCxcbiAga2V5UmVzb2x2ZXI/OiBFbmNyeXB0aW9uS2V5UmVzb2x2ZXJcbik6IFByb21pc2U8VD4ge1xuICAvLyBQcmUtcHJvY2VzczogZGVjcnlwdCBhbnkgZW5jcnlwdGVkIGZpZWxkcyB3aGVuIGEgcmVzb2x2ZXIgaXMgcHJvdmlkZWRcbiAgY29uc3QgcHJlcHJvY2Vzc2VkID0gYXdhaXQgbWF5YmVEZWNyeXB0RmllbGRzKFxuICAgIHJlc291cmNlIGFzIGFueSxcbiAgICBrZXlSZXNvbHZlciA/PyBudWxsXG4gICk7XG4gIGNvbnN0IGh5ZHJhdGVkID0gaHlkcmF0ZVJlc291cmNlSU9HZW5lcmljKHByZXByb2Nlc3NlZCwgZ2V0UmV2aXZlcnMoKSkgYXMgVDtcbiAgLy8gUG9zdC1wcm9jZXNzOiBzd2FwIGVuY3J5cHRlZCBVaW50OEFycmF5cyBhbmQgZXhwaXJlZCBzdHVicyBmb3IgQ0xJLXN0eWxlZCBvYmplY3RzXG4gIHJldHVybiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhSZWYoaHlkcmF0ZWQpO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hydration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydration.test.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { importKey } from '@workflow/core/encryption';
2
+ import { dehydrateStepError } from '@workflow/core/serialization';
3
+ import { describe, expect, it } from 'vitest';
4
+ import { hydrateResourceIO, isEncryptedRef } from './hydration.js';
5
+ describe('hydrateResourceIO', () => {
6
+ it('displays and decrypts encrypted event errors', async () => {
7
+ const rawKey = new Uint8Array(32).fill(7);
8
+ const error = new Error('step failed');
9
+ const encryptedError = await dehydrateStepError(error, 'run_1', await importKey(rawKey), [], globalThis, true);
10
+ const event = {
11
+ runId: 'run_1',
12
+ eventId: 'event_1',
13
+ eventType: 'step_failed',
14
+ eventData: { error: encryptedError },
15
+ };
16
+ const encrypted = await hydrateResourceIO(event);
17
+ expect(isEncryptedRef(encrypted.eventData.error)).toBe(true);
18
+ const decrypted = await hydrateResourceIO(event, async () => rawKey);
19
+ expect(decrypted.eventData.error).toBeInstanceOf(Error);
20
+ expect(decrypted.eventData.error).toHaveProperty('message', error.message);
21
+ });
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luc3BlY3QvaHlkcmF0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLE1BQU0sa0JBQWtCLENBQzdDLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQ3ZCLEVBQUUsRUFDRixVQUFVLEVBQ1YsSUFBSSxDQUNMLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRztZQUNaLEtBQUssRUFBRSxPQUFPO1lBQ2QsT0FBTyxFQUFFLFNBQVM7WUFDbEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtTQUNyQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcG9ydEtleSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL2VuY3J5cHRpb24nO1xuaW1wb3J0IHsgZGVoeWRyYXRlU3RlcEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlUmVzb3VyY2VJTywgaXNFbmNyeXB0ZWRSZWYgfSBmcm9tICcuL2h5ZHJhdGlvbi5qcyc7XG5cbmRlc2NyaWJlKCdoeWRyYXRlUmVzb3VyY2VJTycsICgpID0+IHtcbiAgaXQoJ2Rpc3BsYXlzIGFuZCBkZWNyeXB0cyBlbmNyeXB0ZWQgZXZlbnQgZXJyb3JzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJhd0tleSA9IG5ldyBVaW50OEFycmF5KDMyKS5maWxsKDcpO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdzdGVwIGZhaWxlZCcpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEVycm9yID0gYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgZXJyb3IsXG4gICAgICAncnVuXzEnLFxuICAgICAgYXdhaXQgaW1wb3J0S2V5KHJhd0tleSksXG4gICAgICBbXSxcbiAgICAgIGdsb2JhbFRoaXMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIHJ1bklkOiAncnVuXzEnLFxuICAgICAgZXZlbnRJZDogJ2V2ZW50XzEnLFxuICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgZXZlbnREYXRhOiB7IGVycm9yOiBlbmNyeXB0ZWRFcnJvciB9LFxuICAgIH07XG5cbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhldmVudCk7XG4gICAgZXhwZWN0KGlzRW5jcnlwdGVkUmVmKGVuY3J5cHRlZC5ldmVudERhdGEuZXJyb3IpKS50b0JlKHRydWUpO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkID0gYXdhaXQgaHlkcmF0ZVJlc291cmNlSU8oZXZlbnQsIGFzeW5jICgpID0+IHJhd0tleSk7XG4gICAgZXhwZWN0KGRlY3J5cHRlZC5ldmVudERhdGEuZXJyb3IpLnRvQmVJbnN0YW5jZU9mKEVycm9yKTtcbiAgICBleHBlY3QoZGVjcnlwdGVkLmV2ZW50RGF0YS5lcnJvcikudG9IYXZlUHJvcGVydHkoJ21lc3NhZ2UnLCBlcnJvci5tZXNzYWdlKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,4 +1,4 @@
1
- import type { WorkflowRun, World } from '@workflow/world';
1
+ import { type WorkflowRun, type World } from '@workflow/world';
2
2
  import type { InspectCLIOptions } from '../config/types.js';
3
3
  import { getDisplaySettings } from './terminal-utils.js';
4
4
  export declare const formatTableValue: (prop: string, value: unknown, opts?: InspectCLIOptions, displaySettings?: ReturnType<typeof getDisplaySettings>, item?: Record<string, unknown>) => unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/output.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAqB,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAM7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA0C5D,OAAO,EAGL,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAuO7B,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,OAAM,iBAAsB,EAC5B,kBAAkB,UAAU,CAAC,OAAO,kBAAkB,CAAC,EACvD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAuE/B,CAAC;AAuJF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,WAAW,KAAG,OAMjD,CAAC;AA4EF,eAAO,MAAM,QAAQ,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBAyGxE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,OAAM,iBAAsB,8DAoB7B,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,OAAM,iBAAsB,kBA2B7B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,OAAO,KAAK,EACZ,OAAM,iBAEL,kBA2GF,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+C7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,UAAU,MAAM,EAChB,OAAM,iBAAsB,kBA2C7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBAgD7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBA0G7B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBA6EzE,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+B7B,CAAC;AAqDF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBAmI7B,CAAC"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/output.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA0C5D,OAAO,EAGL,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAuO7B,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,OAAM,iBAAsB,EAC5B,kBAAkB,UAAU,CAAC,OAAO,kBAAkB,CAAC,EACvD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAuE/B,CAAC;AAuJF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,WAAW,KAAG,OAMjD,CAAC;AA4EF,eAAO,MAAM,QAAQ,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBAyGxE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,OAAM,iBAAsB,8DAoB7B,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,OAAM,iBAAsB,kBA2B7B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,OAAO,KAAK,EACZ,OAAM,iBAEL,kBA2GF,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+C7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,UAAU,MAAM,EAChB,OAAM,iBAAsB,kBA2C7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBAgD7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBA0G7B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,OAAO,KAAK,EAAE,OAAM,iBAAsB,kBA6EzE,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,QAAQ,MAAM,EACd,OAAM,iBAAsB,kBA+B7B,CAAC;AAqDF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAM,iBAAsB,kBAmI7B,CAAC"}
@@ -2,6 +2,7 @@ import { importKey } from '@workflow/core/encryption';
2
2
  import { getDeserializeStream, getExternalRevivers, } from '@workflow/core/serialization';
3
3
  import { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';
4
4
  import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
5
+ import { isWaitEventType, } from '@workflow/world';
5
6
  import chalk from 'chalk';
6
7
  import { formatDistance } from 'date-fns';
7
8
  import Table from 'easy-table';
@@ -1062,7 +1063,7 @@ export const listSleeps = async (world, opts = {}) => {
1062
1063
  // Group wait events by correlationId
1063
1064
  const waitEventsByCorrelation = new Map();
1064
1065
  for (const event of events.data) {
1065
- if (event.correlationId?.startsWith('wait_')) {
1066
+ if (isWaitEventType(event.eventType) && event.correlationId) {
1066
1067
  const existing = waitEventsByCorrelation.get(event.correlationId) ?? [];
1067
1068
  existing.push(event);
1068
1069
  waitEventsByCorrelation.set(event.correlationId, existing);
@@ -1120,4 +1121,4 @@ export const listSleeps = async (world, opts = {}) => {
1120
1121
  throw error;
1121
1122
  }
1122
1123
  };
1123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L291dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyxPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLG1DQUFtQyxHQUNwQyxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxLQUFZLEVBQUUsT0FBZ0I7SUFDcEQsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLElBQUksQ0FBQztJQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQjtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUEyQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxLQUFhLEVBQUUsRUFBRTtRQUN2QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUss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O1lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FDUixTQUFTLENBQ1AsTUFBOEMsRUFDOUMsaUJBQWlCLEVBQ2pCLEVBQUUsR0FBRyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQ3hDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUNELE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcG9ydEtleSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL2VuY3J5cHRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBFbmNyeXB0aW9uS2V5UGFyYW0sXG4gIGdldERlc2VyaWFsaXplU3RyZWFtLFxuICBnZXRFeHRlcm5hbFJldml2ZXJzLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IFZFUkNFTF80MDNfRVJST1JfTUVTU0FHRSB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biwgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuaW1wb3J0IHsgZm9ybWF0RGlzdGFuY2UgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgVGFibGUgZnJvbSAnZWFzeS10YWJsZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9jb25maWcvbG9nLmpzJztcbmltcG9ydCB0eXBlIHsgSW5zcGVjdENMSU9wdGlvbnMgfSBmcm9tICcuLi9jb25maWcvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UsXG4gIGlzT2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZEVycm9yLFxufSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEVuY3J5cHRpb25LZXlSZXNvbHZlcixcbiAgaHlkcmF0ZVJlc291cmNlSU8sXG4gIGlzRW5jcnlwdGVkUmVmLFxuICBpc0V4cGlyZWRSZWYsXG59IGZyb20gJy4vaHlkcmF0aW9uLmpzJztcbmltcG9ydCB7IHJlc29sdmVUaW1lV2luZG93IH0gZnJvbSAnLi90aW1lLXdpbmRvdy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVuY3J5cHRpb25LZXlSZXNvbHZlciBmcm9tIGEgV29ybGQgaW5zdGFuY2UuXG4gKiBSZXR1cm5zIG51bGwgaWYgZGVjcnlwdCBpcyBmYWxzZSDigJQgZW5jcnlwdGVkIGRhdGEgd2lsbCBzaG93IGFzIGEgcGxhY2Vob2xkZXIuXG4gKlxuICogVGhlIHJlc29sdmVyIGZldGNoZXMgdGhlIGZ1bGwgV29ya2Zsb3dSdW4gKGNhY2hlZCBwZXIgcnVuSWQpIHNvIHRoYXQgdGhlXG4gKiBXb3JsZCBjYW4gaW5zcGVjdCBkZXBsb3ltZW50LXNwZWNpZmljIGZpZWxkcyBmb3Iga2V5IHJlc29sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyKHdvcmxkOiBXb3JsZCwgZGVjcnlwdDogYm9vbGVhbik6IEVuY3J5cHRpb25LZXlSZXNvbHZlciB7XG4gIGlmICghZGVjcnlwdCkgcmV0dXJuIG51bGw7XG4gIGlmICghd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD4+KCk7XG4gIHJldHVybiAocnVuSWQ6IHN0cmluZykgPT4ge1xuICAgIGxldCBjYWNoZWQgPSBjYWNoZS5nZXQocnVuSWQpO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICBjYWNoZWQgPSB3b3JsZC5ydW5zXG4gICAgICAgIC5nZXQocnVuSWQpXG4gICAgICAgIC50aGVuKChydW4pID0+IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4hKHJ1bikpO1xuICAgICAgY2FjaGUuc2V0KHJ1bklkLCBjYWNoZWQpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkO1xuICB9O1xufVxuXG5pbXBvcnQge1xuICB0eXBlIEFuYWx5dGljc1BhZ2VJbmZvLFxuICB0eXBlIFBhZ2VEYXRhLFxuICBzZXR1cExpc3RQYWdpbmF0aW9uLFxufSBmcm9tICcuL3BhZ2luYXRpb24uanMnO1xuaW1wb3J0IHsgc3RyZWFtVG9Db25zb2xlIH0gZnJvbSAnLi9zdHJlYW0uanMnO1xuaW1wb3J0IHtcbiAgZm9ybWF0SVNPRGF0ZSxcbiAgZm9ybWF0U3RhdHVzIGFzIGZvcm1hdFN0YXR1c0FiYnJldixcbiAgZ2V0RGlzcGxheVNldHRpbmdzLFxuICBnZXRUZXJtaW5hbFdpZHRoLFxuICBpc0NJLFxufSBmcm9tICcuL3Rlcm1pbmFsLXV0aWxzLmpzJztcblxuY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAyMDtcbmxldCBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSAxNTsgLy8gV2lsbCBiZSBhZGp1c3RlZCBiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aFxuXG5jb25zdCBXT1JLRkxPV19SVU5fSU9fUFJPUFM6IChrZXlvZiBXb3JrZmxvd1J1bilbXSA9IFsnaW5wdXQnLCAnb3V0cHV0J107XG5cbmNvbnN0IFNURVBfSU9fUFJPUFM6IChrZXlvZiBTdGVwKVtdID0gWydpbnB1dCcsICdvdXRwdXQnXTtcblxuY29uc3QgV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QUzogKGtleW9mIFdvcmtmbG93UnVuKVtdID0gW1xuICAncnVuSWQnLFxuICAnd29ya2Zsb3dOYW1lJyxcbiAgJ3N0YXR1cycsXG4gICdzdGFydGVkQXQnLFxuICAnY29tcGxldGVkQXQnLFxuICAuLi5XT1JLRkxPV19SVU5fSU9fUFJPUFMsXG5dO1xuXG5jb25zdCBTVEVQX0xJU1RFRF9QUk9QUzogKGtleW9mIFN0ZXApW10gPSBbXG4gICdydW5JZCcsXG4gICdzdGVwSWQnLFxuICAnc3RlcE5hbWUnLFxuICAnc3RhdHVzJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG4gIC4uLlNURVBfSU9fUFJPUFMsXG5dO1xuXG5jb25zdCBFVkVOVF9JT19QUk9QUzogKGtleW9mIEV2ZW50IHwgJ2V2ZW50RGF0YScpW10gPSBbJ2V2ZW50RGF0YSddO1xuXG5jb25zdCBFVkVOVF9MSVNURURfUFJPUFM6IChrZXlvZiBFdmVudCB8ICdldmVudERhdGEnKVtdID0gW1xuICAnZXZlbnRJZCcsXG4gICdldmVudFR5cGUnLFxuICAnY29ycmVsYXRpb25JZCcsXG4gICdjcmVhdGVkQXQnLFxuICAuLi5FVkVOVF9JT19QUk9QUyxcbl07XG5cbi8vIGNvbnN0IEhPT0tfREFUQV9QUk9QUzogKGtleW9mIEhvb2sgfCAnaGFzUmVzcG9uc2UnKVtdID0gWydoYXNSZXNwb25zZSddO1xuXG5jb25zdCBIT09LX0xJU1RFRF9QUk9QUzogKGtleW9mIEhvb2sgfCAnaGFzUmVzcG9uc2UnKVtdID0gW1xuICAncnVuSWQnLFxuICAnaG9va0lkJyxcbiAgJ293bmVySWQnLFxuICAnY3JlYXRlZEF0JyxcbiAgLy8gLi4uSE9PS19EQVRBX1BST1BTLFxuXTtcblxuaW50ZXJmYWNlIFNsZWVwIHtcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICBldmVudElkOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgcmVzdW1lQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gIGNvbXBsZXRlZEF0OiBEYXRlIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBXQUlUX0xJU1RFRF9QUk9QUzogKGtleW9mIFNsZWVwKVtdID0gW1xuICAnY29ycmVsYXRpb25JZCcsXG4gICdldmVudElkJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdyZXN1bWVBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG5dO1xuXG5jb25zdCBTVEFUVVNfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nPiA9IHtcbiAgcnVubmluZzogY2hhbGsuYmx1ZSxcbiAgY29tcGxldGVkOiBjaGFsay5ncmVlbixcbiAgZmFpbGVkOiBjaGFsay5yZWQsXG4gIGNhbmNlbGxlZDogY2hhbGsuc3RyaWtldGhyb3VnaC55ZWxsb3csXG4gIHBlbmRpbmc6IGNoYWxrLmJsdWUsXG4gIHdhaXRpbmc6IGNoYWxrLmJsdWUsXG59O1xuXG5jb25zdCBpc1N0cmVhbUlkID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnc3RybV8nKTtcbn07XG5cbmNvbnN0IHNob3dTdGF0dXNMZWdlbmQgPSAoKSA9PiB7XG4gIGxvZ2dlci5sb2coJ1xcblN0YXR1cyBMZWdlbmQ6Jyk7XG4gIGNvbnN0IHN0YXR1c2VzID0gW1xuICAgICdydW5uaW5nJyxcbiAgICAnY29tcGxldGVkJyxcbiAgICAnZmFpbGVkJyxcbiAgICAnY2FuY2VsbGVkJyxcbiAgICAncGVuZGluZycsXG4gICAgJ3dhaXRpbmcnLFxuICBdO1xuXG4gIGNvbnN0IGxlZ2VuZEl0ZW1zID0gc3RhdHVzZXMubWFwKChzdGF0dXMpID0+IHtcbiAgICBjb25zdCBjb2xvckZ1bmMgPSBTVEFUVVNfQ09MT1JTW3N0YXR1c107XG4gICAgY29uc3QgYWJicmV2ID0gZm9ybWF0U3RhdHVzQWJicmV2KHN0YXR1cywgdHJ1ZSk7XG4gICAgcmV0dXJuIGAke2NvbG9yRnVuYyhhYmJyZXYpfSA9ICR7c3RhdHVzfWA7XG4gIH0pO1xuXG4gIGxvZ2dlci5sb2coYCAgJHtsZWdlbmRJdGVtcy5qb2luKCcgICcpfWApO1xuICBsb2dnZXIubG9nKCcnKTtcbn07XG5cbmNvbnN0IGlzU2xlZXBTdGVwID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHN0ZXBOYW1lLmluY2x1ZGVzKCctc2xlZXAnKTtcbn07XG5cbmNvbnN0IGNoZWNrQW5kSGFuZGxlVmVyY2VsQWNjZXNzRXJyb3IgPSAoXG4gIGVycm9yOiB1bmtub3duLFxuICBiYWNrZW5kPzogc3RyaW5nXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKGJhY2tlbmQgPT09ICd2ZXJjZWwnICYmIGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBleHRyYWN0RXJyb3JNZXNzYWdlID0gKFxuICBlcnI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXJyLm1lc3NhZ2UgJiYgdHlwZW9mIGVyci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlcnIubWVzc2FnZTtcbiAgfVxuXG4gIGlmIChlcnIuYm9keSAmJiB0eXBlb2YgZXJyLmJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgYm9keSA9IGVyci5ib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChib2R5Lm1lc3NhZ2UgJiYgdHlwZW9mIGJvZHkubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBib2R5Lm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmIChib2R5LmVycm9yICYmIHR5cGVvZiBib2R5LmVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGJvZHkuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGdldFBhZ2VJbmZvID0gKHJlc3VsdDogdW5rbm93bik6IEFuYWx5dGljc1BhZ2VJbmZvIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKFxuICAgIHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8XG4gICAgcmVzdWx0ID09PSBudWxsIHx8XG4gICAgISgncGFnZUluZm8nIGluIHJlc3VsdClcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gKHJlc3VsdCBhcyB7IHBhZ2VJbmZvPzogQW5hbHl0aWNzUGFnZUluZm8gfSkucGFnZUluZm87XG59O1xuXG5jb25zdCBoYW5kbGVBcGlFcnJvciA9IChlcnJvcjogdW5rbm93biwgYmFja2VuZD86IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAvLyBGaXJzdCBjaGVjayBmb3IgVmVyY2VsIGFjY2VzcyBlcnJvcnNcbiAgaWYgKGNoZWNrQW5kSGFuZGxlVmVyY2VsQWNjZXNzRXJyb3IoZXJyb3IsIGJhY2tlbmQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgbG9nZ2VyLmVycm9yKGdldE9ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRNZXNzYWdlKCkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSGFuZGxlIG90aGVyIEhUVFAgZXJyb3JzXG4gIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBIYW5kbGUgNDAwIEJhZCBSZXF1ZXN0XG4gICAgaWYgKGVyci5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdCYWQgUmVxdWVzdDogVGhlIHJlcXVlc3Qgd2FzIGludmFsaWQuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXh0cmFjdEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBEZXRhaWxzOiAke21lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgb3RoZXIgSFRUUCBlcnJvcnMgKDQwNCwgNTAwLCBldGMuKVxuICAgIGlmICh0eXBlb2YgZXJyLnN0YXR1cyA9PT0gJ251bWJlcicgJiYgZXJyLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgSFRUUCBFcnJvciAke2Vyci5zdGF0dXN9OiAke2dldFN0YXR1c1RleHQoZXJyLnN0YXR1cyl9YCk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXh0cmFjdEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBEZXRhaWxzOiAke21lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBnZXRTdGF0dXNUZXh0ID0gKHN0YXR1czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc3RhdHVzVGV4dHM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgNDAwOiAnQmFkIFJlcXVlc3QnLFxuICAgIDQwMTogJ1VuYXV0aG9yaXplZCcsXG4gICAgNDAyOiAnUGF5bWVudCBSZXF1aXJlZCcsXG4gICAgNDAzOiAnRm9yYmlkZGVuJyxcbiAgICA0MDQ6ICdOb3QgRm91bmQnLFxuICAgIDQyOTogJ1RvbyBNYW55IFJlcXVlc3RzJyxcbiAgICA1MDA6ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLFxuICAgIDUwMjogJ0JhZCBHYXRld2F5JyxcbiAgICA1MDM6ICdTZXJ2aWNlIFVuYXZhaWxhYmxlJyxcbiAgfTtcbiAgcmV0dXJuIHN0YXR1c1RleHRzW3N0YXR1c10gfHwgJ1Vua25vd24gRXJyb3InO1xufTtcblxuY29uc3QgdHJ1bmNhdGVOYW1lSWZOZWVkZWQgPSAobmFtZTogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBtYXhMZW5ndGggPCBuYW1lLmxlbmd0aCA/IGAke25hbWUuc3Vic3RyaW5nKDAsIG1heExlbmd0aCl9Li4uYCA6IG5hbWU7XG59O1xuXG5jb25zdCBmb3JtYXROYW1lRmllbGQgPSAoXG4gIG5hbWVOb25VbmlxdWU6IHN0cmluZyxcbiAgdHJ1bmNhdGVMZW5ndGg6IG51bWJlcixcbiAgaXNTbGVlcDogYm9vbGVhblxuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJ1bmNhdGVkTmFtZSA9IHRydW5jYXRlTmFtZUlmTmVlZGVkKG5hbWVOb25VbmlxdWUsIHRydW5jYXRlTGVuZ3RoKTtcbiAgaWYgKGlzU2xlZXApIHtcbiAgICByZXR1cm4gY2hhbGsueWVsbG93QnJpZ2h0KHRydW5jYXRlZE5hbWUpO1xuICB9XG4gIHJldHVybiBjaGFsay5ibHVlLmJsdWVCcmlnaHQodHJ1bmNhdGVkTmFtZSk7XG59O1xuXG5jb25zdCBmb3JtYXRJZEZpZWxkID0gKFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuICBzaG91bGRUcnVuY2F0ZUlkczogYm9vbGVhblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgdmFsdWVTdHIgPSBTdHJpbmcodmFsdWUpO1xuICBjb25zdCBpZFN0ciA9IHNob3VsZFRydW5jYXRlSWRzID8gdHJ1bmNhdGVJZFRvTGFzdENoYXJzKHZhbHVlU3RyKSA6IHZhbHVlU3RyO1xuICBpZiAocHJvcCA9PT0gJ3N0cmVhbUlkJykge1xuICAgIHJldHVybiBjaGFsay5ncmVlbihpZFN0cik7XG4gIH1cbiAgcmV0dXJuIGlkU3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFRhYmxlVmFsdWUgPSAoXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge30sXG4gIGRpc3BsYXlTZXR0aW5ncz86IFJldHVyblR5cGU8dHlwZW9mIGdldERpc3BsYXlTZXR0aW5ncz4sXG4gIGl0ZW0/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKSA9PiB7XG4gIGNvbnN0IG5hbWVzVHJ1bmNhdGUgPSBkaXNwbGF5U2V0dGluZ3M/Lm5hbWVzVHJ1bmNhdGVMZW5ndGggPz8gNDA7XG4gIGNvbnN0IHNob3VsZFRydW5jYXRlSWRzID0gZGlzcGxheVNldHRpbmdzPy50cnVuY2F0ZUlkc1RvTGFzdENoYXJzID8/IGZhbHNlO1xuXG4gIC8vIEhhbmRsZSBJRHMgd2l0aCBwb3RlbnRpYWwgdHJ1bmNhdGlvblxuICBpZiAoXG4gICAgW1xuICAgICAgJ3N0cmVhbUlkJyxcbiAgICAgICdydW5JZCcsXG4gICAgICAnc3RlcElkJyxcbiAgICAgICdob29rSWQnLFxuICAgICAgJ2V2ZW50SWQnLFxuICAgICAgJ2NvcnJlbGF0aW9uSWQnLFxuICAgICAgJ293bmVySWQnLFxuICAgIF0uaW5jbHVkZXMocHJvcClcbiAgKSB7XG4gICAgcmV0dXJuIGZvcm1hdElkRmllbGQocHJvcCwgdmFsdWUsIHNob3VsZFRydW5jYXRlSWRzKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBuYW1lcyB3aXRoIHRydW5jYXRpb25cbiAgaWYgKHByb3AgPT09ICdzdGVwTmFtZScpIHtcbiAgICBjb25zdCBuYW1lTm9uVW5pcXVlID0gcGFyc2VTdGVwTmFtZShTdHJpbmcodmFsdWUpKT8uc2hvcnROYW1lIHx8ICc/JztcbiAgICByZXR1cm4gZm9ybWF0TmFtZUZpZWxkKFxuICAgICAgbmFtZU5vblVuaXF1ZSxcbiAgICAgIG5hbWVzVHJ1bmNhdGUsXG4gICAgICBpc1NsZWVwU3RlcChTdHJpbmcodmFsdWUpKVxuICAgICk7XG4gIH1cblxuICBpZiAocHJvcCA9PT0gJ3dvcmtmbG93TmFtZScpIHtcbiAgICBjb25zdCBuYW1lTm9uVW5pcXVlID0gcGFyc2VXb3JrZmxvd05hbWUoU3RyaW5nKHZhbHVlKSk/LnNob3J0TmFtZSB8fCAnPyc7XG4gICAgY29uc3QgdHJ1bmNhdGVkTmFtZSA9IHRydW5jYXRlTmFtZUlmTmVlZGVkKG5hbWVOb25VbmlxdWUsIG5hbWVzVHJ1bmNhdGUpO1xuICAgIHJldHVybiBjaGFsay5ibHVlLmJsdWVCcmlnaHQodHJ1bmNhdGVkTmFtZSk7XG4gIH1cblxuICBpZiAocHJvcCA9PT0gJ291dHB1dCcgfHwgcHJvcCA9PT0gJ2lucHV0JyB8fCBwcm9wID09PSAnZXJyb3InKSB7XG4gICAgaWYgKFxuICAgICAgaXRlbSAmJlxuICAgICAgJ2V4cGlyZWRBdCcgaW4gaXRlbSAmJlxuICAgICAgaXRlbS5leHBpcmVkQXQgIT0gbnVsbCAmJlxuICAgICAgbmV3IERhdGUoaXRlbS5leHBpcmVkQXQgYXMgc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSkgPCBuZXcgRGF0ZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gRVhQSVJFRF9EQVRBX01FU1NBR0U7XG4gICAgfVxuICAgIHJldHVybiBpbmxpbmVGb3JtYXRJTyh2YWx1ZSk7XG4gIH1cblxuICBpZiAocHJvcCA9PT0gJ3N0YXR1cycpIHtcbiAgICBjb25zdCBzdGF0dXMgPSB2YWx1ZSBhcyBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCBTdGVwWydzdGF0dXMnXTtcbiAgICBjb25zdCBjb2xvckZ1bmMgPVxuICAgICAgU1RBVFVTX0NPTE9SU1tzdGF0dXNdID8/ICgoZm9ybWF0dGVkOiBzdHJpbmcpID0+IGZvcm1hdHRlZCk7XG4gICAgY29uc3QgZm9ybWF0dGVkU3RhdHVzID0gZGlzcGxheVNldHRpbmdzPy5hYmJyZXZpYXRlU3RhdHVzXG4gICAgICA/IGZvcm1hdFN0YXR1c0FiYnJldihzdGF0dXMsIHRydWUpXG4gICAgICA6IHN0YXR1cztcbiAgICByZXR1cm4gY29sb3JGdW5jKGZvcm1hdHRlZFN0YXR1cyk7XG4gIH1cblxuICBpZiAocHJvcCA9PT0gJ2V2ZW50RGF0YScpIHtcbiAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnaGFzUmVzcG9uc2UnKSB7XG4gICAgcmV0dXJuIHZhbHVlID8gY2hhbGsuZ3JlZW4oJ3RydWUnKSA6IGNoYWxrLmdyYXkoJ2ZhbHNlJyk7XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRhYmxlVGltZXN0YW1wKHZhbHVlLCBvcHRzLCBkaXNwbGF5U2V0dGluZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuY29uc3QgZ2V0VmlzaWJsZVByb3BzID0gKFxuICBwcm9wczogc3RyaW5nW10sXG4gIGRpc3BsYXlTZXR0aW5nczogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPlxuKTogc3RyaW5nW10gPT4ge1xuICBpZiAoZGlzcGxheVNldHRpbmdzLmhpZGVDb21wbGV0ZWRBdCkge1xuICAgIHJldHVybiBwcm9wcy5maWx0ZXIoKHByb3ApID0+IHByb3AgIT09ICdjb21wbGV0ZWRBdCcpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn07XG5cbmNvbnN0IHNob3dUYWJsZSA9IChcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgcHJvcHM6IHN0cmluZ1tdLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgLy8gR2V0IGRpc3BsYXkgc2V0dGluZ3MgYmFzZWQgb24gdGVybWluYWwgd2lkdGhcbiAgY29uc3QgdGVybWluYWxXaWR0aCA9IGdldFRlcm1pbmFsV2lkdGgoKTtcbiAgY29uc3QgZGlzcGxheVNldHRpbmdzID0gZ2V0RGlzcGxheVNldHRpbmdzKFxuICAgIHRlcm1pbmFsV2lkdGgsXG4gICAgb3B0cy53aXRoRGF0YSB8fCBmYWxzZSxcbiAgICBwcm9wcy5pbmNsdWRlcygncnVuTmFtZScpXG4gICk7XG5cbiAgLy8gRmlsdGVyIG91dCBjb21wbGV0ZWRBdCBjb2x1bW4gaWYgbmVlZGVkXG4gIGNvbnN0IHZpc2libGVQcm9wcyA9IGdldFZpc2libGVQcm9wcyhwcm9wcywgZGlzcGxheVNldHRpbmdzKTtcblxuICAvLyBVcGRhdGUgdHJ1bmNhdGUgbGVuZ3RoIGZvciBJTyBmaWVsZHNcbiAgY29uc3Qgb3JpZ2luYWxUcnVuY2F0ZUxlbmd0aCA9IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSDtcbiAgVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIID0gZGlzcGxheVNldHRpbmdzLmRhdGFGaWVsZFdpZHRoO1xuXG4gIC8vIFNob3cgc3RhdHVzIGxlZ2VuZCBpZiB1c2luZyBhYmJyZXZpYXRlZCBzdGF0dXNcbiAgaWYgKFxuICAgIGRhdGEubGVuZ3RoID4gMCAmJlxuICAgIGRpc3BsYXlTZXR0aW5ncy5hYmJyZXZpYXRlU3RhdHVzICYmXG4gICAgdmlzaWJsZVByb3BzLmluY2x1ZGVzKCdzdGF0dXMnKVxuICApIHtcbiAgICBzaG93U3RhdHVzTGVnZW5kKCk7XG4gIH1cblxuICAvLyBDcmVhdGUgaGVhZGVyIG1hcHBpbmcgZm9yIGFiYnJldmlhdGVkIHN0YXR1c1xuICBjb25zdCBoZWFkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGRpc3BsYXlTZXR0aW5ncy5hYmJyZXZpYXRlU3RhdHVzICYmIHZpc2libGVQcm9wcy5pbmNsdWRlcygnc3RhdHVzJykpIHtcbiAgICBoZWFkZXJNYXBbJ3N0YXR1cyddID0gJ1MnO1xuICB9XG5cbiAgLy8gQWRkIGEgYmxhbmsgbGluZSBiZWZvcmUgYW55IHRhYmxlXG4gIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKCk7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGRhdGEgZm91bmQgZm9yIHRoaXMgcXVlcnkgYW5kIHJlc291cmNlLlxcbicpO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiB2aXNpYmxlUHJvcHMpIHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGhlYWRlck1hcFtwcm9wXSB8fCBwcm9wO1xuICAgICAgdGFibGUuY2VsbChoZWFkZXIsICdOL0EnKTtcbiAgICB9XG4gICAgdGFibGUubmV3Um93KCk7XG4gICAgLy8gUmVzdG9yZSBvcmlnaW5hbCB0cnVuY2F0ZSBsZW5ndGhcbiAgICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoO1xuICAgIHJldHVybiB0YWJsZS50b1N0cmluZygpO1xuICB9IGVsc2UgaWYgKCFkYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0V4cGVjdGluZyBhbiBhcnJheSBvZiBkYXRhLCBidXQgZ290IG51bGwuXFxuJyk7XG4gIH1cbiAgbG9nZ2VyLmxvZygnJyk7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhKSB7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHZpc2libGVQcm9wcykge1xuICAgICAgY29uc3QgaGVhZGVyID0gaGVhZGVyTWFwW3Byb3BdIHx8IHByb3A7XG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bcHJvcF07XG4gICAgICB0YWJsZS5jZWxsKFxuICAgICAgICBoZWFkZXIsXG4gICAgICAgIGZvcm1hdFRhYmxlVmFsdWUocHJvcCwgdmFsdWUsIG9wdHMsIGRpc3BsYXlTZXR0aW5ncywgaXRlbSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRhYmxlLm5ld1JvdygpO1xuICB9XG5cbiAgLy8gUmVzdG9yZSBvcmlnaW5hbCB0cnVuY2F0ZSBsZW5ndGhcbiAgVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIID0gb3JpZ2luYWxUcnVuY2F0ZUxlbmd0aDtcbiAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKCk7XG59O1xuXG5jb25zdCBzaG93SnNvbiA9IChkYXRhOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7anNvbn1cXG5gKTtcbn07XG5cbmNvbnN0IHNob3dKc29uUGFnZSA9IDxUPihwYWdlOiBQYWdlRGF0YTxUPikgPT4ge1xuICBzaG93SnNvbih7XG4gICAgZGF0YTogcGFnZS5kYXRhLFxuICAgIGN1cnNvcjogcGFnZS5jdXJzb3IsXG4gICAgaGFzTW9yZTogcGFnZS5oYXNNb3JlLFxuICAgIC4uLihwYWdlLnBhZ2VJbmZvID8geyBwYWdlSW5mbzogcGFnZS5wYWdlSW5mbyB9IDoge30pLFxuICB9KTtcbn07XG5cbi8qKlxuICogSW4gdGFibGVzLCB3ZSB3YW50IHRvIHNob3cgYSBzaG9ydGVyIHRpbWVzdGFtcCwgWVlZWS1NTS1ERCBISDpNTTpTU1xuICovXG5jb25zdCBmb3JtYXRUYWJsZVRpbWVzdGFtcCA9IChcbiAgdmFsdWU6IERhdGUsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge30sXG4gIGRpc3BsYXlTZXR0aW5ncz86IFJldHVyblR5cGU8dHlwZW9mIGdldERpc3BsYXlTZXR0aW5ncz5cbikgPT4ge1xuICAvLyBGb3JtYXQgSVNPIHRpbWUgd2l0aG91dCBUIGFuZCBaXG4gIGNvbnN0IGlzb1RpbWUgPSBmb3JtYXRJU09EYXRlKHZhbHVlKTtcblxuICAvLyBTaG93IHJlbGF0aXZlIHRpbWUgb25seSBpZjpcbiAgLy8gLSBOb3QgaW4gQ0kgbW9kZVxuICAvLyAtIERpc3BsYXkgc2V0dGluZ3MgYWxsb3cgaXQgKGJhc2VkIG9uIHRlcm1pbmFsIHdpZHRoKVxuICAvLyAtIHdpdGhEYXRhIGlzIGRpc2FibGVkIChtb3JlIHNwYWNlIGF2YWlsYWJsZSlcbiAgLy8gLSBOb3QgaW4gSlNPTiBtb2RlXG4gIC8vIC0gZGlzYWJsZVJlbGF0aXZlRGF0ZXMgaXMgbm90IHNldFxuICBjb25zdCBzaG91bGRTaG93UmVsYXRpdmUgPVxuICAgICFpc0NJKCkgJiZcbiAgICBkaXNwbGF5U2V0dGluZ3M/LnNob3dSZWxhdGl2ZURhdGVzICE9PSBmYWxzZSAmJlxuICAgICFvcHRzLndpdGhEYXRhICYmXG4gICAgIW9wdHMuanNvbiAmJlxuICAgICFvcHRzLmRpc2FibGVSZWxhdGl2ZURhdGVzO1xuXG4gIGlmIChzaG91bGRTaG93UmVsYXRpdmUpIHtcbiAgICBjb25zdCByZWxhdGl2ZSA9IGZvcm1hdERpc3RhbmNlKHZhbHVlLCBuZXcgRGF0ZSgpLCB7IGFkZFN1ZmZpeDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gYCR7aXNvVGltZX0gKCR7cmVsYXRpdmV9KWA7XG4gIH1cblxuICByZXR1cm4gaXNvVGltZTtcbn07XG5cbmNvbnN0IHRydW5jYXRlU3RyaW5nID0gKFxuICBzdHI6IHN0cmluZyxcbiAgbWF4TGVuZ3RoOiBudW1iZXIgPSBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEhcbikgPT4ge1xuICByZXR1cm4gc3RyICYmIHN0ci5sZW5ndGggPiBtYXhMZW5ndGhcbiAgICA/IGAke3N0ci5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX0uLi5gXG4gICAgOiBzdHI7XG59O1xuXG5jb25zdCB0cnVuY2F0ZUlkVG9MYXN0Q2hhcnMgPSAoaWQ6IHN0cmluZywgY2hhcnM6IG51bWJlciA9IDQpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWlkIHx8IGlkLmxlbmd0aCA8PSBjaGFycykgcmV0dXJuIGlkO1xuICByZXR1cm4gYC4uLiR7aWQuc3Vic3RyaW5nKGlkLmxlbmd0aCAtIGNoYXJzKX1gO1xufTtcblxuY29uc3Qgc2hvd0luc3BlY3RJbmZvQm94ID0gKHJlc291cmNlOiBzdHJpbmcpID0+IHtcbiAgbG9nZ2VyLmluZm8oXG4gICAgYFRvIHZpZXcgZGV0YWlscyBmb3IgYSAke3Jlc291cmNlfSwgdXNlIFxcYHdvcmtmbG93IGluc3BlY3QgJHtyZXNvdXJjZX1cXGAgPGlkPmBcbiAgKTtcbiAgbG9nZ2VyLmluZm8oXG4gICAgYFRvIHZpZXcgdGhlIGNvbnRlbnQgb2YgYW55IHN0cmVhbSwgdXNlIFxcYHdvcmtmbG93IGluc3BlY3Qgc3RyZWFtIDxzdHJlYW0taWQ+XFxgYFxuICApO1xufTtcblxuY29uc3QgRVhQSVJFRF9EQVRBX01FU1NBR0UgPSBjaGFsay5ncmF5KCc8ZGF0YSBleHBpcmVkPicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHJ1biBoYXMgZXhwaXJlZCBkYXRhIHN0b3JhZ2UgKHJ1bi1sZXZlbCBleHBpcmVkQXQgZmllbGQpLlxuICogT25seSByZXR1cm5zIHRydWUgd2hlbiBgZXhwaXJlZEF0YCBpcyBpbiB0aGUgcGFzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0V4cGlyZWREYXRhID0gKHJ1bjogV29ya2Zsb3dSdW4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICAnZXhwaXJlZEF0JyBpbiBydW4gJiZcbiAgICBydW4uZXhwaXJlZEF0ICE9IG51bGwgJiZcbiAgICBuZXcgRGF0ZShydW4uZXhwaXJlZEF0KSA8IG5ldyBEYXRlKClcbiAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFueSBkYXRhIGZpZWxkIGluIGEgaHlkcmF0ZWQgcmVzb3VyY2UgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhblxuICogZXhwaXJlZCBwbGFjZWhvbGRlci4gV29ya3MgZm9yIHJ1bnMsIHN0ZXBzLCBob29rcywgYW5kIGV2ZW50cyDigJQgdW5saWtlXG4gKiBgaGFzRXhwaXJlZERhdGFgIHdoaWNoIG9ubHkgY2hlY2tzIHRoZSBydW4tbGV2ZWwgYGV4cGlyZWRBdGAgZmllbGQuXG4gKi9cbmNvbnN0IGhhc0V4cGlyZWRGaWVsZHMgPSAocmVzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBbJ2lucHV0JywgJ291dHB1dCcsICdlcnJvcicsICdtZXRhZGF0YSddLnNvbWUoKGtleSkgPT5cbiAgICBpc0V4cGlyZWRSZWYocmVzb3VyY2Vba2V5XSlcbiAgKTtcbn07XG5cbi8qKlxuICogVGFrZXMgaHlkcmF0ZWQgc3RlcC93b3JrZmxvdyBpbnB1dC9vdXRwdXQgYW5kIHNlcmlhbGl6ZXMgaXQgZm9yIGlubGluZSBkaXNwbGF5LlxuICovXG5jb25zdCBpbmxpbmVGb3JtYXRJTyA9IDxUPihpbzogVCwgdG9wTGV2ZWw6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiBpbztcbiAgbGV0IHZhbHVlID0gJyc7XG4gIGlmIChpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSAnPGVtcHR5Pic7XG4gIH0gZWxzZSBpZiAoaW8gPT09IG51bGwpIHtcbiAgICB2YWx1ZSA9ICc8bnVsbD4nO1xuICB9IGVsc2UgaWYgKGlzRW5jcnlwdGVkUmVmKGlvKSkge1xuICAgIHZhbHVlID0gY2hhbGsuZGltLnllbGxvdygnXFx1ezFGNTEyfSBFbmNyeXB0ZWQnKTtcbiAgfSBlbHNlIGlmIChpc0V4cGlyZWRSZWYoaW8pKSB7XG4gICAgdmFsdWUgPSBjaGFsay5ncmF5KCc8ZGF0YSBleHBpcmVkPicpO1xuICB9IGVsc2UgaWYgKGlvICYmIEFycmF5LmlzQXJyYXkoaW8pKSB7XG4gICAgaWYgKGlvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFsdWUgPSAnPGVtcHR5Pic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gaW9cbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaW5saW5lRm9ybWF0SU8oaXRlbSwgZmFsc2UpKVxuICAgICAgICAuam9pbignLCcpO1xuICAgICAgaWYgKHN0cmluZ2lmaWVkLmxlbmd0aCA+IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCAmJiB0b3BMZXZlbCkge1xuICAgICAgICB2YWx1ZSA9IGNoYWxrLnllbGxvdyhgJHtpby5sZW5ndGh9IGFyZ3NgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gc3RyaW5naWZpZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGlvIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdmFsdWUgPSBpby50b0lTT1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRydW5jYXRlU3RyaW5nKEpTT04uc3RyaW5naWZ5KGlvKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ10uaW5jbHVkZXModHlwZSkpIHtcbiAgICBpZiAoaXNTdHJlYW1JZChpbyBhcyBzdHJpbmcpKSB7XG4gICAgICB2YWx1ZSA9IGlvLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiAoaW8gYXMgc3RyaW5nKS5pbmNsdWRlcygnc3RybV8nKSkge1xuICAgICAgdmFsdWUgPSBpbyBhcyBzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdHJ1bmNhdGVTdHJpbmcoU3RyaW5nKGlvKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gYDwke3R5cGV9PmA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBMaXN0IHZpZXdzIHN1cmZhY2UgbWV0YWRhdGEgb25seS4gV2hlbiB0aGUgYWN0aXZlIGJhY2tlbmQgZXhwb3NlcyB0aGVcbiAqIG9wdGlvbmFsIGB3b3JsZC5hbmFseXRpY3NgIHJlYWQgbmFtZXNwYWNlIHdlIHJlYWQgbGlzdCBwYWdlcyBmcm9tIGl0XG4gKiAobWV0YWRhdGEtb25seSDigJQgbm8gcGF5bG9hZCByZXNvbHV0aW9uKTsgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayB0byB0aGVcbiAqIHJ1bnRpbWUgc3RvcmFnZSBBUElzIHdpdGggYHJlc29sdmVEYXRhOiAnbm9uZSdgLlxuICpcbiAqIGAtLXdpdGhEYXRhYCBmb3JjZXMgdGhlIHJ1bnRpbWUgcGF0aCBzbyBwYXlsb2FkcyBjYW4gYmUgcmVzb2x2ZWQgaW50byB0aGVcbiAqIHRhYmxlLiBJdCBpcyBkZXByZWNhdGVkIGZvciBsaXN0IHZpZXdzOiB2aWV3IHBheWxvYWRzIHBlci1yZXNvdXJjZSB3aXRoXG4gKiBgd29ya2Zsb3cgaW5zcGVjdCA8cmVzb3VyY2U+IDxpZD5gLlxuICovXG5jb25zdCB3YXJuV2l0aERhdGFEZXByZWNhdGVkRm9yTGlzdCA9IChzaW5ndWxhcjogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGxvZ2dlci53YXJuKFxuICAgIGAnLS13aXRoRGF0YScgaXMgZGVwcmVjYXRlZCBmb3IgbGlzdCB2aWV3cyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIFVzZSAnd29ya2Zsb3cgaW5zcGVjdCAke3Npbmd1bGFyfSA8aWQ+JyB0byB2aWV3IHBheWxvYWRzIGZvciBhIHNpbmdsZSAke3Npbmd1bGFyfS5gXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdFJ1bnMgPSBhc3luYyAod29ybGQ6IFdvcmxkLCBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMuc3RlcElkIHx8IG9wdHMucnVuSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBvciBydW4taWQgaXMgbm90IHN1cHBvcnRlZCBpbiBsaXN0IGNhbGxzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIHdhcm5XaXRoRGF0YURlcHJlY2F0ZWRGb3JMaXN0KCdydW4nKTtcbiAgfVxuXG4gIGNvbnN0IHVzZUFuYWx5dGljcyA9ICFvcHRzLndpdGhEYXRhICYmIEJvb2xlYW4od29ybGQuYW5hbHl0aWNzKTtcbiAgY29uc3QgcmVzb2x2ZURhdGEgPSBvcHRzLndpdGhEYXRhID8gJ2FsbCcgOiAnbm9uZSc7XG4gIGNvbnN0IHN0YXR1cyA9IG9wdHMuc3RhdHVzIGFzIFdvcmtmbG93UnVuWydzdGF0dXMnXSB8IHVuZGVmaW5lZDtcblxuICAvLyBSZXNvbHZlIC0tc2luY2UvLS11bnRpbCBpbnRvIGFuIGV4cGxpY2l0IGxpc3Rpbmcgd2luZG93LiBPbmx5IHRoZVxuICAvLyBhbmFseXRpY3MgcmVhZCBwYXRoIHN1cHBvcnRzIG9uZTsgdGhlIHJ1bnRpbWUgc3RvcmFnZSBBUElzIGhhdmUgbm8gdGltZVxuICAvLyBmaWx0ZXIuIFdpdGhvdXQgdGhlIGZsYWdzIHRoZSBiYWNrZW5kIGFwcGxpZXMgaXRzIGRlZmF1bHQgd2luZG93XG4gIC8vICh0cmFpbGluZyAyNGggb24gdGhlIFZlcmNlbCBiYWNrZW5kKS5cbiAgY29uc3QgdGltZVdpbmRvdyA9IHJlc29sdmVUaW1lV2luZG93KG9wdHMpO1xuICBpZiAodGltZVdpbmRvdyAmJiAhdXNlQW5hbHl0aWNzKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnLS1zaW5jZS8tLXVudGlsIHJlcXVpcmUgdGhlIGFuYWx5dGljcyByZWFkIHBhdGggYW5kIGFyZSBpZ25vcmVkIGJ5IHRoaXMgYmFja2VuZC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB0byBzaG93IGJhc2VkIG9uIHdpdGhEYXRhIGZsYWdcbiAgY29uc3QgcHJvcHMgPSBvcHRzLndpdGhEYXRhXG4gICAgPyBXT1JLRkxPV19SVU5fTElTVEVEX1BST1BTXG4gICAgOiBXT1JLRkxPV19SVU5fTElTVEVEX1BST1BTLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+ICFXT1JLRkxPV19SVU5fSU9fUFJPUFMuaW5jbHVkZXMocHJvcClcbiAgICAgICk7XG5cbiAgY29uc3QgZmV0Y2hSdW5zUGFnZSA9IGFzeW5jIChcbiAgICBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFBhZ2VEYXRhPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4gPT4ge1xuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICBjdXJzb3IsXG4gICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICB9O1xuICAgIGlmICh1c2VBbmFseXRpY3MgJiYgd29ybGQuYW5hbHl0aWNzKSB7XG4gICAgICBjb25zdCBydW5zID0gYXdhaXQgd29ybGQuYW5hbHl0aWNzLnJ1bnMubGlzdCh7XG4gICAgICAgIHdvcmtmbG93TmFtZTogb3B0cy53b3JrZmxvd05hbWUsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgLi4uKHRpbWVXaW5kb3cgPz8ge30pLFxuICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBydW5zLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBjdXJzb3I6IHJ1bnMuY3Vyc29yLFxuICAgICAgICBoYXNNb3JlOiBydW5zLmhhc01vcmUsXG4gICAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhydW5zKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHJ1bnMgPSBhd2FpdCB3b3JsZC5ydW5zLmxpc3Qoe1xuICAgICAgd29ya2Zsb3dOYW1lOiBvcHRzLndvcmtmbG93TmFtZSxcbiAgICAgIHN0YXR1cyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICByZXNvbHZlRGF0YSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBydW5zLmRhdGEubWFwKChyKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhyLCByZXNvbHZlS2V5KSlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgIGN1cnNvcjogcnVucy5jdXJzb3IsXG4gICAgICBoYXNNb3JlOiBydW5zLmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8ocnVucyksXG4gICAgfTtcbiAgfTtcblxuICAvLyBGb3IgSlNPTiBvdXRwdXQsIGp1c3QgZmV0Y2ggb25jZSBhbmQgcmV0dXJuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoUnVuc1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgICAgc2hvd0pzb25QYWdlKHBhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgIGluaXRpYWxDdXJzb3I6IG9wdHMuY3Vyc29yLFxuICAgIGludGVyYWN0aXZlOiBvcHRzLmludGVyYWN0aXZlLFxuICAgIGZldGNoUGFnZTogYXN5bmMgKGN1cnNvcikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoUnVuc1BhZ2UoY3Vyc29yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAocnVucykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhzaG93VGFibGUocnVucywgcHJvcHMsIG9wdHMpKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWNlbnRSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgbG9nZ2VyLndhcm4oYE5vIHJ1bklkIHByb3ZpZGVkLCBmZXRjaGluZyBkYXRhIGZvciBsYXRlc3QgcnVuIGluc3RlYWQuYCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVucyA9IGF3YWl0IHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICBwYWdpbmF0aW9uOiB7IGxpbWl0OiAxLCBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycgfSxcbiAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsIC8vIERvbid0IG5lZWQgZGF0YSBmb3IganVzdCBnZXR0aW5nIHRoZSBJRFxuICAgIH0pO1xuICAgIHJ1bnMuZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcnVucy5kYXRhLm1hcCgocikgPT4gaHlkcmF0ZVJlc291cmNlSU8ociwgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4gcnVucy5kYXRhWzBdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNob3dSdW4gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBzaG93aW5nIGluZGl2aWR1YWwgcmVzb3VyY2VzJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ2FsbCcgfSk7XG4gICAgY29uc3QgcnVuV2l0aEh5ZHJhdGVkSU8gPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhydW4sIHJlc29sdmVLZXkpO1xuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKHJ1bldpdGhIeWRyYXRlZElPKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0V4cGlyZWREYXRhKHJ1bikpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgXCJUaGlzIHJ1bidzIGRhdGEgKGlucHV0L291dHB1dC9lcnJvcikgaGFzIGV4cGlyZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5sb2cocnVuV2l0aEh5ZHJhdGVkSU8pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0U3RlcHMgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7XG4gICAgcnVuSWQ6IHVuZGVmaW5lZCxcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBpbiBsaXN0IGNhbGxzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RlcHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bklkID0gb3B0cy5ydW5JZFxuICAgID8gb3B0cy5ydW5JZFxuICAgIDogKGF3YWl0IGdldFJlY2VudFJ1bih3b3JsZCwgb3B0cykpPy5ydW5JZDtcbiAgaWYgKCFydW5JZCkge1xuICAgIGxvZ2dlci5lcnJvcignTm8gcnVuIGZvdW5kLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgd2FybldpdGhEYXRhRGVwcmVjYXRlZEZvckxpc3QoJ3N0ZXAnKTtcbiAgfVxuXG4gIGNvbnN0IHVzZUFuYWx5dGljcyA9ICFvcHRzLndpdGhEYXRhICYmIEJvb2xlYW4od29ybGQuYW5hbHl0aWNzKTtcbiAgY29uc3QgcmVzb2x2ZURhdGEgPSBvcHRzLndpdGhEYXRhID8gJ2FsbCcgOiAnbm9uZSc7XG5cbiAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3BzIHRvIHNob3cgYmFzZWQgb24gd2l0aERhdGEgZmxhZ1xuICBjb25zdCBwcm9wcyA9IG9wdHMud2l0aERhdGFcbiAgICA/IFNURVBfTElTVEVEX1BST1BTXG4gICAgOiBTVEVQX0xJU1RFRF9QUk9QUy5maWx0ZXIoKHByb3ApID0+ICFTVEVQX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApKTtcblxuICBjb25zdCBmZXRjaFN0ZXBzUGFnZSA9IGFzeW5jIChcbiAgICBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFBhZ2VEYXRhPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4gPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgc3RlcHMgZm9yIHJ1biAke3J1bklkfWApO1xuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICBjdXJzb3IsXG4gICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICB9O1xuICAgIGlmICh1c2VBbmFseXRpY3MgJiYgd29ybGQuYW5hbHl0aWNzKSB7XG4gICAgICBjb25zdCBzdGVwcyA9IGF3YWl0IHdvcmxkLmFuYWx5dGljcy5zdGVwcy5saXN0KHsgcnVuSWQsIHBhZ2luYXRpb24gfSk7XG4gICAgICBjb25zdCBwYWdlID0ge1xuICAgICAgICBkYXRhOiBzdGVwcy5kYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgICAgY3Vyc29yOiBzdGVwcy5jdXJzb3IsXG4gICAgICAgIGhhc01vcmU6IHN0ZXBzLmhhc01vcmUsXG4gICAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhzdGVwcyksXG4gICAgICB9O1xuICAgICAgaWYgKGN1cnNvciB8fCBwYWdlLmRhdGEubGVuZ3RoID4gMCB8fCBwYWdlLmhhc01vcmUpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBObyBhbmFseXRpY3Mgc3RlcHMgZm91bmQgZm9yIHJ1biAke3J1bklkfTsgZmFsbGluZyBiYWNrIHRvIHN0b3JhZ2VgXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzdGVwQ2h1bmtzID0gYXdhaXQgd29ybGQuc3RlcHMubGlzdCh7XG4gICAgICBydW5JZCxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICByZXNvbHZlRGF0YSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBzdGVwQ2h1bmtzLmRhdGEubWFwKChzKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhzLCByZXNvbHZlS2V5KSlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgIGN1cnNvcjogc3RlcENodW5rcy5jdXJzb3IsXG4gICAgICBoYXNNb3JlOiBzdGVwQ2h1bmtzLmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8oc3RlcENodW5rcyksXG4gICAgfTtcbiAgfTtcblxuICAvLyBGb3IgSlNPTiBvdXRwdXQsIGp1c3QgZmV0Y2ggb25jZSBhbmQgcmV0dXJuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoU3RlcHNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uKHBhZ2UuZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBzZXR1cExpc3RQYWdpbmF0aW9uPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2hTdGVwc1BhZ2UoY3Vyc29yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAoc3RlcHMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKHN0ZXBzLCBwcm9wcywgb3B0cykpO1xuICAgICAgc2hvd0luc3BlY3RJbmZvQm94KCdzdGVwJyk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd1N0ZXAgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgc3RlcElkOiBzdHJpbmcsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gc2hvd2luZyBpbmRpdmlkdWFsIHJlc291cmNlcycpO1xuICB9XG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZ2V0IGNhbGxzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWQgPz8gKGF3YWl0IGdldFJlY2VudFJ1bih3b3JsZCwgb3B0cykpPy5ydW5JZDtcbiAgaWYgKCFydW5JZCkge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICdydW4taWQgaXMgcmVxdWlyZWQgZm9yIHNob3dpbmcgYSBzdGVwLiBVc2FnZTogYHdvcmtmbG93IGluc3BlY3Qgc3RlcCA8U1RFUF9JRD4gLS1ydW5JZD08UlVOX0lEPmAnXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHN0ZXAgPSBhd2FpdCB3b3JsZC5zdGVwcy5nZXQocnVuSWQsIHN0ZXBJZCwge1xuICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgIH0pO1xuICAgIGNvbnN0IHN0ZXBXaXRoSHlkcmF0ZWRJTyA9IGF3YWl0IGh5ZHJhdGVSZXNvdXJjZUlPKHN0ZXAsIHJlc29sdmVLZXkpO1xuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKHN0ZXBXaXRoSHlkcmF0ZWRJTyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzRXhwaXJlZEZpZWxkcyhcbiAgICAgICAgICBzdGVwV2l0aEh5ZHJhdGVkSU8gYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgXCJUaGlzIHN0ZXAncyBkYXRhIChpbnB1dC9vdXRwdXQvZXJyb3IpIGhhcyBleHBpcmVkIGFuZCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsb2dnZXIubG9nKHN0ZXBXaXRoSHlkcmF0ZWRJTyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNob3dTdHJlYW0gPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgc3RyZWFtSWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBzaG93aW5nIGEgc3RyZWFtLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKCFvcHRzLnJ1bklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLXJ1biBpcyByZXF1aXJlZCB3aGVuIHNob3dpbmcgYSBzdHJlYW0nKTtcbiAgfVxuICBjb25zdCByYXdTdHJlYW0gPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldChvcHRzLnJ1bklkLCBzdHJlYW1JZCk7XG5cbiAgLy8gT25seSByZXNvbHZlIHRoZSBlbmNyeXB0aW9uIGtleSB3aGVuIC0tZGVjcnlwdCBpcyBwYXNzZWQgYW5kIC0tcnVuIGlzIHByb3ZpZGVkLlxuICAvLyBXZSBmZXRjaCB0aGUgZnVsbCBXb3JrZmxvd1J1biBvYmplY3Qgc28gdGhhdCBnZXRFbmNyeXB0aW9uS2V5Rm9yUnVuIGhhc1xuICAvLyBhY2Nlc3MgdG8gdGhlIGRlcGxveW1lbnRJZCAobmVlZGVkIGZvciBBUEktYmFzZWQga2V5IHJlc29sdXRpb24pLlxuICBsZXQgZW5jcnlwdGlvbktleTogRW5jcnlwdGlvbktleVBhcmFtO1xuICBpZiAob3B0cy5kZWNyeXB0ICYmIG9wdHMucnVuSWQpIHtcbiAgICBlbmNyeXB0aW9uS2V5ID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KG9wdHMucnVuSWQhKTtcbiAgICAgIGNvbnN0IHJhd0tleSA9IGF3YWl0IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4/LihydW4pO1xuICAgICAgcmV0dXJuIHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgIH0pKCk7XG4gIH0gZWxzZSBpZiAob3B0cy5kZWNyeXB0ICYmICFvcHRzLnJ1bklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnQ2Fubm90IGRlY3J5cHQgc3RyZWFtIGNvbnRlbnQgd2l0aG91dCBhIHJ1biBJRC4gVXNlIC0tcnVuPTxydW4taWQ+IHdpdGggLS1kZWNyeXB0LidcbiAgICApO1xuICB9XG5cbiAgLy8gRGVzZXJpYWxpemUgdGhlIHN0cmVhbSB0byBnZXQgSmF2YVNjcmlwdCBvYmplY3RzXG4gIGNvbnN0IHJldml2ZXJzID0gZ2V0RXh0ZXJuYWxSZXZpdmVycyhcbiAgICBnbG9iYWxUaGlzLFxuICAgIFtdLFxuICAgIG9wdHMucnVuSWQgPz8gJycsXG4gICAgZW5jcnlwdGlvbktleVxuICApO1xuICBjb25zdCB0cmFuc2Zvcm0gPSBnZXREZXNlcmlhbGl6ZVN0cmVhbShyZXZpdmVycywgZW5jcnlwdGlvbktleSk7XG4gIGNvbnN0IHN0cmVhbSA9IHJhd1N0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm0pO1xuXG4gIGxvZ2dlci5pbmZvKCdTdHJlYW1pbmcgdG8gc3Rkb3V0LCBwcmVzcyBDVFJMK0MgdG8gYWJvcnQuJyk7XG4gIGxvZ2dlci5pbmZvKFxuICAgICdVc2UgLS1qc29uIHRvIG91dHB1dCB0aGUgc3RyZWFtIGFzIG5ld2xpbmUtZGVsaW1pdGVkIEpTT04gd2l0aG91dCBpbmZvIGxvZ3MuXFxuJ1xuICApO1xuICBhd2FpdCBzdHJlYW1Ub0NvbnNvbGUoc3RyZWFtLCBzdHJlYW1JZCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIExpc3Rpbmcgc3RyZWFtcyBvbmx5IGxpc3RzIGF2YWlsYWJsZSBzdHJlYW0gSURzIGJhc2VkIG9uIHJ1bi9zdGVwIHBhc3NlZCxcbiAqIGFuZCBkb2Vzbid0IHJlYWQgYW55IGRhdGEgZnJvbSB0aGUgc3RyZWFtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGxpc3RTdHJlYW1zQnlSdW5JZCA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBsaXN0aW5nIHN0cmVhbXMnKTtcbiAgfVxuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdHJlYW1zLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RyZWFtcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgbGV0IHJ1bklkID0gb3B0cy5ydW5JZDtcbiAgaWYgKCFydW5JZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ05vIHJ1bi1pZCBwcm92aWRlZC4gTGlzdGluZyBzdHJlYW1zIGZvciBsYXRlc3QgcnVuIGluc3RlYWQuJyxcbiAgICAgICdVc2UgLS1ydW49PHJ1bi1pZD4gdG8gZmlsdGVyIHN0cmVhbXMgYnkgcnVuLidcbiAgICApO1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IGdldFJlY2VudFJ1bih3b3JsZCwgb3B0cyk7XG4gICAgaWYgKCFydW4pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdObyBydW5zIGZvdW5kLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBydW5JZCA9IHJ1bi5ydW5JZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RyZWFtSWRzID0gYXdhaXQgd29ybGQuc3RyZWFtcy5saXN0KHJ1bklkKTtcbiAgICBjb25zdCBtYXRjaGluZ1N0cmVhbXMgPSBzdHJlYW1JZHMubWFwKChzdHJlYW1JZCkgPT4gKHtcbiAgICAgIHJ1bklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgfSkpO1xuXG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24obWF0Y2hpbmdTdHJlYW1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nZ2VyLmxvZyhzaG93VGFibGUobWF0Y2hpbmdTdHJlYW1zLCBbJ3J1bklkJywgJ3N0cmVhbUlkJ10pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0RXZlbnRzID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBldmVudHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bklkID0gb3B0cy5ydW5JZCA/PyAoYXdhaXQgZ2V0UmVjZW50UnVuKHdvcmxkLCBvcHRzKSk/LnJ1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdObyBydW4gZm91bmQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICB3YXJuV2l0aERhdGFEZXByZWNhdGVkRm9yTGlzdCgnZXZlbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHVzZUFuYWx5dGljcyA9ICFvcHRzLndpdGhEYXRhICYmIEJvb2xlYW4od29ybGQuYW5hbHl0aWNzKTtcbiAgY29uc3QgY29ycmVsYXRpb25JZEZpbHRlciA9IG9wdHMuaG9va0lkIHx8IG9wdHMuc3RlcElkO1xuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB0byBzaG93IGJhc2VkIG9uIHdpdGhEYXRhIGZsYWdcbiAgY29uc3QgcHJvcHMgPSBvcHRzLndpdGhEYXRhXG4gICAgPyBFVkVOVF9MSVNURURfUFJPUFNcbiAgICA6IEVWRU5UX0xJU1RFRF9QUk9QUy5maWx0ZXIoKHByb3ApID0+ICFFVkVOVF9JT19QUk9QUy5pbmNsdWRlcyhwcm9wKSk7XG5cbiAgY29uc3QgZmV0Y2hFdmVudHNQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBldmVudHMgZm9yIHJ1biAke3J1bklkfWApO1xuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICBjdXJzb3IsXG4gICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICB9O1xuICAgIGlmICh1c2VBbmFseXRpY3MgJiYgd29ybGQuYW5hbHl0aWNzKSB7XG4gICAgICBjb25zdCBldmVudHMgPSBhd2FpdCB3b3JsZC5hbmFseXRpY3MuZXZlbnRzLmxpc3Qoe1xuICAgICAgICBydW5JZCxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZEZpbHRlcixcbiAgICAgICAgcGFnaW5hdGlvbixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGFnZSA9IHtcbiAgICAgICAgZGF0YTogZXZlbnRzLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBjdXJzb3I6IGV2ZW50cy5jdXJzb3IsXG4gICAgICAgIGhhc01vcmU6IGV2ZW50cy5oYXNNb3JlLFxuICAgICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8oZXZlbnRzKSxcbiAgICAgIH07XG4gICAgICBpZiAoY3Vyc29yIHx8IHBhZ2UuZGF0YS5sZW5ndGggPiAwIHx8IHBhZ2UuaGFzTW9yZSkge1xuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYE5vIGFuYWx5dGljcyBldmVudHMgZm91bmQgZm9yIHJ1biAke3J1bklkfTsgZmFsbGluZyBiYWNrIHRvIHN0b3JhZ2VgXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3b3JsZC5ldmVudHMubGlzdCh7XG4gICAgICBydW5JZCxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICByZXNvbHZlRGF0YTogb3B0cy53aXRoRGF0YSA/ICdhbGwnIDogJ25vbmUnLFxuICAgIH0pO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gY29ycmVsYXRpb25JZEZpbHRlclxuICAgICAgPyByZXN1bHQuZGF0YS5maWx0ZXIoKGUpID0+IGUuY29ycmVsYXRpb25JZCA9PT0gY29ycmVsYXRpb25JZEZpbHRlcilcbiAgICAgIDogcmVzdWx0LmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWQubWFwKChlKSA9PiBoeWRyYXRlUmVzb3VyY2VJTyhlLCByZXNvbHZlS2V5KSlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgIGN1cnNvcjogcmVzdWx0LmN1cnNvcixcbiAgICAgIGhhc01vcmU6IHJlc3VsdC5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHJlc3VsdCksXG4gICAgfTtcbiAgfTtcblxuICAvLyBGb3IgSlNPTiBvdXRwdXQsIGp1c3QgZmV0Y2ggb25jZSBhbmQgcmV0dXJuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoRXZlbnRzUGFnZShvcHRzLmN1cnNvcik7XG4gICAgICBzaG93SnNvbihwYWdlLmRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgIGluaXRpYWxDdXJzb3I6IG9wdHMuY3Vyc29yLFxuICAgIGludGVyYWN0aXZlOiBvcHRzLmludGVyYWN0aXZlLFxuICAgIGZldGNoUGFnZTogYXN5bmMgKGN1cnNvcikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoRXZlbnRzUGFnZShjdXJzb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jIChldmVudHMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKGV2ZW50cywgcHJvcHMsIG9wdHMpKTtcbiAgICAgIHNob3dJbnNwZWN0SW5mb0JveCgnZXZlbnQnKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0SG9va3MgPSBhc3luYyAod29ybGQ6IFdvcmxkLCBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHJlc29sdmVLZXkgPSBjcmVhdGVSZXNvbHZlcih3b3JsZCwgb3B0cz8uZGVjcnlwdCA/PyBmYWxzZSk7XG5cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG9va3MsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBob29rcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkO1xuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcbiAgLy8gSG9va3MgYWx3YXlzIHJlYWQgZnJvbSB0aGUgcnVudGltZSBzdG9yYWdlIEFQSS4gVW5saWtlIHJ1bnMvc3RlcHMvZXZlbnRzLFxuICAvLyB0aGUgYW5hbHl0aWNzIHJlYWQgcGF0aCBvbWl0cyBgb3duZXJJZGAgKGFuZCB0aGUgc2VjcmV0IGhvb2sgdG9rZW4gdXNlZCBieVxuICAvLyByZXN1bWUvY29weS10b2tlbiBzdXJmYWNlcyksIHNvIGhvb2sgbGlzdGluZyBzdGF5cyBvbiB0aGUgY2Fub25pY2FsIEFQSXMuXG4gIGNvbnN0IGZldGNoSG9va3NQYWdlID0gYXN5bmMgKFxuICAgIGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGFnZURhdGE8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiA9PiB7XG4gICAgaWYgKCFydW5JZCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGZXRjaGluZyBhbGwgaG9va3MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBob29rcyBmb3IgcnVuICR7cnVuSWR9YCk7XG4gICAgfVxuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICBjdXJzb3IsXG4gICAgICBsaW1pdDogb3B0cy5saW1pdCB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICB9O1xuICAgIGNvbnN0IGhvb2tzID0gYXdhaXQgd29ybGQuaG9va3MubGlzdCh7IHJ1bklkLCBwYWdpbmF0aW9uLCByZXNvbHZlRGF0YSB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBob29rcy5kYXRhLm1hcCgoaCkgPT4gaHlkcmF0ZVJlc291cmNlSU8oaCwgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICBjdXJzb3I6IGhvb2tzLmN1cnNvcixcbiAgICAgIGhhc01vcmU6IGhvb2tzLmhhc01vcmUsXG4gICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8oaG9va3MpLFxuICAgIH07XG4gIH07XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaEhvb2tzUGFnZShvcHRzLmN1cnNvcik7XG4gICAgICBzaG93SnNvblBhZ2UocGFnZSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBTZXR1cCBwYWdpbmF0aW9uIHdpdGggbmV3IG1lY2hhbmlzbVxuICBhd2FpdCBzZXR1cExpc3RQYWdpbmF0aW9uPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBhc3luYyAoY3Vyc29yKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2hIb29rc1BhZ2UoY3Vyc29yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAoaG9va3MpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKGhvb2tzLCBIT09LX0xJU1RFRF9QUk9QUywgb3B0cykpO1xuICAgICAgc2hvd0luc3BlY3RJbmZvQm94KCdob29rJyk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd0hvb2sgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgaG9va0lkOiBzdHJpbmcsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gc2hvd2luZyBpbmRpdmlkdWFsIHJlc291cmNlcycpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IHdvcmxkLmhvb2tzLmdldChob29rSWQsIHtcbiAgICAgIHJlc29sdmVEYXRhOiAnYWxsJyxcbiAgICB9KTtcbiAgICBjb25zdCBoeWRyYXRlZEhvb2sgPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhob29rLCByZXNvbHZlS2V5KTtcbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihoeWRyYXRlZEhvb2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0V4cGlyZWRGaWVsZHMoaHlkcmF0ZWRIb29rIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgXCJUaGlzIGhvb2sncyBkYXRhIChtZXRhZGF0YSkgaGFzIGV4cGlyZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5sb2coaHlkcmF0ZWRIb29rKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG4vKipcbiAqIExpc3Qgd2FpdHMvc2xlZXBzIHZpYSB0aGUgYW5hbHl0aWNzIHJlYWQgcGF0aC4gVGhlIGFuYWx5dGljcyB3YWl0IHNoYXBlIGlzXG4gKiBrZXllZCBieSBgd2FpdElkYC9gc3RhdHVzYCByYXRoZXIgdGhhbiB0aGUgYGNvcnJlbGF0aW9uSWRgL2BldmVudElkYCBjb2x1bW5zXG4gKiByZWNvbnN0cnVjdGVkIGZyb20gdGhlIGV2ZW50IHN0cmVhbSBpbiB0aGUgZmFsbGJhY2sgcGF0aC5cbiAqL1xuY29uc3QgbGlzdFNsZWVwc1ZpYUFuYWx5dGljcyA9IGFzeW5jIChcbiAgYW5hbHl0aWNzOiBOb25OdWxsYWJsZTxXb3JsZFsnYW5hbHl0aWNzJ10+LFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGZldGNoU2xlZXBzUGFnZSA9IGFzeW5jIChcbiAgICBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFBhZ2VEYXRhPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4gPT4ge1xuICAgIGNvbnN0IHdhaXRzID0gYXdhaXQgYW5hbHl0aWNzLndhaXRzLmxpc3Qoe1xuICAgICAgcnVuSWQ6IG9wdHMucnVuSWQgYXMgc3RyaW5nLFxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBzb3J0T3JkZXI6IG9wdHMuc29ydCB8fCAnZGVzYycsXG4gICAgICAgIGN1cnNvcixcbiAgICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHdhaXRzLmRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgY3Vyc29yOiB3YWl0cy5jdXJzb3IsXG4gICAgICBoYXNNb3JlOiB3YWl0cy5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHdhaXRzKSxcbiAgICB9O1xuICB9O1xuXG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hTbGVlcHNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICBzaG93SnNvbihwYWdlLmRhdGEpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGZldGNoU2xlZXBzUGFnZSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKHdhaXRzKSA9PiB7XG4gICAgICBsb2dnZXIubG9nKFxuICAgICAgICBzaG93VGFibGUoXG4gICAgICAgICAgd2FpdHMsXG4gICAgICAgICAgWyd3YWl0SWQnLCAnc3RhdHVzJywgJ2NyZWF0ZWRBdCcsICdyZXN1bWVBdCcsICdjb21wbGV0ZWRBdCddLFxuICAgICAgICAgIHsgLi4ub3B0cywgZGlzYWJsZVJlbGF0aXZlRGF0ZXM6IHRydWUgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RTbGVlcHMgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGlmICghb3B0cy5ydW5JZCkge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICdydW4taWQgaXMgcmVxdWlyZWQgZm9yIGxpc3Rpbmcgc2xlZXBzLiBVc2FnZTogYHdvcmtmbG93IGluc3BlY3Qgc2xlZXBzIC0tcnVuSWQ9PGlkPmAnXG4gICAgKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzbGVlcHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy53b3JrZmxvd05hbWUpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgd29ya2Zsb3ctbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBzbGVlcHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIGxvZ2dlci53YXJuKCdgd2l0aERhdGFgIGZsYWcgaXMgaWdub3JlZCB3aGVuIGxpc3Rpbmcgc2xlZXBzJyk7XG4gIH1cblxuICAvLyBQcmVmZXIgdGhlIGFuYWx5dGljcyByZWFkIHBhdGggZm9yIHdhaXQvc2xlZXAgbGlzdGluZyB3aGVuIGF2YWlsYWJsZS5cbiAgaWYgKHdvcmxkLmFuYWx5dGljcykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsaXN0U2xlZXBzVmlhQW5hbHl0aWNzKHdvcmxkLmFuYWx5dGljcywgb3B0cyk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIC8vIEZldGNoIGFsbCBldmVudHMgZm9yIHRoZSBydW4gd2l0aCByZXNvbHZlRGF0YT0nYWxsJyB0byBnZXQgd2FpdCBldmVudERhdGFcbiAgICBjb25zdCBldmVudHMgPSBhd2FpdCB3b3JsZC5ldmVudHMubGlzdCh7XG4gICAgICBydW5JZDogb3B0cy5ydW5JZCxcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgICBsaW1pdDogMTAwMCxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlRGF0YTogJ2FsbCcsXG4gICAgfSk7XG5cbiAgICAvLyBTaG93IGluZm8gbWVzc2FnZSBpZiB0aGVyZSBtaWdodCBiZSBtb3JlIHNsZWVwc1xuICAgIGlmIChldmVudHMuaGFzTW9yZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICdXYXJuaW5nOiBUaGlzIHJ1biBoYXMgbW9yZSB0aGFuIDEwMDAgZXZlbnRzLiBTb21lIHNsZWVwcyBtaWdodCBub3QgYmUgc2hvd24uIFBsZWFzZSB1c2UgdGhlIHdlYiBVSSB0byBlbnN1cmUgZ2V0dGluZyBhIGNvbXBsZXRlIGxpc3QuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBHcm91cCB3YWl0IGV2ZW50cyBieSBjb3JyZWxhdGlvbklkXG4gICAgY29uc3Qgd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24gPSBuZXcgTWFwPHN0cmluZywgRXZlbnRbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cy5kYXRhKSB7XG4gICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZD8uc3RhcnRzV2l0aCgnd2FpdF8nKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uLmdldChldmVudC5jb3JyZWxhdGlvbklkKSA/PyBbXTtcbiAgICAgICAgZXhpc3RpbmcucHVzaChldmVudCk7XG4gICAgICAgIHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uLnNldChldmVudC5jb3JyZWxhdGlvbklkLCBleGlzdGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uLnNpemUgPT09IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKCdObyBzbGVlcHMgZm91bmQgZm9yIHRoaXMgcnVuLicpO1xuICAgICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgICBzaG93SnNvbihbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIubG9nKFxuICAgICAgICAgIHNob3dUYWJsZShbXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBXQUlUX0xJU1RFRF9QUk9QUywge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGRpc2FibGVSZWxhdGl2ZURhdGVzOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgc2xlZXBzIGZyb20gZ3JvdXBlZCB3YWl0IGV2ZW50c1xuICAgIGNvbnN0IHNsZWVwczogU2xlZXBbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2NvcnJlbGF0aW9uSWQsIGNvcnJlbGF0aW9uRXZlbnRzXSBvZiB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbikge1xuICAgICAgLy8gU3RpdGNoIHVwIHdhaXRfY3JlYXRlZCBhbmQgd2FpdF9jb21wbGV0ZWQgZXZlbnRzXG4gICAgICBjb25zdCB3YWl0Q3JlYXRlZCA9IGNvcnJlbGF0aW9uRXZlbnRzLmZpbmQoXG4gICAgICAgIChlOiBFdmVudCkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnXG4gICAgICApO1xuICAgICAgY29uc3Qgd2FpdENvbXBsZXRlZCA9IGNvcnJlbGF0aW9uRXZlbnRzLmZpbmQoXG4gICAgICAgIChlOiBFdmVudCkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgICAgICk7XG5cbiAgICAgIGlmICh3YWl0Q3JlYXRlZCkge1xuICAgICAgICBjb25zdCBzbGVlcDogU2xlZXAgPSB7XG4gICAgICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBydW5JZDogd2FpdENyZWF0ZWQucnVuSWQsXG4gICAgICAgICAgZXZlbnRJZDogd2FpdENyZWF0ZWQuZXZlbnRJZCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHdhaXRDcmVhdGVkLmNyZWF0ZWRBdCxcbiAgICAgICAgICByZXN1bWVBdDpcbiAgICAgICAgICAgIHdhaXRDcmVhdGVkLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICAgICAgICAgICAgPyB3YWl0Q3JlYXRlZC5ldmVudERhdGEucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGxldGVkQXQ6IHdhaXRDb21wbGV0ZWQ/LmNyZWF0ZWRBdCxcbiAgICAgICAgfTtcbiAgICAgICAgc2xlZXBzLnB1c2goc2xlZXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNvcnQgc2xlZXBzIGJ5IGNyZWF0ZWRBdFxuICAgIHNsZWVwcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB0aW1lQSA9IGEuY3JlYXRlZEF0LmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVCID0gYi5jcmVhdGVkQXQuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIG9wdHMuc29ydCA9PT0gJ2FzYycgPyB0aW1lQSAtIHRpbWVCIDogdGltZUIgLSB0aW1lQTtcbiAgICB9KTtcblxuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKHNsZWVwcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nZ2VyLmxvZyhcbiAgICAgIHNob3dUYWJsZShcbiAgICAgICAgc2xlZXBzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgICAgV0FJVF9MSVNURURfUFJPUFMsXG4gICAgICAgIHsgLi4ub3B0cywgZGlzYWJsZVJlbGF0aXZlRGF0ZXM6IHRydWUgfVxuICAgICAgKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIl19
1124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L291dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUdMLGVBQWUsR0FJaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsbUNBQW1DLEdBQ3BDLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJEOzs7Ozs7R0FNRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQVksRUFBRSxPQUFnQjtJQUNwRCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUFDakUsT0FBTyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FB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Q25CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFNBQVMsQ0FDUCxNQUE4QyxFQUM5QyxpQkFBaUIsRUFDakIsRUFBRSxHQUFHLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FDeEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1wb3J0S2V5IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbic7XG5pbXBvcnQge1xuICB0eXBlIEVuY3J5cHRpb25LZXlQYXJhbSxcbiAgZ2V0RGVzZXJpYWxpemVTdHJlYW0sXG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgVkVSQ0VMXzQwM19FUlJPUl9NRVNTQUdFIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7XG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgSG9vayxcbiAgaXNXYWl0RXZlbnRUeXBlLFxuICB0eXBlIFN0ZXAsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG4gIHR5cGUgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5pbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCBUYWJsZSBmcm9tICdlYXN5LXRhYmxlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnNwZWN0Q0xJT3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBnZXRPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkTWVzc2FnZSxcbiAgaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgRW5jcnlwdGlvbktleVJlc29sdmVyLFxuICBoeWRyYXRlUmVzb3VyY2VJTyxcbiAgaXNFbmNyeXB0ZWRSZWYsXG4gIGlzRXhwaXJlZFJlZixcbn0gZnJvbSAnLi9oeWRyYXRpb24uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRpbWVXaW5kb3cgfSBmcm9tICcuL3RpbWUtd2luZG93LmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRW5jcnlwdGlvbktleVJlc29sdmVyIGZyb20gYSBXb3JsZCBpbnN0YW5jZS5cbiAqIFJldHVybnMgbnVsbCBpZiBkZWNyeXB0IGlzIGZhbHNlIOKAlCBlbmNyeXB0ZWQgZGF0YSB3aWxsIHNob3cgYXMgYSBwbGFjZWhvbGRlci5cbiAqXG4gKiBUaGUgcmVzb2x2ZXIgZmV0Y2hlcyB0aGUgZnVsbCBXb3JrZmxvd1J1biAoY2FjaGVkIHBlciBydW5JZCkgc28gdGhhdCB0aGVcbiAqIFdvcmxkIGNhbiBpbnNwZWN0IGRlcGxveW1lbnQtc3BlY2lmaWMgZmllbGRzIGZvciBrZXkgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZXIod29ybGQ6IFdvcmxkLCBkZWNyeXB0OiBib29sZWFuKTogRW5jcnlwdGlvbktleVJlc29sdmVyIHtcbiAgaWYgKCFkZWNyeXB0KSByZXR1cm4gbnVsbDtcbiAgaWYgKCF3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPj4oKTtcbiAgcmV0dXJuIChydW5JZDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGNhY2hlZCA9IGNhY2hlLmdldChydW5JZCk7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGNhY2hlZCA9IHdvcmxkLnJ1bnNcbiAgICAgICAgLmdldChydW5JZClcbiAgICAgICAgLnRoZW4oKHJ1bikgPT4gd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1biEocnVuKSk7XG4gICAgICBjYWNoZS5zZXQocnVuSWQsIGNhY2hlZCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG4gIH07XG59XG5cbmltcG9ydCB7XG4gIHR5cGUgQW5hbHl0aWNzUGFnZUluZm8sXG4gIHR5cGUgUGFnZURhdGEsXG4gIHNldHVwTGlzdFBhZ2luYXRpb24sXG59IGZyb20gJy4vcGFnaW5hdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Ub0NvbnNvbGUgfSBmcm9tICcuL3N0cmVhbS5qcyc7XG5pbXBvcnQge1xuICBmb3JtYXRJU09EYXRlLFxuICBmb3JtYXRTdGF0dXMgYXMgZm9ybWF0U3RhdHVzQWJicmV2LFxuICBnZXREaXNwbGF5U2V0dGluZ3MsXG4gIGdldFRlcm1pbmFsV2lkdGgsXG4gIGlzQ0ksXG59IGZyb20gJy4vdGVybWluYWwtdXRpbHMuanMnO1xuXG5jb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xubGV0IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IDE1OyAvLyBXaWxsIGJlIGFkanVzdGVkIGJhc2VkIG9uIHRlcm1pbmFsIHdpZHRoXG5cbmNvbnN0IFdPUktGTE9XX1JVTl9JT19QUk9QUzogKGtleW9mIFdvcmtmbG93UnVuKVtdID0gWydpbnB1dCcsICdvdXRwdXQnXTtcblxuY29uc3QgU1RFUF9JT19QUk9QUzogKGtleW9mIFN0ZXApW10gPSBbJ2lucHV0JywgJ291dHB1dCddO1xuXG5jb25zdCBXT1JLRkxPV19SVU5fTElTVEVEX1BST1BTOiAoa2V5b2YgV29ya2Zsb3dSdW4pW10gPSBbXG4gICdydW5JZCcsXG4gICd3b3JrZmxvd05hbWUnLFxuICAnc3RhdHVzJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG4gIC4uLldPUktGTE9XX1JVTl9JT19QUk9QUyxcbl07XG5cbmNvbnN0IFNURVBfTElTVEVEX1BST1BTOiAoa2V5b2YgU3RlcClbXSA9IFtcbiAgJ3J1bklkJyxcbiAgJ3N0ZXBJZCcsXG4gICdzdGVwTmFtZScsXG4gICdzdGF0dXMnLFxuICAnc3RhcnRlZEF0JyxcbiAgJ2NvbXBsZXRlZEF0JyxcbiAgLi4uU1RFUF9JT19QUk9QUyxcbl07XG5cbmNvbnN0IEVWRU5UX0lPX1BST1BTOiAoa2V5b2YgRXZlbnQgfCAnZXZlbnREYXRhJylbXSA9IFsnZXZlbnREYXRhJ107XG5cbmNvbnN0IEVWRU5UX0xJU1RFRF9QUk9QUzogKGtleW9mIEV2ZW50IHwgJ2V2ZW50RGF0YScpW10gPSBbXG4gICdldmVudElkJyxcbiAgJ2V2ZW50VHlwZScsXG4gICdjb3JyZWxhdGlvbklkJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gIC4uLkVWRU5UX0lPX1BST1BTLFxuXTtcblxuLy8gY29uc3QgSE9PS19EQVRBX1BST1BTOiAoa2V5b2YgSG9vayB8ICdoYXNSZXNwb25zZScpW10gPSBbJ2hhc1Jlc3BvbnNlJ107XG5cbmNvbnN0IEhPT0tfTElTVEVEX1BST1BTOiAoa2V5b2YgSG9vayB8ICdoYXNSZXNwb25zZScpW10gPSBbXG4gICdydW5JZCcsXG4gICdob29rSWQnLFxuICAnb3duZXJJZCcsXG4gICdjcmVhdGVkQXQnLFxuICAvLyAuLi5IT09LX0RBVEFfUFJPUFMsXG5dO1xuXG5pbnRlcmZhY2UgU2xlZXAge1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGV2ZW50SWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZXN1bWVBdDogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgY29tcGxldGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFdBSVRfTElTVEVEX1BST1BTOiAoa2V5b2YgU2xlZXApW10gPSBbXG4gICdjb3JyZWxhdGlvbklkJyxcbiAgJ2V2ZW50SWQnLFxuICAnY3JlYXRlZEF0JyxcbiAgJ3Jlc3VtZUF0JyxcbiAgJ2NvbXBsZXRlZEF0Jyxcbl07XG5cbmNvbnN0IFNUQVRVU19DT0xPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICBydW5uaW5nOiBjaGFsay5ibHVlLFxuICBjb21wbGV0ZWQ6IGNoYWxrLmdyZWVuLFxuICBmYWlsZWQ6IGNoYWxrLnJlZCxcbiAgY2FuY2VsbGVkOiBjaGFsay5zdHJpa2V0aHJvdWdoLnllbGxvdyxcbiAgcGVuZGluZzogY2hhbGsuYmx1ZSxcbiAgd2FpdGluZzogY2hhbGsuYmx1ZSxcbn07XG5cbmNvbnN0IGlzU3RyZWFtSWQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5zdGFydHNXaXRoKCdzdHJtXycpO1xufTtcblxuY29uc3Qgc2hvd1N0YXR1c0xlZ2VuZCA9ICgpID0+IHtcbiAgbG9nZ2VyLmxvZygnXFxuU3RhdHVzIExlZ2VuZDonKTtcbiAgY29uc3Qgc3RhdHVzZXMgPSBbXG4gICAgJ3J1bm5pbmcnLFxuICAgICdjb21wbGV0ZWQnLFxuICAgICdmYWlsZWQnLFxuICAgICdjYW5jZWxsZWQnLFxuICAgICdwZW5kaW5nJyxcbiAgICAnd2FpdGluZycsXG4gIF07XG5cbiAgY29uc3QgbGVnZW5kSXRlbXMgPSBzdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4ge1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9IFNUQVRVU19DT0xPUlNbc3RhdHVzXTtcbiAgICBjb25zdCBhYmJyZXYgPSBmb3JtYXRTdGF0dXNBYmJyZXYoc3RhdHVzLCB0cnVlKTtcbiAgICByZXR1cm4gYCR7Y29sb3JGdW5jKGFiYnJldil9ID0gJHtzdGF0dXN9YDtcbiAgfSk7XG5cbiAgbG9nZ2VyLmxvZyhgICAke2xlZ2VuZEl0ZW1zLmpvaW4oJyAgJyl9YCk7XG4gIGxvZ2dlci5sb2coJycpO1xufTtcblxuY29uc3QgaXNTbGVlcFN0ZXAgPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gc3RlcE5hbWUuaW5jbHVkZXMoJy1zbGVlcCcpO1xufTtcblxuY29uc3QgY2hlY2tBbmRIYW5kbGVWZXJjZWxBY2Nlc3NFcnJvciA9IChcbiAgZXJyb3I6IHVua25vd24sXG4gIGJhY2tlbmQ/OiBzdHJpbmdcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoYmFja2VuZCA9PT0gJ3ZlcmNlbCcgJiYgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChlcnIuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihWRVJDRUxfNDAzX0VSUk9SX01FU1NBR0UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGV4dHJhY3RFcnJvck1lc3NhZ2UgPSAoXG4gIGVycjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChlcnIubWVzc2FnZSAmJiB0eXBlb2YgZXJyLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVyci5tZXNzYWdlO1xuICB9XG5cbiAgaWYgKGVyci5ib2R5ICYmIHR5cGVvZiBlcnIuYm9keSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBib2R5ID0gZXJyLmJvZHkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGJvZHkubWVzc2FnZSAmJiB0eXBlb2YgYm9keS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGJvZHkubWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKGJvZHkuZXJyb3IgJiYgdHlwZW9mIGJvZHkuZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYm9keS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0UGFnZUluZm8gPSAocmVzdWx0OiB1bmtub3duKTogQW5hbHl0aWNzUGFnZUluZm8gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcgfHxcbiAgICByZXN1bHQgPT09IG51bGwgfHxcbiAgICAhKCdwYWdlSW5mbycgaW4gcmVzdWx0KVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiAocmVzdWx0IGFzIHsgcGFnZUluZm8/OiBBbmFseXRpY3NQYWdlSW5mbyB9KS5wYWdlSW5mbztcbn07XG5cbmNvbnN0IGhhbmRsZUFwaUVycm9yID0gKGVycm9yOiB1bmtub3duLCBiYWNrZW5kPzogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIC8vIEZpcnN0IGNoZWNrIGZvciBWZXJjZWwgYWNjZXNzIGVycm9yc1xuICBpZiAoY2hlY2tBbmRIYW5kbGVWZXJjZWxBY2Nlc3NFcnJvcihlcnJvciwgYmFja2VuZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc09ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRFcnJvcihlcnJvcikpIHtcbiAgICBsb2dnZXIuZXJyb3IoZ2V0T2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZE1lc3NhZ2UoKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBIYW5kbGUgb3RoZXIgSFRUUCBlcnJvcnNcbiAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIEhhbmRsZSA0MDAgQmFkIFJlcXVlc3RcbiAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0JhZCBSZXF1ZXN0OiBUaGUgcmVxdWVzdCB3YXMgaW52YWxpZC4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBvdGhlciBIVFRQIGVycm9ycyAoNDA0LCA1MDAsIGV0Yy4pXG4gICAgaWYgKHR5cGVvZiBlcnIuc3RhdHVzID09PSAnbnVtYmVyJyAmJiBlcnIuc3RhdHVzID49IDQwMCkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBIVFRQIEVycm9yICR7ZXJyLnN0YXR1c306ICR7Z2V0U3RhdHVzVGV4dChlcnIuc3RhdHVzKX1gKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYERldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGdldFN0YXR1c1RleHQgPSAoc3RhdHVzOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzdGF0dXNUZXh0czogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgICA0MDA6ICdCYWQgUmVxdWVzdCcsXG4gICAgNDAxOiAnVW5hdXRob3JpemVkJyxcbiAgICA0MDI6ICdQYXltZW50IFJlcXVpcmVkJyxcbiAgICA0MDM6ICdGb3JiaWRkZW4nLFxuICAgIDQwNDogJ05vdCBGb3VuZCcsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICB9O1xuICByZXR1cm4gc3RhdHVzVGV4dHNbc3RhdHVzXSB8fCAnVW5rbm93biBFcnJvcic7XG59O1xuXG5jb25zdCB0cnVuY2F0ZU5hbWVJZk5lZWRlZCA9IChuYW1lOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIG1heExlbmd0aCA8IG5hbWUubGVuZ3RoID8gYCR7bmFtZS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX0uLi5gIDogbmFtZTtcbn07XG5cbmNvbnN0IGZvcm1hdE5hbWVGaWVsZCA9IChcbiAgbmFtZU5vblVuaXF1ZTogc3RyaW5nLFxuICB0cnVuY2F0ZUxlbmd0aDogbnVtYmVyLFxuICBpc1NsZWVwOiBib29sZWFuXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgdHJ1bmNhdGVMZW5ndGgpO1xuICBpZiAoaXNTbGVlcCkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3dCcmlnaHQodHJ1bmNhdGVkTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbn07XG5cbmNvbnN0IGZvcm1hdElkRmllbGQgPSAoXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIHNob3VsZFRydW5jYXRlSWRzOiBib29sZWFuXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IGlkU3RyID0gc2hvdWxkVHJ1bmNhdGVJZHMgPyB0cnVuY2F0ZUlkVG9MYXN0Q2hhcnModmFsdWVTdHIpIDogdmFsdWVTdHI7XG4gIGlmIChwcm9wID09PSAnc3RyZWFtSWQnKSB7XG4gICAgcmV0dXJuIGNoYWxrLmdyZWVuKGlkU3RyKTtcbiAgfVxuICByZXR1cm4gaWRTdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VGFibGVWYWx1ZSA9IChcbiAgcHJvcDogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSxcbiAgZGlzcGxheVNldHRpbmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPixcbiAgaXRlbT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IHtcbiAgY29uc3QgbmFtZXNUcnVuY2F0ZSA9IGRpc3BsYXlTZXR0aW5ncz8ubmFtZXNUcnVuY2F0ZUxlbmd0aCA/PyA0MDtcbiAgY29uc3Qgc2hvdWxkVHJ1bmNhdGVJZHMgPSBkaXNwbGF5U2V0dGluZ3M/LnRydW5jYXRlSWRzVG9MYXN0Q2hhcnMgPz8gZmFsc2U7XG5cbiAgLy8gSGFuZGxlIElEcyB3aXRoIHBvdGVudGlhbCB0cnVuY2F0aW9uXG4gIGlmIChcbiAgICBbXG4gICAgICAnc3RyZWFtSWQnLFxuICAgICAgJ3J1bklkJyxcbiAgICAgICdzdGVwSWQnLFxuICAgICAgJ2hvb2tJZCcsXG4gICAgICAnZXZlbnRJZCcsXG4gICAgICAnY29ycmVsYXRpb25JZCcsXG4gICAgICAnb3duZXJJZCcsXG4gICAgXS5pbmNsdWRlcyhwcm9wKVxuICApIHtcbiAgICByZXR1cm4gZm9ybWF0SWRGaWVsZChwcm9wLCB2YWx1ZSwgc2hvdWxkVHJ1bmNhdGVJZHMpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG5hbWVzIHdpdGggdHJ1bmNhdGlvblxuICBpZiAocHJvcCA9PT0gJ3N0ZXBOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVN0ZXBOYW1lKFN0cmluZyh2YWx1ZSkpPy5zaG9ydE5hbWUgfHwgJz8nO1xuICAgIHJldHVybiBmb3JtYXROYW1lRmllbGQoXG4gICAgICBuYW1lTm9uVW5pcXVlLFxuICAgICAgbmFtZXNUcnVuY2F0ZSxcbiAgICAgIGlzU2xlZXBTdGVwKFN0cmluZyh2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnd29ya2Zsb3dOYW1lJykge1xuICAgIGNvbnN0IG5hbWVOb25VbmlxdWUgPSBwYXJzZVdvcmtmbG93TmFtZShTdHJpbmcodmFsdWUpKT8uc2hvcnROYW1lIHx8ICc/JztcbiAgICBjb25zdCB0cnVuY2F0ZWROYW1lID0gdHJ1bmNhdGVOYW1lSWZOZWVkZWQobmFtZU5vblVuaXF1ZSwgbmFtZXNUcnVuY2F0ZSk7XG4gICAgcmV0dXJuIGNoYWxrLmJsdWUuYmx1ZUJyaWdodCh0cnVuY2F0ZWROYW1lKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnb3V0cHV0JyB8fCBwcm9wID09PSAnaW5wdXQnIHx8IHByb3AgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtICYmXG4gICAgICAnZXhwaXJlZEF0JyBpbiBpdGVtICYmXG4gICAgICBpdGVtLmV4cGlyZWRBdCAhPSBudWxsICYmXG4gICAgICBuZXcgRGF0ZShpdGVtLmV4cGlyZWRBdCBhcyBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSA8IG5ldyBEYXRlKClcbiAgICApIHtcbiAgICAgIHJldHVybiBFWFBJUkVEX0RBVEFfTUVTU0FHRTtcbiAgICB9XG4gICAgcmV0dXJuIGlubGluZUZvcm1hdElPKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnc3RhdHVzJykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHZhbHVlIGFzIFdvcmtmbG93UnVuWydzdGF0dXMnXSB8IFN0ZXBbJ3N0YXR1cyddO1xuICAgIGNvbnN0IGNvbG9yRnVuYyA9XG4gICAgICBTVEFUVVNfQ09MT1JTW3N0YXR1c10gPz8gKChmb3JtYXR0ZWQ6IHN0cmluZykgPT4gZm9ybWF0dGVkKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRTdGF0dXMgPSBkaXNwbGF5U2V0dGluZ3M/LmFiYnJldmlhdGVTdGF0dXNcbiAgICAgID8gZm9ybWF0U3RhdHVzQWJicmV2KHN0YXR1cywgdHJ1ZSlcbiAgICAgIDogc3RhdHVzO1xuICAgIHJldHVybiBjb2xvckZ1bmMoZm9ybWF0dGVkU3RhdHVzKTtcbiAgfVxuXG4gIGlmIChwcm9wID09PSAnZXZlbnREYXRhJykge1xuICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgaWYgKHByb3AgPT09ICdoYXNSZXNwb25zZScpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBjaGFsay5ncmVlbigndHJ1ZScpIDogY2hhbGsuZ3JheSgnZmFsc2UnKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VGFibGVUaW1lc3RhbXAodmFsdWUsIG9wdHMsIGRpc3BsYXlTZXR0aW5ncyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBnZXRWaXNpYmxlUHJvcHMgPSAoXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZGlzcGxheVNldHRpbmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREaXNwbGF5U2V0dGluZ3M+XG4pOiBzdHJpbmdbXSA9PiB7XG4gIGlmIChkaXNwbGF5U2V0dGluZ3MuaGlkZUNvbXBsZXRlZEF0KSB7XG4gICAgcmV0dXJuIHByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcCAhPT0gJ2NvbXBsZXRlZEF0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3BzO1xufTtcblxuY29uc3Qgc2hvd1RhYmxlID0gKFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICBwcm9wczogc3RyaW5nW10sXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICAvLyBHZXQgZGlzcGxheSBzZXR0aW5ncyBiYXNlZCBvbiB0ZXJtaW5hbCB3aWR0aFxuICBjb25zdCB0ZXJtaW5hbFdpZHRoID0gZ2V0VGVybWluYWxXaWR0aCgpO1xuICBjb25zdCBkaXNwbGF5U2V0dGluZ3MgPSBnZXREaXNwbGF5U2V0dGluZ3MoXG4gICAgdGVybWluYWxXaWR0aCxcbiAgICBvcHRzLndpdGhEYXRhIHx8IGZhbHNlLFxuICAgIHByb3BzLmluY2x1ZGVzKCdydW5OYW1lJylcbiAgKTtcblxuICAvLyBGaWx0ZXIgb3V0IGNvbXBsZXRlZEF0IGNvbHVtbiBpZiBuZWVkZWRcbiAgY29uc3QgdmlzaWJsZVByb3BzID0gZ2V0VmlzaWJsZVByb3BzKHByb3BzLCBkaXNwbGF5U2V0dGluZ3MpO1xuXG4gIC8vIFVwZGF0ZSB0cnVuY2F0ZSBsZW5ndGggZm9yIElPIGZpZWxkc1xuICBjb25zdCBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoID0gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIO1xuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBkaXNwbGF5U2V0dGluZ3MuZGF0YUZpZWxkV2lkdGg7XG5cbiAgLy8gU2hvdyBzdGF0dXMgbGVnZW5kIGlmIHVzaW5nIGFiYnJldmlhdGVkIHN0YXR1c1xuICBpZiAoXG4gICAgZGF0YS5sZW5ndGggPiAwICYmXG4gICAgZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiZcbiAgICB2aXNpYmxlUHJvcHMuaW5jbHVkZXMoJ3N0YXR1cycpXG4gICkge1xuICAgIHNob3dTdGF0dXNMZWdlbmQoKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBoZWFkZXIgbWFwcGluZyBmb3IgYWJicmV2aWF0ZWQgc3RhdHVzXG4gIGNvbnN0IGhlYWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZGlzcGxheVNldHRpbmdzLmFiYnJldmlhdGVTdGF0dXMgJiYgdmlzaWJsZVByb3BzLmluY2x1ZGVzKCdzdGF0dXMnKSkge1xuICAgIGhlYWRlck1hcFsnc3RhdHVzJ10gPSAnUyc7XG4gIH1cblxuICAvLyBBZGQgYSBibGFuayBsaW5lIGJlZm9yZSBhbnkgdGFibGVcbiAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoKTtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIud2FybignTm8gZGF0YSBmb3VuZCBmb3IgdGhpcyBxdWVyeSBhbmQgcmVzb3VyY2UuXFxuJyk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHZpc2libGVQcm9wcykge1xuICAgICAgY29uc3QgaGVhZGVyID0gaGVhZGVyTWFwW3Byb3BdIHx8IHByb3A7XG4gICAgICB0YWJsZS5jZWxsKGhlYWRlciwgJ04vQScpO1xuICAgIH1cbiAgICB0YWJsZS5uZXdSb3coKTtcbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICAgIFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSCA9IG9yaWdpbmFsVHJ1bmNhdGVMZW5ndGg7XG4gICAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoIWRhdGEpIHtcbiAgICBsb2dnZXIud2FybignRXhwZWN0aW5nIGFuIGFycmF5IG9mIGRhdGEsIGJ1dCBnb3QgbnVsbC5cXG4nKTtcbiAgfVxuICBsb2dnZXIubG9nKCcnKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdmlzaWJsZVByb3BzKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJNYXBbcHJvcF0gfHwgcHJvcDtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtwcm9wXTtcbiAgICAgIHRhYmxlLmNlbGwoXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgZm9ybWF0VGFibGVWYWx1ZShwcm9wLCB2YWx1ZSwgb3B0cywgZGlzcGxheVNldHRpbmdzLCBpdGVtKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGFibGUubmV3Um93KCk7XG4gIH1cblxuICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRydW5jYXRlIGxlbmd0aFxuICBUQUJMRV9UUlVOQ0FURV9JT19MRU5HVEggPSBvcmlnaW5hbFRydW5jYXRlTGVuZ3RoO1xuICByZXR1cm4gdGFibGUudG9TdHJpbmcoKTtcbn07XG5cbmNvbnN0IHNob3dKc29uID0gKGRhdGE6IHVua25vd24pID0+IHtcbiAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtqc29ufVxcbmApO1xufTtcblxuY29uc3Qgc2hvd0pzb25QYWdlID0gPFQ+KHBhZ2U6IFBhZ2VEYXRhPFQ+KSA9PiB7XG4gIHNob3dKc29uKHtcbiAgICBkYXRhOiBwYWdlLmRhdGEsXG4gICAgY3Vyc29yOiBwYWdlLmN1cnNvcixcbiAgICBoYXNNb3JlOiBwYWdlLmhhc01vcmUsXG4gICAgLi4uKHBhZ2UucGFnZUluZm8gPyB7IHBhZ2VJbmZvOiBwYWdlLnBhZ2VJbmZvIH0gOiB7fSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBJbiB0YWJsZXMsIHdlIHdhbnQgdG8gc2hvdyBhIHNob3J0ZXIgdGltZXN0YW1wLCBZWVlZLU1NLUREIEhIOk1NOlNTXG4gKi9cbmNvbnN0IGZvcm1hdFRhYmxlVGltZXN0YW1wID0gKFxuICB2YWx1ZTogRGF0ZSxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSxcbiAgZGlzcGxheVNldHRpbmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGlzcGxheVNldHRpbmdzPlxuKSA9PiB7XG4gIC8vIEZvcm1hdCBJU08gdGltZSB3aXRob3V0IFQgYW5kIFpcbiAgY29uc3QgaXNvVGltZSA9IGZvcm1hdElTT0RhdGUodmFsdWUpO1xuXG4gIC8vIFNob3cgcmVsYXRpdmUgdGltZSBvbmx5IGlmOlxuICAvLyAtIE5vdCBpbiBDSSBtb2RlXG4gIC8vIC0gRGlzcGxheSBzZXR0aW5ncyBhbGxvdyBpdCAoYmFzZWQgb24gdGVybWluYWwgd2lkdGgpXG4gIC8vIC0gd2l0aERhdGEgaXMgZGlzYWJsZWQgKG1vcmUgc3BhY2UgYXZhaWxhYmxlKVxuICAvLyAtIE5vdCBpbiBKU09OIG1vZGVcbiAgLy8gLSBkaXNhYmxlUmVsYXRpdmVEYXRlcyBpcyBub3Qgc2V0XG4gIGNvbnN0IHNob3VsZFNob3dSZWxhdGl2ZSA9XG4gICAgIWlzQ0koKSAmJlxuICAgIGRpc3BsYXlTZXR0aW5ncz8uc2hvd1JlbGF0aXZlRGF0ZXMgIT09IGZhbHNlICYmXG4gICAgIW9wdHMud2l0aERhdGEgJiZcbiAgICAhb3B0cy5qc29uICYmXG4gICAgIW9wdHMuZGlzYWJsZVJlbGF0aXZlRGF0ZXM7XG5cbiAgaWYgKHNob3VsZFNob3dSZWxhdGl2ZSkge1xuICAgIGNvbnN0IHJlbGF0aXZlID0gZm9ybWF0RGlzdGFuY2UodmFsdWUsIG5ldyBEYXRlKCksIHsgYWRkU3VmZml4OiB0cnVlIH0pO1xuICAgIHJldHVybiBgJHtpc29UaW1lfSAoJHtyZWxhdGl2ZX0pYDtcbiAgfVxuXG4gIHJldHVybiBpc29UaW1lO1xufTtcblxuY29uc3QgdHJ1bmNhdGVTdHJpbmcgPSAoXG4gIHN0cjogc3RyaW5nLFxuICBtYXhMZW5ndGg6IG51bWJlciA9IFRBQkxFX1RSVU5DQVRFX0lPX0xFTkdUSFxuKSA9PiB7XG4gIHJldHVybiBzdHIgJiYgc3RyLmxlbmd0aCA+IG1heExlbmd0aFxuICAgID8gYCR7c3RyLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpfS4uLmBcbiAgICA6IHN0cjtcbn07XG5cbmNvbnN0IHRydW5jYXRlSWRUb0xhc3RDaGFycyA9IChpZDogc3RyaW5nLCBjaGFyczogbnVtYmVyID0gNCk6IHN0cmluZyA9PiB7XG4gIGlmICghaWQgfHwgaWQubGVuZ3RoIDw9IGNoYXJzKSByZXR1cm4gaWQ7XG4gIHJldHVybiBgLi4uJHtpZC5zdWJzdHJpbmcoaWQubGVuZ3RoIC0gY2hhcnMpfWA7XG59O1xuXG5jb25zdCBzaG93SW5zcGVjdEluZm9Cb3ggPSAocmVzb3VyY2U6IHN0cmluZykgPT4ge1xuICBsb2dnZXIuaW5mbyhcbiAgICBgVG8gdmlldyBkZXRhaWxzIGZvciBhICR7cmVzb3VyY2V9LCB1c2UgXFxgd29ya2Zsb3cgaW5zcGVjdCAke3Jlc291cmNlfVxcYCA8aWQ+YFxuICApO1xuICBsb2dnZXIuaW5mbyhcbiAgICBgVG8gdmlldyB0aGUgY29udGVudCBvZiBhbnkgc3RyZWFtLCB1c2UgXFxgd29ya2Zsb3cgaW5zcGVjdCBzdHJlYW0gPHN0cmVhbS1pZD5cXGBgXG4gICk7XG59O1xuXG5jb25zdCBFWFBJUkVEX0RBVEFfTUVTU0FHRSA9IGNoYWxrLmdyYXkoJzxkYXRhIGV4cGlyZWQ+Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcnVuIGhhcyBleHBpcmVkIGRhdGEgc3RvcmFnZSAocnVuLWxldmVsIGV4cGlyZWRBdCBmaWVsZCkuXG4gKiBPbmx5IHJldHVybnMgdHJ1ZSB3aGVuIGBleHBpcmVkQXRgIGlzIGluIHRoZSBwYXN0LlxuICovXG5leHBvcnQgY29uc3QgaGFzRXhwaXJlZERhdGEgPSAocnVuOiBXb3JrZmxvd1J1bik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgICdleHBpcmVkQXQnIGluIHJ1biAmJlxuICAgIHJ1bi5leHBpcmVkQXQgIT0gbnVsbCAmJlxuICAgIG5ldyBEYXRlKHJ1bi5leHBpcmVkQXQpIDwgbmV3IERhdGUoKVxuICApO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYW55IGRhdGEgZmllbGQgaW4gYSBoeWRyYXRlZCByZXNvdXJjZSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGFuXG4gKiBleHBpcmVkIHBsYWNlaG9sZGVyLiBXb3JrcyBmb3IgcnVucywgc3RlcHMsIGhvb2tzLCBhbmQgZXZlbnRzIOKAlCB1bmxpa2VcbiAqIGBoYXNFeHBpcmVkRGF0YWAgd2hpY2ggb25seSBjaGVja3MgdGhlIHJ1bi1sZXZlbCBgZXhwaXJlZEF0YCBmaWVsZC5cbiAqL1xuY29uc3QgaGFzRXhwaXJlZEZpZWxkcyA9IChyZXNvdXJjZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIFsnaW5wdXQnLCAnb3V0cHV0JywgJ2Vycm9yJywgJ21ldGFkYXRhJ10uc29tZSgoa2V5KSA9PlxuICAgIGlzRXhwaXJlZFJlZihyZXNvdXJjZVtrZXldKVxuICApO1xufTtcblxuLyoqXG4gKiBUYWtlcyBoeWRyYXRlZCBzdGVwL3dvcmtmbG93IGlucHV0L291dHB1dCBhbmQgc2VyaWFsaXplcyBpdCBmb3IgaW5saW5lIGRpc3BsYXkuXG4gKi9cbmNvbnN0IGlubGluZUZvcm1hdElPID0gPFQ+KGlvOiBULCB0b3BMZXZlbDogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIGlvO1xuICBsZXQgdmFsdWUgPSAnJztcbiAgaWYgKGlvID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9ICc8ZW1wdHk+JztcbiAgfSBlbHNlIGlmIChpbyA9PT0gbnVsbCkge1xuICAgIHZhbHVlID0gJzxudWxsPic7XG4gIH0gZWxzZSBpZiAoaXNFbmNyeXB0ZWRSZWYoaW8pKSB7XG4gICAgdmFsdWUgPSBjaGFsay5kaW0ueWVsbG93KCdcXHV7MUY1MTJ9IEVuY3J5cHRlZCcpO1xuICB9IGVsc2UgaWYgKGlzRXhwaXJlZFJlZihpbykpIHtcbiAgICB2YWx1ZSA9IGNoYWxrLmdyYXkoJzxkYXRhIGV4cGlyZWQ+Jyk7XG4gIH0gZWxzZSBpZiAoaW8gJiYgQXJyYXkuaXNBcnJheShpbykpIHtcbiAgICBpZiAoaW8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9ICc8ZW1wdHk+JztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBpb1xuICAgICAgICAubWFwKChpdGVtKSA9PiBpbmxpbmVGb3JtYXRJTyhpdGVtLCBmYWxzZSkpXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgICBpZiAoc3RyaW5naWZpZWQubGVuZ3RoID4gVEFCTEVfVFJVTkNBVEVfSU9fTEVOR1RIICYmIHRvcExldmVsKSB7XG4gICAgICAgIHZhbHVlID0gY2hhbGsueWVsbG93KGAke2lvLmxlbmd0aH0gYXJnc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBzdHJpbmdpZmllZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoaW8gaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB2YWx1ZSA9IGlvLnRvSVNPU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdHJ1bmNhdGVTdHJpbmcoSlNPTi5zdHJpbmdpZnkoaW8pKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGlmIChpc1N0cmVhbUlkKGlvIGFzIHN0cmluZykpIHtcbiAgICAgIHZhbHVlID0gaW8udG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIChpbyBhcyBzdHJpbmcpLmluY2x1ZGVzKCdzdHJtXycpKSB7XG4gICAgICB2YWx1ZSA9IGlvIGFzIHN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0cnVuY2F0ZVN0cmluZyhTdHJpbmcoaW8pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBgPCR7dHlwZX0+YDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIExpc3Qgdmlld3Mgc3VyZmFjZSBtZXRhZGF0YSBvbmx5LiBXaGVuIHRoZSBhY3RpdmUgYmFja2VuZCBleHBvc2VzIHRoZVxuICogb3B0aW9uYWwgYHdvcmxkLmFuYWx5dGljc2AgcmVhZCBuYW1lc3BhY2Ugd2UgcmVhZCBsaXN0IHBhZ2VzIGZyb20gaXRcbiAqIChtZXRhZGF0YS1vbmx5IOKAlCBubyBwYXlsb2FkIHJlc29sdXRpb24pOyBvdGhlcndpc2Ugd2UgZmFsbCBiYWNrIHRvIHRoZVxuICogcnVudGltZSBzdG9yYWdlIEFQSXMgd2l0aCBgcmVzb2x2ZURhdGE6ICdub25lJ2AuXG4gKlxuICogYC0td2l0aERhdGFgIGZvcmNlcyB0aGUgcnVudGltZSBwYXRoIHNvIHBheWxvYWRzIGNhbiBiZSByZXNvbHZlZCBpbnRvIHRoZVxuICogdGFibGUuIEl0IGlzIGRlcHJlY2F0ZWQgZm9yIGxpc3Qgdmlld3M6IHZpZXcgcGF5bG9hZHMgcGVyLXJlc291cmNlIHdpdGhcbiAqIGB3b3JrZmxvdyBpbnNwZWN0IDxyZXNvdXJjZT4gPGlkPmAuXG4gKi9cbmNvbnN0IHdhcm5XaXRoRGF0YURlcHJlY2F0ZWRGb3JMaXN0ID0gKHNpbmd1bGFyOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgbG9nZ2VyLndhcm4oXG4gICAgYCctLXdpdGhEYXRhJyBpcyBkZXByZWNhdGVkIGZvciBsaXN0IHZpZXdzIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gVXNlICd3b3JrZmxvdyBpbnNwZWN0ICR7c2luZ3VsYXJ9IDxpZD4nIHRvIHZpZXcgcGF5bG9hZHMgZm9yIGEgc2luZ2xlICR7c2luZ3VsYXJ9LmBcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0UnVucyA9IGFzeW5jICh3b3JsZDogV29ybGQsIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy5zdGVwSWQgfHwgb3B0cy5ydW5JZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIG9yIHJ1bi1pZCBpcyBub3Qgc3VwcG9ydGVkIGluIGxpc3QgY2FsbHMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgd2FybldpdGhEYXRhRGVwcmVjYXRlZEZvckxpc3QoJ3J1bicpO1xuICB9XG5cbiAgY29uc3QgdXNlQW5hbHl0aWNzID0gIW9wdHMud2l0aERhdGEgJiYgQm9vbGVhbih3b3JsZC5hbmFseXRpY3MpO1xuICBjb25zdCByZXNvbHZlRGF0YSA9IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJztcbiAgY29uc3Qgc3RhdHVzID0gb3B0cy5zdGF0dXM7XG5cbiAgLy8gUmVzb2x2ZSAtLXNpbmNlLy0tdW50aWwgaW50byBhbiBleHBsaWNpdCBsaXN0aW5nIHdpbmRvdy4gT25seSB0aGVcbiAgLy8gYW5hbHl0aWNzIHJlYWQgcGF0aCBzdXBwb3J0cyBvbmU7IHRoZSBydW50aW1lIHN0b3JhZ2UgQVBJcyBoYXZlIG5vIHRpbWVcbiAgLy8gZmlsdGVyLiBXaXRob3V0IHRoZSBmbGFncyB0aGUgYmFja2VuZCBhcHBsaWVzIGl0cyBkZWZhdWx0IHdpbmRvd1xuICAvLyAodHJhaWxpbmcgMjRoIG9uIHRoZSBWZXJjZWwgYmFja2VuZCkuXG4gIGNvbnN0IHRpbWVXaW5kb3cgPSByZXNvbHZlVGltZVdpbmRvdyhvcHRzKTtcbiAgaWYgKHRpbWVXaW5kb3cgJiYgIXVzZUFuYWx5dGljcykge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJy0tc2luY2UvLS11bnRpbCByZXF1aXJlIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoIGFuZCBhcmUgaWdub3JlZCBieSB0aGlzIGJhY2tlbmQuJ1xuICAgICk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgdG8gc2hvdyBiYXNlZCBvbiB3aXRoRGF0YSBmbGFnXG4gIGNvbnN0IHByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QU1xuICAgIDogV09SS0ZMT1dfUlVOX0xJU1RFRF9QUk9QUy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiAhV09SS0ZMT1dfUlVOX0lPX1BST1BTLmluY2x1ZGVzKHByb3ApXG4gICAgICApO1xuXG4gIGNvbnN0IGZldGNoUnVuc1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgY3Vyc29yLFxuICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgfTtcbiAgICBpZiAodXNlQW5hbHl0aWNzICYmIHdvcmxkLmFuYWx5dGljcykge1xuICAgICAgY29uc3QgcnVucyA9IGF3YWl0IHdvcmxkLmFuYWx5dGljcy5ydW5zLmxpc3Qoe1xuICAgICAgICB3b3JrZmxvd05hbWU6IG9wdHMud29ya2Zsb3dOYW1lLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIC4uLih0aW1lV2luZG93ID8/IHt9KSxcbiAgICAgICAgcGFnaW5hdGlvbixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogcnVucy5kYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgICAgY3Vyc29yOiBydW5zLmN1cnNvcixcbiAgICAgICAgaGFzTW9yZTogcnVucy5oYXNNb3JlLFxuICAgICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8ocnVucyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBydW5zID0gYXdhaXQgd29ybGQucnVucy5saXN0KHtcbiAgICAgIHdvcmtmbG93TmFtZTogb3B0cy53b3JrZmxvd05hbWUsXG4gICAgICBzdGF0dXMsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgcmVzb2x2ZURhdGEsXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcnVucy5kYXRhLm1hcCgocikgPT4gaHlkcmF0ZVJlc291cmNlSU8ociwgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICBjdXJzb3I6IHJ1bnMuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogcnVucy5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHJ1bnMpLFxuICAgIH07XG4gIH07XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaFJ1bnNQYWdlKG9wdHMuY3Vyc29yKTtcbiAgICAgIHNob3dKc29uUGFnZShwYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFJ1bnNQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKHJ1bnMpID0+IHtcbiAgICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKHJ1bnMsIHByb3BzLCBvcHRzKSk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjZW50UnVuID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGxvZ2dlci53YXJuKGBObyBydW5JZCBwcm92aWRlZCwgZmV0Y2hpbmcgZGF0YSBmb3IgbGF0ZXN0IHJ1biBpbnN0ZWFkLmApO1xuICB0cnkge1xuICAgIGNvbnN0IHJ1bnMgPSBhd2FpdCB3b3JsZC5ydW5zLmxpc3Qoe1xuICAgICAgcGFnaW5hdGlvbjogeyBsaW1pdDogMSwgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnIH0sXG4gICAgICByZXNvbHZlRGF0YTogJ25vbmUnLCAvLyBEb24ndCBuZWVkIGRhdGEgZm9yIGp1c3QgZ2V0dGluZyB0aGUgSURcbiAgICB9KTtcbiAgICBydW5zLmRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJ1bnMuZGF0YS5tYXAoKHIpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKHIsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHJ1bnMuZGF0YVswXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaG93UnVuID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gc2hvd2luZyBpbmRpdmlkdWFsIHJlc291cmNlcycpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdhbGwnIH0pO1xuICAgIGNvbnN0IHJ1bldpdGhIeWRyYXRlZElPID0gYXdhaXQgaHlkcmF0ZVJlc291cmNlSU8ocnVuLCByZXNvbHZlS2V5KTtcbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihydW5XaXRoSHlkcmF0ZWRJTyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNFeHBpcmVkRGF0YShydW4pKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIFwiVGhpcyBydW4ncyBkYXRhIChpbnB1dC9vdXRwdXQvZXJyb3IpIGhhcyBleHBpcmVkIGFuZCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsb2dnZXIubG9nKHJ1bldpdGhIeWRyYXRlZElPKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdFN0ZXBzID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge1xuICAgIHJ1bklkOiB1bmRlZmluZWQsXG4gIH1cbikgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGlzdCBjYWxscywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0ZXBzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWRcbiAgICA/IG9wdHMucnVuSWRcbiAgICA6IChhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpKT8ucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ05vIHJ1biBmb3VuZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIHdhcm5XaXRoRGF0YURlcHJlY2F0ZWRGb3JMaXN0KCdzdGVwJyk7XG4gIH1cblxuICBjb25zdCB1c2VBbmFseXRpY3MgPSAhb3B0cy53aXRoRGF0YSAmJiBCb29sZWFuKHdvcmxkLmFuYWx5dGljcyk7XG4gIGNvbnN0IHJlc29sdmVEYXRhID0gb3B0cy53aXRoRGF0YSA/ICdhbGwnIDogJ25vbmUnO1xuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB0byBzaG93IGJhc2VkIG9uIHdpdGhEYXRhIGZsYWdcbiAgY29uc3QgcHJvcHMgPSBvcHRzLndpdGhEYXRhXG4gICAgPyBTVEVQX0xJU1RFRF9QUk9QU1xuICAgIDogU1RFUF9MSVNURURfUFJPUFMuZmlsdGVyKChwcm9wKSA9PiAhU1RFUF9JT19QUk9QUy5pbmNsdWRlcyhwcm9wKSk7XG5cbiAgY29uc3QgZmV0Y2hTdGVwc1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIHN0ZXBzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgY3Vyc29yLFxuICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgfTtcbiAgICBpZiAodXNlQW5hbHl0aWNzICYmIHdvcmxkLmFuYWx5dGljcykge1xuICAgICAgY29uc3Qgc3RlcHMgPSBhd2FpdCB3b3JsZC5hbmFseXRpY3Muc3RlcHMubGlzdCh7IHJ1bklkLCBwYWdpbmF0aW9uIH0pO1xuICAgICAgY29uc3QgcGFnZSA9IHtcbiAgICAgICAgZGF0YTogc3RlcHMuZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICAgIGN1cnNvcjogc3RlcHMuY3Vyc29yLFxuICAgICAgICBoYXNNb3JlOiBzdGVwcy5oYXNNb3JlLFxuICAgICAgICBwYWdlSW5mbzogZ2V0UGFnZUluZm8oc3RlcHMpLFxuICAgICAgfTtcbiAgICAgIGlmIChjdXJzb3IgfHwgcGFnZS5kYXRhLmxlbmd0aCA+IDAgfHwgcGFnZS5oYXNNb3JlKSB7XG4gICAgICAgIHJldHVybiBwYWdlO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTm8gYW5hbHl0aWNzIHN0ZXBzIGZvdW5kIGZvciBydW4gJHtydW5JZH07IGZhbGxpbmcgYmFjayB0byBzdG9yYWdlYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RlcENodW5rcyA9IGF3YWl0IHdvcmxkLnN0ZXBzLmxpc3Qoe1xuICAgICAgcnVuSWQsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgcmVzb2x2ZURhdGEsXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgc3RlcENodW5rcy5kYXRhLm1hcCgocykgPT4gaHlkcmF0ZVJlc291cmNlSU8ocywgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICBjdXJzb3I6IHN0ZXBDaHVua3MuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogc3RlcENodW5rcy5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKHN0ZXBDaHVua3MpLFxuICAgIH07XG4gIH07XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaFN0ZXBzUGFnZShvcHRzLmN1cnNvcik7XG4gICAgICBzaG93SnNvbihwYWdlLmRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgIGluaXRpYWxDdXJzb3I6IG9wdHMuY3Vyc29yLFxuICAgIGludGVyYWN0aXZlOiBvcHRzLmludGVyYWN0aXZlLFxuICAgIGZldGNoUGFnZTogYXN5bmMgKGN1cnNvcikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoU3RlcHNQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKHN0ZXBzKSA9PiB7XG4gICAgICBsb2dnZXIubG9nKHNob3dUYWJsZShzdGVwcywgcHJvcHMsIG9wdHMpKTtcbiAgICAgIHNob3dJbnNwZWN0SW5mb0JveCgnc3RlcCcpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dTdGVwID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHN0ZXBJZDogc3RyaW5nLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIGxvZ2dlci53YXJuKCdgd2l0aERhdGFgIGZsYWcgaXMgaWdub3JlZCB3aGVuIHNob3dpbmcgaW5kaXZpZHVhbCByZXNvdXJjZXMnKTtcbiAgfVxuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIGluIGdldCBjYWxscywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcnVuSWQgPSBvcHRzLnJ1bklkID8/IChhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpKT8ucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAncnVuLWlkIGlzIHJlcXVpcmVkIGZvciBzaG93aW5nIGEgc3RlcC4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IHN0ZXAgPFNURVBfSUQ+IC0tcnVuSWQ9PFJVTl9JRD5gJ1xuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdGVwID0gYXdhaXQgd29ybGQuc3RlcHMuZ2V0KHJ1bklkLCBzdGVwSWQsIHtcbiAgICAgIHJlc29sdmVEYXRhOiAnYWxsJyxcbiAgICB9KTtcbiAgICBjb25zdCBzdGVwV2l0aEh5ZHJhdGVkSU8gPSBhd2FpdCBoeWRyYXRlUmVzb3VyY2VJTyhzdGVwLCByZXNvbHZlS2V5KTtcbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihzdGVwV2l0aEh5ZHJhdGVkSU8pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0V4cGlyZWRGaWVsZHMoXG4gICAgICAgICAgc3RlcFdpdGhIeWRyYXRlZElPIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIFwiVGhpcyBzdGVwJ3MgZGF0YSAoaW5wdXQvb3V0cHV0L2Vycm9yKSBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmxvZyhzdGVwV2l0aEh5ZHJhdGVkSU8pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaG93U3RyZWFtID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHN0cmVhbUlkOiBzdHJpbmcsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBpZiAob3B0cy5zdGVwSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdGaWx0ZXJpbmcgYnkgc3RlcC1pZCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gc2hvd2luZyBhIHN0cmVhbSwgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmICghb3B0cy5ydW5JZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignLS1ydW4gaXMgcmVxdWlyZWQgd2hlbiBzaG93aW5nIGEgc3RyZWFtJyk7XG4gIH1cbiAgY29uc3QgcmF3U3RyZWFtID0gYXdhaXQgd29ybGQuc3RyZWFtcy5nZXQob3B0cy5ydW5JZCwgc3RyZWFtSWQpO1xuXG4gIC8vIE9ubHkgcmVzb2x2ZSB0aGUgZW5jcnlwdGlvbiBrZXkgd2hlbiAtLWRlY3J5cHQgaXMgcGFzc2VkIGFuZCAtLXJ1biBpcyBwcm92aWRlZC5cbiAgLy8gV2UgZmV0Y2ggdGhlIGZ1bGwgV29ya2Zsb3dSdW4gb2JqZWN0IHNvIHRoYXQgZ2V0RW5jcnlwdGlvbktleUZvclJ1biBoYXNcbiAgLy8gYWNjZXNzIHRvIHRoZSBkZXBsb3ltZW50SWQgKG5lZWRlZCBmb3IgQVBJLWJhc2VkIGtleSByZXNvbHV0aW9uKS5cbiAgbGV0IGVuY3J5cHRpb25LZXk6IEVuY3J5cHRpb25LZXlQYXJhbTtcbiAgaWYgKG9wdHMuZGVjcnlwdCAmJiBvcHRzLnJ1bklkKSB7XG4gICAgZW5jcnlwdGlvbktleSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChvcHRzLnJ1bklkISk7XG4gICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuKTtcbiAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcbiAgICB9KSgpO1xuICB9IGVsc2UgaWYgKG9wdHMuZGVjcnlwdCAmJiAhb3B0cy5ydW5JZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0Nhbm5vdCBkZWNyeXB0IHN0cmVhbSBjb250ZW50IHdpdGhvdXQgYSBydW4gSUQuIFVzZSAtLXJ1bj08cnVuLWlkPiB3aXRoIC0tZGVjcnlwdC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIERlc2VyaWFsaXplIHRoZSBzdHJlYW0gdG8gZ2V0IEphdmFTY3JpcHQgb2JqZWN0c1xuICBjb25zdCByZXZpdmVycyA9IGdldEV4dGVybmFsUmV2aXZlcnMoXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBbXSxcbiAgICBvcHRzLnJ1bklkID8/ICcnLFxuICAgIGVuY3J5cHRpb25LZXlcbiAgKTtcbiAgY29uc3QgdHJhbnNmb3JtID0gZ2V0RGVzZXJpYWxpemVTdHJlYW0ocmV2aXZlcnMsIGVuY3J5cHRpb25LZXkpO1xuICBjb25zdCBzdHJlYW0gPSByYXdTdHJlYW0ucGlwZVRocm91Z2godHJhbnNmb3JtKTtcblxuICBsb2dnZXIuaW5mbygnU3RyZWFtaW5nIHRvIHN0ZG91dCwgcHJlc3MgQ1RSTCtDIHRvIGFib3J0LicpO1xuICBsb2dnZXIuaW5mbyhcbiAgICAnVXNlIC0tanNvbiB0byBvdXRwdXQgdGhlIHN0cmVhbSBhcyBuZXdsaW5lLWRlbGltaXRlZCBKU09OIHdpdGhvdXQgaW5mbyBsb2dzLlxcbidcbiAgKTtcbiAgYXdhaXQgc3RyZWFtVG9Db25zb2xlKHN0cmVhbSwgc3RyZWFtSWQsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBMaXN0aW5nIHN0cmVhbXMgb25seSBsaXN0cyBhdmFpbGFibGUgc3RyZWFtIElEcyBiYXNlZCBvbiBydW4vc3RlcCBwYXNzZWQsXG4gKiBhbmQgZG9lc24ndCByZWFkIGFueSBkYXRhIGZyb20gdGhlIHN0cmVhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBsaXN0U3RyZWFtc0J5UnVuSWQgPSBhc3luYyAoXG4gIHdvcmxkOiBXb3JsZCxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fVxuKSA9PiB7XG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgbG9nZ2VyLndhcm4oJ2B3aXRoRGF0YWAgZmxhZyBpcyBpZ25vcmVkIHdoZW4gbGlzdGluZyBzdHJlYW1zJyk7XG4gIH1cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RyZWFtcywgaWdub3JpbmcgZmlsdGVyLidcbiAgICApO1xuICB9XG4gIGlmIChvcHRzLnN0ZXBJZCkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSBzdGVwLWlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0cmVhbXMsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGxldCBydW5JZCA9IG9wdHMucnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdObyBydW4taWQgcHJvdmlkZWQuIExpc3Rpbmcgc3RyZWFtcyBmb3IgbGF0ZXN0IHJ1biBpbnN0ZWFkLicsXG4gICAgICAnVXNlIC0tcnVuPTxydW4taWQ+IHRvIGZpbHRlciBzdHJlYW1zIGJ5IHJ1bi4nXG4gICAgKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCBnZXRSZWNlbnRSdW4od29ybGQsIG9wdHMpO1xuICAgIGlmICghcnVuKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gcnVucyBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcnVuSWQgPSBydW4ucnVuSWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHN0cmVhbUlkcyA9IGF3YWl0IHdvcmxkLnN0cmVhbXMubGlzdChydW5JZCk7XG4gICAgY29uc3QgbWF0Y2hpbmdTdHJlYW1zID0gc3RyZWFtSWRzLm1hcCgoc3RyZWFtSWQpID0+ICh7XG4gICAgICBydW5JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgIH0pKTtcblxuICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgIHNob3dKc29uKG1hdGNoaW5nU3RyZWFtcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZ2dlci5sb2coc2hvd1RhYmxlKG1hdGNoaW5nU3RyZWFtcywgWydydW5JZCcsICdzdHJlYW1JZCddKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdEV2ZW50cyA9IGFzeW5jIChcbiAgd29ybGQ6IFdvcmxkLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3IgZXZlbnRzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5JZCA9IG9wdHMucnVuSWQgPz8gKGF3YWl0IGdldFJlY2VudFJ1bih3b3JsZCwgb3B0cykpPy5ydW5JZDtcbiAgaWYgKCFydW5JZCkge1xuICAgIGxvZ2dlci5lcnJvcignTm8gcnVuIGZvdW5kLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvcHRzLndpdGhEYXRhKSB7XG4gICAgd2FybldpdGhEYXRhRGVwcmVjYXRlZEZvckxpc3QoJ2V2ZW50Jyk7XG4gIH1cblxuICBjb25zdCB1c2VBbmFseXRpY3MgPSAhb3B0cy53aXRoRGF0YSAmJiBCb29sZWFuKHdvcmxkLmFuYWx5dGljcyk7XG4gIGNvbnN0IGNvcnJlbGF0aW9uSWRGaWx0ZXIgPSBvcHRzLmhvb2tJZCB8fCBvcHRzLnN0ZXBJZDtcblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgdG8gc2hvdyBiYXNlZCBvbiB3aXRoRGF0YSBmbGFnXG4gIGNvbnN0IHByb3BzID0gb3B0cy53aXRoRGF0YVxuICAgID8gRVZFTlRfTElTVEVEX1BST1BTXG4gICAgOiBFVkVOVF9MSVNURURfUFJPUFMuZmlsdGVyKChwcm9wKSA9PiAhRVZFTlRfSU9fUFJPUFMuaW5jbHVkZXMocHJvcCkpO1xuXG4gIGNvbnN0IGZldGNoRXZlbnRzUGFnZSA9IGFzeW5jIChcbiAgICBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFBhZ2VEYXRhPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4gPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgZXZlbnRzIGZvciBydW4gJHtydW5JZH1gKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgY3Vyc29yLFxuICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgfTtcbiAgICBpZiAodXNlQW5hbHl0aWNzICYmIHdvcmxkLmFuYWx5dGljcykge1xuICAgICAgY29uc3QgZXZlbnRzID0gYXdhaXQgd29ybGQuYW5hbHl0aWNzLmV2ZW50cy5saXN0KHtcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWRGaWx0ZXIsXG4gICAgICAgIHBhZ2luYXRpb24sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhZ2UgPSB7XG4gICAgICAgIGRhdGE6IGV2ZW50cy5kYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgICAgY3Vyc29yOiBldmVudHMuY3Vyc29yLFxuICAgICAgICBoYXNNb3JlOiBldmVudHMuaGFzTW9yZSxcbiAgICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKGV2ZW50cyksXG4gICAgICB9O1xuICAgICAgaWYgKGN1cnNvciB8fCBwYWdlLmRhdGEubGVuZ3RoID4gMCB8fCBwYWdlLmhhc01vcmUpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBObyBhbmFseXRpY3MgZXZlbnRzIGZvdW5kIGZvciBydW4gJHtydW5JZH07IGZhbGxpbmcgYmFjayB0byBzdG9yYWdlYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgcnVuSWQsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgcmVzb2x2ZURhdGE6IG9wdHMud2l0aERhdGEgPyAnYWxsJyA6ICdub25lJyxcbiAgICB9KTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGNvcnJlbGF0aW9uSWRGaWx0ZXJcbiAgICAgID8gcmVzdWx0LmRhdGEuZmlsdGVyKChlKSA9PiBlLmNvcnJlbGF0aW9uSWQgPT09IGNvcnJlbGF0aW9uSWRGaWx0ZXIpXG4gICAgICA6IHJlc3VsdC5kYXRhO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbHRlcmVkLm1hcCgoZSkgPT4gaHlkcmF0ZVJlc291cmNlSU8oZSwgcmVzb2x2ZUtleSkpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICBjdXJzb3I6IHJlc3VsdC5jdXJzb3IsXG4gICAgICBoYXNNb3JlOiByZXN1bHQuaGFzTW9yZSxcbiAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyhyZXN1bHQpLFxuICAgIH07XG4gIH07XG5cbiAgLy8gRm9yIEpTT04gb3V0cHV0LCBqdXN0IGZldGNoIG9uY2UgYW5kIHJldHVyblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaEV2ZW50c1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgICAgc2hvd0pzb24ocGFnZS5kYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGhhbmRsZUFwaUVycm9yKGVycm9yLCBvcHRzLmJhY2tlbmQpKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHNldHVwTGlzdFBhZ2luYXRpb248UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHtcbiAgICBpbml0aWFsQ3Vyc29yOiBvcHRzLmN1cnNvcixcbiAgICBpbnRlcmFjdGl2ZTogb3B0cy5pbnRlcmFjdGl2ZSxcbiAgICBmZXRjaFBhZ2U6IGFzeW5jIChjdXJzb3IpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaEV2ZW50c1BhZ2UoY3Vyc29yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXlQYWdlOiBhc3luYyAoZXZlbnRzKSA9PiB7XG4gICAgICBsb2dnZXIubG9nKHNob3dUYWJsZShldmVudHMsIHByb3BzLCBvcHRzKSk7XG4gICAgICBzaG93SW5zcGVjdEluZm9Cb3goJ2V2ZW50Jyk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdEhvb2tzID0gYXN5bmMgKHdvcmxkOiBXb3JsZCwgb3B0czogSW5zcGVjdENMSU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCByZXNvbHZlS2V5ID0gY3JlYXRlUmVzb2x2ZXIod29ybGQsIG9wdHM/LmRlY3J5cHQgPz8gZmFsc2UpO1xuXG4gIGlmIChvcHRzLndvcmtmbG93TmFtZSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ0ZpbHRlcmluZyBieSB3b3JrZmxvdy1uYW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGhvb2tzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG9va3MsIGlnbm9yaW5nIGZpbHRlci4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bklkID0gb3B0cy5ydW5JZDtcbiAgY29uc3QgcmVzb2x2ZURhdGEgPSBvcHRzLndpdGhEYXRhID8gJ2FsbCcgOiAnbm9uZSc7XG4gIC8vIEhvb2tzIGFsd2F5cyByZWFkIGZyb20gdGhlIHJ1bnRpbWUgc3RvcmFnZSBBUEkuIFVubGlrZSBydW5zL3N0ZXBzL2V2ZW50cyxcbiAgLy8gdGhlIGFuYWx5dGljcyByZWFkIHBhdGggb21pdHMgYG93bmVySWRgIChhbmQgdGhlIHNlY3JldCBob29rIHRva2VuIHVzZWQgYnlcbiAgLy8gcmVzdW1lL2NvcHktdG9rZW4gc3VyZmFjZXMpLCBzbyBob29rIGxpc3Rpbmcgc3RheXMgb24gdGhlIGNhbm9uaWNhbCBBUElzLlxuICBjb25zdCBmZXRjaEhvb2tzUGFnZSA9IGFzeW5jIChcbiAgICBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFBhZ2VEYXRhPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4gPT4ge1xuICAgIGlmICghcnVuSWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgYWxsIGhvb2tzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgaG9va3MgZm9yIHJ1biAke3J1bklkfWApO1xuICAgIH1cbiAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgY3Vyc29yLFxuICAgICAgbGltaXQ6IG9wdHMubGltaXQgfHwgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgfTtcbiAgICBjb25zdCBob29rcyA9IGF3YWl0IHdvcmxkLmhvb2tzLmxpc3QoeyBydW5JZCwgcGFnaW5hdGlvbiwgcmVzb2x2ZURhdGEgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgaG9va3MuZGF0YS5tYXAoKGgpID0+IGh5ZHJhdGVSZXNvdXJjZUlPKGgsIHJlc29sdmVLZXkpKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgY3Vyc29yOiBob29rcy5jdXJzb3IsXG4gICAgICBoYXNNb3JlOiBob29rcy5oYXNNb3JlLFxuICAgICAgcGFnZUluZm86IGdldFBhZ2VJbmZvKGhvb2tzKSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIEZvciBKU09OIG91dHB1dCwganVzdCBmZXRjaCBvbmNlIGFuZCByZXR1cm5cbiAgaWYgKG9wdHMuanNvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hIb29rc1BhZ2Uob3B0cy5jdXJzb3IpO1xuICAgICAgc2hvd0pzb25QYWdlKHBhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0dXAgcGFnaW5hdGlvbiB3aXRoIG5ldyBtZWNoYW5pc21cbiAgYXdhaXQgc2V0dXBMaXN0UGFnaW5hdGlvbjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgIGluaXRpYWxDdXJzb3I6IG9wdHMuY3Vyc29yLFxuICAgIGludGVyYWN0aXZlOiBvcHRzLmludGVyYWN0aXZlLFxuICAgIGZldGNoUGFnZTogYXN5bmMgKGN1cnNvcikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSG9va3NQYWdlKGN1cnNvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5UGFnZTogYXN5bmMgKGhvb2tzKSA9PiB7XG4gICAgICBsb2dnZXIubG9nKHNob3dUYWJsZShob29rcywgSE9PS19MSVNURURfUFJPUFMsIG9wdHMpKTtcbiAgICAgIHNob3dJbnNwZWN0SW5mb0JveCgnaG9vaycpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dIb29rID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIGhvb2tJZDogc3RyaW5nLFxuICBvcHRzOiBJbnNwZWN0Q0xJT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZUtleSA9IGNyZWF0ZVJlc29sdmVyKHdvcmxkLCBvcHRzPy5kZWNyeXB0ID8/IGZhbHNlKTtcblxuICBpZiAob3B0cy53aXRoRGF0YSkge1xuICAgIGxvZ2dlci53YXJuKCdgd2l0aERhdGFgIGZsYWcgaXMgaWdub3JlZCB3aGVuIHNob3dpbmcgaW5kaXZpZHVhbCByZXNvdXJjZXMnKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGhvb2sgPSBhd2FpdCB3b3JsZC5ob29rcy5nZXQoaG9va0lkLCB7XG4gICAgICByZXNvbHZlRGF0YTogJ2FsbCcsXG4gICAgfSk7XG4gICAgY29uc3QgaHlkcmF0ZWRIb29rID0gYXdhaXQgaHlkcmF0ZVJlc291cmNlSU8oaG9vaywgcmVzb2x2ZUtleSk7XG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgc2hvd0pzb24oaHlkcmF0ZWRIb29rKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBoYXNFeHBpcmVkRmllbGRzKGh5ZHJhdGVkSG9vayBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIFwiVGhpcyBob29rJ3MgZGF0YSAobWV0YWRhdGEpIGhhcyBleHBpcmVkIGFuZCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsb2dnZXIubG9nKGh5ZHJhdGVkSG9vayk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuLyoqXG4gKiBMaXN0IHdhaXRzL3NsZWVwcyB2aWEgdGhlIGFuYWx5dGljcyByZWFkIHBhdGguIFRoZSBhbmFseXRpY3Mgd2FpdCBzaGFwZSBpc1xuICoga2V5ZWQgYnkgYHdhaXRJZGAvYHN0YXR1c2AgcmF0aGVyIHRoYW4gdGhlIGBjb3JyZWxhdGlvbklkYC9gZXZlbnRJZGAgY29sdW1uc1xuICogcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSBldmVudCBzdHJlYW0gaW4gdGhlIGZhbGxiYWNrIHBhdGguXG4gKi9cbmNvbnN0IGxpc3RTbGVlcHNWaWFBbmFseXRpY3MgPSBhc3luYyAoXG4gIGFuYWx5dGljczogTm9uTnVsbGFibGU8V29ybGRbJ2FuYWx5dGljcyddPixcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBmZXRjaFNsZWVwc1BhZ2UgPSBhc3luYyAoXG4gICAgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQYWdlRGF0YTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+ID0+IHtcbiAgICBjb25zdCB3YWl0cyA9IGF3YWl0IGFuYWx5dGljcy53YWl0cy5saXN0KHtcbiAgICAgIHJ1bklkOiBvcHRzLnJ1bklkIGFzIHN0cmluZyxcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgc29ydE9yZGVyOiBvcHRzLnNvcnQgfHwgJ2Rlc2MnLFxuICAgICAgICBjdXJzb3IsXG4gICAgICAgIGxpbWl0OiBvcHRzLmxpbWl0IHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB3YWl0cy5kYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICAgIGN1cnNvcjogd2FpdHMuY3Vyc29yLFxuICAgICAgaGFzTW9yZTogd2FpdHMuaGFzTW9yZSxcbiAgICAgIHBhZ2VJbmZvOiBnZXRQYWdlSW5mbyh3YWl0cyksXG4gICAgfTtcbiAgfTtcblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoU2xlZXBzUGFnZShvcHRzLmN1cnNvcik7XG4gICAgc2hvd0pzb24ocGFnZS5kYXRhKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBzZXR1cExpc3RQYWdpbmF0aW9uPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7XG4gICAgaW5pdGlhbEN1cnNvcjogb3B0cy5jdXJzb3IsXG4gICAgaW50ZXJhY3RpdmU6IG9wdHMuaW50ZXJhY3RpdmUsXG4gICAgZmV0Y2hQYWdlOiBmZXRjaFNsZWVwc1BhZ2UsXG4gICAgZGlzcGxheVBhZ2U6IGFzeW5jICh3YWl0cykgPT4ge1xuICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgc2hvd1RhYmxlKFxuICAgICAgICAgIHdhaXRzLFxuICAgICAgICAgIFsnd2FpdElkJywgJ3N0YXR1cycsICdjcmVhdGVkQXQnLCAncmVzdW1lQXQnLCAnY29tcGxldGVkQXQnXSxcbiAgICAgICAgICB7IC4uLm9wdHMsIGRpc2FibGVSZWxhdGl2ZURhdGVzOiB0cnVlIH1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaXN0U2xlZXBzID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIG9wdHM6IEluc3BlY3RDTElPcHRpb25zID0ge31cbikgPT4ge1xuICBpZiAoIW9wdHMucnVuSWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAncnVuLWlkIGlzIHJlcXVpcmVkIGZvciBsaXN0aW5nIHNsZWVwcy4gVXNhZ2U6IGB3b3JrZmxvdyBpbnNwZWN0IHNsZWVwcyAtLXJ1bklkPTxpZD5gJ1xuICAgICk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgaWYgKG9wdHMuc3RlcElkKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHN0ZXAtaWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2xlZXBzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMud29ya2Zsb3dOYW1lKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRmlsdGVyaW5nIGJ5IHdvcmtmbG93LW5hbWUgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2xlZXBzLCBpZ25vcmluZyBmaWx0ZXIuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG9wdHMud2l0aERhdGEpIHtcbiAgICBsb2dnZXIud2FybignYHdpdGhEYXRhYCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBsaXN0aW5nIHNsZWVwcycpO1xuICB9XG5cbiAgLy8gUHJlZmVyIHRoZSBhbmFseXRpY3MgcmVhZCBwYXRoIGZvciB3YWl0L3NsZWVwIGxpc3Rpbmcgd2hlbiBhdmFpbGFibGUuXG4gIGlmICh3b3JsZC5hbmFseXRpY3MpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbGlzdFNsZWVwc1ZpYUFuYWx5dGljcyh3b3JsZC5hbmFseXRpY3MsIG9wdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaGFuZGxlQXBpRXJyb3IoZXJyb3IsIG9wdHMuYmFja2VuZCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBGZXRjaCBhbGwgZXZlbnRzIGZvciB0aGUgcnVuIHdpdGggcmVzb2x2ZURhdGE9J2FsbCcgdG8gZ2V0IHdhaXQgZXZlbnREYXRhXG4gICAgY29uc3QgZXZlbnRzID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgcnVuSWQ6IG9wdHMucnVuSWQsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogb3B0cy5zb3J0IHx8ICdkZXNjJyxcbiAgICAgICAgbGltaXQ6IDEwMDAsXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgIH0pO1xuXG4gICAgLy8gU2hvdyBpbmZvIG1lc3NhZ2UgaWYgdGhlcmUgbWlnaHQgYmUgbW9yZSBzbGVlcHNcbiAgICBpZiAoZXZlbnRzLmhhc01vcmUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAnV2FybmluZzogVGhpcyBydW4gaGFzIG1vcmUgdGhhbiAxMDAwIGV2ZW50cy4gU29tZSBzbGVlcHMgbWlnaHQgbm90IGJlIHNob3duLiBQbGVhc2UgdXNlIHRoZSB3ZWIgVUkgdG8gZW5zdXJlIGdldHRpbmcgYSBjb21wbGV0ZSBsaXN0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gR3JvdXAgd2FpdCBldmVudHMgYnkgY29ycmVsYXRpb25JZFxuICAgIGNvbnN0IHdhaXRFdmVudHNCeUNvcnJlbGF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50W10+KCk7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMuZGF0YSkge1xuICAgICAgaWYgKGlzV2FpdEV2ZW50VHlwZShldmVudC5ldmVudFR5cGUpICYmIGV2ZW50LmNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbi5nZXQoZXZlbnQuY29ycmVsYXRpb25JZCkgPz8gW107XG4gICAgICAgIGV4aXN0aW5nLnB1c2goZXZlbnQpO1xuICAgICAgICB3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbi5zZXQoZXZlbnQuY29ycmVsYXRpb25JZCwgZXhpc3RpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3YWl0RXZlbnRzQnlDb3JyZWxhdGlvbi5zaXplID09PSAwKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gc2xlZXBzIGZvdW5kIGZvciB0aGlzIHJ1bi4nKTtcbiAgICAgIGlmIChvcHRzLmpzb24pIHtcbiAgICAgICAgc2hvd0pzb24oW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgICBzaG93VGFibGUoW10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgV0FJVF9MSVNURURfUFJPUFMsIHtcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBkaXNhYmxlUmVsYXRpdmVEYXRlczogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHNsZWVwcyBmcm9tIGdyb3VwZWQgd2FpdCBldmVudHNcbiAgICBjb25zdCBzbGVlcHM6IFNsZWVwW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtjb3JyZWxhdGlvbklkLCBjb3JyZWxhdGlvbkV2ZW50c10gb2Ygd2FpdEV2ZW50c0J5Q29ycmVsYXRpb24pIHtcbiAgICAgIC8vIFN0aXRjaCB1cCB3YWl0X2NyZWF0ZWQgYW5kIHdhaXRfY29tcGxldGVkIGV2ZW50c1xuICAgICAgY29uc3Qgd2FpdENyZWF0ZWQgPSBjb3JyZWxhdGlvbkV2ZW50cy5maW5kKFxuICAgICAgICAoZTogRXZlbnQpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHdhaXRDb21wbGV0ZWQgPSBjb3JyZWxhdGlvbkV2ZW50cy5maW5kKFxuICAgICAgICAoZTogRXZlbnQpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnXG4gICAgICApO1xuXG4gICAgICBpZiAod2FpdENyZWF0ZWQpIHtcbiAgICAgICAgY29uc3Qgc2xlZXA6IFNsZWVwID0ge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgcnVuSWQ6IHdhaXRDcmVhdGVkLnJ1bklkLFxuICAgICAgICAgIGV2ZW50SWQ6IHdhaXRDcmVhdGVkLmV2ZW50SWQsXG4gICAgICAgICAgY3JlYXRlZEF0OiB3YWl0Q3JlYXRlZC5jcmVhdGVkQXQsXG4gICAgICAgICAgcmVzdW1lQXQ6XG4gICAgICAgICAgICB3YWl0Q3JlYXRlZC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnXG4gICAgICAgICAgICAgID8gd2FpdENyZWF0ZWQuZXZlbnREYXRhLnJlc3VtZUF0XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiB3YWl0Q29tcGxldGVkPy5jcmVhdGVkQXQsXG4gICAgICAgIH07XG4gICAgICAgIHNsZWVwcy5wdXNoKHNsZWVwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IHNsZWVwcyBieSBjcmVhdGVkQXRcbiAgICBzbGVlcHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdGltZUEgPSBhLmNyZWF0ZWRBdC5nZXRUaW1lKCk7XG4gICAgICBjb25zdCB0aW1lQiA9IGIuY3JlYXRlZEF0LmdldFRpbWUoKTtcbiAgICAgIHJldHVybiBvcHRzLnNvcnQgPT09ICdhc2MnID8gdGltZUEgLSB0aW1lQiA6IHRpbWVCIC0gdGltZUE7XG4gICAgfSk7XG5cbiAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICBzaG93SnNvbihzbGVlcHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coXG4gICAgICBzaG93VGFibGUoXG4gICAgICAgIHNsZWVwcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgICAgIFdBSVRfTElTVEVEX1BST1BTLFxuICAgICAgICB7IC4uLm9wdHMsIGRpc2FibGVSZWxhdGl2ZURhdGVzOiB0cnVlIH1cbiAgICAgIClcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChoYW5kbGVBcGlFcnJvcihlcnJvciwgb3B0cy5iYWNrZW5kKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/cli",
3
- "version": "5.0.0-beta.29",
3
+ "version": "5.0.0-beta.30",
4
4
  "description": "Command-line interface for Workflow SDK",
5
5
  "type": "module",
6
6
  "bin": {
@@ -55,15 +55,15 @@
55
55
  "tinyglobby": "0.2.17",
56
56
  "xdg-app-paths": "5.1.0",
57
57
  "zod": "~4.3.6",
58
- "@workflow/builders": "5.0.0-beta.29",
59
- "@workflow/core": "5.0.0-beta.29",
58
+ "@workflow/builders": "5.0.0-beta.30",
59
+ "@workflow/core": "5.0.0-beta.30",
60
60
  "@workflow/errors": "5.0.0-beta.10",
61
61
  "@workflow/swc-plugin": "5.0.0-beta.5",
62
62
  "@workflow/utils": "5.0.0-beta.6",
63
- "@workflow/web": "5.0.0-beta.29",
64
- "@workflow/world": "5.0.0-beta.17",
65
- "@workflow/world-local": "5.0.0-beta.25",
66
- "@workflow/world-vercel": "5.0.0-beta.25"
63
+ "@workflow/web": "5.0.0-beta.30",
64
+ "@workflow/world": "5.0.0-beta.18",
65
+ "@workflow/world-local": "5.0.0-beta.26",
66
+ "@workflow/world-vercel": "5.0.0-beta.26"
67
67
  },
68
68
  "scripts": {
69
69
  "build": "tsc && chmod +x bin/run.js",