@workflow/next 5.0.0-beta.43 → 5.0.0-beta.44

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":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAqCA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,gBA+tBrD"}
1
+ {"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AA4BA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,gBAquBrD"}
@@ -19,7 +19,7 @@ async function getNextBuilderEager(buildersModule) {
19
19
  if (CachedNextBuilderEager) {
20
20
  return CachedNextBuilderEager;
21
21
  }
22
- const { BaseBuilder: BaseBuilderClass, getWorkflowQueueTrigger, detectWorkflowPatterns, parentHasChild, } = buildersModule ??
22
+ const { BaseBuilder: BaseBuilderClass, getWorkflowQueueTrigger, detectWorkflowPatterns, parentHasChild, writeFileIfChanged, } = buildersModule ??
23
23
  (await importEsm('@workflow/builders'));
24
24
  class NextBuilder extends BaseBuilderClass {
25
25
  async build() {
@@ -34,7 +34,7 @@ async function getNextBuilderEager(buildersModule) {
34
34
  force: true,
35
35
  });
36
36
  }
37
- await (0, promises_1.writeFile)((0, node_path_1.join)(workflowGeneratedDir, '.gitignore'), '*');
37
+ await writeFileIfChanged((0, node_path_1.join)(workflowGeneratedDir, '.gitignore'), '*');
38
38
  const inputFiles = await this.getInputFiles();
39
39
  const tsconfigPath = await this.findTsConfigPath();
40
40
  const options = {
@@ -63,9 +63,11 @@ async function getNextBuilderEager(buildersModule) {
63
63
  const publicManifestDir = (0, node_path_1.join)(this.config.workingDir, 'public/.well-known/workflow/v1');
64
64
  await (0, promises_1.mkdir)(publicManifestDir, { recursive: true });
65
65
  if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {
66
- await (0, promises_1.writeFile)((0, node_path_1.join)(publicManifestDir, '.gitignore'), '*');
66
+ await writeFileIfChanged((0, node_path_1.join)(publicManifestDir, '.gitignore'), '*');
67
67
  }
68
- await (0, promises_1.copyFile)((0, node_path_1.join)(workflowGeneratedDir, 'manifest.json'), (0, node_path_1.join)(publicManifestDir, 'manifest.json'));
68
+ // Written from the same string rather than copied, so an unchanged
69
+ // manifest leaves the public copy untouched too.
70
+ await writeFileIfChanged((0, node_path_1.join)(publicManifestDir, 'manifest.json'), manifestJson);
69
71
  }
70
72
  };
71
73
  await writeManifest(combinedResult?.manifest);
@@ -305,7 +307,7 @@ async function getNextBuilderEager(buildersModule) {
305
307
  };
306
308
  // Known gap: the initial build has the same two-read shape (the
307
309
  // combined build above consumed sources, and this refresh re-reads
308
- // them), but no pinning and the watcher below attaches with
310
+ // them), but no pinning, and the watcher below attaches with
309
311
  // `ignoreInitial: true`, so an edit landing inside the startup window
310
312
  // is absorbed with no straggler event to recover it. Bounded by dev
311
313
  // server startup rather than recurring per rebuild; knowingly out of
@@ -507,7 +509,7 @@ async function getNextBuilderEager(buildersModule) {
507
509
  experimentalTriggers: [getWorkflowQueueTrigger()],
508
510
  },
509
511
  };
510
- await (0, promises_1.writeFile)((0, node_path_1.join)(outputDir, '.well-known/workflow/v1/config.json'), JSON.stringify(generatedConfig, null, 2));
512
+ await writeFileIfChanged((0, node_path_1.join)(outputDir, '.well-known/workflow/v1/config.json'), JSON.stringify(generatedConfig, null, 2));
511
513
  }
512
514
  /**
513
515
  * V2: Build combined route that handles both workflow and step execution.
@@ -580,4 +582,4 @@ async function getNextBuilderEager(buildersModule) {
580
582
  CachedNextBuilderEager = NextBuilder;
581
583
  return NextBuilder;
582
584
  }
583
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBcUNBLGtEQWd1QkM7QUFyd0JELHFDQUFpRDtBQUNqRCwrQ0FTMEI7QUFDMUIseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx1REFBK0Q7QUFDL0QseURBUTRCO0FBRTVCLElBQUksc0JBQTJCLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUV2RCxDQUFDO0FBRWhCLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQzdELEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsY0FBb0Q7SUFFcEQsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sRUFDSixXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsY0FBYyxHQUNmLEdBQUcsY0FBYztRQUNsQixDQUFDLE1BQU0sU0FBUyxDQUFzQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxXQUFZLFNBQVEsZ0JBQWdCO1FBTXhDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLG9CQUFvQixHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUV4RSxrQ0FBa0M7WUFDbEMsTUFBTSxJQUFBLGdCQUFLLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsb0VBQW9FO2dCQUNwRSxNQUFN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QUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoQywrQ0FBK0M7Z0JBQy9DLE1BQU0sSUFBQSxnQkFBSyxFQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNuQyx1REFBdUQ7Z0JBQ3ZELE1BQU0sSUFBQSxnQkFBSyxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUVELHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUNyQyxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzLCB0eXBlIERpcmVudCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgYWNjZXNzLFxuICBjb3B5RmlsZSxcbiAgbWtkaXIsXG4gIHJlYWRkaXIsXG4gIHJlYWxwYXRoLFxuICBybSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGV4dG5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHtcbiAgTmV4dENvbmZpZyBhcyBCdWlsZGVyTmV4dENvbmZpZyxcbiAgV29ya2Zsb3dNYW5pZmVzdCxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCBjaG9raWRhciBmcm9tICdjaG9raWRhcic7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgYXMgUHJvamVjdE5leHRDb25maWcgfSBmcm9tICduZXh0JztcbmltcG9ydCB7IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlIH0gZnJvbSAnLi93YXRjaC1pZ25vcmUuanMnO1xuaW1wb3J0IHtcbiAgY2xhc3NpZnlSZWJ1aWxkLFxuICBjcmVhdGVTb3VyY2VTbmFwc2hvdCxcbiAgdHlwZSBGaWxlQ2hhbmdlcyxcbiAgZ2V0UmVsZXZhbnRGaWxlcyxcbiAgcGluQmFzZWxpbmVzQWNyb3NzRnVsbFJlYnVpbGQsXG4gIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMsXG4gIHR5cGUgU291cmNlU25hcHNob3QsXG59IGZyb20gJy4vd2F0Y2gtcmVidWlsZC5qcyc7XG5cbmxldCBDYWNoZWROZXh0QnVpbGRlckVhZ2VyOiBhbnk7XG5jb25zdCBpbXBvcnRFc20gPSBuZXcgRnVuY3Rpb24oJ3NwZWNpZmllcicsICdyZXR1cm4gaW1wb3J0KHNwZWNpZmllciknKSBhcyA8VD4oXG4gIHNwZWNpZmllcjogc3RyaW5nXG4pID0+IFByb21pc2U8VD47XG5cbi8vIENyZWF0ZSB0aGUgZWFnZXIgTmV4dCBidWlsZGVyIGR5bmFtaWNhbGx5IGJ5IGV4dGVuZGluZyB0aGUgRVNNIEJhc2VCdWlsZGVyLlxuLy8gRXhwb3J0ZWQgYXMgZ2V0TmV4dEJ1aWxkZXJFYWdlcigpIHRvIGFsbG93IENvbW1vbkpTIG1vZHVsZXMgdG8gaW1wb3J0IGZyb21cbi8vIHRoZSBFU00gQHdvcmtmbG93L2J1aWxkZXJzIHBhY2thZ2UgdmlhIGR5bmFtaWMgaW1wb3J0IGF0IHJ1bnRpbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TmV4dEJ1aWxkZXJFYWdlcihcbiAgYnVpbGRlcnNNb2R1bGU/OiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKVxuKSB7XG4gIGlmIChDYWNoZWROZXh0QnVpbGRlckVhZ2VyKSB7XG4gICAgcmV0dXJuIENhY2hlZE5leHRCdWlsZGVyRWFnZXI7XG4gIH1cblxuICBjb25zdCB7XG4gICAgQmFzZUJ1aWxkZXI6IEJhc2VCdWlsZGVyQ2xhc3MsXG4gICAgZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIsXG4gICAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbiAgICBwYXJlbnRIYXNDaGlsZCxcbiAgfSA9IGJ1aWxkZXJzTW9kdWxlID8/XG4gIChhd2FpdCBpbXBvcnRFc208dHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJyk+KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSk7XG5cbiAgY2xhc3MgTmV4dEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlckNsYXNzIHtcbiAgICBwcm90ZWN0ZWQgZGVjbGFyZSBjb25maWc6IEJ1aWxkZXJOZXh0Q29uZmlnICYge1xuICAgICAgcGFnZUV4dGVuc2lvbnM6IE5vbk51bGxhYmxlPFByb2plY3ROZXh0Q29uZmlnWydwYWdlRXh0ZW5zaW9ucyddPjtcbiAgICAgIGRpc3REaXI6IHN0cmluZztcbiAgICB9O1xuXG4gICAgYXN5bmMgYnVpbGQoKSB7XG4gICAgICBjb25zdCBvdXRwdXREaXIgPSBhd2FpdCB0aGlzLmZpbmRBcHBEaXJlY3RvcnkoKTtcbiAgICAgIGNvbnN0IHdvcmtmbG93R2VuZXJhdGVkRGlyID0gam9pbihvdXRwdXREaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuXG4gICAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgICBhd2FpdCBta2Rpcih3b3JrZmxvd0dlbmVyYXRlZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFByb2R1Y3Rpb24gYnVpbGQgY2FjaGVzIG1heSBzdGlsbCBjb250YWluIHRoZSByZXRpcmVkIHN0ZXAgcm91dGUuXG4gICAgICAgIGF3YWl0IHJtKGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdzdGVwJyksIHtcbiAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG5cbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfTtcblxuICAgICAgLy8gVjI6IEJ1aWxkIGNvbWJpbmVkIHJvdXRlIChyZXBsYWNlcyBzZXBhcmF0ZSBzdGVwICsgZmxvdyByb3V0ZXMpXG4gICAgICBjb25zdCBjb21iaW5lZFJlc3VsdCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tSb3V0ZSh7IHdvcmtmbG93R2VuZXJhdGVkRGlyIH0pO1xuXG4gICAgICBjb25zdCB3cml0ZU1hbmlmZXN0ID0gYXN5bmMgKFxuICAgICAgICBzb3VyY2VNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCB8IHVuZGVmaW5lZFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgICAgICAgIHN0ZXBzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5zdGVwcyB9LFxuICAgICAgICAgIHdvcmtmbG93czogeyAuLi5zb3VyY2VNYW5pZmVzdD8ud29ya2Zsb3dzIH0sXG4gICAgICAgICAgY2xhc3NlczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uY2xhc3NlcyB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdyaXRlIG1hbmlmZXN0XG4gICAgICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93L3JvdXRlLmpzJyk7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0SnNvbiA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgICAgIGlmICh0aGlzLnNob3VsZEV4cG9zZVB1YmxpY01hbmlmZXN0ICYmIG1hbmlmZXN0SnNvbikge1xuICAgICAgICAgIGNvbnN0IHB1YmxpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgICAgICAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIocHVibGljTWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihwdWJsaWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgICAgICBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnbWFuaWZlc3QuanNvbicpLFxuICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJ21hbmlmZXN0Lmpzb24nKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QoY29tYmluZWRSZXN1bHQ/Lm1hbmlmZXN0KTtcblxuICAgICAgYXdhaXQgdGhpcy53cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHdhdGNoIG1vZGUgZm9yIGNvbWJpbmVkIGJ1bmRsZVxuICAgICAgICAvLyBGb3Igbm93LCBmYWxsIGJhY2sgdG8gZnVsbCByZWJ1aWxkIG9uIGZpbGUgY2hhbmdlc1xuICAgICAgICBpZiAoIWNvbWJpbmVkUmVzdWx0Py5pbnRlcmltQnVuZGxlQ3R4IHx8ICFjb21iaW5lZFJlc3VsdC5idW5kbGVGaW5hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IGJ1aWxkIGNvbnRleHQgaW4gd2F0Y2ggbW9kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCByZWdpc3RyYXRpb25zIG1heSBiZSBlbWl0dGVkIGFzIHNvdXJjZSBpbXBvcnRzIHdpdGhvdXQgYW5cbiAgICAgICAgLy8gZXNidWlsZCBjb250ZXh0IHdoZW4gZXh0ZXJuYWxpemVOb25TdGVwcyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgc3RlcHNDdHggPSBjb21iaW5lZFJlc3VsdC5zdGVwc0NvbnRleHQ7XG4gICAgICAgIGxldCB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogY29tYmluZWRSZXN1bHQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICBidW5kbGVGaW5hbDogY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkaXNjb3ZlcmVkRW50cmllcyA9IGNvbWJpbmVkUmVzdWx0LmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICBsZXQgc3RlcHNNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LnN0ZXBzTWFuaWZlc3Q7XG4gICAgICAgIGxldCB3b3JrZmxvd3NNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LndvcmtmbG93c01hbmlmZXN0O1xuICAgICAgICBjb25zdCBzdGVwc091dGZpbGUgPSBqb2luKFxuICAgICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgICdmbG93JyxcbiAgICAgICAgICAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgIChpc0Fic29sdXRlKHBhdGhuYW1lKVxuICAgICAgICAgICAgPyBwYXRobmFtZVxuICAgICAgICAgICAgOiByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHBhdGhuYW1lKVxuICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBjb25zdCBzb3VyY2VTbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hhYmxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQoW1xuICAgICAgICAgICcuanMnLFxuICAgICAgICAgICcuanN4JyxcbiAgICAgICAgICAnLnRzJyxcbiAgICAgICAgICAnLnRzeCcsXG4gICAgICAgICAgJy5tdHMnLFxuICAgICAgICAgICcuY3RzJyxcbiAgICAgICAgICAnLmNqcycsXG4gICAgICAgICAgJy5tanMnLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERpc3REaXIgPSBub3JtYWxpemVQYXRoKHRoaXMuY29uZmlnLmRpc3REaXIpO1xuXG4gICAgICAgIC8vIFBydW5lIHRoZSBkZXYgd2F0Y2ggc2V0IHRvIGtlZXAgY2hva2lkYXIgZnJvbSByZWdpc3RlcmluZyBhblxuICAgICAgICAvLyBmcy53YXRjaCBwZXIgZGlyZWN0b3J5IGFjcm9zcyB0aGUgd2hvbGUgcHJvamVjdCB0cmVlIChjaG9raWRhciA0XG4gICAgICAgIC8vIGRyb3BwZWQgZnNldmVudHMsIHNvIG9uIG1hY09TIHRoYXQgZXhoYXVzdHMgdGhlIGZkIGxpbWl0IC0+IEVNRklMRVxuICAgICAgICAvLyBvbiBsYXJnZSBtb25vcmVwb3MpLiBUaGlzIGhvbm9ycyBgLmdpdGlnbm9yZWAgYW5kIHRoZVxuICAgICAgICAvLyBXT1JLRkxPV19ERVZfV0FUQ0hfSUdOT1JFRF9QQVRIUyBlbnYgdmFyIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgICAgICAvLyBidWlsdC1pbiBmcmFnbWVudHMuIFRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyIGlzIHBhc3NlZCBhcyBhblxuICAgICAgICAvLyBleHRyYSBmcmFnbWVudCBzbyBpdCBpcyBwcnVuZWQgcmVnYXJkbGVzcyBvZiBgLmdpdGlnbm9yZWAuXG4gICAgICAgIGNvbnN0IGlzSWdub3JlZFdhdGNoUGF0aCA9IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKHtcbiAgICAgICAgICB3b3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIGV4dHJhRnJhZ21lbnRzOiBbbm9ybWFsaXplZEdlbmVyYXRlZERpcl0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQgPSAobm9ybWFsaXplZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID09PSBub3JtYWxpemVkRGlzdERpciB8fFxuICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChgJHtub3JtYWxpemVkRGlzdERpcn0vYClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXNJZ25vcmVkV2F0Y2hQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcmVidWlsZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3QgZW5xdWV1ZSA9ICh0YXNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgICAgICAgcmVidWlsZFF1ZXVlID0gcmVidWlsZFF1ZXVlLnRoZW4odGFzaykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcHJvY2VzcyBmaWxlIGNoYW5nZScsIGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVidWlsZFF1ZXVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlYWRTb3VyY2VTbmFwc2hvdCA9IChmaWxlOiBzdHJpbmcpID0+XG4gICAgICAgICAgY3JlYXRlU291cmNlU25hcHNob3QoeyBmaWxlLCBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hTb3VyY2VTbmFwc2hvdHMgPSAoKSA9PlxuICAgICAgICAgIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VDb21iaW5lZE1hbmlmZXN0ID0gKFxuICAgICAgICAgIG5leHRTdGVwc01hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0XG4gICAgICAgICk6IFdvcmtmbG93TWFuaWZlc3QgPT4gKHtcbiAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdCxcbiAgICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICAgIC4uLndvcmtmbG93c01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LmNsYXNzZXMsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhvdFJlYnVpbGQgPSBhc3luYyAocmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHN0ZXBzQ3R4KSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0ZXBzQ3R4LnJlYnVpbGQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmNyZWF0ZVN0ZXBTb3VyY2VSZWdpc3RyYXRpb25GaWxlKHtcbiAgICAgICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICAgICAgb3V0ZmlsZTogc3RlcHNPdXRmaWxlLFxuICAgICAgICAgICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dPdXRwdXQgPSB3b3JrZmxvd1Jlc3VsdC5vdXRwdXRGaWxlcz8uWzBdPy50ZXh0O1xuICAgICAgICAgIGlmICghd29ya2Zsb3dPdXRwdXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3cgb3V0cHV0IGZyb20gaG90IHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHdvcmtmbG93c0N0eC5idW5kbGVGaW5hbCh3b3JrZmxvd091dHB1dCk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChtZXJnZUNvbWJpbmVkTWFuaWZlc3Qoc3RlcHNNYW5pZmVzdCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoZSBwaW4gaGVscGVyIG93bnMgdGhlIGNhcHR1cmUtYmVmb3JlLWJ1aWxkIC8gcmVzdG9yZS1hZnRlci1cbiAgICAgICAgLy8gcmVmcmVzaCBvcmRlcmluZyAoaW5jbHVkaW5nIHRoYXQgdGhlIGNhcHR1cmUgcmVhZHMgdGhlIENVUlJFTlRcbiAgICAgICAgLy8gZGlzY292ZXJlZCBlbnRyaWVzIGFuZCBpbnB1dCBmaWxlcywgYmVmb3JlIHRoZSByZWJ1aWxkIHJlcGxhY2VzXG4gICAgICAgIC8vIHRoZW0pLCBzbyBhbiBlZGl0IGxhbmRpbmcgd2hpbGUgdGhlIG11bHRpLXNlY29uZCByZWJ1aWxkIHJ1bnMgc3RpbGxcbiAgICAgICAgLy8gZGlmZnMgYWdhaW5zdCB3aGF0IHRoZSByZWJ1aWxkIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgYWJzb3JiZWRcbiAgICAgICAgLy8gaW50byB0aGUgcmVmcmVzaGVkIGJhc2VsaW5lLiBTZWUgYHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkYFxuICAgICAgICAvLyBmb3IgdGhlIGZ1bGwgcmVhc29uaW5nLlxuICAgICAgICBjb25zdCBmdWxsUmVidWlsZCA9ICgpID0+XG4gICAgICAgICAgcGluQmFzZWxpbmVzQWNyb3NzRnVsbFJlYnVpbGQoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgICByZWJ1aWxkOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJEaXNjb3ZlcmVkRW50cmllc0NhY2hlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgICAgICAgICAgb3B0aW9ucy5pbnB1dEZpbGVzID0gbmV3SW5wdXRGaWxlcztcblxuICAgICAgICAgICAgICBhd2FpdCBzdGVwc0N0eD8uZGlzcG9zZSgpO1xuICAgICAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgbmV3Q29tYmluZWQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgICAgc3RlcHNDdHggPSBuZXdDb21iaW5lZC5zdGVwc0NvbnRleHQ7XG4gICAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzID0gbmV3Q29tYmluZWQuZGlzY292ZXJlZEVudHJpZXM7XG4gICAgICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC5zdGVwc01hbmlmZXN0O1xuICAgICAgICAgICAgICB3b3JrZmxvd3NNYW5pZmVzdCA9IG5ld0NvbWJpbmVkLndvcmtmbG93c01hbmlmZXN0O1xuXG4gICAgICAgICAgICAgIGlmICghbmV3Q29tYmluZWQ/LmludGVyaW1CdW5kbGVDdHggfHwgIW5ld0NvbWJpbmVkPy5idW5kbGVGaW5hbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93cyBidW5kbGUgY29udGV4dCBhZnRlciByZWJ1aWxkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IG5ld0NvbWJpbmVkLmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgICAgICAgYnVuZGxlRmluYWw6IG5ld0NvbWJpbmVkLmJ1bmRsZUZpbmFsLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobmV3Q29tYmluZWQubWFuaWZlc3QpO1xuICAgICAgICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlzV2F0Y2hhYmxlRmlsZSA9IChwYXRoOiBzdHJpbmcpID0+XG4gICAgICAgICAgd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0bmFtZShwYXRoKSk7XG5cbiAgICAgICAgY29uc3QgcmVhZEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCBhbGlhc2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCByZWxldmFudEZpbGVzID0gZ2V0UmVsZXZhbnRGaWxlcyh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhZGRLbm93bkZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChmaWxlUGF0aCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gcmVsZXZhbnRGaWxlcy5oYXMocmVhbEZpbGVQYXRoKVxuICAgICAgICAgICAgICA/IHJlYWxGaWxlUGF0aFxuICAgICAgICAgICAgICA6IGZpbGVQYXRoO1xuICAgICAgICAgICAgZmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgYWxpYXNlcy5zZXQoZmlsZVBhdGgsIGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgYWxpYXNlcy5zZXQocmVhbEZpbGVQYXRoLCBjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxQYXRoO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB2aXNpdCA9IGFzeW5jIChkaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgbGV0IGRpcmVudHM6IERpcmVudDxzdHJpbmc+W107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkaXJlbnRzID0gYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBkaXJlbnRzLm1hcChhc3luYyAoZGlyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBkaXJlbnQubmFtZSkpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNJZ25vcmVkUGF0aEZyYWdtZW50KGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdmlzaXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzdGF0czogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBzdGF0Pj47XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHN0YXRzID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHZpc2l0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRzLmlzRmlsZSgpIHx8ICFpc1dhdGNoYWJsZUZpbGUoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkS25vd25GaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IHZpc2l0KHRoaXMuY29uZmlnLndvcmtpbmdEaXIpO1xuICAgICAgICAgIHJldHVybiB7IGZpbGVzLCBhbGlhc2VzLCBhZGRLbm93bkZpbGUgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZXJnZUZpbGVDaGFuZ2VzID0gKFxuICAgICAgICAgIGxlZnQ6IEZpbGVDaGFuZ2VzLFxuICAgICAgICAgIHJpZ2h0OiBGaWxlQ2hhbmdlc1xuICAgICAgICApOiBGaWxlQ2hhbmdlcyA9PiAoe1xuICAgICAgICAgIGFkZGVkRmlsZXM6IHVuaXF1ZShbLi4ubGVmdC5hZGRlZEZpbGVzLCAuLi5yaWdodC5hZGRlZEZpbGVzXSksXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLmxlZnQubW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIC4uLnJpZ2h0Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgXSksXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiB1bmlxdWUoWy4uLmxlZnQucmVtb3ZlZEZpbGVzLCAuLi5yaWdodC5yZW1vdmVkRmlsZXNdKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlID0gKHBhdGhzOiBzdHJpbmdbXSkgPT4gWy4uLm5ldyBTZXQocGF0aHMpXTtcblxuICAgICAgICBjb25zdCBjbGFzc2lmeUZpbGVDaGFuZ2VzID0gKHtcbiAgICAgICAgICBjaGFuZ2VkRmlsZXMsXG4gICAgICAgICAga25vd25GaWxlcyxcbiAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBjaGFuZ2VkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICAgIGtub3duRmlsZXM6IFNldDxzdHJpbmc+O1xuICAgICAgICAgIHJlbW92ZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgIH0pOiBGaWxlQ2hhbmdlcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkZWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBtb2RpZmllZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHVuaXF1ZShjaGFuZ2VkRmlsZXMpKSB7XG4gICAgICAgICAgICBpZiAoa25vd25GaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICBrbm93bkZpbGVzLmFkZChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcmVtb3ZlZEZpbGVzKSB7XG4gICAgICAgICAgICBrbm93bkZpbGVzLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShyZW1vdmVkRmlsZXMpLFxuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzRmlsZUNoYW5nZXMgPSAoe1xuICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IEZpbGVDaGFuZ2VzKSA9PlxuICAgICAgICAgIGFkZGVkRmlsZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHJlbW92ZWRGaWxlcy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBsb2dEZXZIbXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX0RFVl9ITVJfTE9HUyA9PT0gJzEnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gS25vd24gZ2FwOiB0aGUgaW5pdGlhbCBidWlsZCBoYXMgdGhlIHNhbWUgdHdvLXJlYWQgc2hhcGUgKHRoZVxuICAgICAgICAvLyBjb21iaW5lZCBidWlsZCBhYm92ZSBjb25zdW1lZCBzb3VyY2VzLCBhbmQgdGhpcyByZWZyZXNoIHJlLXJlYWRzXG4gICAgICAgIC8vIHRoZW0pLCBidXQgbm8gcGlubmluZyDigJQgYW5kIHRoZSB3YXRjaGVyIGJlbG93IGF0dGFjaGVzIHdpdGhcbiAgICAgICAgLy8gYGlnbm9yZUluaXRpYWw6IHRydWVgLCBzbyBhbiBlZGl0IGxhbmRpbmcgaW5zaWRlIHRoZSBzdGFydHVwIHdpbmRvd1xuICAgICAgICAvLyBpcyBhYnNvcmJlZCB3aXRoIG5vIHN0cmFnZ2xlciBldmVudCB0byByZWNvdmVyIGl0LiBCb3VuZGVkIGJ5IGRldlxuICAgICAgICAvLyBzZXJ2ZXIgc3RhcnR1cCByYXRoZXIgdGhhbiByZWN1cnJpbmcgcGVyIHJlYnVpbGQ7IGtub3dpbmdseSBvdXQgb2ZcbiAgICAgICAgLy8gc2NvcGUgZm9yIHRoZSBtaWQtcmVidWlsZCBwaW5uaW5nIGFib3ZlLlxuICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgZmlsZXM6IGtub3duRmlsZXMsXG4gICAgICAgICAgYWxpYXNlczoga25vd25GaWxlQWxpYXNlcyxcbiAgICAgICAgICBhZGRLbm93bkZpbGU6IHJlbWVtYmVyS25vd25GaWxlLFxuICAgICAgICB9ID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcblxuICAgICAgICBjb25zdCByZWZyZXNoS25vd25GaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0S25vd24gPSBhd2FpdCByZWFkS25vd25GaWxlcygpO1xuICAgICAgICAgIGtub3duRmlsZXMgPSBuZXh0S25vd24uZmlsZXM7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcyA9IG5leHRLbm93bi5hbGlhc2VzO1xuICAgICAgICAgIHJlbWVtYmVyS25vd25GaWxlID0gbmV4dEtub3duLmFkZEtub3duRmlsZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzRmlsZUNoYW5nZXMgPSBhc3luYyAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGF3YWl0IGNsYXNzaWZ5UmVidWlsZCh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdub25lJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBza2lwJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjaXNpb24ua2luZCA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IGZ1bGwgcmVkaXNjb3ZlcnknKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IGZ1bGxSZWJ1aWxkKCk7XG4gICAgICAgICAgICAgIGF3YWl0IHJlZnJlc2hLbm93bkZpbGVzKCk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyBMZXRzIGEgbG9nIHJlYWRlciB0ZWxsIFwicXVpZXRcIiBmcm9tIFwicmVidWlsZCBpbiBmbGlnaHRcIi5cbiAgICAgICAgICAgICAgLy8gVGhlIGUyZSBITVIgdGVzdHMgZHJhaW4tdG8tcXVpZXQgYmVmb3JlIGNvdW50aW5nIGxpbmVzLlxuICAgICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYnVpbGQgY29tcGxldGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dEZXZIbXIoXG4gICAgICAgICAgICBgd29ya2Zsb3cgZGV2IGhtcjogaG90IHJlYnVpbGQke2RlY2lzaW9uLnJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucyA/ICcgd2l0aCBzdGVwIHJlZ2lzdHJhdGlvbiByZWZyZXNoJyA6ICcnfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBob3RSZWJ1aWxkKGRlY2lzaW9uLnJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzKSB7XG4gICAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBTZWUgdGhlIG1hdGNoaW5nIGxpbmUgb24gdGhlIGZ1bGwgcGF0aCBhYm92ZS5cbiAgICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogcmVidWlsZCBjb21wbGV0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcGVuZGluZ0ZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiBbXSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgc2NoZWR1bGVGaWxlQ2hhbmdlcyA9IChmaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBwZW5kaW5nRmlsZUNoYW5nZXMgPSBtZXJnZUZpbGVDaGFuZ2VzKFxuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgZmlsZUNoYW5nZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmbHVzaFRpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gcGVuZGluZ0ZpbGVDaGFuZ2VzO1xuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0ge1xuICAgICAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmx1c2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4gcHJvY2Vzc0ZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKSk7XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVFeGlzdGluZ0V2ZW50UGF0aCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBrbm93blBhdGggPSBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgaWYgKGtub3duUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGtub3duUGF0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChub3JtYWxpemVkUGF0aCkpO1xuICAgICAgICAgICAgcmV0dXJuIGtub3duRmlsZUFsaWFzZXMuZ2V0KHJlYWxGaWxlUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVBZGRlZCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ1BhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGNvbnN0IHdhc0tub3duID0gZXhpc3RpbmdQYXRoID8ga25vd25GaWxlcy5oYXMoZXhpc3RpbmdQYXRoKSA6IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZW1lbWJlcktub3duRmlsZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAga25vd25GaWxlcy5hZGQoY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBhZGRlZEZpbGVzOiB3YXNLbm93biA/IFtdIDogW2Nhbm9uaWNhbFBhdGhdLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogd2FzS25vd24gPyBbY2Fub25pY2FsUGF0aF0gOiBbXSxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgocGF0aG5hbWUpO1xuICAgICAgICAgIGlmICghY2Fub25pY2FsUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2xhc3NpZnlGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBjaGFuZ2VkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICgha25vd25GaWxlQWxpYXNlcy5oYXMoY2Fub25pY2FsUGF0aCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbWVtYmVyS25vd25GaWxlKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlZHVsZUZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlUmVtb3ZlZCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID1cbiAgICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMuZ2V0KG5vcm1hbGl6ZWRQYXRoKSA/PyBub3JtYWxpemVkUGF0aDtcbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmRlbGV0ZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IGNob2tpZGFyLndhdGNoKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHtcbiAgICAgICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgICAgICAgIGZvbGxvd1N5bWxpbmtzOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZWQ6IChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKFN0cmluZyhwYXRobmFtZSkpO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uICYmICF3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoZXIub24oJ2FkZCcsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUFkZGVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2NoYW5nZScsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUNoYW5nZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbigndW5saW5rJywgKHBhdGhuYW1lKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRmlsZVJlbW92ZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdXb3JrZmxvdyBkZXYgd2F0Y2hlciBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogcmVhZHknKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldElucHV0RmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHN1cGVyLmdldElucHV0RmlsZXMoKTtcbiAgICAgIHJldHVybiBpbnB1dEZpbGVzLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlbGF0aXZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIGZpbGUpLnJlcGxhY2VBbGwoXG4gICAgICAgICAgJ1xcXFwnLFxuICAgICAgICAgICcvJ1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1hdGNoIEFwcCBSb3V0ZXIgcm91dGUsIHBhZ2UsIGFuZCBsYXlvdXQgZW50cnlwb2ludHMgaW4gYXBwLyBvciBzcmMvYXBwLy5cbiAgICAgICAgaWYgKC9eKD86YXBwfHNyY1xcL2FwcClcXC8oPzouKlxcLyk/KD86cm91dGV8cGFnZXxsYXlvdXQpXFwuLy50ZXN0KGVudHJ5KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWF0Y2ggZXZlcnkgUGFnZXMgUm91dGVyIGVudHJ5cG9pbnQgaW4gcGFnZXMvIG9yIHNyYy9wYWdlcy8uXG4gICAgICAgIGlmICgvXig/OnBhZ2VzfHNyY1xcL3BhZ2VzKVxcLy8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIE5leHQuanMgcm9vdCBlbnRyeXBvaW50cyBhdCB0aGUgcHJvamVjdCByb290IG9yIHVuZGVyIHNyYy8uXG4gICAgICAgIHJldHVybiBbJ2luc3RydW1lbnRhdGlvbicsICdtaWRkbGV3YXJlJywgJ3Byb3h5J10uc29tZSgobmFtZSkgPT5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5wYWdlRXh0ZW5zaW9ucy5zb21lKFxuICAgICAgICAgICAgKGV4dGVuc2lvbikgPT5cbiAgICAgICAgICAgICAgZW50cnkgPT09IGAke25hbWV9LiR7ZXh0ZW5zaW9ufWAgfHxcbiAgICAgICAgICAgICAgZW50cnkgPT09IGBzcmMvJHtuYW1lfS4ke2V4dGVuc2lvbn1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXI6IHN0cmluZykge1xuICAgICAgLy8gd2UgZG9uJ3QgcnVuIHRoaXMgaW4gZGV2ZWxvcG1lbnQgbW9kZSBhcyBpdCdzIG5vdCBuZWVkZWRcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFYyIGNvbWJpbmVkIGNvbmZpZzogc2luZ2xlIHRyaWdnZXIgaGFuZGxlcyBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJvdXRlIG5vIGxvbmdlciBuZWVkcyBpdHMgb3duIHRyaWdnZXIgc2luY2Ugc3RlcHMgYXJlIGV4ZWN1dGVkXG4gICAgICAvLyBpbmxpbmUgYnkgdGhlIGNvbWJpbmVkIGhhbmRsZXIgb3IgcXVldWVkIGJhY2sgdG8gX193a2Zfd29ya2Zsb3dfKiB3aXRoIHN0ZXBJZC5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZENvbmZpZyA9IHtcbiAgICAgICAgdmVyc2lvbjogJzAnLFxuICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICBtYXhEdXJhdGlvbjogJ21heCcsXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgam9pbihvdXRwdXREaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MS9jb25maWcuanNvbicpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShnZW5lcmF0ZWRDb25maWcsIG51bGwsIDIpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSB0aGF0IGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZENvbWJpbmVkRnVuY3Rpb24oe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH06IHtcbiAgICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICAgIHRzY29uZmlnUGF0aD86IHN0cmluZztcbiAgICB9KSB7XG4gICAgICBjb25zdCBmbG93Um91dGVEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdycpO1xuICAgICAgYXdhaXQgbWtkaXIoZmxvd1JvdXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlQ29tYmluZWRCdW5kbGUoe1xuICAgICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICBzdGVwc091dGZpbGU6IGpvaW4oZmxvd1JvdXRlRGlyLCAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnKSxcbiAgICAgICAgZmxvd091dGZpbGU6IGpvaW4oZmxvd1JvdXRlRGlyLCAncm91dGUuanMnKSxcbiAgICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IGZhbHNlLFxuICAgICAgICBleHRlcm5hbGl6ZU5vblN0ZXBzOiB0cnVlLFxuICAgICAgICBzb3VyY2VTdGVwUmVnaXN0cmF0aW9uSW1wb3J0czogdHJ1ZSxcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZFdlYmhvb2tSb3V0ZSh7XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICB9OiB7XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcjogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSb3V0ZUZpbGUgPSBqb2luKFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgJ3dlYmhvb2svW3Rva2VuXS9yb3V0ZS5qcydcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgICBvdXRmaWxlOiB3ZWJob29rUm91dGVGaWxlLFxuICAgICAgICBidW5kbGU6IGZhbHNlLCAvLyBOZXh0LmpzIGRvZXNuJ3QgbmVlZCBidW5kbGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kQXBwRGlyZWN0b3J5KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBjb25zdCBhcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdhcHAnKTtcbiAgICAgIGNvbnN0IHNyY0FwcERpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9hcHAnKTtcbiAgICAgIGNvbnN0IHBhZ2VzRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAncGFnZXMnKTtcbiAgICAgIGNvbnN0IHNyY1BhZ2VzRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnc3JjL3BhZ2VzJyk7XG5cbiAgICAgIC8vIEhlbHBlciB0byBjaGVjayBpZiBhIHBhdGggZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeVxuICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBhc3luYyAocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5GX09LKTtcbiAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7cGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZS5pbmNsdWRlcygnbm90IGEgZGlyZWN0b3J5JykpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgaWYgYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShhcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBhcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHNyYy9hcHAgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY0FwcERpcikpIHtcbiAgICAgICAgcmV0dXJuIHNyY0FwcERpcjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gYXBwIGRpcmVjdG9yeSBleGlzdHMsIGNoZWNrIGZvciBwYWdlcyBkaXJlY3RvcnkgYW5kIGNyZWF0ZSBhcHAgbmV4dCB0byBpdFxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHBhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgYXBwIGRpcmVjdG9yeSBuZXh0IHRvIHBhZ2VzIGRpcmVjdG9yeVxuICAgICAgICBhd2FpdCBta2RpcihhcHBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3Rvcnkoc3JjUGFnZXNEaXIpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBzcmMvYXBwIGRpcmVjdG9yeSBuZXh0IHRvIHNyYy9wYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoc3JjQXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHNyY0FwcERpcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgTmV4dC5qcyBhcHAgb3IgcGFnZXMgZGlyZWN0b3J5LiBFeHBlY3RlZCBvbmUgb2Y6IFwiYXBwXCIsIFwic3JjL2FwcFwiLCBcInBhZ2VzXCIsIG9yIFwic3JjL3BhZ2VzXCIgdG8gZXhpc3QuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBDYWNoZWROZXh0QnVpbGRlckVhZ2VyID0gTmV4dEJ1aWxkZXI7XG4gIHJldHVybiBOZXh0QnVpbGRlcjtcbn1cbiJdfQ==
585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNEJBLGtEQXN1QkM7QUFsd0JELHFDQUFpRDtBQUNqRCwrQ0FBOEU7QUFDOUUseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx1REFBK0Q7QUFDL0QseURBUTRCO0FBRTVCLElBQUksc0JBQTJCLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUV2RCxDQUFDO0FBRWhCLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQzdELEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsY0FBb0Q7SUFFcEQsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sRUFDSixXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLGtCQUFrQixHQUNuQixHQUFHLGNBQWM7UUFDbEIsQ0FBQyxNQUFNLFNBQVMsQ0FBc0Msb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sV0FBWSxTQUFRLGdCQUFnQjtRQU14QyxLQUFLLENBQUMsS0FBSztZQUNULE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFBLGdCQUFJLEVBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFFeEUsa0NBQWtDO1lBQ2xDLE1BQU0sSUFBQSxnQkFBSyxFQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLG9FQUFv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QUUsQ0FBQztnQkFDOUIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoQywrQ0FBK0M7Z0JBQy9DLE1BQU0sSUFBQSxnQkFBSyxFQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNuQyx1REFBdUQ7Z0JBQ3ZELE1BQU0sSUFBQSxnQkFBSyxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUVELHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUNyQyxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzLCB0eXBlIERpcmVudCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBta2RpciwgcmVhZGRpciwgcmVhbHBhdGgsIHJtLCBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBleHRuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7XG4gIE5leHRDb25maWcgYXMgQnVpbGRlck5leHRDb25maWcsXG4gIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgY2hva2lkYXIgZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIGFzIFByb2plY3ROZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgeyBjcmVhdGVXYXRjaElnbm9yZVByZWRpY2F0ZSB9IGZyb20gJy4vd2F0Y2gtaWdub3JlLmpzJztcbmltcG9ydCB7XG4gIGNsYXNzaWZ5UmVidWlsZCxcbiAgY3JlYXRlU291cmNlU25hcHNob3QsXG4gIHR5cGUgRmlsZUNoYW5nZXMsXG4gIGdldFJlbGV2YW50RmlsZXMsXG4gIHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkLFxuICByZXBsYWNlU291cmNlU25hcHNob3RzLFxuICB0eXBlIFNvdXJjZVNuYXBzaG90LFxufSBmcm9tICcuL3dhdGNoLXJlYnVpbGQuanMnO1xuXG5sZXQgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjogYW55O1xuY29uc3QgaW1wb3J0RXNtID0gbmV3IEZ1bmN0aW9uKCdzcGVjaWZpZXInLCAncmV0dXJuIGltcG9ydChzcGVjaWZpZXIpJykgYXMgPFQ+KFxuICBzcGVjaWZpZXI6IHN0cmluZ1xuKSA9PiBQcm9taXNlPFQ+O1xuXG4vLyBDcmVhdGUgdGhlIGVhZ2VyIE5leHQgYnVpbGRlciBkeW5hbWljYWxseSBieSBleHRlbmRpbmcgdGhlIEVTTSBCYXNlQnVpbGRlci5cbi8vIEV4cG9ydGVkIGFzIGdldE5leHRCdWlsZGVyRWFnZXIoKSB0byBhbGxvdyBDb21tb25KUyBtb2R1bGVzIHRvIGltcG9ydCBmcm9tXG4vLyB0aGUgRVNNIEB3b3JrZmxvdy9idWlsZGVycyBwYWNrYWdlIHZpYSBkeW5hbWljIGltcG9ydCBhdCBydW50aW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE5leHRCdWlsZGVyRWFnZXIoXG4gIGJ1aWxkZXJzTW9kdWxlPzogdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJylcbikge1xuICBpZiAoQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcikge1xuICAgIHJldHVybiBDYWNoZWROZXh0QnVpbGRlckVhZ2VyO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIEJhc2VCdWlsZGVyOiBCYXNlQnVpbGRlckNsYXNzLFxuICAgIGdldFdvcmtmbG93UXVldWVUcmlnZ2VyLFxuICAgIGRldGVjdFdvcmtmbG93UGF0dGVybnMsXG4gICAgcGFyZW50SGFzQ2hpbGQsXG4gICAgd3JpdGVGaWxlSWZDaGFuZ2VkLFxuICB9ID0gYnVpbGRlcnNNb2R1bGUgPz9cbiAgKGF3YWl0IGltcG9ydEVzbTx0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKT4oJ0B3b3JrZmxvdy9idWlsZGVycycpKTtcblxuICBjbGFzcyBOZXh0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyQ2xhc3Mge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIGNvbmZpZzogQnVpbGRlck5leHRDb25maWcgJiB7XG4gICAgICBwYWdlRXh0ZW5zaW9uczogTm9uTnVsbGFibGU8UHJvamVjdE5leHRDb25maWdbJ3BhZ2VFeHRlbnNpb25zJ10+O1xuICAgICAgZGlzdERpcjogc3RyaW5nO1xuICAgIH07XG5cbiAgICBhc3luYyBidWlsZCgpIHtcbiAgICAgIGNvbnN0IG91dHB1dERpciA9IGF3YWl0IHRoaXMuZmluZEFwcERpcmVjdG9yeSgpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmICghdGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gUHJvZHVjdGlvbiBidWlsZCBjYWNoZXMgbWF5IHN0aWxsIGNvbnRhaW4gdGhlIHJldGlyZWQgc3RlcCByb3V0ZS5cbiAgICAgICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAnKSwge1xuICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkNoYW5nZWQoam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcblxuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0SW5wdXRGaWxlcygpO1xuICAgICAgY29uc3QgdHNjb25maWdQYXRoID0gYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGlucHV0RmlsZXMsXG4gICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICB9O1xuXG4gICAgICAvLyBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgKHJlcGxhY2VzIHNlcGFyYXRlIHN0ZXAgKyBmbG93IHJvdXRlcylcbiAgICAgIGNvbnN0IGNvbWJpbmVkUmVzdWx0ID0gYXdhaXQgdGhpcy5idWlsZENvbWJpbmVkRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va1JvdXRlKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG5cbiAgICAgIGNvbnN0IHdyaXRlTWFuaWZlc3QgPSBhc3luYyAoXG4gICAgICAgIHNvdXJjZU1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0IHwgdW5kZWZpbmVkXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgICAgICAgc3RlcHM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LnN0ZXBzIH0sXG4gICAgICAgICAgd29ya2Zsb3dzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py53b3JrZmxvd3MgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5jbGFzc2VzIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVQYXRoID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cvcm91dGUuanMnKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICAgICAgd29ya2Zsb3dCdW5kbGVQYXRoLFxuICAgICAgICAgIG1hbmlmZXN0RGlyOiB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgc3RhdGljIGZpbGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MS5cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkRXhwb3NlUHVibGljTWFuaWZlc3QgJiYgbWFuaWZlc3RKc29uKSB7XG4gICAgICAgICAgY29uc3QgcHVibGljTWFuaWZlc3REaXIgPSBqb2luKFxuICAgICAgICAgICAgdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgICAgICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBta2RpcihwdWJsaWNNYW5pZmVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZUlmQ2hhbmdlZChcbiAgICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSxcbiAgICAgICAgICAgICAgJyonXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXcml0dGVuIGZyb20gdGhlIHNhbWUgc3RyaW5nIHJhdGhlciB0aGFuIGNvcGllZCwgc28gYW4gdW5jaGFuZ2VkXG4gICAgICAgICAgLy8gbWFuaWZlc3QgbGVhdmVzIHRoZSBwdWJsaWMgY29weSB1bnRvdWNoZWQgdG9vLlxuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZUlmQ2hhbmdlZChcbiAgICAgICAgICAgIGpvaW4ocHVibGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgICAgICBtYW5pZmVzdEpzb25cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KGNvbWJpbmVkUmVzdWx0Py5tYW5pZmVzdCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB3YXRjaCBtb2RlIGZvciBjb21iaW5lZCBidW5kbGVcbiAgICAgICAgLy8gRm9yIG5vdywgZmFsbCBiYWNrIHRvIGZ1bGwgcmVidWlsZCBvbiBmaWxlIGNoYW5nZXNcbiAgICAgICAgaWYgKCFjb21iaW5lZFJlc3VsdD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvdyBidWlsZCBjb250ZXh0IGluIHdhdGNoIG1vZGUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0ZXAgcmVnaXN0cmF0aW9ucyBtYXkgYmUgZW1pdHRlZCBhcyBzb3VyY2UgaW1wb3J0cyB3aXRob3V0IGFuXG4gICAgICAgIC8vIGVzYnVpbGQgY29udGV4dCB3aGVuIGV4dGVybmFsaXplTm9uU3RlcHMgaXMgZW5hYmxlZC5cbiAgICAgICAgbGV0IHN0ZXBzQ3R4ID0gY29tYmluZWRSZXN1bHQuc3RlcHNDb250ZXh0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IGNvbWJpbmVkUmVzdWx0LmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgYnVuZGxlRmluYWw6IGNvbWJpbmVkUmVzdWx0LmJ1bmRsZUZpbmFsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZGlzY292ZXJlZEVudHJpZXMgPSBjb21iaW5lZFJlc3VsdC5kaXNjb3ZlcmVkRW50cmllcztcbiAgICAgICAgbGV0IHN0ZXBzTWFuaWZlc3QgPSBjb21iaW5lZFJlc3VsdC5zdGVwc01hbmlmZXN0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzTWFuaWZlc3QgPSBjb21iaW5lZFJlc3VsdC53b3JrZmxvd3NNYW5pZmVzdDtcbiAgICAgICAgY29uc3Qgc3RlcHNPdXRmaWxlID0gam9pbihcbiAgICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgICAnZmxvdycsXG4gICAgICAgICAgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgICAoaXNBYnNvbHV0ZShwYXRobmFtZSlcbiAgICAgICAgICAgID8gcGF0aG5hbWVcbiAgICAgICAgICAgIDogcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBwYXRobmFtZSlcbiAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgc291cmNlU25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90PigpO1xuXG4gICAgICAgIGNvbnN0IHdhdGNoYWJsZUV4dGVuc2lvbnMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICAnLmpzeCcsXG4gICAgICAgICAgJy50cycsXG4gICAgICAgICAgJy50c3gnLFxuICAgICAgICAgICcubXRzJyxcbiAgICAgICAgICAnLmN0cycsXG4gICAgICAgICAgJy5janMnLFxuICAgICAgICAgICcubWpzJyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIgPSB3b3JrZmxvd0dlbmVyYXRlZERpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREaXN0RGlyID0gbm9ybWFsaXplUGF0aCh0aGlzLmNvbmZpZy5kaXN0RGlyKTtcblxuICAgICAgICAvLyBQcnVuZSB0aGUgZGV2IHdhdGNoIHNldCB0byBrZWVwIGNob2tpZGFyIGZyb20gcmVnaXN0ZXJpbmcgYW5cbiAgICAgICAgLy8gZnMud2F0Y2ggcGVyIGRpcmVjdG9yeSBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QgdHJlZSAoY2hva2lkYXIgNFxuICAgICAgICAvLyBkcm9wcGVkIGZzZXZlbnRzLCBzbyBvbiBtYWNPUyB0aGF0IGV4aGF1c3RzIHRoZSBmZCBsaW1pdCAtPiBFTUZJTEVcbiAgICAgICAgLy8gb24gbGFyZ2UgbW9ub3JlcG9zKS4gVGhpcyBob25vcnMgYC5naXRpZ25vcmVgIGFuZCB0aGVcbiAgICAgICAgLy8gV09SS0ZMT1dfREVWX1dBVENIX0lHTk9SRURfUEFUSFMgZW52IHZhciBpbiBhZGRpdGlvbiB0byB0aGVcbiAgICAgICAgLy8gYnVpbHQtaW4gZnJhZ21lbnRzLiBUaGUgZ2VuZXJhdGVkIHdvcmtmbG93IGRpciBpcyBwYXNzZWQgYXMgYW5cbiAgICAgICAgLy8gZXh0cmEgZnJhZ21lbnQgc28gaXQgaXMgcHJ1bmVkIHJlZ2FyZGxlc3Mgb2YgYC5naXRpZ25vcmVgLlxuICAgICAgICBjb25zdCBpc0lnbm9yZWRXYXRjaFBhdGggPSBjcmVhdGVXYXRjaElnbm9yZVByZWRpY2F0ZSh7XG4gICAgICAgICAgd29ya2luZ0RpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgICBwcm9qZWN0Um9vdDogdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdCxcbiAgICAgICAgICBleHRyYUZyYWdtZW50czogW25vcm1hbGl6ZWRHZW5lcmF0ZWREaXJdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNJZ25vcmVkUGF0aEZyYWdtZW50ID0gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBub3JtYWxpemVkUGF0aCA9PT0gbm9ybWFsaXplZERpc3REaXIgfHxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZERpc3REaXJ9L2ApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGlzSWdub3JlZFdhdGNoUGF0aChub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHJlYnVpbGRRdWV1ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIGNvbnN0IGVucXVldWUgPSAodGFzazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgICAgICAgIHJlYnVpbGRRdWV1ZSA9IHJlYnVpbGRRdWV1ZS50aGVuKHRhc2spLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBjaGFuZ2UnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlYnVpbGRRdWV1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZWFkU291cmNlU25hcHNob3QgPSAoZmlsZTogc3RyaW5nKSA9PlxuICAgICAgICAgIGNyZWF0ZVNvdXJjZVNuYXBzaG90KHsgZmlsZSwgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyB9KTtcblxuICAgICAgICBjb25zdCByZWZyZXNoU291cmNlU25hcHNob3RzID0gKCkgPT5cbiAgICAgICAgICByZXBsYWNlU291cmNlU25hcHNob3RzKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG1lcmdlQ29tYmluZWRNYW5pZmVzdCA9IChcbiAgICAgICAgICBuZXh0U3RlcHNNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdFxuICAgICAgICApOiBXb3JrZmxvd01hbmlmZXN0ID0+ICh7XG4gICAgICAgICAgLi4ubmV4dFN0ZXBzTWFuaWZlc3QsXG4gICAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgICAgLi4ud29ya2Zsb3dzTWFuaWZlc3QuY2xhc3NlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBob3RSZWJ1aWxkID0gYXN5bmMgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9uczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChzdGVwc0N0eCkge1xuICAgICAgICAgICAgICBhd2FpdCBzdGVwc0N0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwc01hbmlmZXN0ID0gYXdhaXQgdGhpcy5jcmVhdGVTdGVwU291cmNlUmVnaXN0cmF0aW9uRmlsZSh7XG4gICAgICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgICAgIG91dGZpbGU6IHN0ZXBzT3V0ZmlsZSxcbiAgICAgICAgICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHdvcmtmbG93UmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHgucmVidWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHdvcmtmbG93T3V0cHV0ID0gd29ya2Zsb3dSZXN1bHQub3V0cHV0RmlsZXM/LlswXT8udGV4dDtcbiAgICAgICAgICBpZiAoIXdvcmtmbG93T3V0cHV0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IG91dHB1dCBmcm9tIGhvdCByZWJ1aWxkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguYnVuZGxlRmluYWwod29ya2Zsb3dPdXRwdXQpO1xuICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobWVyZ2VDb21iaW5lZE1hbmlmZXN0KHN0ZXBzTWFuaWZlc3QpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUaGUgcGluIGhlbHBlciBvd25zIHRoZSBjYXB0dXJlLWJlZm9yZS1idWlsZCAvIHJlc3RvcmUtYWZ0ZXItXG4gICAgICAgIC8vIHJlZnJlc2ggb3JkZXJpbmcgKGluY2x1ZGluZyB0aGF0IHRoZSBjYXB0dXJlIHJlYWRzIHRoZSBDVVJSRU5UXG4gICAgICAgIC8vIGRpc2NvdmVyZWQgZW50cmllcyBhbmQgaW5wdXQgZmlsZXMsIGJlZm9yZSB0aGUgcmVidWlsZCByZXBsYWNlc1xuICAgICAgICAvLyB0aGVtKSwgc28gYW4gZWRpdCBsYW5kaW5nIHdoaWxlIHRoZSBtdWx0aS1zZWNvbmQgcmVidWlsZCBydW5zIHN0aWxsXG4gICAgICAgIC8vIGRpZmZzIGFnYWluc3Qgd2hhdCB0aGUgcmVidWlsZCBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIGFic29yYmVkXG4gICAgICAgIC8vIGludG8gdGhlIHJlZnJlc2hlZCBiYXNlbGluZS4gU2VlIGBwaW5CYXNlbGluZXNBY3Jvc3NGdWxsUmVidWlsZGBcbiAgICAgICAgLy8gZm9yIHRoZSBmdWxsIHJlYXNvbmluZy5cbiAgICAgICAgY29uc3QgZnVsbFJlYnVpbGQgPSAoKSA9PlxuICAgICAgICAgIHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgICAgcmVidWlsZDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyRGlzY292ZXJlZEVudHJpZXNDYWNoZSgpO1xuICAgICAgICAgICAgICBjb25zdCBuZXdJbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICAgICAgICAgIG9wdGlvbnMuaW5wdXRGaWxlcyA9IG5ld0lucHV0RmlsZXM7XG5cbiAgICAgICAgICAgICAgYXdhaXQgc3RlcHNDdHg/LmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHguZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0NvbWJpbmVkID0gYXdhaXQgdGhpcy5idWlsZENvbWJpbmVkRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgICAgICAgICAgIHN0ZXBzQ3R4ID0gbmV3Q29tYmluZWQuc3RlcHNDb250ZXh0O1xuICAgICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyA9IG5ld0NvbWJpbmVkLmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICAgICAgICBzdGVwc01hbmlmZXN0ID0gbmV3Q29tYmluZWQuc3RlcHNNYW5pZmVzdDtcbiAgICAgICAgICAgICAgd29ya2Zsb3dzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC53b3JrZmxvd3NNYW5pZmVzdDtcblxuICAgICAgICAgICAgICBpZiAoIW5ld0NvbWJpbmVkPy5pbnRlcmltQnVuZGxlQ3R4IHx8ICFuZXdDb21iaW5lZD8uYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvd3MgYnVuZGxlIGNvbnRleHQgYWZ0ZXIgcmVidWlsZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdvcmtmbG93c0N0eCA9IHtcbiAgICAgICAgICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiBuZXdDb21iaW5lZC5pbnRlcmltQnVuZGxlQ3R4LFxuICAgICAgICAgICAgICAgIGJ1bmRsZUZpbmFsOiBuZXdDb21iaW5lZC5idW5kbGVGaW5hbCxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KG5ld0NvbWJpbmVkLm1hbmlmZXN0KTtcbiAgICAgICAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpc1dhdGNoYWJsZUZpbGUgPSAocGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgIHdhdGNoYWJsZUV4dGVuc2lvbnMuaGFzKGV4dG5hbWUocGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IHJlYWRLbm93bkZpbGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgYWxpYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgcmVsZXZhbnRGaWxlcyA9IGdldFJlbGV2YW50RmlsZXMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYWRkS25vd25GaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCByZWFsRmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgoZmlsZVBhdGgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9IHJlbGV2YW50RmlsZXMuaGFzKHJlYWxGaWxlUGF0aClcbiAgICAgICAgICAgICAgPyByZWFsRmlsZVBhdGhcbiAgICAgICAgICAgICAgOiBmaWxlUGF0aDtcbiAgICAgICAgICAgIGZpbGVzLmFkZChjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIGFsaWFzZXMuc2V0KGZpbGVQYXRoLCBjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIGFsaWFzZXMuc2V0KHJlYWxGaWxlUGF0aCwgY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsUGF0aDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdmlzaXQgPSBhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGxldCBkaXJlbnRzOiBEaXJlbnQ8c3RyaW5nPltdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZGlyZW50cyA9IGF3YWl0IHJlYWRkaXIoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZGlyZW50cy5tYXAoYXN5bmMgKGRpcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChqb2luKGRpcmVjdG9yeSwgZGlyZW50Lm5hbWUpKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhGcmFnbWVudChmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHZpc2l0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc3RhdHM6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2Ygc3RhdD4+O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCB2aXNpdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0cy5pc0ZpbGUoKSB8fCAhaXNXYXRjaGFibGVGaWxlKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IGFkZEtub3duRmlsZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCB2aXNpdCh0aGlzLmNvbmZpZy53b3JraW5nRGlyKTtcbiAgICAgICAgICByZXR1cm4geyBmaWxlcywgYWxpYXNlcywgYWRkS25vd25GaWxlIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVyZ2VGaWxlQ2hhbmdlcyA9IChcbiAgICAgICAgICBsZWZ0OiBGaWxlQ2hhbmdlcyxcbiAgICAgICAgICByaWdodDogRmlsZUNoYW5nZXNcbiAgICAgICAgKTogRmlsZUNoYW5nZXMgPT4gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiB1bmlxdWUoWy4uLmxlZnQuYWRkZWRGaWxlcywgLi4ucmlnaHQuYWRkZWRGaWxlc10pLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi5sZWZ0Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICAuLi5yaWdodC5tb2RpZmllZEZpbGVzLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHJlbW92ZWRGaWxlczogdW5pcXVlKFsuLi5sZWZ0LnJlbW92ZWRGaWxlcywgLi4ucmlnaHQucmVtb3ZlZEZpbGVzXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IChwYXRoczogc3RyaW5nW10pID0+IFsuLi5uZXcgU2V0KHBhdGhzKV07XG5cbiAgICAgICAgY29uc3QgY2xhc3NpZnlGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgY2hhbmdlZEZpbGVzLFxuICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICB9OiB7XG4gICAgICAgICAgY2hhbmdlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICBrbm93bkZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9KTogRmlsZUNoYW5nZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGFkZGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgbW9kaWZpZWRGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB1bmlxdWUoY2hhbmdlZEZpbGVzKSkge1xuICAgICAgICAgICAgaWYgKGtub3duRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgICAga25vd25GaWxlcy5hZGQoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlbW92ZWRGaWxlcykge1xuICAgICAgICAgICAga25vd25GaWxlcy5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiB1bmlxdWUocmVtb3ZlZEZpbGVzKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhc0ZpbGVDaGFuZ2VzID0gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICB9OiBGaWxlQ2hhbmdlcykgPT5cbiAgICAgICAgICBhZGRlZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICByZW1vdmVkRmlsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgbG9nRGV2SG1yID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19ERVZfSE1SX0xPR1MgPT09ICcxJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEtub3duIGdhcDogdGhlIGluaXRpYWwgYnVpbGQgaGFzIHRoZSBzYW1lIHR3by1yZWFkIHNoYXBlICh0aGVcbiAgICAgICAgLy8gY29tYmluZWQgYnVpbGQgYWJvdmUgY29uc3VtZWQgc291cmNlcywgYW5kIHRoaXMgcmVmcmVzaCByZS1yZWFkc1xuICAgICAgICAvLyB0aGVtKSwgYnV0IG5vIHBpbm5pbmcsIGFuZCB0aGUgd2F0Y2hlciBiZWxvdyBhdHRhY2hlcyB3aXRoXG4gICAgICAgIC8vIGBpZ25vcmVJbml0aWFsOiB0cnVlYCwgc28gYW4gZWRpdCBsYW5kaW5nIGluc2lkZSB0aGUgc3RhcnR1cCB3aW5kb3dcbiAgICAgICAgLy8gaXMgYWJzb3JiZWQgd2l0aCBubyBzdHJhZ2dsZXIgZXZlbnQgdG8gcmVjb3ZlciBpdC4gQm91bmRlZCBieSBkZXZcbiAgICAgICAgLy8gc2VydmVyIHN0YXJ0dXAgcmF0aGVyIHRoYW4gcmVjdXJyaW5nIHBlciByZWJ1aWxkOyBrbm93aW5nbHkgb3V0IG9mXG4gICAgICAgIC8vIHNjb3BlIGZvciB0aGUgbWlkLXJlYnVpbGQgcGlubmluZyBhYm92ZS5cbiAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICBsZXQge1xuICAgICAgICAgIGZpbGVzOiBrbm93bkZpbGVzLFxuICAgICAgICAgIGFsaWFzZXM6IGtub3duRmlsZUFsaWFzZXMsXG4gICAgICAgICAgYWRkS25vd25GaWxlOiByZW1lbWJlcktub3duRmlsZSxcbiAgICAgICAgfSA9IGF3YWl0IHJlYWRLbm93bkZpbGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVmcmVzaEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dEtub3duID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcbiAgICAgICAgICBrbm93bkZpbGVzID0gbmV4dEtub3duLmZpbGVzO1xuICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMgPSBuZXh0S25vd24uYWxpYXNlcztcbiAgICAgICAgICByZW1lbWJlcktub3duRmlsZSA9IG5leHRLbm93bi5hZGRLbm93bkZpbGU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0ZpbGVDaGFuZ2VzID0gYXN5bmMgKGZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICghaGFzRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVjaXNpb24gPSBhd2FpdCBjbGFzc2lmeVJlYnVpbGQoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBmaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgICBwYXJlbnRIYXNDaGlsZCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChkZWNpc2lvbi5raW5kID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogc2tpcCcpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIGRlY2lzaW9uLnNuYXBzaG90cyB8fCBbXSkge1xuICAgICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBmdWxsIHJlZGlzY292ZXJ5Jyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBmdWxsUmVidWlsZCgpO1xuICAgICAgICAgICAgICBhd2FpdCByZWZyZXNoS25vd25GaWxlcygpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgLy8gTGV0cyBhIGxvZyByZWFkZXIgdGVsbCBcInF1aWV0XCIgZnJvbSBcInJlYnVpbGQgaW4gZmxpZ2h0XCIuXG4gICAgICAgICAgICAgIC8vIFRoZSBlMmUgSE1SIHRlc3RzIGRyYWluLXRvLXF1aWV0IGJlZm9yZSBjb3VudGluZyBsaW5lcy5cbiAgICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiByZWJ1aWxkIGNvbXBsZXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9nRGV2SG1yKFxuICAgICAgICAgICAgYHdvcmtmbG93IGRldiBobXI6IGhvdCByZWJ1aWxkJHtkZWNpc2lvbi5yZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMgPyAnIHdpdGggc3RlcCByZWdpc3RyYXRpb24gcmVmcmVzaCcgOiAnJ31gXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgaG90UmVidWlsZChkZWNpc2lvbi5yZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIGRlY2lzaW9uLnNuYXBzaG90cykge1xuICAgICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gU2VlIHRoZSBtYXRjaGluZyBsaW5lIG9uIHRoZSBmdWxsIHBhdGggYWJvdmUuXG4gICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYnVpbGQgY29tcGxldGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHBlbmRpbmdGaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMgPSB7XG4gICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZsdXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHNjaGVkdWxlRmlsZUNoYW5nZXMgPSAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0gbWVyZ2VGaWxlQ2hhbmdlcyhcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmx1c2hUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IHBlbmRpbmdGaWxlQ2hhbmdlcztcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZsdXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlbnF1ZXVlKCgpID0+IHByb2Nlc3NGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGggPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qga25vd25QYXRoID0ga25vd25GaWxlQWxpYXNlcy5nZXQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGlmIChrbm93blBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBrbm93blBhdGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgobm9ybWFsaXplZFBhdGgpKTtcbiAgICAgICAgICAgIHJldHVybiBrbm93bkZpbGVBbGlhc2VzLmdldChyZWFsRmlsZVBhdGgpID8/IG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlQWRkZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3YXNLbm93biA9IGV4aXN0aW5nUGF0aCA/IGtub3duRmlsZXMuaGFzKGV4aXN0aW5nUGF0aCkgOiBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVtZW1iZXJLbm93bkZpbGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGtub3duRmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgYWRkZWRGaWxlczogd2FzS25vd24gPyBbXSA6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHdhc0tub3duID8gW2Nhbm9uaWNhbFBhdGhdIDogW10sXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2VkID0gYXN5bmMgKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWNhbm9uaWNhbFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWtub3duRmlsZUFsaWFzZXMuaGFzKGNhbm9uaWNhbFBhdGgpKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1lbWJlcktub3duRmlsZShjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZVJlbW92ZWQgPSAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9XG4gICAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgY29uc3QgZmlsZUNoYW5nZXMgPSBjbGFzc2lmeUZpbGVDaGFuZ2VzKHtcbiAgICAgICAgICAgIGNoYW5nZWRGaWxlczogW10sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcy5kZWxldGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHdhdGNoZXIgPSBjaG9raWRhci53YXRjaCh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCB7XG4gICAgICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICBmb2xsb3dTeW1saW5rczogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVkOiAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChTdHJpbmcocGF0aG5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYXNJZ25vcmVkUGF0aEZyYWdtZW50KG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaGVyLm9uKCdhZGQnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVBZGRlZChwYXRobmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVDaGFuZ2VkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3VubGluaycsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZpbGVSZW1vdmVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignV29ya2Zsb3cgZGV2IHdhdGNoZXIgZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYWR5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCBzdXBlci5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICByZXR1cm4gaW5wdXRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWxhdGl2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBmaWxlKS5yZXBsYWNlQWxsKFxuICAgICAgICAgICdcXFxcJyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNYXRjaCBBcHAgUm91dGVyIHJvdXRlLCBwYWdlLCBhbmQgbGF5b3V0IGVudHJ5cG9pbnRzIGluIGFwcC8gb3Igc3JjL2FwcC8uXG4gICAgICAgIGlmICgvXig/OmFwcHxzcmNcXC9hcHApXFwvKD86LipcXC8pPyg/OnJvdXRlfHBhZ2V8bGF5b3V0KVxcLi8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIGV2ZXJ5IFBhZ2VzIFJvdXRlciBlbnRyeXBvaW50IGluIHBhZ2VzLyBvciBzcmMvcGFnZXMvLlxuICAgICAgICBpZiAoL14oPzpwYWdlc3xzcmNcXC9wYWdlcylcXC8vLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXRjaCBOZXh0LmpzIHJvb3QgZW50cnlwb2ludHMgYXQgdGhlIHByb2plY3Qgcm9vdCBvciB1bmRlciBzcmMvLlxuICAgICAgICByZXR1cm4gWydpbnN0cnVtZW50YXRpb24nLCAnbWlkZGxld2FyZScsICdwcm94eSddLnNvbWUoKG5hbWUpID0+XG4gICAgICAgICAgdGhpcy5jb25maWcucGFnZUV4dGVuc2lvbnMuc29tZShcbiAgICAgICAgICAgIChleHRlbnNpb24pID0+XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgJHtuYW1lfS4ke2V4dGVuc2lvbn1gIHx8XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgc3JjLyR7bmFtZX0uJHtleHRlbnNpb259YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpIHtcbiAgICAgIC8vIHdlIGRvbid0IHJ1biB0aGlzIGluIGRldmVsb3BtZW50IG1vZGUgYXMgaXQncyBub3QgbmVlZGVkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWMiBjb21iaW5lZCBjb25maWc6IHNpbmdsZSB0cmlnZ2VyIGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICAvLyBUaGUgc3RlcCByb3V0ZSBubyBsb25nZXIgbmVlZHMgaXRzIG93biB0cmlnZ2VyIHNpbmNlIHN0ZXBzIGFyZSBleGVjdXRlZFxuICAgICAgLy8gaW5saW5lIGJ5IHRoZSBjb21iaW5lZCBoYW5kbGVyIG9yIHF1ZXVlZCBiYWNrIHRvIF9fd2tmX3dvcmtmbG93Xyogd2l0aCBzdGVwSWQuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRDb25maWcgPSB7XG4gICAgICAgIHZlcnNpb246ICcwJyxcbiAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoKV0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkNoYW5nZWQoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEvY29uZmlnLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZ2VuZXJhdGVkQ29uZmlnLCBudWxsLCAyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgdGhhdCBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDb21iaW5lZEZ1bmN0aW9uKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9OiB7XG4gICAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICAgIGF3YWl0IG1rZGlyKGZsb3dSb3V0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICAgIGZsb3dPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ3JvdXRlLmpzJyksXG4gICAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgICAgc291cmNlU3RlcFJlZ2lzdHJhdGlvbkltcG9ydHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
@@ -78,7 +78,7 @@ function matcherWithout(entry, dropped) {
78
78
  * applies them: a rule in a deeper `.gitignore` overrides a conflicting rule
79
79
  * from a shallower one.
80
80
  *
81
- * Nested `.gitignore` files *below* `workingDir` are intentionally not read
81
+ * Nested `.gitignore` files *below* `workingDir` are intentionally not read;
82
82
  * the {@link WATCH_IGNORED_PATHS_ENV} env var backstops anything they'd cover.
83
83
  */
84
84
  function loadGitignoreMatchers(workingDir, projectRoot) {
@@ -147,7 +147,7 @@ function createWatchIgnorePredicate(options) {
147
147
  const testEntry = (entry, rel, dropped) => {
148
148
  const matcher = dropped ? matcherWithout(entry, dropped) : entry.matcher;
149
149
  // Test the trailing-slash form too so a directory node itself matches a
150
- // `dir/` gitignore rule (not just its children) this lets the walk and
150
+ // `dir/` gitignore rule (not just its children); this lets the walk and
151
151
  // chokidar prune the directory instead of descending into it.
152
152
  const asFile = matcher.test(rel);
153
153
  const asDir = matcher.test(`${rel}/`);
@@ -261,4 +261,4 @@ function createWatchIgnorePredicate(options) {
261
261
  return walkGitignore(normalizedPath);
262
262
  };
263
263
  }
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dhdGNoLWlnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1Q0Esb0RBUUM7QUF5SEQsZ0VBNkpDO0FBclVELHFDQUF1QztBQUN2Qyx5Q0FBMkM7QUFDM0Msb0RBQTZDO0FBRTdDOzs7O0dBSUc7QUFDVSxRQUFBLDhCQUE4QixHQUFzQjtJQUMvRCxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLFFBQVE7SUFDUixTQUFTO0lBQ1QsT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQix3QkFBd0I7Q0FDekIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRW5FOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQXlCO0lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sS0FBSztTQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNyQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQWNEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBdUIsRUFBRSxPQUFvQjtJQUNuRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtB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QkFDeEQsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25FLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgcG9zaXggfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGlnbm9yZSwgeyB0eXBlIElnbm9yZSB9IGZyb20gJ2lnbm9yZSc7XG5cbi8qKlxuICogRGlyZWN0b3J5LW5hbWUgZnJhZ21lbnRzIHRoYXQgYXJlIGFsd2F5cyBleGNsdWRlZCBmcm9tIHRoZSBkZXYgd2F0Y2hlcixcbiAqIHJlZ2FyZGxlc3Mgb2YgYC5naXRpZ25vcmVgLiBNYXRjaGVkIGFzIFBPU0lYIHN1YnN0cmluZ3Mgb2YgdGhlIGFic29sdXRlXG4gKiBwYXRoIChlLmcuIGAvbm9kZV9tb2R1bGVzL2AgbWF0Y2hlcyBhbnkgcGF0aCBjb250YWluaW5nIHRoYXQgc2VnbWVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnLy5naXQvJyxcbiAgJy9ub2RlX21vZHVsZXMvJyxcbiAgJy8ubmV4dC8nLFxuICAnLy50dXJiby8nLFxuICAnLy52ZXJjZWwvJyxcbiAgJy9kaXN0LycsXG4gICcvYnVpbGQvJyxcbiAgJy9vdXQvJyxcbiAgJy8uY2FjaGUvJyxcbiAgJy8ueWFybi8nLFxuICAnLy5wbnBtLXN0b3JlLycsXG4gICcvLnBhcmNlbC1jYWNoZS8nLFxuICAnLy53ZWxsLWtub3duL3dvcmtmbG93LycsXG5dO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgbGV0cyBhIHByb2plY3QgYWRkIGV4dHJhIHBhdGggZnJhZ21lbnRzIHRvIHRoZVxuICogZGV2IHdhdGNoZXIgaWdub3JlIGxpc3QuIENvbW1hLXNlcGFyYXRlZDsgZWFjaCBlbnRyeSBpcyBtYXRjaGVkIGFzIGEgUE9TSVhcbiAqIHN1YnN0cmluZyBvZiB0aGUgYWJzb2x1dGUgcGF0aCwgZXhhY3RseSBsaWtlIHtAbGluayBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFN9LlxuICogQWRkaXRpdmUgdG8gYC5naXRpZ25vcmVgIGFuZCB0aGUgYnVpbHQtaW4gbGlzdC4gRGV2LW1vZGUgb25seS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdBVENIX0lHTk9SRURfUEFUSFNfRU5WID0gJ1dPUktGTE9XX0RFVl9XQVRDSF9JR05PUkVEX1BBVEhTJztcblxuY29uc3QgdG9Qb3NpeCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbi8qKlxuICogUGFyc2UgdGhlIGNvbW1hLXNlcGFyYXRlZCB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IHZhbHVlIGludG8gYSBsaXN0XG4gKiBvZiBQT1NJWCBwYXRoIGZyYWdtZW50cy4gV2hpdGVzcGFjZSBpcyB0cmltbWVkIGFuZCBlbXB0eSBlbnRyaWVzIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlnbm9yZWRQYXRoc0Vudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgoZW50cnkpID0+IHRvUG9zaXgoZW50cnkudHJpbSgpKSlcbiAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubGVuZ3RoID4gMCk7XG59XG5cbmludGVyZmFjZSBHaXRpZ25vcmVNYXRjaGVyIHtcbiAgLyoqIFBPU0lYIGFic29sdXRlIGRpcmVjdG9yeSB0aGUgYC5naXRpZ25vcmVgIGxpdmVzIGluIChubyB0cmFpbGluZyBzbGFzaCkuICovXG4gIGRpcjogc3RyaW5nO1xuICBtYXRjaGVyOiBJZ25vcmU7XG4gIC8qKiBSYXcgcGF0dGVybiBsaW5lcywgdXNlZCB0byByZWJ1aWxkIHRoZSBtYXRjaGVyIHdpdGhvdXQgYSBuZXV0cmFsaXplZCBydWxlLiAqL1xuICBsaW5lczogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoaXMgZmlsZSBjb250YWlucyBhbnkgYCFgIHJlLWluY2x1c2lvbiBydWxlLiAqL1xuICBoYXNOZWdhdGlvbjogYm9vbGVhbjtcbiAgLyoqIE1hdGNoZXJzIHJlYnVpbHQgd2l0aCBzb21lIHJ1bGVzIGRyb3BwZWQsIGtleWVkIGJ5IHRoZSBkcm9wcGVkIHNldC4gKi9cbiAgZmlsdGVyZWQ6IE1hcDxzdHJpbmcsIElnbm9yZT47XG59XG5cbi8qKlxuICogUmVidWlsZCBhIG1hdGNoZXIgd2l0aCBgZHJvcHBlZGAgcGF0dGVybiBsaW5lcyByZW1vdmVkLiBVc2VkIHdoZW4gYSBydWxlXG4gKiBleGNsdWRlZCBhIGRpcmVjdG9yeSB0aGF0IGEgZGVlcGVyIGAuZ2l0aWdub3JlYCByZS1pbmNsdWRlZDogdGhhdCBydWxlIG11c3RcbiAqIHN0b3AgYXBwbHlpbmcgdG8gdGhlIHN1YnRyZWUsIHdoaWxlIGV2ZXJ5ICpvdGhlciogcnVsZSBpbiB0aGUgc2FtZSBmaWxlXG4gKiAoZS5nLiBhIGAqLnNlY3JldGAgdGhhdCBzdGlsbCBtYXRjaGVzIGEgZmlsZSBpbnNpZGUpIGtlZXBzIGFwcGx5aW5nLlxuICovXG5mdW5jdGlvbiBtYXRjaGVyV2l0aG91dChlbnRyeTogR2l0aWdub3JlTWF0Y2hlciwgZHJvcHBlZDogU2V0PHN0cmluZz4pOiBJZ25vcmUge1xuICBpZiAoZHJvcHBlZC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGVudHJ5Lm1hdGNoZXI7XG4gIH1cbiAgY29uc3Qga2V5ID0gWy4uLmRyb3BwZWRdLnNvcnQoKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgY2FjaGVkID0gZW50cnkuZmlsdGVyZWQuZ2V0KGtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG4gIGNvbnN0IHJlYnVpbHQgPSBpZ25vcmUoKS5hZGQoXG4gICAgZW50cnkubGluZXMuZmlsdGVyKChsaW5lKSA9PiAhZHJvcHBlZC5oYXMobGluZS50cmltKCkpKVxuICApO1xuICBlbnRyeS5maWx0ZXJlZC5zZXQoa2V5LCByZWJ1aWx0KTtcbiAgcmV0dXJuIHJlYnVpbHQ7XG59XG5cbi8qKlxuICogTG9hZCBgLmdpdGlnbm9yZWAgbWF0Y2hlcnMgZm9yIGB3b3JraW5nRGlyYCB1cCB0byBhbmQgaW5jbHVkaW5nXG4gKiBgcHJvamVjdFJvb3RgLiBJbiBhIG1vbm9yZXBvIHRoZSBsYXJnZXN0IGlnbm9yZWQgdHJlZXMgYXJlIHR5cGljYWxseSBsaXN0ZWRcbiAqIGF0IHRoZSB3b3Jrc3BhY2Ugcm9vdCwgYW5kIGFwcC1sZXZlbCBgLmdpdGlnbm9yZWAgZmlsZXMgYXJlIGNvdmVyZWQgdG9vLlxuICpcbiAqIFJldHVybmVkIG91dGVybW9zdC1maXJzdCAod29ya3NwYWNlIHJvb3Qg4oaSIGFwcCksIHdoaWNoIGlzIHRoZSBvcmRlciBnaXRcbiAqIGFwcGxpZXMgdGhlbTogYSBydWxlIGluIGEgZGVlcGVyIGAuZ2l0aWdub3JlYCBvdmVycmlkZXMgYSBjb25mbGljdGluZyBydWxlXG4gKiBmcm9tIGEgc2hhbGxvd2VyIG9uZS5cbiAqXG4gKiBOZXN0ZWQgYC5naXRpZ25vcmVgIGZpbGVzICpiZWxvdyogYHdvcmtpbmdEaXJgIGFyZSBpbnRlbnRpb25hbGx5IG5vdCByZWFkIOKAlFxuICogdGhlIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZW52IHZhciBiYWNrc3RvcHMgYW55dGhpbmcgdGhleSdkIGNvdmVyLlxuICovXG5mdW5jdGlvbiBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogR2l0aWdub3JlTWF0Y2hlcltdIHtcbiAgY29uc3QgbWF0Y2hlcnM6IEdpdGlnbm9yZU1hdGNoZXJbXSA9IFtdO1xuICBjb25zdCBzdG9wQXQgPSB0b1Bvc2l4KHByb2plY3RSb290KTtcblxuICBsZXQgY3VycmVudCA9IHRvUG9zaXgod29ya2luZ0Rpcik7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29udGVudCA9IHJlYWRGaWxlU3luYyhwb3NpeC5qb2luKGN1cnJlbnQsICcuZ2l0aWdub3JlJyksICd1dGYtOCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29udGVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICBtYXRjaGVycy5wdXNoKHtcbiAgICAgICAgZGlyOiBjdXJyZW50LFxuICAgICAgICBtYXRjaGVyOiBpZ25vcmUoKS5hZGQoY29udGVudCksXG4gICAgICAgIGxpbmVzLFxuICAgICAgICBoYXNOZWdhdGlvbjogbGluZXMuc29tZSgobGluZSkgPT4gbGluZS50cmltKCkuc3RhcnRzV2l0aCgnIScpKSxcbiAgICAgICAgZmlsdGVyZWQ6IG5ldyBNYXAoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ID09PSBzdG9wQXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG5cbiAgLy8gQ29sbGVjdGVkIGlubmVybW9zdC1maXJzdCB3aGlsZSB3YWxraW5nIHVwOyBnaXQgcHJlY2VkZW5jZSBpc1xuICAvLyBvdXRlcm1vc3QtZmlyc3QsIHdpdGggZGVlcGVyIGZpbGVzIHdpbm5pbmcuXG4gIHJldHVybiBtYXRjaGVycy5yZXZlcnNlKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hJZ25vcmVPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIGFwcCBkaXJlY3RvcnkgYmVpbmcgYnVpbHQuICovXG4gIHdvcmtpbmdEaXI6IHN0cmluZztcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIHdvcmtzcGFjZS9wcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIGB3b3JraW5nRGlyYC4gKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHRyYSBQT1NJWCBzdWJzdHJpbmcgZnJhZ21lbnRzIHRvIGlnbm9yZSwgaW4gYWRkaXRpb24gdG8gdGhlIGJ1aWx0LWluXG4gICAqIGxpc3QgYW5kIHRoZSB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IGVudiB2YXIuIFVzZWQgYnkgdGhlIGNhbGxlclxuICAgKiBmb3IgYnVpbGQtdGltZSBwYXRocyBzdWNoIGFzIHRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyZWN0b3J5LlxuICAgKi9cbiAgZXh0cmFGcmFnbWVudHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIGZvciB0aGUge0BsaW5rIFdBVENIX0lHTk9SRURfUEFUSFNfRU5WfSBlbnYgdmFyLiBQcmltYXJpbHkgZm9yXG4gICAqIHRlc3Rpbmc7IGRlZmF1bHRzIHRvIGBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl1gLlxuICAgKi9cbiAgZW52SWdub3JlZFBhdGhzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBkZXYtd2F0Y2hlciBpZ25vcmUgcHJlZGljYXRlLiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVjZWl2ZXMgYVxuICogUE9TSVgtbm9ybWFsaXplZCBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5zIGB0cnVlYCB3aGVuIHRoYXQgcGF0aCBzaG91bGQgYmVcbiAqIHBydW5lZCBmcm9tIGJvdGggdGhlIGluaXRpYWwgZGlyZWN0b3J5IHdhbGsgYW5kIHRoZSBjaG9raWRhciB3YXRjaCBzZXQuXG4gKlxuICogQSBwYXRoIGlzIGlnbm9yZWQgd2hlbiBpdCBtYXRjaGVzIGFueSBvZjpcbiAqIC0gYSBidWlsdC1pbiBmcmFnbWVudCAoe0BsaW5rIEJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UU30pIG9yIGNhbGxlclxuICogICBgZXh0cmFGcmFnbWVudHNgIChQT1NJWCBzdWJzdHJpbmcgbWF0Y2gpLFxuICogLSBhIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZnJhZ21lbnQgKFBPU0lYIHN1YnN0cmluZyBtYXRjaCksXG4gKiAtIGEgYC5naXRpZ25vcmVgIHJ1bGUgZnJvbSBgd29ya2luZ0RpcmAgdXAgdG8gYHByb2plY3RSb290YC5cbiAqXG4gKiBNYXRjaGVycyBhcmUgYnVpbHQgb25jZSBoZXJlOyB0aGUgcmV0dXJuZWQgcHJlZGljYXRlIGlzIGhvdCAoY2FsbGVkIHBlciBwYXRoXG4gKiBkdXJpbmcgdHJhdmVyc2FsIGFuZCBwZXIgY2hva2lkYXIgZXZlbnQpIGFuZCBkb2VzIG5vIEkvTy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKFxuICBvcHRpb25zOiBXYXRjaElnbm9yZU9wdGlvbnNcbik6IChub3JtYWxpemVkUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9wdGlvbnMud29ya2luZ0RpcjtcbiAgY29uc3QgZW52SWdub3JlZFBhdGhzID1cbiAgICBvcHRpb25zLmVudklnbm9yZWRQYXRocyA/PyBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl07XG5cbiAgY29uc3QgZnJhZ21lbnRzID0gW1xuICAgIC4uLkJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UUyxcbiAgICAuLi4ob3B0aW9ucy5leHRyYUZyYWdtZW50cyA/PyBbXSkubWFwKHRvUG9zaXgpLFxuICAgIC4uLnBhcnNlSWdub3JlZFBhdGhzRW52KGVudklnbm9yZWRQYXRocyksXG4gIF07XG5cbiAgY29uc3QgZ2l0aWdub3JlTWF0Y2hlcnMgPSBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gICAgb3B0aW9ucy53b3JraW5nRGlyLFxuICAgIHByb2plY3RSb290XG4gICk7XG4gIC8vIFJlLWluY2x1c2lvbiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gc29tZSBmaWxlIGhhcyBhIGAhYCBydWxlLiBXaXRob3V0IG9uZSxcbiAgLy8gdGhlIGNoZWFwIGZsYXQgc2NhbiBiZWxvdyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmdWxsIHBlci1kaXJlY3Rvcnkgd2Fsay5cbiAgY29uc3QgYW55TmVnYXRpb24gPSBnaXRpZ25vcmVNYXRjaGVycy5zb21lKChlbnRyeSkgPT4gZW50cnkuaGFzTmVnYXRpb24pO1xuICBjb25zdCBvdXRlcm1vc3REaXIgPSBnaXRpZ25vcmVNYXRjaGVyc1swXT8uZGlyO1xuXG4gIC8qKiBUZXN0IG9uZSBwYXRoIGFnYWluc3Qgb25lIG1hdGNoZXIsIGFzIGJvdGggYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBub2RlLiAqL1xuICBjb25zdCB0ZXN0RW50cnkgPSAoXG4gICAgZW50cnk6IEdpdGlnbm9yZU1hdGNoZXIsXG4gICAgcmVsOiBzdHJpbmcsXG4gICAgZHJvcHBlZDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWRcbiAgKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlciA9IGRyb3BwZWQgPyBtYXRjaGVyV2l0aG91dChlbnRyeSwgZHJvcHBlZCkgOiBlbnRyeS5tYXRjaGVyO1xuICAgIC8vIFRlc3QgdGhlIHRyYWlsaW5nLXNsYXNoIGZvcm0gdG9vIHNvIGEgZGlyZWN0b3J5IG5vZGUgaXRzZWxmIG1hdGNoZXMgYVxuICAgIC8vIGBkaXIvYCBnaXRpZ25vcmUgcnVsZSAobm90IGp1c3QgaXRzIGNoaWxkcmVuKSDigJQgdGhpcyBsZXRzIHRoZSB3YWxrIGFuZFxuICAgIC8vIGNob2tpZGFyIHBydW5lIHRoZSBkaXJlY3RvcnkgaW5zdGVhZCBvZiBkZXNjZW5kaW5nIGludG8gaXQuXG4gICAgY29uc3QgYXNGaWxlID0gbWF0Y2hlci50ZXN0KHJlbCk7XG4gICAgY29uc3QgYXNEaXIgPSBtYXRjaGVyLnRlc3QoYCR7cmVsfS9gKTtcbiAgICBpZiAoYXNGaWxlLmlnbm9yZWQpIHtcbiAgICAgIHJldHVybiB7IGlnbm9yZWQ6IHRydWUsIHBhdHRlcm46IGFzRmlsZS5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0Rpci5pZ25vcmVkKSB7XG4gICAgICByZXR1cm4geyBpZ25vcmVkOiB0cnVlLCBwYXR0ZXJuOiBhc0Rpci5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0ZpbGUudW5pZ25vcmVkIHx8IGFzRGlyLnVuaWdub3JlZCkge1xuICAgICAgcmV0dXJuIHsgaWdub3JlZDogZmFsc2UsIHBhdHRlcm46IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIG9uZSBwYXRoIGxldmVsIGFnYWluc3QgZXZlcnkgYXBwbGljYWJsZSBgLmdpdGlnbm9yZWAsIGRlZXBlc3QgZmlsZVxuICAgKiBsYXN0IHNvIGl0IHdpbnMuIFJldHVybnMgdGhlIGxldmVsJ3MgdmVyZGljdCBwbHVzIHRoZSBydWxlcyB0aGF0IHZvdGVkIHRvXG4gICAqIGV4Y2x1ZGUgaXQsIHdoaWNoIHRoZSBjYWxsZXIgbmV1dHJhbGl6ZXMgaWYgdGhlIGxldmVsIGlzIHJlLWluY2x1ZGVkLlxuICAgKi9cbiAgY29uc3QgZGVjaWRlTGV2ZWwgPSAoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgbmV1dHJhbGl6ZWQ6IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PlxuICApID0+IHtcbiAgICBsZXQgZGVjaXNpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4Y2x1ZGVkQnk6IEFycmF5PHsgaW5kZXg6IG51bWJlcjsgcGF0dGVybjogc3RyaW5nIH0+ID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZ2l0aWdub3JlTWF0Y2hlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdpdGlnbm9yZU1hdGNoZXJzW2luZGV4XTtcbiAgICAgIGNvbnN0IHJlbCA9IHBvc2l4LnJlbGF0aXZlKGVudHJ5LmRpciwgcHJlZml4KTtcbiAgICAgIC8vIEVtcHR5IG1lYW5zIHRoZSBwYXRoICppcyogdGhlIGdpdGlnbm9yZSBkaXI7IGEgYC4uYCBwcmVmaXggbWVhbnMgaXQgaXNcbiAgICAgIC8vIG91dHNpZGUuIGBpZ25vcmVgIG9ubHkgYWNjZXB0cyByZWxhdGl2ZSwgaW4tdHJlZSBwYXRocy5cbiAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXN0RW50cnkoZW50cnksIHJlbCwgbmV1dHJhbGl6ZWQuZ2V0KGluZGV4KSk7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0Lmlnbm9yZWQpIHtcbiAgICAgICAgZGVjaXNpb24gPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZGVjaXNpb24gIT09IHRydWUpIHtcbiAgICAgICAgZXhjbHVkZWRCeSA9IFtdO1xuICAgICAgfVxuICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgaWYgKHJlc3VsdC5wYXR0ZXJuKSB7XG4gICAgICAgIGV4Y2x1ZGVkQnkucHVzaCh7IGluZGV4LCBwYXR0ZXJuOiByZXN1bHQucGF0dGVybiB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkZWNpc2lvbiwgZXhjbHVkZWRCeSB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIHRoZSBwYXRoIG9uZSBkaXJlY3Rvcnkgc2VnbWVudCBhdCBhIHRpbWUsIHRoZSB3YXkgZ2l0IGRvZXMuIEF0IGVhY2hcbiAgICogbGV2ZWwgdGhlIGRlZXBlc3QgYC5naXRpZ25vcmVgIHdpdGggYW4gb3BpbmlvbiB3aW5zOyBpZiB0aGF0IHZlcmRpY3QgaXNcbiAgICogXCJpZ25vcmVkXCIgZ2l0IHN0b3BzIGRlc2NlbmRpbmcsIHNvIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIFdoZW4gYSBsZXZlbCBpcyByZS1pbmNsdWRlZCBhZnRlciBhIHNoYWxsb3dlciBmaWxlIGV4Y2x1ZGVkIGl0LCB0aGUgcnVsZVxuICAgKiB0aGF0IGRpZCB0aGUgZXhjbHVkaW5nIGlzIG5ldXRyYWxpemVkIGZvciB0aGUgcmVzdCBvZiB0aGUgd2Fsay4gVGhhdCBpc1xuICAgKiB3aGF0IGxldHMgcm9vdCBgZ2VuZXJhdGVkL2AgKyBhcHAgYCFnZW5lcmF0ZWQvYCB3YXRjaCBgYXBwL2dlbmVyYXRlZC94LnRzYFxuICAgKiB3aGlsZSBhIHNpYmxpbmcgcm9vdCBydWxlIHN1Y2ggYXMgYCouc2VjcmV0YCBzdGlsbCBleGNsdWRlc1xuICAgKiBgYXBwL2dlbmVyYXRlZC9hLnNlY3JldGAuXG4gICAqL1xuICBjb25zdCB3YWxrR2l0aWdub3JlID0gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIW91dGVybW9zdERpcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZWxUb0Jhc2UgPSBwb3NpeC5yZWxhdGl2ZShvdXRlcm1vc3REaXIsIG5vcm1hbGl6ZWRQYXRoKTtcbiAgICBpZiAocmVsVG9CYXNlID09PSAnJyB8fCByZWxUb0Jhc2UgPT09ICcuLicgfHwgcmVsVG9CYXNlLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV1dHJhbGl6ZWQgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgbGV0IHByZWZpeCA9IG91dGVybW9zdERpcjtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiByZWxUb0Jhc2Uuc3BsaXQoJy8nKSkge1xuICAgICAgcHJlZml4ID0gYCR7cHJlZml4fS8ke3NlZ21lbnR9YDtcbiAgICAgIGNvbnN0IHsgZGVjaXNpb24sIGV4Y2x1ZGVkQnkgfSA9IGRlY2lkZUxldmVsKHByZWZpeCwgbmV1dHJhbGl6ZWQpO1xuXG4gICAgICBpZiAoZGVjaXNpb24gPT09IHRydWUpIHtcbiAgICAgICAgLy8gR2l0IGRvZXMgbm90IGRlc2NlbmQgaW50byBhbiBleGNsdWRlZCBkaXJlY3RvcnkuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGRlY2lzaW9uID09PSBmYWxzZSkge1xuICAgICAgICAvLyBUaGlzIGxldmVsIHdhcyByZS1pbmNsdWRlZDsgdGhlIHJ1bGVzIHRoYXQgZXhjbHVkZWQgaXQgbXVzdCBub3RcbiAgICAgICAgLy8gcmVzdXJyZWN0IGZvciBhbnl0aGluZyBiZW5lYXRoIGl0LlxuICAgICAgICBmb3IgKGNvbnN0IHsgaW5kZXgsIHBhdHRlcm4gfSBvZiBleGNsdWRlZEJ5KSB7XG4gICAgICAgICAgY29uc3QgZHJvcHBlZCA9IG5ldXRyYWxpemVkLmdldChpbmRleCkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgZHJvcHBlZC5hZGQocGF0dGVybik7XG4gICAgICAgICAgbmV1dHJhbGl6ZWQuc2V0KGluZGV4LCBkcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXR1cm4gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAvLyBCdWlsdC1pbiBhbmQgZW52LXZhciBmcmFnbWVudHMgYXJlIGhhcmQgZXhjbHVkZXM6IHRoZXkgYXJlIGRlbGliZXJhdGVseVxuICAgIC8vIG5vdCBzdWJqZWN0IHRvIGdpdGlnbm9yZSBuZWdhdGlvbiwgc28gYSBzdHJheSBgIWAgcnVsZSBjYW5ub3QgZHJhZ1xuICAgIC8vIGBub2RlX21vZHVsZXNgIG9yIHRoZSBnZW5lcmF0ZWQgZGlyZWN0b3J5IGJhY2sgaW50byB0aGUgd2F0Y2ggc2V0LlxuICAgIGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYW55TmVnYXRpb24pIHtcbiAgICAgIC8vIEZhc3QgcGF0aDogbm8gcmUtaW5jbHVzaW9uIGFueXdoZXJlLCBzbyB0aGUgZmlyc3QgbWF0Y2ggZGVjaWRlcy5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZ2l0aWdub3JlTWF0Y2hlcnMpIHtcbiAgICAgICAgY29uc3QgcmVsID0gcG9zaXgucmVsYXRpdmUoZW50cnkuZGlyLCBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkubWF0Y2hlci5pZ25vcmVzKHJlbCkgfHwgZW50cnkubWF0Y2hlci5pZ25vcmVzKGAke3JlbH0vYCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB3YWxrR2l0aWdub3JlKG5vcm1hbGl6ZWRQYXRoKTtcbiAgfTtcbn1cbiJdfQ==
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dhdGNoLWlnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1Q0Esb0RBUUM7QUF5SEQsZ0VBNkpDO0FBclVELHFDQUF1QztBQUN2Qyx5Q0FBMkM7QUFDM0Msb0RBQTZDO0FBRTdDOzs7O0dBSUc7QUFDVSxRQUFBLDhCQUE4QixHQUFzQjtJQUMvRCxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLFFBQVE7SUFDUixTQUFTO0lBQ1QsT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQix3QkFBd0I7Q0FDekIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRW5FOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQXlCO0lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sS0FBSztTQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNyQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQWNEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBdUIsRUFBRSxPQUFvQjtJQUNuRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtB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QkFDeEQsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25FLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgcG9zaXggfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGlnbm9yZSwgeyB0eXBlIElnbm9yZSB9IGZyb20gJ2lnbm9yZSc7XG5cbi8qKlxuICogRGlyZWN0b3J5LW5hbWUgZnJhZ21lbnRzIHRoYXQgYXJlIGFsd2F5cyBleGNsdWRlZCBmcm9tIHRoZSBkZXYgd2F0Y2hlcixcbiAqIHJlZ2FyZGxlc3Mgb2YgYC5naXRpZ25vcmVgLiBNYXRjaGVkIGFzIFBPU0lYIHN1YnN0cmluZ3Mgb2YgdGhlIGFic29sdXRlXG4gKiBwYXRoIChlLmcuIGAvbm9kZV9tb2R1bGVzL2AgbWF0Y2hlcyBhbnkgcGF0aCBjb250YWluaW5nIHRoYXQgc2VnbWVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnLy5naXQvJyxcbiAgJy9ub2RlX21vZHVsZXMvJyxcbiAgJy8ubmV4dC8nLFxuICAnLy50dXJiby8nLFxuICAnLy52ZXJjZWwvJyxcbiAgJy9kaXN0LycsXG4gICcvYnVpbGQvJyxcbiAgJy9vdXQvJyxcbiAgJy8uY2FjaGUvJyxcbiAgJy8ueWFybi8nLFxuICAnLy5wbnBtLXN0b3JlLycsXG4gICcvLnBhcmNlbC1jYWNoZS8nLFxuICAnLy53ZWxsLWtub3duL3dvcmtmbG93LycsXG5dO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgbGV0cyBhIHByb2plY3QgYWRkIGV4dHJhIHBhdGggZnJhZ21lbnRzIHRvIHRoZVxuICogZGV2IHdhdGNoZXIgaWdub3JlIGxpc3QuIENvbW1hLXNlcGFyYXRlZDsgZWFjaCBlbnRyeSBpcyBtYXRjaGVkIGFzIGEgUE9TSVhcbiAqIHN1YnN0cmluZyBvZiB0aGUgYWJzb2x1dGUgcGF0aCwgZXhhY3RseSBsaWtlIHtAbGluayBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFN9LlxuICogQWRkaXRpdmUgdG8gYC5naXRpZ25vcmVgIGFuZCB0aGUgYnVpbHQtaW4gbGlzdC4gRGV2LW1vZGUgb25seS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdBVENIX0lHTk9SRURfUEFUSFNfRU5WID0gJ1dPUktGTE9XX0RFVl9XQVRDSF9JR05PUkVEX1BBVEhTJztcblxuY29uc3QgdG9Qb3NpeCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbi8qKlxuICogUGFyc2UgdGhlIGNvbW1hLXNlcGFyYXRlZCB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IHZhbHVlIGludG8gYSBsaXN0XG4gKiBvZiBQT1NJWCBwYXRoIGZyYWdtZW50cy4gV2hpdGVzcGFjZSBpcyB0cmltbWVkIGFuZCBlbXB0eSBlbnRyaWVzIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlnbm9yZWRQYXRoc0Vudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgoZW50cnkpID0+IHRvUG9zaXgoZW50cnkudHJpbSgpKSlcbiAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubGVuZ3RoID4gMCk7XG59XG5cbmludGVyZmFjZSBHaXRpZ25vcmVNYXRjaGVyIHtcbiAgLyoqIFBPU0lYIGFic29sdXRlIGRpcmVjdG9yeSB0aGUgYC5naXRpZ25vcmVgIGxpdmVzIGluIChubyB0cmFpbGluZyBzbGFzaCkuICovXG4gIGRpcjogc3RyaW5nO1xuICBtYXRjaGVyOiBJZ25vcmU7XG4gIC8qKiBSYXcgcGF0dGVybiBsaW5lcywgdXNlZCB0byByZWJ1aWxkIHRoZSBtYXRjaGVyIHdpdGhvdXQgYSBuZXV0cmFsaXplZCBydWxlLiAqL1xuICBsaW5lczogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoaXMgZmlsZSBjb250YWlucyBhbnkgYCFgIHJlLWluY2x1c2lvbiBydWxlLiAqL1xuICBoYXNOZWdhdGlvbjogYm9vbGVhbjtcbiAgLyoqIE1hdGNoZXJzIHJlYnVpbHQgd2l0aCBzb21lIHJ1bGVzIGRyb3BwZWQsIGtleWVkIGJ5IHRoZSBkcm9wcGVkIHNldC4gKi9cbiAgZmlsdGVyZWQ6IE1hcDxzdHJpbmcsIElnbm9yZT47XG59XG5cbi8qKlxuICogUmVidWlsZCBhIG1hdGNoZXIgd2l0aCBgZHJvcHBlZGAgcGF0dGVybiBsaW5lcyByZW1vdmVkLiBVc2VkIHdoZW4gYSBydWxlXG4gKiBleGNsdWRlZCBhIGRpcmVjdG9yeSB0aGF0IGEgZGVlcGVyIGAuZ2l0aWdub3JlYCByZS1pbmNsdWRlZDogdGhhdCBydWxlIG11c3RcbiAqIHN0b3AgYXBwbHlpbmcgdG8gdGhlIHN1YnRyZWUsIHdoaWxlIGV2ZXJ5ICpvdGhlciogcnVsZSBpbiB0aGUgc2FtZSBmaWxlXG4gKiAoZS5nLiBhIGAqLnNlY3JldGAgdGhhdCBzdGlsbCBtYXRjaGVzIGEgZmlsZSBpbnNpZGUpIGtlZXBzIGFwcGx5aW5nLlxuICovXG5mdW5jdGlvbiBtYXRjaGVyV2l0aG91dChlbnRyeTogR2l0aWdub3JlTWF0Y2hlciwgZHJvcHBlZDogU2V0PHN0cmluZz4pOiBJZ25vcmUge1xuICBpZiAoZHJvcHBlZC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGVudHJ5Lm1hdGNoZXI7XG4gIH1cbiAgY29uc3Qga2V5ID0gWy4uLmRyb3BwZWRdLnNvcnQoKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgY2FjaGVkID0gZW50cnkuZmlsdGVyZWQuZ2V0KGtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG4gIGNvbnN0IHJlYnVpbHQgPSBpZ25vcmUoKS5hZGQoXG4gICAgZW50cnkubGluZXMuZmlsdGVyKChsaW5lKSA9PiAhZHJvcHBlZC5oYXMobGluZS50cmltKCkpKVxuICApO1xuICBlbnRyeS5maWx0ZXJlZC5zZXQoa2V5LCByZWJ1aWx0KTtcbiAgcmV0dXJuIHJlYnVpbHQ7XG59XG5cbi8qKlxuICogTG9hZCBgLmdpdGlnbm9yZWAgbWF0Y2hlcnMgZm9yIGB3b3JraW5nRGlyYCB1cCB0byBhbmQgaW5jbHVkaW5nXG4gKiBgcHJvamVjdFJvb3RgLiBJbiBhIG1vbm9yZXBvIHRoZSBsYXJnZXN0IGlnbm9yZWQgdHJlZXMgYXJlIHR5cGljYWxseSBsaXN0ZWRcbiAqIGF0IHRoZSB3b3Jrc3BhY2Ugcm9vdCwgYW5kIGFwcC1sZXZlbCBgLmdpdGlnbm9yZWAgZmlsZXMgYXJlIGNvdmVyZWQgdG9vLlxuICpcbiAqIFJldHVybmVkIG91dGVybW9zdC1maXJzdCAod29ya3NwYWNlIHJvb3Qg4oaSIGFwcCksIHdoaWNoIGlzIHRoZSBvcmRlciBnaXRcbiAqIGFwcGxpZXMgdGhlbTogYSBydWxlIGluIGEgZGVlcGVyIGAuZ2l0aWdub3JlYCBvdmVycmlkZXMgYSBjb25mbGljdGluZyBydWxlXG4gKiBmcm9tIGEgc2hhbGxvd2VyIG9uZS5cbiAqXG4gKiBOZXN0ZWQgYC5naXRpZ25vcmVgIGZpbGVzICpiZWxvdyogYHdvcmtpbmdEaXJgIGFyZSBpbnRlbnRpb25hbGx5IG5vdCByZWFkO1xuICogdGhlIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZW52IHZhciBiYWNrc3RvcHMgYW55dGhpbmcgdGhleSdkIGNvdmVyLlxuICovXG5mdW5jdGlvbiBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogR2l0aWdub3JlTWF0Y2hlcltdIHtcbiAgY29uc3QgbWF0Y2hlcnM6IEdpdGlnbm9yZU1hdGNoZXJbXSA9IFtdO1xuICBjb25zdCBzdG9wQXQgPSB0b1Bvc2l4KHByb2plY3RSb290KTtcblxuICBsZXQgY3VycmVudCA9IHRvUG9zaXgod29ya2luZ0Rpcik7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29udGVudCA9IHJlYWRGaWxlU3luYyhwb3NpeC5qb2luKGN1cnJlbnQsICcuZ2l0aWdub3JlJyksICd1dGYtOCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29udGVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICBtYXRjaGVycy5wdXNoKHtcbiAgICAgICAgZGlyOiBjdXJyZW50LFxuICAgICAgICBtYXRjaGVyOiBpZ25vcmUoKS5hZGQoY29udGVudCksXG4gICAgICAgIGxpbmVzLFxuICAgICAgICBoYXNOZWdhdGlvbjogbGluZXMuc29tZSgobGluZSkgPT4gbGluZS50cmltKCkuc3RhcnRzV2l0aCgnIScpKSxcbiAgICAgICAgZmlsdGVyZWQ6IG5ldyBNYXAoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ID09PSBzdG9wQXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG5cbiAgLy8gQ29sbGVjdGVkIGlubmVybW9zdC1maXJzdCB3aGlsZSB3YWxraW5nIHVwOyBnaXQgcHJlY2VkZW5jZSBpc1xuICAvLyBvdXRlcm1vc3QtZmlyc3QsIHdpdGggZGVlcGVyIGZpbGVzIHdpbm5pbmcuXG4gIHJldHVybiBtYXRjaGVycy5yZXZlcnNlKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hJZ25vcmVPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIGFwcCBkaXJlY3RvcnkgYmVpbmcgYnVpbHQuICovXG4gIHdvcmtpbmdEaXI6IHN0cmluZztcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIHdvcmtzcGFjZS9wcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIGB3b3JraW5nRGlyYC4gKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHRyYSBQT1NJWCBzdWJzdHJpbmcgZnJhZ21lbnRzIHRvIGlnbm9yZSwgaW4gYWRkaXRpb24gdG8gdGhlIGJ1aWx0LWluXG4gICAqIGxpc3QgYW5kIHRoZSB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IGVudiB2YXIuIFVzZWQgYnkgdGhlIGNhbGxlclxuICAgKiBmb3IgYnVpbGQtdGltZSBwYXRocyBzdWNoIGFzIHRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyZWN0b3J5LlxuICAgKi9cbiAgZXh0cmFGcmFnbWVudHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIGZvciB0aGUge0BsaW5rIFdBVENIX0lHTk9SRURfUEFUSFNfRU5WfSBlbnYgdmFyLiBQcmltYXJpbHkgZm9yXG4gICAqIHRlc3Rpbmc7IGRlZmF1bHRzIHRvIGBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl1gLlxuICAgKi9cbiAgZW52SWdub3JlZFBhdGhzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBkZXYtd2F0Y2hlciBpZ25vcmUgcHJlZGljYXRlLiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVjZWl2ZXMgYVxuICogUE9TSVgtbm9ybWFsaXplZCBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5zIGB0cnVlYCB3aGVuIHRoYXQgcGF0aCBzaG91bGQgYmVcbiAqIHBydW5lZCBmcm9tIGJvdGggdGhlIGluaXRpYWwgZGlyZWN0b3J5IHdhbGsgYW5kIHRoZSBjaG9raWRhciB3YXRjaCBzZXQuXG4gKlxuICogQSBwYXRoIGlzIGlnbm9yZWQgd2hlbiBpdCBtYXRjaGVzIGFueSBvZjpcbiAqIC0gYSBidWlsdC1pbiBmcmFnbWVudCAoe0BsaW5rIEJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UU30pIG9yIGNhbGxlclxuICogICBgZXh0cmFGcmFnbWVudHNgIChQT1NJWCBzdWJzdHJpbmcgbWF0Y2gpLFxuICogLSBhIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZnJhZ21lbnQgKFBPU0lYIHN1YnN0cmluZyBtYXRjaCksXG4gKiAtIGEgYC5naXRpZ25vcmVgIHJ1bGUgZnJvbSBgd29ya2luZ0RpcmAgdXAgdG8gYHByb2plY3RSb290YC5cbiAqXG4gKiBNYXRjaGVycyBhcmUgYnVpbHQgb25jZSBoZXJlOyB0aGUgcmV0dXJuZWQgcHJlZGljYXRlIGlzIGhvdCAoY2FsbGVkIHBlciBwYXRoXG4gKiBkdXJpbmcgdHJhdmVyc2FsIGFuZCBwZXIgY2hva2lkYXIgZXZlbnQpIGFuZCBkb2VzIG5vIEkvTy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKFxuICBvcHRpb25zOiBXYXRjaElnbm9yZU9wdGlvbnNcbik6IChub3JtYWxpemVkUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9wdGlvbnMud29ya2luZ0RpcjtcbiAgY29uc3QgZW52SWdub3JlZFBhdGhzID1cbiAgICBvcHRpb25zLmVudklnbm9yZWRQYXRocyA/PyBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl07XG5cbiAgY29uc3QgZnJhZ21lbnRzID0gW1xuICAgIC4uLkJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UUyxcbiAgICAuLi4ob3B0aW9ucy5leHRyYUZyYWdtZW50cyA/PyBbXSkubWFwKHRvUG9zaXgpLFxuICAgIC4uLnBhcnNlSWdub3JlZFBhdGhzRW52KGVudklnbm9yZWRQYXRocyksXG4gIF07XG5cbiAgY29uc3QgZ2l0aWdub3JlTWF0Y2hlcnMgPSBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gICAgb3B0aW9ucy53b3JraW5nRGlyLFxuICAgIHByb2plY3RSb290XG4gICk7XG4gIC8vIFJlLWluY2x1c2lvbiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gc29tZSBmaWxlIGhhcyBhIGAhYCBydWxlLiBXaXRob3V0IG9uZSxcbiAgLy8gdGhlIGNoZWFwIGZsYXQgc2NhbiBiZWxvdyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmdWxsIHBlci1kaXJlY3Rvcnkgd2Fsay5cbiAgY29uc3QgYW55TmVnYXRpb24gPSBnaXRpZ25vcmVNYXRjaGVycy5zb21lKChlbnRyeSkgPT4gZW50cnkuaGFzTmVnYXRpb24pO1xuICBjb25zdCBvdXRlcm1vc3REaXIgPSBnaXRpZ25vcmVNYXRjaGVyc1swXT8uZGlyO1xuXG4gIC8qKiBUZXN0IG9uZSBwYXRoIGFnYWluc3Qgb25lIG1hdGNoZXIsIGFzIGJvdGggYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBub2RlLiAqL1xuICBjb25zdCB0ZXN0RW50cnkgPSAoXG4gICAgZW50cnk6IEdpdGlnbm9yZU1hdGNoZXIsXG4gICAgcmVsOiBzdHJpbmcsXG4gICAgZHJvcHBlZDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWRcbiAgKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlciA9IGRyb3BwZWQgPyBtYXRjaGVyV2l0aG91dChlbnRyeSwgZHJvcHBlZCkgOiBlbnRyeS5tYXRjaGVyO1xuICAgIC8vIFRlc3QgdGhlIHRyYWlsaW5nLXNsYXNoIGZvcm0gdG9vIHNvIGEgZGlyZWN0b3J5IG5vZGUgaXRzZWxmIG1hdGNoZXMgYVxuICAgIC8vIGBkaXIvYCBnaXRpZ25vcmUgcnVsZSAobm90IGp1c3QgaXRzIGNoaWxkcmVuKTsgdGhpcyBsZXRzIHRoZSB3YWxrIGFuZFxuICAgIC8vIGNob2tpZGFyIHBydW5lIHRoZSBkaXJlY3RvcnkgaW5zdGVhZCBvZiBkZXNjZW5kaW5nIGludG8gaXQuXG4gICAgY29uc3QgYXNGaWxlID0gbWF0Y2hlci50ZXN0KHJlbCk7XG4gICAgY29uc3QgYXNEaXIgPSBtYXRjaGVyLnRlc3QoYCR7cmVsfS9gKTtcbiAgICBpZiAoYXNGaWxlLmlnbm9yZWQpIHtcbiAgICAgIHJldHVybiB7IGlnbm9yZWQ6IHRydWUsIHBhdHRlcm46IGFzRmlsZS5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0Rpci5pZ25vcmVkKSB7XG4gICAgICByZXR1cm4geyBpZ25vcmVkOiB0cnVlLCBwYXR0ZXJuOiBhc0Rpci5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0ZpbGUudW5pZ25vcmVkIHx8IGFzRGlyLnVuaWdub3JlZCkge1xuICAgICAgcmV0dXJuIHsgaWdub3JlZDogZmFsc2UsIHBhdHRlcm46IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIG9uZSBwYXRoIGxldmVsIGFnYWluc3QgZXZlcnkgYXBwbGljYWJsZSBgLmdpdGlnbm9yZWAsIGRlZXBlc3QgZmlsZVxuICAgKiBsYXN0IHNvIGl0IHdpbnMuIFJldHVybnMgdGhlIGxldmVsJ3MgdmVyZGljdCBwbHVzIHRoZSBydWxlcyB0aGF0IHZvdGVkIHRvXG4gICAqIGV4Y2x1ZGUgaXQsIHdoaWNoIHRoZSBjYWxsZXIgbmV1dHJhbGl6ZXMgaWYgdGhlIGxldmVsIGlzIHJlLWluY2x1ZGVkLlxuICAgKi9cbiAgY29uc3QgZGVjaWRlTGV2ZWwgPSAoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgbmV1dHJhbGl6ZWQ6IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PlxuICApID0+IHtcbiAgICBsZXQgZGVjaXNpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4Y2x1ZGVkQnk6IEFycmF5PHsgaW5kZXg6IG51bWJlcjsgcGF0dGVybjogc3RyaW5nIH0+ID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZ2l0aWdub3JlTWF0Y2hlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdpdGlnbm9yZU1hdGNoZXJzW2luZGV4XTtcbiAgICAgIGNvbnN0IHJlbCA9IHBvc2l4LnJlbGF0aXZlKGVudHJ5LmRpciwgcHJlZml4KTtcbiAgICAgIC8vIEVtcHR5IG1lYW5zIHRoZSBwYXRoICppcyogdGhlIGdpdGlnbm9yZSBkaXI7IGEgYC4uYCBwcmVmaXggbWVhbnMgaXQgaXNcbiAgICAgIC8vIG91dHNpZGUuIGBpZ25vcmVgIG9ubHkgYWNjZXB0cyByZWxhdGl2ZSwgaW4tdHJlZSBwYXRocy5cbiAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXN0RW50cnkoZW50cnksIHJlbCwgbmV1dHJhbGl6ZWQuZ2V0KGluZGV4KSk7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0Lmlnbm9yZWQpIHtcbiAgICAgICAgZGVjaXNpb24gPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZGVjaXNpb24gIT09IHRydWUpIHtcbiAgICAgICAgZXhjbHVkZWRCeSA9IFtdO1xuICAgICAgfVxuICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgaWYgKHJlc3VsdC5wYXR0ZXJuKSB7XG4gICAgICAgIGV4Y2x1ZGVkQnkucHVzaCh7IGluZGV4LCBwYXR0ZXJuOiByZXN1bHQucGF0dGVybiB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkZWNpc2lvbiwgZXhjbHVkZWRCeSB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIHRoZSBwYXRoIG9uZSBkaXJlY3Rvcnkgc2VnbWVudCBhdCBhIHRpbWUsIHRoZSB3YXkgZ2l0IGRvZXMuIEF0IGVhY2hcbiAgICogbGV2ZWwgdGhlIGRlZXBlc3QgYC5naXRpZ25vcmVgIHdpdGggYW4gb3BpbmlvbiB3aW5zOyBpZiB0aGF0IHZlcmRpY3QgaXNcbiAgICogXCJpZ25vcmVkXCIgZ2l0IHN0b3BzIGRlc2NlbmRpbmcsIHNvIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIFdoZW4gYSBsZXZlbCBpcyByZS1pbmNsdWRlZCBhZnRlciBhIHNoYWxsb3dlciBmaWxlIGV4Y2x1ZGVkIGl0LCB0aGUgcnVsZVxuICAgKiB0aGF0IGRpZCB0aGUgZXhjbHVkaW5nIGlzIG5ldXRyYWxpemVkIGZvciB0aGUgcmVzdCBvZiB0aGUgd2Fsay4gVGhhdCBpc1xuICAgKiB3aGF0IGxldHMgcm9vdCBgZ2VuZXJhdGVkL2AgKyBhcHAgYCFnZW5lcmF0ZWQvYCB3YXRjaCBgYXBwL2dlbmVyYXRlZC94LnRzYFxuICAgKiB3aGlsZSBhIHNpYmxpbmcgcm9vdCBydWxlIHN1Y2ggYXMgYCouc2VjcmV0YCBzdGlsbCBleGNsdWRlc1xuICAgKiBgYXBwL2dlbmVyYXRlZC9hLnNlY3JldGAuXG4gICAqL1xuICBjb25zdCB3YWxrR2l0aWdub3JlID0gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIW91dGVybW9zdERpcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZWxUb0Jhc2UgPSBwb3NpeC5yZWxhdGl2ZShvdXRlcm1vc3REaXIsIG5vcm1hbGl6ZWRQYXRoKTtcbiAgICBpZiAocmVsVG9CYXNlID09PSAnJyB8fCByZWxUb0Jhc2UgPT09ICcuLicgfHwgcmVsVG9CYXNlLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV1dHJhbGl6ZWQgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgbGV0IHByZWZpeCA9IG91dGVybW9zdERpcjtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiByZWxUb0Jhc2Uuc3BsaXQoJy8nKSkge1xuICAgICAgcHJlZml4ID0gYCR7cHJlZml4fS8ke3NlZ21lbnR9YDtcbiAgICAgIGNvbnN0IHsgZGVjaXNpb24sIGV4Y2x1ZGVkQnkgfSA9IGRlY2lkZUxldmVsKHByZWZpeCwgbmV1dHJhbGl6ZWQpO1xuXG4gICAgICBpZiAoZGVjaXNpb24gPT09IHRydWUpIHtcbiAgICAgICAgLy8gR2l0IGRvZXMgbm90IGRlc2NlbmQgaW50byBhbiBleGNsdWRlZCBkaXJlY3RvcnkuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGRlY2lzaW9uID09PSBmYWxzZSkge1xuICAgICAgICAvLyBUaGlzIGxldmVsIHdhcyByZS1pbmNsdWRlZDsgdGhlIHJ1bGVzIHRoYXQgZXhjbHVkZWQgaXQgbXVzdCBub3RcbiAgICAgICAgLy8gcmVzdXJyZWN0IGZvciBhbnl0aGluZyBiZW5lYXRoIGl0LlxuICAgICAgICBmb3IgKGNvbnN0IHsgaW5kZXgsIHBhdHRlcm4gfSBvZiBleGNsdWRlZEJ5KSB7XG4gICAgICAgICAgY29uc3QgZHJvcHBlZCA9IG5ldXRyYWxpemVkLmdldChpbmRleCkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgZHJvcHBlZC5hZGQocGF0dGVybik7XG4gICAgICAgICAgbmV1dHJhbGl6ZWQuc2V0KGluZGV4LCBkcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXR1cm4gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAvLyBCdWlsdC1pbiBhbmQgZW52LXZhciBmcmFnbWVudHMgYXJlIGhhcmQgZXhjbHVkZXM6IHRoZXkgYXJlIGRlbGliZXJhdGVseVxuICAgIC8vIG5vdCBzdWJqZWN0IHRvIGdpdGlnbm9yZSBuZWdhdGlvbiwgc28gYSBzdHJheSBgIWAgcnVsZSBjYW5ub3QgZHJhZ1xuICAgIC8vIGBub2RlX21vZHVsZXNgIG9yIHRoZSBnZW5lcmF0ZWQgZGlyZWN0b3J5IGJhY2sgaW50byB0aGUgd2F0Y2ggc2V0LlxuICAgIGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYW55TmVnYXRpb24pIHtcbiAgICAgIC8vIEZhc3QgcGF0aDogbm8gcmUtaW5jbHVzaW9uIGFueXdoZXJlLCBzbyB0aGUgZmlyc3QgbWF0Y2ggZGVjaWRlcy5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZ2l0aWdub3JlTWF0Y2hlcnMpIHtcbiAgICAgICAgY29uc3QgcmVsID0gcG9zaXgucmVsYXRpdmUoZW50cnkuZGlyLCBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkubWF0Y2hlci5pZ25vcmVzKHJlbCkgfHwgZW50cnkubWF0Y2hlci5pZ25vcmVzKGAke3JlbH0vYCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB3YWxrR2l0aWdub3JlKG5vcm1hbGl6ZWRQYXRoKTtcbiAgfTtcbn1cbiJdfQ==
@@ -57,21 +57,21 @@ export declare const replaceSourceSnapshots: ({ discoveredEntries, inputFiles, n
57
57
  * once when the baseline is refreshed from disk afterwards (the `rebuild`
58
58
  * callback owns both, in that order). An edit that lands between those reads
59
59
  * would be absorbed into the baseline without ever being built, and its
60
- * queued watcher event would then classify as a no-op silently dropping
60
+ * queued watcher event would then classify as a no-op, silently dropping
61
61
  * the change until the next unrelated rebuild.
62
62
  *
63
63
  * To prevent that, the relevant files are re-read from disk immediately
64
64
  * before the rebuild starts, and files present both before and after get
65
65
  * that captured value restored. A mid-(multi-second-)rebuild edit then still
66
66
  * diffs against what the rebuild consumed, while a duplicate watcher event
67
- * for content the rebuild already consumed watchers routinely emit several
68
- * events per edit, the triggering edit included diffs equal and stays a
67
+ * for content the rebuild already consumed (watchers routinely emit several
68
+ * events per edit, the triggering edit included) diffs equal and stays a
69
69
  * no-op instead of cascading into back-to-back full rebuilds.
70
70
  *
71
71
  * The capture costs one serial read of the relevant set (~150-250ms at ~250
72
- * files) per full rediscovery. A zero-read formulation cloning the live
72
+ * files) per full rediscovery. A zero-read formulation (cloning the live
73
73
  * baseline map and pinning the triggering batch to the snapshots
74
- * `classifyRebuild` read was tried and reverted: writes landing in the
74
+ * `classifyRebuild` read) was tried and reverted: writes landing in the
75
75
  * capture window (test-teardown restores, multi-flush setup bursts) are
76
76
  * content the imminent build consumes anyway, and the clone un-absorbs them
77
77
  * into follow-up full rebuilds; with real-world multi-second rebuilds that
@@ -84,7 +84,7 @@ export declare const replaceSourceSnapshots: ({ discoveredEntries, inputFiles, n
84
84
  * its queued add event forces the follow-up rebuild, and a new file the
85
85
  * build did consume gets a baseline matching what it consumed. What stays
86
86
  * narrowed rather than closed is a file created and then edited again within
87
- * one rebuild window eviction-style conservatism was tried against that
87
+ * one rebuild window; eviction-style conservatism was tried against that
88
88
  * and rejected too: it turned every added file's routine duplicate watcher
89
89
  * events into redundant full rebuilds.
90
90
  */
@@ -192,7 +192,7 @@ const replaceSourceSnapshots = async ({ discoveredEntries, inputFiles, normalize
192
192
  sourceSnapshots.set(file, await readSnapshot(file));
193
193
  }
194
194
  catch {
195
- // Unreadable (e.g. just deleted) files simply stay absent from the
195
+ // Unreadable (e.g. just deleted) files stay absent from the
196
196
  // freshly cleared map.
197
197
  }
198
198
  }));
@@ -228,21 +228,21 @@ const captureSourceSnapshots = async ({ discoveredEntries, inputFiles, normalize
228
228
  * once when the baseline is refreshed from disk afterwards (the `rebuild`
229
229
  * callback owns both, in that order). An edit that lands between those reads
230
230
  * would be absorbed into the baseline without ever being built, and its
231
- * queued watcher event would then classify as a no-op silently dropping
231
+ * queued watcher event would then classify as a no-op, silently dropping
232
232
  * the change until the next unrelated rebuild.
233
233
  *
234
234
  * To prevent that, the relevant files are re-read from disk immediately
235
235
  * before the rebuild starts, and files present both before and after get
236
236
  * that captured value restored. A mid-(multi-second-)rebuild edit then still
237
237
  * diffs against what the rebuild consumed, while a duplicate watcher event
238
- * for content the rebuild already consumed watchers routinely emit several
239
- * events per edit, the triggering edit included diffs equal and stays a
238
+ * for content the rebuild already consumed (watchers routinely emit several
239
+ * events per edit, the triggering edit included) diffs equal and stays a
240
240
  * no-op instead of cascading into back-to-back full rebuilds.
241
241
  *
242
242
  * The capture costs one serial read of the relevant set (~150-250ms at ~250
243
- * files) per full rediscovery. A zero-read formulation cloning the live
243
+ * files) per full rediscovery. A zero-read formulation (cloning the live
244
244
  * baseline map and pinning the triggering batch to the snapshots
245
- * `classifyRebuild` read was tried and reverted: writes landing in the
245
+ * `classifyRebuild` read) was tried and reverted: writes landing in the
246
246
  * capture window (test-teardown restores, multi-flush setup bursts) are
247
247
  * content the imminent build consumes anyway, and the clone un-absorbs them
248
248
  * into follow-up full rebuilds; with real-world multi-second rebuilds that
@@ -255,7 +255,7 @@ const captureSourceSnapshots = async ({ discoveredEntries, inputFiles, normalize
255
255
  * its queued add event forces the follow-up rebuild, and a new file the
256
256
  * build did consume gets a baseline matching what it consumed. What stays
257
257
  * narrowed rather than closed is a file created and then edited again within
258
- * one rebuild window eviction-style conservatism was tried against that
258
+ * one rebuild window; eviction-style conservatism was tried against that
259
259
  * and rejected too: it turned every added file's routine duplicate watcher
260
260
  * events into redundant full rebuilds.
261
261
  */
@@ -473,4 +473,4 @@ const classifyRebuild = async ({ discoveredEntries, fileChanges, inputFiles, nor
473
473
  }
474
474
  };
475
475
  exports.classifyRebuild = classifyRebuild;
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtcmVidWlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93YXRjaC1yZWJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUE0QztBQW9DNUMsTUFBTSx1QkFBdUIsR0FBRztJQUM5Qiw0QkFBNEI7SUFDNUIsMENBQTBDO0lBQzFDLHdDQUF3QztJQUN4Qyx5Q0FBeUM7Q0FDMUMsQ0FBQztBQUNGLE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsb0dBQW9HO0lBQ3BHLHlJQUF5STtDQUMxSSxDQUFDO0FBQ0YsTUFBTSxpQkFBaUIsR0FDckIsa01BQWtNLENBQUM7QUFFck0sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWhGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztDQUNKLENBQUMsQ0FBQztBQUNILE1BQU0scUJBQXFCLEdBQ3pCLHVFQUF1RSxDQUFDO0FBRTFFLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFH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QUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8seUJBQXlCLENBQUM7WUFDL0IsWUFBWSxFQUFFLG9CQUFvQjtZQUNsQyxpQkFBaUI7WUFDakIsYUFBYTtZQUNiLGNBQWM7U0FDZixDQUFDO1lBQ0EsQ0FBQyxDQUFDO2dCQUNFLElBQUksRUFBRSxLQUFLO2dCQUNYLHdCQUF3QixFQUFFLDRCQUE0QixDQUFDO29CQUNyRCxZQUFZLEVBQUUsb0JBQW9CO29CQUNsQyxpQkFBaUI7b0JBQ2pCLGFBQWE7aUJBQ2QsQ0FBQztnQkFDRixTQUFTO2FBQ1Y7WUFDSCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7QUFDSCxDQUFDLENBQUM7QUEzRlcsUUFBQSxlQUFlLG1CQTJGMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpc2NvdmVyZWRFbnRyaWVzTGlrZSB7XG4gIGRpc2NvdmVyZWRTdGVwczogU2V0PHN0cmluZz47XG4gIGRpc2NvdmVyZWRXb3JrZmxvd3M6IFNldDxzdHJpbmc+O1xuICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogU2V0PHN0cmluZz47XG4gIGRpc2NvdmVyZWRGaWxlcz86IFNldDxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaGFuZ2VzIHtcbiAgYWRkZWRGaWxlczogc3RyaW5nW107XG4gIG1vZGlmaWVkRmlsZXM6IHN0cmluZ1tdO1xuICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZVNuYXBzaG90IHtcbiAgaW1wb3J0U2lnbmF0dXJlOiBzdHJpbmc7XG4gIGRlZmluaXRpb25TaWduYXR1cmU6IHN0cmluZztcbiAgaGFzRGlyZWN0aXZlOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUmVidWlsZERlY2lzaW9uID1cbiAgfCB7IGtpbmQ6ICdub25lJzsgc25hcHNob3RzPzogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+IH1cbiAgfCB7XG4gICAgICBraW5kOiAnaG90JztcbiAgICAgIHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9uczogYm9vbGVhbjtcbiAgICAgIHNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xuICAgIH1cbiAgfCB7IGtpbmQ6ICdmdWxsJyB9O1xuXG5leHBvcnQgdHlwZSBTb3VyY2VQYXR0ZXJuRGV0ZWN0b3IgPSAoc291cmNlOiBzdHJpbmcpID0+IHtcbiAgaGFzRGlyZWN0aXZlOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGltcG9ydFNwZWNpZmllclBhdHRlcm5zID0gW1xuICAvXFxiZnJvbVxccytbJ1wiXShbXidcIl0rKVsnXCJdL2csXG4gIC8oPzpefFs7XFxuXSlcXHMqaW1wb3J0XFxzK1snXCJdKFteJ1wiXSspWydcIl0vZyxcbiAgL1xcYmltcG9ydFxccypcXChcXHMqWydcIl0oW14nXCJdKylbJ1wiXVxccypcXCkvZyxcbiAgL1xcYnJlcXVpcmVcXHMqXFwoXFxzKlsnXCJdKFteJ1wiXSspWydcIl1cXHMqXFwpL2csXG5dO1xuY29uc3QgZGlyZWN0aXZlRnVuY3Rpb25QYXR0ZXJucyA9IFtcbiAgL1xcYig/OmV4cG9ydFxccyspPyg/OmFzeW5jXFxzKyk/ZnVuY3Rpb25cXHMrKFtBLVphLXpfJF1bXFx3JF0qKVtee10qXFx7XFxzKlsnXCJddXNlXFxzKyh3b3JrZmxvd3xzdGVwKVsnXCJdL2csXG4gIC9cXGIoPzpleHBvcnRcXHMrKT9jb25zdFxccysoW0EtWmEtel8kXVtcXHckXSopXFxzKj1cXHMqKD86YXN5bmNcXHMqKT8oPzpcXChbXildKlxcKXxbQS1aYS16XyRdW1xcdyRdKilcXHMqPT5cXHMqXFx7XFxzKlsnXCJddXNlXFxzKyh3b3JrZmxvd3xzdGVwKVsnXCJdL2csXG5dO1xuY29uc3Qgc2VyZGVDbGFzc1BhdHRlcm4gPVxuICAvXFxiY2xhc3NcXHMrKFtBLVphLXpfJF1bXFx3JF0qKVtcXHNcXFNdKj8oPzpzdGF0aWNcXHMrY2xhc3NJZFxccyo9XFxzKlsnXCJdKFteJ1wiXSspWydcIl18U3ltYm9sXFwuZm9yXFxzKlxcKFxccypbJ1wiXXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlbJ1wiXVxccypcXCl8XFxbXFxzKldPUktGTE9XXyg/OlNFUklBTElaRXxERVNFUklBTElaRSlcXHMqXFxdKS9nO1xuXG5jb25zdCBkZWZhdWx0Tm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbmNvbnN0IFJFR0VYX1BSRUZJWF9DSEFSUyA9IG5ldyBTZXQoW1xuICAnKCcsXG4gICd7JyxcbiAgJ1snLFxuICAnPScsXG4gICc6JyxcbiAgJywnLFxuICAnOycsXG4gICchJyxcbiAgJz8nLFxuICAnJicsXG4gICd8JyxcbiAgJysnLFxuICAnLScsXG4gICcqJyxcbiAgJ34nLFxuICAnXicsXG4gICc8JyxcbiAgJz4nLFxuICAnJScsXG5dKTtcbmNvbnN0IFJFR0VYX1BSRUZJWF9LRVlXT1JEUyA9XG4gIC9cXGIoPzpyZXR1cm58dGhyb3d8Y2FzZXxkZWxldGV8dm9pZHx0eXBlb2Z8aW5zdGFuY2VvZnxpbnx5aWVsZHxhd2FpdCkkLztcblxuY29uc3QgY2FuU3RhcnRSZWdleExpdGVyYWwgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcHJldmlvdXMgPSBvdXRwdXQudHJpbUVuZCgpO1xuICBpZiAocHJldmlvdXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcHJldmlvdXNDaGFyID0gcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV07XG4gIHJldHVybiAoXG4gICAgUkVHRVhfUFJFRklYX0NIQVJTLmhhcyhwcmV2aW91c0NoYXIpIHx8IFJFR0VYX1BSRUZJWF9LRVlXT1JEUy50ZXN0KHByZXZpb3VzKVxuICApO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IEtlZXAgdGhlIHN0cmluZy9jb21tZW50L3JlZ2V4IHNjYW5uZXIgbG9jYWwgYW5kIGFsbG9jYXRpb24tbGlnaHQuXG5leHBvcnQgY29uc3Qgc3RyaXBDb21tZW50c0Zyb21Tb3VyY2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcXVvdGU6ICdcIicgfCBcIidcIiB8ICdgJyB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlZ2V4ID0gZmFsc2U7XG4gIGxldCByZWdleENoYXJDbGFzcyA9IGZhbHNlO1xuICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuXG4gIHdoaWxlIChpbmRleCA8IHNvdXJjZS5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyID0gc291cmNlW2luZGV4XTtcbiAgICBjb25zdCBuZXh0ID0gc291cmNlW2luZGV4ICsgMV07XG5cbiAgICBpZiAocXVvdGUgfHwgcmVnZXgpIHtcbiAgICAgIG91dHB1dCArPSBjaGFyO1xuICAgICAgaW5kZXgrKztcblxuICAgICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHF1b3RlICYmIGNoYXIgPT09IHF1b3RlKSB7XG4gICAgICAgIHF1b3RlID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChyZWdleCAmJiBjaGFyID09PSAnWycpIHtcbiAgICAgICAgcmVnZXhDaGFyQ2xhc3MgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZWdleCAmJiBjaGFyID09PSAnXScpIHtcbiAgICAgICAgcmVnZXhDaGFyQ2xhc3MgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocmVnZXggJiYgY2hhciA9PT0gJy8nICYmICFyZWdleENoYXJDbGFzcykge1xuICAgICAgICByZWdleCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICdcIicgfHwgY2hhciA9PT0gXCInXCIgfHwgY2hhciA9PT0gJ2AnKSB7XG4gICAgICBxdW90ZSA9IGNoYXI7XG4gICAgICBvdXRwdXQgKz0gY2hhcjtcbiAgICAgIGluZGV4Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjaGFyID09PSAnLycgJiZcbiAgICAgIG5leHQgIT09ICcvJyAmJlxuICAgICAgbmV4dCAhPT0gJyonICYmXG4gICAgICBjYW5TdGFydFJlZ2V4TGl0ZXJhbChvdXRwdXQpXG4gICAgKSB7XG4gICAgICByZWdleCA9IHRydWU7XG4gICAgICBvdXRwdXQgKz0gY2hhcjtcbiAgICAgIGluZGV4Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gJy8nICYmIG5leHQgPT09ICcvJykge1xuICAgICAgb3V0cHV0ICs9ICcgICc7XG4gICAgICBpbmRleCArPSAyO1xuICAgICAgd2hpbGUgKGluZGV4IDwgc291cmNlLmxlbmd0aCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnXFxuJykge1xuICAgICAgICBvdXRwdXQgKz0gJyAnO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICcvJyAmJiBuZXh0ID09PSAnKicpIHtcbiAgICAgIG91dHB1dCArPSAnICAnO1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIHdoaWxlIChpbmRleCA8IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYmxvY2tDaGFyID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgY29uc3QgYmxvY2tOZXh0ID0gc291cmNlW2luZGV4ICsgMV07XG4gICAgICAgIGlmIChibG9ja0NoYXIgPT09ICcqJyAmJiBibG9ja05leHQgPT09ICcvJykge1xuICAgICAgICAgIG91dHB1dCArPSAnICAnO1xuICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0ICs9IGJsb2NrQ2hhciA9PT0gJ1xcbicgPyAnXFxuJyA6ICcgJztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBjaGFyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuY29uc3Qgc291cmNlTWF5Q29udGFpbkltcG9ydFNwZWNpZmllcnMgPSAoc291cmNlOiBzdHJpbmcpID0+XG4gIHNvdXJjZS5pbmNsdWRlcygnaW1wb3J0JykgfHxcbiAgc291cmNlLmluY2x1ZGVzKCdyZXF1aXJlJykgfHxcbiAgc291cmNlLmluY2x1ZGVzKCdmcm9tJyk7XG5cbmNvbnN0IGNvbGxlY3RJbXBvcnRTcGVjaWZpZXJzID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGltcG9ydFNwZWNpZmllclBhdHRlcm5zKSB7XG4gICAgcGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2Ygc291cmNlLm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgc3BlY2lmaWVycy5hZGQobWF0Y2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLnNwZWNpZmllcnNdLnNvcnQoKS5qb2luKCdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0SW1wb3J0U2lnbmF0dXJlID0gKHNvdXJjZTogc3RyaW5nKSA9PlxuICBzb3VyY2VNYXlDb250YWluSW1wb3J0U3BlY2lmaWVycyhzb3VyY2UpXG4gICAgPyBjb2xsZWN0SW1wb3J0U3BlY2lmaWVycyhzb3VyY2UpXG4gICAgOiAnJztcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3REZWZpbml0aW9uU2lnbmF0dXJlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRlZmluaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgZGlyZWN0aXZlRnVuY3Rpb25QYXR0ZXJucykge1xuICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHNvdXJjZS5tYXRjaEFsbChwYXR0ZXJuKSkge1xuICAgICAgZGVmaW5pdGlvbnMucHVzaChgJHttYXRjaFsyXX06JHttYXRjaFsxXX1gKTtcbiAgICB9XG4gIH1cbiAgc2VyZGVDbGFzc1BhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBzb3VyY2UubWF0Y2hBbGwoc2VyZGVDbGFzc1BhdHRlcm4pKSB7XG4gICAgZGVmaW5pdGlvbnMucHVzaChgc2VyZGU6JHttYXRjaFsyXSA/PyBtYXRjaFsxXX1gKTtcbiAgfVxuICByZXR1cm4gZGVmaW5pdGlvbnMuc29ydCgpLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvdXJjZVNuYXBzaG90RnJvbVNvdXJjZSA9IChcbiAgc291cmNlOiBzdHJpbmcsXG4gIGRldGVjdFdvcmtmbG93UGF0dGVybnM6IFNvdXJjZVBhdHRlcm5EZXRlY3RvclxuKTogU291cmNlU25hcHNob3QgPT4ge1xuICBjb25zdCBzb3VyY2VXaXRob3V0Q29tbWVudHMgPSBzdHJpcENvbW1lbnRzRnJvbVNvdXJjZShzb3VyY2UpO1xuICBjb25zdCBwYXR0ZXJucyA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlV2l0aG91dENvbW1lbnRzKTtcblxuICByZXR1cm4ge1xuICAgIGltcG9ydFNpZ25hdHVyZTogZXh0cmFjdEltcG9ydFNpZ25hdHVyZShzb3VyY2VXaXRob3V0Q29tbWVudHMpLFxuICAgIGRlZmluaXRpb25TaWduYXR1cmU6IGV4dHJhY3REZWZpbml0aW9uU2lnbmF0dXJlKHNvdXJjZVdpdGhvdXRDb21tZW50cyksXG4gICAgaGFzRGlyZWN0aXZlOiBwYXR0ZXJucy5oYXNEaXJlY3RpdmUsXG4gICAgaGFzU2VyZGU6IHBhdHRlcm5zLmhhc1NlcmRlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvdXJjZVNuYXBzaG90ID0gYXN5bmMgKHtcbiAgZmlsZSxcbiAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbn06IHtcbiAgZmlsZTogc3RyaW5nO1xuICBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zOiBTb3VyY2VQYXR0ZXJuRGV0ZWN0b3I7XG59KTogUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD4gPT5cbiAgY3JlYXRlU291cmNlU25hcHNob3RGcm9tU291cmNlKFxuICAgIGF3YWl0IHJlYWRGaWxlKGZpbGUsICd1dGY4JyksXG4gICAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJuc1xuICApO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVsZXZhbnRGaWxlcyA9ICh7XG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBpbnB1dEZpbGVzLFxuICBub3JtYWxpemVQYXRoID0gZGVmYXVsdE5vcm1hbGl6ZVBhdGgsXG59OiB7XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICBub3JtYWxpemVQYXRoPzogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xufSkgPT5cbiAgbmV3IFNldChcbiAgICBbXG4gICAgICAuLi5pbnB1dEZpbGVzLFxuICAgICAgLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFN0ZXBzLFxuICAgICAgLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFdvcmtmbG93cyxcbiAgICAgIC4uLmRpc2NvdmVyZWRFbnRyaWVzLmRpc2NvdmVyZWRTZXJkZUZpbGVzLFxuICAgICAgLi4uKGRpc2NvdmVyZWRFbnRyaWVzLmRpc2NvdmVyZWRGaWxlcyB8fCBbXSksXG4gICAgXS5tYXAobm9ybWFsaXplUGF0aClcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMgPSBhc3luYyAoe1xuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgaW5wdXRGaWxlcyxcbiAgbm9ybWFsaXplUGF0aCA9IGRlZmF1bHROb3JtYWxpemVQYXRoLFxuICByZWFkU25hcHNob3QsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg/OiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBzb3VyY2VTbmFwc2hvdHMuY2xlYXIoKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgW1xuICAgICAgLi4uZ2V0UmVsZXZhbnRGaWxlcyh7XG4gICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgfSksXG4gICAgXS5tYXAoYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgYXdhaXQgcmVhZFNuYXBzaG90KGZpbGUpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBVbnJlYWRhYmxlIChlLmcuIGp1c3QgZGVsZXRlZCkgZmlsZXMgc2ltcGx5IHN0YXkgYWJzZW50IGZyb20gdGhlXG4gICAgICAgIC8vIGZyZXNobHkgY2xlYXJlZCBtYXAuXG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn07XG5cbi8qKlxuICogUmVhZCBzbmFwc2hvdHMgZm9yIGV2ZXJ5IGN1cnJlbnRseSByZWxldmFudCBmaWxlIHdpdGhvdXQgbXV0YXRpbmcgdGhlXG4gKiBzaGFyZWQgYmFzZWxpbmUgbWFwLiBVc2VkIGJ5IGBwaW5CYXNlbGluZXNBY3Jvc3NGdWxsUmVidWlsZGAgdG8gY2FwdHVyZVxuICogY29udGVudCBhdCByZWJ1aWxkIHN0YXJ0LCBzbyB0aGUgYmFzZWxpbmUgY2FuIGxhdGVyIGJlIHBpbm5lZCB0byB3aGF0IHRoZVxuICogcmVidWlsZCBhY3R1YWxseSBjb25zdW1lZC5cbiAqL1xuY29uc3QgY2FwdHVyZVNvdXJjZVNuYXBzaG90cyA9IGFzeW5jICh7XG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBpbnB1dEZpbGVzLFxuICBub3JtYWxpemVQYXRoID0gZGVmYXVsdE5vcm1hbGl6ZVBhdGgsXG4gIHJlYWRTbmFwc2hvdCxcbn06IHtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg/OiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG59KTogUHJvbWlzZTxNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD4+ID0+IHtcbiAgY29uc3Qgc25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90PigpO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBbXG4gICAgICAuLi5nZXRSZWxldmFudEZpbGVzKHtcbiAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgIGlucHV0RmlsZXMsXG4gICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICB9KSxcbiAgICBdLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc25hcHNob3RzLnNldChmaWxlLCBhd2FpdCByZWFkU25hcHNob3QoZmlsZSkpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH0pXG4gICk7XG4gIHJldHVybiBzbmFwc2hvdHM7XG59O1xuXG4vKipcbiAqIFJ1biBhIGZ1bGwgcmVidWlsZCB3aGlsZSBrZWVwaW5nIHRoZSBjbGFzc2lmaWVyIGJhc2VsaW5lIGFuY2hvcmVkIHRvIHRoZVxuICogY29udGVudCB0aGUgcmVidWlsZCBjb25zdW1lZC5cbiAqXG4gKiBBIGZ1bGwgcmVidWlsZCByZWFkcyBzb3VyY2VzIHR3aWNlOiBvbmNlIHdoZW4gdGhlIGJ1bmRsZXIgY29uc3VtZXMgdGhlbSBhbmRcbiAqIG9uY2Ugd2hlbiB0aGUgYmFzZWxpbmUgaXMgcmVmcmVzaGVkIGZyb20gZGlzayBhZnRlcndhcmRzICh0aGUgYHJlYnVpbGRgXG4gKiBjYWxsYmFjayBvd25zIGJvdGgsIGluIHRoYXQgb3JkZXIpLiBBbiBlZGl0IHRoYXQgbGFuZHMgYmV0d2VlbiB0aG9zZSByZWFkc1xuICogd291bGQgYmUgYWJzb3JiZWQgaW50byB0aGUgYmFzZWxpbmUgd2l0aG91dCBldmVyIGJlaW5nIGJ1aWx0LCBhbmQgaXRzXG4gKiBxdWV1ZWQgd2F0Y2hlciBldmVudCB3b3VsZCB0aGVuIGNsYXNzaWZ5IGFzIGEgbm8tb3Ag4oCUIHNpbGVudGx5IGRyb3BwaW5nXG4gKiB0aGUgY2hhbmdlIHVudGlsIHRoZSBuZXh0IHVucmVsYXRlZCByZWJ1aWxkLlxuICpcbiAqIFRvIHByZXZlbnQgdGhhdCwgdGhlIHJlbGV2YW50IGZpbGVzIGFyZSByZS1yZWFkIGZyb20gZGlzayBpbW1lZGlhdGVseVxuICogYmVmb3JlIHRoZSByZWJ1aWxkIHN0YXJ0cywgYW5kIGZpbGVzIHByZXNlbnQgYm90aCBiZWZvcmUgYW5kIGFmdGVyIGdldFxuICogdGhhdCBjYXB0dXJlZCB2YWx1ZSByZXN0b3JlZC4gQSBtaWQtKG11bHRpLXNlY29uZC0pcmVidWlsZCBlZGl0IHRoZW4gc3RpbGxcbiAqIGRpZmZzIGFnYWluc3Qgd2hhdCB0aGUgcmVidWlsZCBjb25zdW1lZCwgd2hpbGUgYSBkdXBsaWNhdGUgd2F0Y2hlciBldmVudFxuICogZm9yIGNvbnRlbnQgdGhlIHJlYnVpbGQgYWxyZWFkeSBjb25zdW1lZCDigJQgd2F0Y2hlcnMgcm91dGluZWx5IGVtaXQgc2V2ZXJhbFxuICogZXZlbnRzIHBlciBlZGl0LCB0aGUgdHJpZ2dlcmluZyBlZGl0IGluY2x1ZGVkIOKAlCBkaWZmcyBlcXVhbCBhbmQgc3RheXMgYVxuICogbm8tb3AgaW5zdGVhZCBvZiBjYXNjYWRpbmcgaW50byBiYWNrLXRvLWJhY2sgZnVsbCByZWJ1aWxkcy5cbiAqXG4gKiBUaGUgY2FwdHVyZSBjb3N0cyBvbmUgc2VyaWFsIHJlYWQgb2YgdGhlIHJlbGV2YW50IHNldCAofjE1MC0yNTBtcyBhdCB+MjUwXG4gKiBmaWxlcykgcGVyIGZ1bGwgcmVkaXNjb3ZlcnkuIEEgemVyby1yZWFkIGZvcm11bGF0aW9uIOKAlCBjbG9uaW5nIHRoZSBsaXZlXG4gKiBiYXNlbGluZSBtYXAgYW5kIHBpbm5pbmcgdGhlIHRyaWdnZXJpbmcgYmF0Y2ggdG8gdGhlIHNuYXBzaG90c1xuICogYGNsYXNzaWZ5UmVidWlsZGAgcmVhZCDigJQgd2FzIHRyaWVkIGFuZCByZXZlcnRlZDogd3JpdGVzIGxhbmRpbmcgaW4gdGhlXG4gKiBjYXB0dXJlIHdpbmRvdyAodGVzdC10ZWFyZG93biByZXN0b3JlcywgbXVsdGktZmx1c2ggc2V0dXAgYnVyc3RzKSBhcmVcbiAqIGNvbnRlbnQgdGhlIGltbWluZW50IGJ1aWxkIGNvbnN1bWVzIGFueXdheSwgYW5kIHRoZSBjbG9uZSB1bi1hYnNvcmJzIHRoZW1cbiAqIGludG8gZm9sbG93LXVwIGZ1bGwgcmVidWlsZHM7IHdpdGggcmVhbC13b3JsZCBtdWx0aS1zZWNvbmQgcmVidWlsZHMgdGhhdFxuICogYnVyc3RzIGludG8gcmVidWlsZCBjaGFpbnMuIFRoZSBkaXNrIGNhcHR1cmUgaW50ZW50aW9uYWxseSBjb2FsZXNjZXMgc3VjaFxuICogd3JpdGVzIGludG8gdGhlIGluLWZsaWdodCByZWJ1aWxkLlxuICpcbiAqIEZpbGVzIHRoZSByZWJ1aWxkIGRpc2NvdmVyZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhhdmUgbm8gY2FwdHVyZWQgY29udGVudFxuICogYW5kIGtlZXAgdGhlaXIgcG9zdC1idWlsZCBiYXNlbGluZS4gVGhhdCBpcyBhbHJlYWR5IHNvdW5kIGZvciB0aGUgdHdvXG4gKiBjYXNlcyB0aGF0IG1hdHRlcjogYSBuZXcgZmlsZSB0aGUgYnVpbGQgbWlzc2VkIGhhcyBubyBiYXNlbGluZSBhdCBhbGwsIHNvXG4gKiBpdHMgcXVldWVkIGFkZCBldmVudCBmb3JjZXMgdGhlIGZvbGxvdy11cCByZWJ1aWxkLCBhbmQgYSBuZXcgZmlsZSB0aGVcbiAqIGJ1aWxkIGRpZCBjb25zdW1lIGdldHMgYSBiYXNlbGluZSBtYXRjaGluZyB3aGF0IGl0IGNvbnN1bWVkLiBXaGF0IHN0YXlzXG4gKiBuYXJyb3dlZCByYXRoZXIgdGhhbiBjbG9zZWQgaXMgYSBmaWxlIGNyZWF0ZWQgYW5kIHRoZW4gZWRpdGVkIGFnYWluIHdpdGhpblxuICogb25lIHJlYnVpbGQgd2luZG93IOKAlCBldmljdGlvbi1zdHlsZSBjb25zZXJ2YXRpc20gd2FzIHRyaWVkIGFnYWluc3QgdGhhdFxuICogYW5kIHJlamVjdGVkIHRvbzogaXQgdHVybmVkIGV2ZXJ5IGFkZGVkIGZpbGUncyByb3V0aW5lIGR1cGxpY2F0ZSB3YXRjaGVyXG4gKiBldmVudHMgaW50byByZWR1bmRhbnQgZnVsbCByZWJ1aWxkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkID0gYXN5bmMgKHtcbiAgZGlzY292ZXJlZEVudHJpZXMsXG4gIGlucHV0RmlsZXMsXG4gIG5vcm1hbGl6ZVBhdGggPSBkZWZhdWx0Tm9ybWFsaXplUGF0aCxcbiAgcmVhZFNuYXBzaG90LFxuICByZWJ1aWxkLFxuICBzb3VyY2VTbmFwc2hvdHMsXG59OiB7XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICBub3JtYWxpemVQYXRoPzogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xuICByZWFkU25hcHNob3Q6IChmaWxlOiBzdHJpbmcpID0+IFByb21pc2U8U291cmNlU25hcHNob3Q+O1xuICByZWJ1aWxkOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzb3VyY2VTbmFwc2hvdHM6IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90Pjtcbn0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcHJlQnVpbGRTbmFwc2hvdHMgPSBhd2FpdCBjYXB0dXJlU291cmNlU25hcHNob3RzKHtcbiAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICBpbnB1dEZpbGVzLFxuICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgcmVhZFNuYXBzaG90LFxuICB9KTtcblxuICBhd2FpdCByZWJ1aWxkKCk7XG5cbiAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIHByZUJ1aWxkU25hcHNob3RzKSB7XG4gICAgaWYgKHNvdXJjZVNuYXBzaG90cy5oYXMoZmlsZSkpIHtcbiAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgZGlkU291cmNlU25hcHNob3RDaGFuZ2UgPSAoXG4gIHByZXZpb3VzU25hcHNob3Q6IFNvdXJjZVNuYXBzaG90LFxuICBuZXh0U25hcHNob3Q6IFNvdXJjZVNuYXBzaG90XG4pID0+XG4gIHByZXZpb3VzU25hcHNob3QuaW1wb3J0U2lnbmF0dXJlICE9PSBuZXh0U25hcHNob3QuaW1wb3J0U2lnbmF0dXJlIHx8XG4gIHByZXZpb3VzU25hcHNob3QuZGVmaW5pdGlvblNpZ25hdHVyZSAhPT0gbmV4dFNuYXBzaG90LmRlZmluaXRpb25TaWduYXR1cmUgfHxcbiAgcHJldmlvdXNTbmFwc2hvdC5oYXNEaXJlY3RpdmUgIT09IG5leHRTbmFwc2hvdC5oYXNEaXJlY3RpdmUgfHxcbiAgcHJldmlvdXNTbmFwc2hvdC5oYXNTZXJkZSAhPT0gbmV4dFNuYXBzaG90Lmhhc1NlcmRlO1xuXG5jb25zdCB1bmlxdWUgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiBbLi4ubmV3IFNldChwYXRocyldO1xuXG5jb25zdCBzbmFwc2hvdENoYW5nZWRGaWxlID0gYXN5bmMgKHtcbiAgZmlsZSxcbiAgbmV4dFNuYXBzaG90cyxcbiAgcmVhZFNuYXBzaG90LFxuICBzb3VyY2VTbmFwc2hvdHMsXG59OiB7XG4gIGZpbGU6IHN0cmluZztcbiAgbmV4dFNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xuICByZWFkU25hcHNob3Q6IChmaWxlOiBzdHJpbmcpID0+IFByb21pc2U8U291cmNlU25hcHNob3Q+O1xuICBzb3VyY2VTbmFwc2hvdHM6IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90Pjtcbn0pID0+IHtcbiAgY29uc3QgcHJldmlvdXNTbmFwc2hvdCA9IHNvdXJjZVNuYXBzaG90cy5nZXQoZmlsZSk7XG4gIGlmICghcHJldmlvdXNTbmFwc2hvdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTbmFwc2hvdCA9IGF3YWl0IHJlYWRTbmFwc2hvdChmaWxlKTtcbiAgaWYgKGRpZFNvdXJjZVNuYXBzaG90Q2hhbmdlKHByZXZpb3VzU25hcHNob3QsIG5leHRTbmFwc2hvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBuZXh0U25hcHNob3RzLnNldChmaWxlLCBuZXh0U25hcHNob3QpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IHJlbW92ZWRGaWxlc1JlcXVpcmVGdWxsUmVidWlsZCA9ICh7XG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBpbnB1dEZpbGVzLFxuICBub3JtYWxpemVQYXRoLFxuICByZW1vdmVkRmlsZXMsXG59OiB7XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICBub3JtYWxpemVQYXRoOiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlbW92ZWRGaWxlczogc3RyaW5nW107XG59KSA9PiB7XG4gIGNvbnN0IHJlbGV2YW50RmlsZXMgPSBnZXRSZWxldmFudEZpbGVzKHtcbiAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICBpbnB1dEZpbGVzLFxuICAgIG5vcm1hbGl6ZVBhdGgsXG4gIH0pO1xuICByZXR1cm4gcmVtb3ZlZEZpbGVzLnNvbWUoKGZpbGUpID0+IHJlbGV2YW50RmlsZXMuaGFzKGZpbGUpKTtcbn07XG5cbmNvbnN0IGFkZGVkRmlsZXNSZXF1aXJlRnVsbFJlYnVpbGQgPSBhc3luYyAoe1xuICBhZGRlZEZpbGVzLFxuICByZWFkU25hcHNob3QsXG59OiB7XG4gIGFkZGVkRmlsZXM6IHN0cmluZ1tdO1xuICByZWFkU25hcHNob3Q6IChmaWxlOiBzdHJpbmcpID0+IFByb21pc2U8U291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgYWRkZWRGaWxlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHJlYWRTbmFwc2hvdChmaWxlKTtcbiAgICAgIGlmIChzbmFwc2hvdC5oYXNEaXJlY3RpdmUgfHwgc25hcHNob3QuaGFzU2VyZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgcHJ1bmVTdGFsZUFkZGVkRmlsZXMgPSBhc3luYyAoe1xuICBhZGRlZEZpbGVzLFxuICByZWFkU25hcHNob3QsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgYWRkZWRGaWxlczogc3RyaW5nW107XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBjb25zdCBuZXh0QWRkZWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90PigpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiB1bmlxdWUoYWRkZWRGaWxlcykpIHtcbiAgICBjb25zdCBwcmV2aW91c1NuYXBzaG90ID0gc291cmNlU25hcHNob3RzLmdldChmaWxlKTtcbiAgICBpZiAoIXByZXZpb3VzU25hcHNob3QpIHtcbiAgICAgIG5leHRBZGRlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV4dFNuYXBzaG90ID0gYXdhaXQgcmVhZFNuYXBzaG90KGZpbGUpO1xuICAgICAgaWYgKGRpZFNvdXJjZVNuYXBzaG90Q2hhbmdlKHByZXZpb3VzU25hcHNob3QsIG5leHRTbmFwc2hvdCkpIHtcbiAgICAgICAgbmV4dEFkZGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzbmFwc2hvdHMuc2V0KGZpbGUsIG5leHRTbmFwc2hvdCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBuZXh0QWRkZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZGVkRmlsZXM6IG5leHRBZGRlZEZpbGVzLCBzbmFwc2hvdHMgfTtcbn07XG5cbmNvbnN0IG1vZGlmaWVkRmlsZXNSZXF1aXJlRnVsbFJlYnVpbGQgPSBhc3luYyAoe1xuICBtb2RpZmllZEZpbGVzLFxuICByZWFkU25hcHNob3QsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgbW9kaWZpZWRGaWxlczogc3RyaW5nW107XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgdW5pcXVlKG1vZGlmaWVkRmlsZXMpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5leHRTbmFwc2hvdCA9IGF3YWl0IHJlYWRTbmFwc2hvdChmaWxlKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU25hcHNob3QgPSBzb3VyY2VTbmFwc2hvdHMuZ2V0KGZpbGUpO1xuICAgICAgaWYgKCFwcmV2aW91c1NuYXBzaG90KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXh0U25hcHNob3QuaW1wb3J0U2lnbmF0dXJlIHx8XG4gICAgICAgICAgbmV4dFNuYXBzaG90LmRlZmluaXRpb25TaWduYXR1cmUgfHxcbiAgICAgICAgICBuZXh0U25hcHNob3QuaGFzRGlyZWN0aXZlIHx8XG4gICAgICAgICAgbmV4dFNuYXBzaG90Lmhhc1NlcmRlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGRpZFNvdXJjZVNuYXBzaG90Q2hhbmdlKHByZXZpb3VzU25hcHNob3QsIG5leHRTbmFwc2hvdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgZ2V0Q2hhbmdlZFJlbGV2YW50RmlsZXMgPSAoe1xuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgZmlsZUNoYW5nZXMsXG4gIGlucHV0RmlsZXMsXG4gIG5vcm1hbGl6ZVBhdGgsXG59OiB7XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIGZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcztcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZztcbn0pID0+IHtcbiAgY29uc3QgcmVsZXZhbnRGaWxlcyA9IGdldFJlbGV2YW50RmlsZXMoe1xuICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgIGlucHV0RmlsZXMsXG4gICAgbm9ybWFsaXplUGF0aCxcbiAgfSk7XG4gIHJldHVybiB1bmlxdWUoZmlsZUNoYW5nZXMubW9kaWZpZWRGaWxlcykuZmlsdGVyKChmaWxlKSA9PlxuICAgIHJlbGV2YW50RmlsZXMuaGFzKGZpbGUpXG4gICk7XG59O1xuXG5jb25zdCBjb2xsZWN0SG90UmVidWlsZFNuYXBzaG90cyA9IGFzeW5jICh7XG4gIGNoYW5nZWRGaWxlcyxcbiAgcmVhZFNuYXBzaG90LFxuICBzb3VyY2VTbmFwc2hvdHMsXG59OiB7XG4gIGNoYW5nZWRGaWxlczogc3RyaW5nW107XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBjb25zdCBzbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBjaGFuZ2VkRmlsZXMpIHtcbiAgICBpZiAoXG4gICAgICAhKGF3YWl0IHNuYXBzaG90Q2hhbmdlZEZpbGUoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBuZXh0U25hcHNob3RzOiBzbmFwc2hvdHMsXG4gICAgICAgIHJlYWRTbmFwc2hvdCxcbiAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgfSkpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIHJldHVybiBzbmFwc2hvdHM7XG59O1xuXG5jb25zdCB3b3JrZmxvd0VudHJ5RmlsZXNDaGFuZ2VkID0gKHtcbiAgY2hhbmdlZEZpbGVzLFxuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGFyZW50SGFzQ2hpbGQsXG59OiB7XG4gIGNoYW5nZWRGaWxlczogc3RyaW5nW107XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIG5vcm1hbGl6ZVBhdGg6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcGFyZW50SGFzQ2hpbGQ6IChcbiAgICBwYXJlbnQ6IHN0cmluZyxcbiAgICBjaGlsZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IGV4Y2x1ZGVkUm9vdHM/OiBJdGVyYWJsZTxzdHJpbmc+IH1cbiAgKSA9PiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCB3b3JrZmxvd0VudHJ5RmlsZXMgPSBbXG4gICAgLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFdvcmtmbG93cyxcbiAgICAuLi5kaXNjb3ZlcmVkRW50cmllcy5kaXNjb3ZlcmVkU2VyZGVGaWxlcyxcbiAgXS5tYXAobm9ybWFsaXplUGF0aCk7XG4gIGNvbnN0IHN0ZXBFbnRyeUZpbGVzID0gWy4uLmRpc2NvdmVyZWRFbnRyaWVzLmRpc2NvdmVyZWRTdGVwc10ubWFwKFxuICAgIG5vcm1hbGl6ZVBhdGhcbiAgKTtcblxuICByZXR1cm4gY2hhbmdlZEZpbGVzLnNvbWUoKGNoYW5nZWRGaWxlKSA9PiB7XG4gICAgaWYgKHdvcmtmbG93RW50cnlGaWxlcy5pbmNsdWRlcyhjaGFuZ2VkRmlsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3RlcEVudHJ5RmlsZXMuaW5jbHVkZXMoY2hhbmdlZEZpbGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB3b3JrZmxvd0VudHJ5RmlsZXMuc29tZSgod29ya2Zsb3dGaWxlKSA9PlxuICAgICAgcGFyZW50SGFzQ2hpbGQod29ya2Zsb3dGaWxlLCBjaGFuZ2VkRmlsZSwge1xuICAgICAgICBleGNsdWRlZFJvb3RzOiBzdGVwRW50cnlGaWxlcyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59O1xuXG5jb25zdCBzdGVwUmVnaXN0cmF0aW9uc05lZWRSZWZyZXNoID0gKHtcbiAgY2hhbmdlZEZpbGVzLFxuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgbm9ybWFsaXplUGF0aCxcbn06IHtcbiAgY2hhbmdlZEZpbGVzOiBzdHJpbmdbXTtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgbm9ybWFsaXplUGF0aDogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xufSkgPT4ge1xuICBjb25zdCBzZXJkZUZpbGVzID0gbmV3IFNldChcbiAgICBbLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFNlcmRlRmlsZXNdLm1hcChub3JtYWxpemVQYXRoKVxuICApO1xuICByZXR1cm4gY2hhbmdlZEZpbGVzLnNvbWUoKGZpbGUpID0+IHNlcmRlRmlsZXMuaGFzKGZpbGUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGFzc2lmeVJlYnVpbGQgPSBhc3luYyAoe1xuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgZmlsZUNoYW5nZXMsXG4gIGlucHV0RmlsZXMsXG4gIG5vcm1hbGl6ZVBhdGggPSBkZWZhdWx0Tm9ybWFsaXplUGF0aCxcbiAgcGFyZW50SGFzQ2hpbGQsXG4gIHJlYWRTbmFwc2hvdCxcbiAgc291cmNlU25hcHNob3RzLFxufToge1xuICBkaXNjb3ZlcmVkRW50cmllczogRGlzY292ZXJlZEVudHJpZXNMaWtlO1xuICBmaWxlQ2hhbmdlczogRmlsZUNoYW5nZXM7XG4gIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICBub3JtYWxpemVQYXRoPzogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xuICBwYXJlbnRIYXNDaGlsZDogKFxuICAgIHBhcmVudDogc3RyaW5nLFxuICAgIGNoaWxkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgZXhjbHVkZWRSb290cz86IEl0ZXJhYmxlPHN0cmluZz4gfVxuICApID0+IGJvb2xlYW47XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSk6IFByb21pc2U8UmVidWlsZERlY2lzaW9uPiA9PiB7XG4gIGNvbnN0IHBydW5lZEFkZGVkRmlsZXMgPSBhd2FpdCBwcnVuZVN0YWxlQWRkZWRGaWxlcyh7XG4gICAgYWRkZWRGaWxlczogZmlsZUNoYW5nZXMuYWRkZWRGaWxlcyxcbiAgICByZWFkU25hcHNob3QsXG4gICAgc291cmNlU25hcHNob3RzLFxuICB9KTtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVDaGFuZ2VzID0ge1xuICAgIC4uLmZpbGVDaGFuZ2VzLFxuICAgIGFkZGVkRmlsZXM6IHBydW5lZEFkZGVkRmlsZXMuYWRkZWRGaWxlcyxcbiAgfTtcblxuICBpZiAoXG4gICAgcmVtb3ZlZEZpbGVzUmVxdWlyZUZ1bGxSZWJ1aWxkKHtcbiAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICByZW1vdmVkRmlsZXM6IG5vcm1hbGl6ZWRGaWxlQ2hhbmdlcy5yZW1vdmVkRmlsZXMsXG4gICAgfSkgfHxcbiAgICAoYXdhaXQgYWRkZWRGaWxlc1JlcXVpcmVGdWxsUmVidWlsZCh7XG4gICAgICBhZGRlZEZpbGVzOiBub3JtYWxpemVkRmlsZUNoYW5nZXMuYWRkZWRGaWxlcyxcbiAgICAgIHJlYWRTbmFwc2hvdCxcbiAgICB9KSkgfHxcbiAgICAoYXdhaXQgbW9kaWZpZWRGaWxlc1JlcXVpcmVGdWxsUmVidWlsZCh7XG4gICAgICBtb2RpZmllZEZpbGVzOiBub3JtYWxpemVkRmlsZUNoYW5nZXMubW9kaWZpZWRGaWxlcyxcbiAgICAgIHJlYWRTbmFwc2hvdCxcbiAgICAgIHNvdXJjZVNuYXBzaG90cyxcbiAgICB9KSlcbiAgKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ2Z1bGwnIH07XG4gIH1cblxuICBjb25zdCBjaGFuZ2VkUmVsZXZhbnRGaWxlcyA9IGdldENoYW5nZWRSZWxldmFudEZpbGVzKHtcbiAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICBmaWxlQ2hhbmdlczogbm9ybWFsaXplZEZpbGVDaGFuZ2VzLFxuICAgIGlucHV0RmlsZXMsXG4gICAgbm9ybWFsaXplUGF0aCxcbiAgfSk7XG4gIGlmIChjaGFuZ2VkUmVsZXZhbnRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gcHJ1bmVkQWRkZWRGaWxlcy5zbmFwc2hvdHMuc2l6ZSA+IDBcbiAgICAgID8geyBraW5kOiAnbm9uZScsIHNuYXBzaG90czogcHJ1bmVkQWRkZWRGaWxlcy5zbmFwc2hvdHMgfVxuICAgICAgOiB7IGtpbmQ6ICdub25lJyB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzbmFwc2hvdHMgPSBhd2FpdCBjb2xsZWN0SG90UmVidWlsZFNuYXBzaG90cyh7XG4gICAgICBjaGFuZ2VkRmlsZXM6IGNoYW5nZWRSZWxldmFudEZpbGVzLFxuICAgICAgcmVhZFNuYXBzaG90LFxuICAgICAgc291cmNlU25hcHNob3RzLFxuICAgIH0pO1xuICAgIGlmICghc25hcHNob3RzKSB7XG4gICAgICByZXR1cm4geyBraW5kOiAnZnVsbCcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtmbG93RW50cnlGaWxlc0NoYW5nZWQoe1xuICAgICAgY2hhbmdlZEZpbGVzOiBjaGFuZ2VkUmVsZXZhbnRGaWxlcyxcbiAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgIHBhcmVudEhhc0NoaWxkLFxuICAgIH0pXG4gICAgICA/IHtcbiAgICAgICAgICBraW5kOiAnaG90JyxcbiAgICAgICAgICByZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnM6IHN0ZXBSZWdpc3RyYXRpb25zTmVlZFJlZnJlc2goe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBjaGFuZ2VkUmVsZXZhbnRGaWxlcyxcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzbmFwc2hvdHMsXG4gICAgICAgIH1cbiAgICAgIDogeyBraW5kOiAnbm9uZScsIHNuYXBzaG90cyB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBraW5kOiAnZnVsbCcgfTtcbiAgfVxufTtcbiJdfQ==
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtcmVidWlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93YXRjaC1yZWJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUE0QztBQW9DNUMsTUFBTSx1QkFBdUIsR0FBRztJQUM5Qiw0QkFBNEI7SUFDNUIsMENBQTBDO0lBQzFDLHdDQUF3QztJQUN4Qyx5Q0FBeUM7Q0FDMUMsQ0FBQztBQUNGLE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsb0dBQW9HO0lBQ3BHLHlJQUF5STtDQUMxSSxDQUFDO0FBQ0YsTUFBTSxpQkFBaUIsR0FDckIsa01BQWtNLENBQUM7QUFFck0sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWhGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsR0FBRztDQUNKLENBQUMsQ0FBQztBQUNILE1BQU0scUJBQXFCLEdBQ3pCLHVFQUF1RSxDQUFDO0FBRTFFLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFH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QUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8seUJBQXlCLENBQUM7WUFDL0IsWUFBWSxFQUFFLG9CQUFvQjtZQUNsQyxpQkFBaUI7WUFDakIsYUFBYTtZQUNiLGNBQWM7U0FDZixDQUFDO1lBQ0EsQ0FBQyxDQUFDO2dCQUNFLElBQUksRUFBRSxLQUFLO2dCQUNYLHdCQUF3QixFQUFFLDRCQUE0QixDQUFDO29CQUNyRCxZQUFZLEVBQUUsb0JBQW9CO29CQUNsQyxpQkFBaUI7b0JBQ2pCLGFBQWE7aUJBQ2QsQ0FBQztnQkFDRixTQUFTO2FBQ1Y7WUFDSCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7QUFDSCxDQUFDLENBQUM7QUEzRlcsUUFBQSxlQUFlLG1CQTJGMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpc2NvdmVyZWRFbnRyaWVzTGlrZSB7XG4gIGRpc2NvdmVyZWRTdGVwczogU2V0PHN0cmluZz47XG4gIGRpc2NvdmVyZWRXb3JrZmxvd3M6IFNldDxzdHJpbmc+O1xuICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogU2V0PHN0cmluZz47XG4gIGRpc2NvdmVyZWRGaWxlcz86IFNldDxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaGFuZ2VzIHtcbiAgYWRkZWRGaWxlczogc3RyaW5nW107XG4gIG1vZGlmaWVkRmlsZXM6IHN0cmluZ1tdO1xuICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZVNuYXBzaG90IHtcbiAgaW1wb3J0U2lnbmF0dXJlOiBzdHJpbmc7XG4gIGRlZmluaXRpb25TaWduYXR1cmU6IHN0cmluZztcbiAgaGFzRGlyZWN0aXZlOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUmVidWlsZERlY2lzaW9uID1cbiAgfCB7IGtpbmQ6ICdub25lJzsgc25hcHNob3RzPzogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+IH1cbiAgfCB7XG4gICAgICBraW5kOiAnaG90JztcbiAgICAgIHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9uczogYm9vbGVhbjtcbiAgICAgIHNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xuICAgIH1cbiAgfCB7IGtpbmQ6ICdmdWxsJyB9O1xuXG5leHBvcnQgdHlwZSBTb3VyY2VQYXR0ZXJuRGV0ZWN0b3IgPSAoc291cmNlOiBzdHJpbmcpID0+IHtcbiAgaGFzRGlyZWN0aXZlOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGltcG9ydFNwZWNpZmllclBhdHRlcm5zID0gW1xuICAvXFxiZnJvbVxccytbJ1wiXShbXidcIl0rKVsnXCJdL2csXG4gIC8oPzpefFs7XFxuXSlcXHMqaW1wb3J0XFxzK1snXCJdKFteJ1wiXSspWydcIl0vZyxcbiAgL1xcYmltcG9ydFxccypcXChcXHMqWydcIl0oW14nXCJdKylbJ1wiXVxccypcXCkvZyxcbiAgL1xcYnJlcXVpcmVcXHMqXFwoXFxzKlsnXCJdKFteJ1wiXSspWydcIl1cXHMqXFwpL2csXG5dO1xuY29uc3QgZGlyZWN0aXZlRnVuY3Rpb25QYXR0ZXJucyA9IFtcbiAgL1xcYig/OmV4cG9ydFxccyspPyg/OmFzeW5jXFxzKyk/ZnVuY3Rpb25cXHMrKFtBLVphLXpfJF1bXFx3JF0qKVtee10qXFx7XFxzKlsnXCJddXNlXFxzKyh3b3JrZmxvd3xzdGVwKVsnXCJdL2csXG4gIC9cXGIoPzpleHBvcnRcXHMrKT9jb25zdFxccysoW0EtWmEtel8kXVtcXHckXSopXFxzKj1cXHMqKD86YXN5bmNcXHMqKT8oPzpcXChbXildKlxcKXxbQS1aYS16XyRdW1xcdyRdKilcXHMqPT5cXHMqXFx7XFxzKlsnXCJddXNlXFxzKyh3b3JrZmxvd3xzdGVwKVsnXCJdL2csXG5dO1xuY29uc3Qgc2VyZGVDbGFzc1BhdHRlcm4gPVxuICAvXFxiY2xhc3NcXHMrKFtBLVphLXpfJF1bXFx3JF0qKVtcXHNcXFNdKj8oPzpzdGF0aWNcXHMrY2xhc3NJZFxccyo9XFxzKlsnXCJdKFteJ1wiXSspWydcIl18U3ltYm9sXFwuZm9yXFxzKlxcKFxccypbJ1wiXXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlbJ1wiXVxccypcXCl8XFxbXFxzKldPUktGTE9XXyg/OlNFUklBTElaRXxERVNFUklBTElaRSlcXHMqXFxdKS9nO1xuXG5jb25zdCBkZWZhdWx0Tm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbmNvbnN0IFJFR0VYX1BSRUZJWF9DSEFSUyA9IG5ldyBTZXQoW1xuICAnKCcsXG4gICd7JyxcbiAgJ1snLFxuICAnPScsXG4gICc6JyxcbiAgJywnLFxuICAnOycsXG4gICchJyxcbiAgJz8nLFxuICAnJicsXG4gICd8JyxcbiAgJysnLFxuICAnLScsXG4gICcqJyxcbiAgJ34nLFxuICAnXicsXG4gICc8JyxcbiAgJz4nLFxuICAnJScsXG5dKTtcbmNvbnN0IFJFR0VYX1BSRUZJWF9LRVlXT1JEUyA9XG4gIC9cXGIoPzpyZXR1cm58dGhyb3d8Y2FzZXxkZWxldGV8dm9pZHx0eXBlb2Z8aW5zdGFuY2VvZnxpbnx5aWVsZHxhd2FpdCkkLztcblxuY29uc3QgY2FuU3RhcnRSZWdleExpdGVyYWwgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcHJldmlvdXMgPSBvdXRwdXQudHJpbUVuZCgpO1xuICBpZiAocHJldmlvdXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcHJldmlvdXNDaGFyID0gcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV07XG4gIHJldHVybiAoXG4gICAgUkVHRVhfUFJFRklYX0NIQVJTLmhhcyhwcmV2aW91c0NoYXIpIHx8IFJFR0VYX1BSRUZJWF9LRVlXT1JEUy50ZXN0KHByZXZpb3VzKVxuICApO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IEtlZXAgdGhlIHN0cmluZy9jb21tZW50L3JlZ2V4IHNjYW5uZXIgbG9jYWwgYW5kIGFsbG9jYXRpb24tbGlnaHQuXG5leHBvcnQgY29uc3Qgc3RyaXBDb21tZW50c0Zyb21Tb3VyY2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcXVvdGU6ICdcIicgfCBcIidcIiB8ICdgJyB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlZ2V4ID0gZmFsc2U7XG4gIGxldCByZWdleENoYXJDbGFzcyA9IGZhbHNlO1xuICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuXG4gIHdoaWxlIChpbmRleCA8IHNvdXJjZS5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyID0gc291cmNlW2luZGV4XTtcbiAgICBjb25zdCBuZXh0ID0gc291cmNlW2luZGV4ICsgMV07XG5cbiAgICBpZiAocXVvdGUgfHwgcmVnZXgpIHtcbiAgICAgIG91dHB1dCArPSBjaGFyO1xuICAgICAgaW5kZXgrKztcblxuICAgICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHF1b3RlICYmIGNoYXIgPT09IHF1b3RlKSB7XG4gICAgICAgIHF1b3RlID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChyZWdleCAmJiBjaGFyID09PSAnWycpIHtcbiAgICAgICAgcmVnZXhDaGFyQ2xhc3MgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZWdleCAmJiBjaGFyID09PSAnXScpIHtcbiAgICAgICAgcmVnZXhDaGFyQ2xhc3MgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocmVnZXggJiYgY2hhciA9PT0gJy8nICYmICFyZWdleENoYXJDbGFzcykge1xuICAgICAgICByZWdleCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICdcIicgfHwgY2hhciA9PT0gXCInXCIgfHwgY2hhciA9PT0gJ2AnKSB7XG4gICAgICBxdW90ZSA9IGNoYXI7XG4gICAgICBvdXRwdXQgKz0gY2hhcjtcbiAgICAgIGluZGV4Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjaGFyID09PSAnLycgJiZcbiAgICAgIG5leHQgIT09ICcvJyAmJlxuICAgICAgbmV4dCAhPT0gJyonICYmXG4gICAgICBjYW5TdGFydFJlZ2V4TGl0ZXJhbChvdXRwdXQpXG4gICAgKSB7XG4gICAgICByZWdleCA9IHRydWU7XG4gICAgICBvdXRwdXQgKz0gY2hhcjtcbiAgICAgIGluZGV4Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gJy8nICYmIG5leHQgPT09ICcvJykge1xuICAgICAgb3V0cHV0ICs9ICcgICc7XG4gICAgICBpbmRleCArPSAyO1xuICAgICAgd2hpbGUgKGluZGV4IDwgc291cmNlLmxlbmd0aCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnXFxuJykge1xuICAgICAgICBvdXRwdXQgKz0gJyAnO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICcvJyAmJiBuZXh0ID09PSAnKicpIHtcbiAgICAgIG91dHB1dCArPSAnICAnO1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIHdoaWxlIChpbmRleCA8IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYmxvY2tDaGFyID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgY29uc3QgYmxvY2tOZXh0ID0gc291cmNlW2luZGV4ICsgMV07XG4gICAgICAgIGlmIChibG9ja0NoYXIgPT09ICcqJyAmJiBibG9ja05leHQgPT09ICcvJykge1xuICAgICAgICAgIG91dHB1dCArPSAnICAnO1xuICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0ICs9IGJsb2NrQ2hhciA9PT0gJ1xcbicgPyAnXFxuJyA6ICcgJztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBjaGFyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuY29uc3Qgc291cmNlTWF5Q29udGFpbkltcG9ydFNwZWNpZmllcnMgPSAoc291cmNlOiBzdHJpbmcpID0+XG4gIHNvdXJjZS5pbmNsdWRlcygnaW1wb3J0JykgfHxcbiAgc291cmNlLmluY2x1ZGVzKCdyZXF1aXJlJykgfHxcbiAgc291cmNlLmluY2x1ZGVzKCdmcm9tJyk7XG5cbmNvbnN0IGNvbGxlY3RJbXBvcnRTcGVjaWZpZXJzID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGltcG9ydFNwZWNpZmllclBhdHRlcm5zKSB7XG4gICAgcGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2Ygc291cmNlLm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgc3BlY2lmaWVycy5hZGQobWF0Y2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLnNwZWNpZmllcnNdLnNvcnQoKS5qb2luKCdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0SW1wb3J0U2lnbmF0dXJlID0gKHNvdXJjZTogc3RyaW5nKSA9PlxuICBzb3VyY2VNYXlDb250YWluSW1wb3J0U3BlY2lmaWVycyhzb3VyY2UpXG4gICAgPyBjb2xsZWN0SW1wb3J0U3BlY2lmaWVycyhzb3VyY2UpXG4gICAgOiAnJztcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3REZWZpbml0aW9uU2lnbmF0dXJlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRlZmluaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgZGlyZWN0aXZlRnVuY3Rpb25QYXR0ZXJucykge1xuICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHNvdXJjZS5tYXRjaEFsbChwYXR0ZXJuKSkge1xuICAgICAgZGVmaW5pdGlvbnMucHVzaChgJHttYXRjaFsyXX06JHttYXRjaFsxXX1gKTtcbiAgICB9XG4gIH1cbiAgc2VyZGVDbGFzc1BhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBzb3VyY2UubWF0Y2hBbGwoc2VyZGVDbGFzc1BhdHRlcm4pKSB7XG4gICAgZGVmaW5pdGlvbnMucHVzaChgc2VyZGU6JHttYXRjaFsyXSA/PyBtYXRjaFsxXX1gKTtcbiAgfVxuICByZXR1cm4gZGVmaW5pdGlvbnMuc29ydCgpLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvdXJjZVNuYXBzaG90RnJvbVNvdXJjZSA9IChcbiAgc291cmNlOiBzdHJpbmcsXG4gIGRldGVjdFdvcmtmbG93UGF0dGVybnM6IFNvdXJjZVBhdHRlcm5EZXRlY3RvclxuKTogU291cmNlU25hcHNob3QgPT4ge1xuICBjb25zdCBzb3VyY2VXaXRob3V0Q29tbWVudHMgPSBzdHJpcENvbW1lbnRzRnJvbVNvdXJjZShzb3VyY2UpO1xuICBjb25zdCBwYXR0ZXJucyA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlV2l0aG91dENvbW1lbnRzKTtcblxuICByZXR1cm4ge1xuICAgIGltcG9ydFNpZ25hdHVyZTogZXh0cmFjdEltcG9ydFNpZ25hdHVyZShzb3VyY2VXaXRob3V0Q29tbWVudHMpLFxuICAgIGRlZmluaXRpb25TaWduYXR1cmU6IGV4dHJhY3REZWZpbml0aW9uU2lnbmF0dXJlKHNvdXJjZVdpdGhvdXRDb21tZW50cyksXG4gICAgaGFzRGlyZWN0aXZlOiBwYXR0ZXJucy5oYXNEaXJlY3RpdmUsXG4gICAgaGFzU2VyZGU6IHBhdHRlcm5zLmhhc1NlcmRlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvdXJjZVNuYXBzaG90ID0gYXN5bmMgKHtcbiAgZmlsZSxcbiAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbn06IHtcbiAgZmlsZTogc3RyaW5nO1xuICBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zOiBTb3VyY2VQYXR0ZXJuRGV0ZWN0b3I7XG59KTogUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD4gPT5cbiAgY3JlYXRlU291cmNlU25hcHNob3RGcm9tU291cmNlKFxuICAgIGF3YWl0IHJlYWRGaWxlKGZpbGUsICd1dGY4JyksXG4gICAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJuc1xuICApO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVsZXZhbnRGaWxlcyA9ICh7XG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBpbnB1dEZpbGVzLFxuICBub3JtYWxpemVQYXRoID0gZGVmYXVsdE5vcm1hbGl6ZVBhdGgsXG59OiB7XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICBub3JtYWxpemVQYXRoPzogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xufSkgPT5cbiAgbmV3IFNldChcbiAgICBbXG4gICAgICAuLi5pbnB1dEZpbGVzLFxuICAgICAgLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFN0ZXBzLFxuICAgICAgLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFdvcmtmbG93cyxcbiAgICAgIC4uLmRpc2NvdmVyZWRFbnRyaWVzLmRpc2NvdmVyZWRTZXJkZUZpbGVzLFxuICAgICAgLi4uKGRpc2NvdmVyZWRFbnRyaWVzLmRpc2NvdmVyZWRGaWxlcyB8fCBbXSksXG4gICAgXS5tYXAobm9ybWFsaXplUGF0aClcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMgPSBhc3luYyAoe1xuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgaW5wdXRGaWxlcyxcbiAgbm9ybWFsaXplUGF0aCA9IGRlZmF1bHROb3JtYWxpemVQYXRoLFxuICByZWFkU25hcHNob3QsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg/OiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBzb3VyY2VTbmFwc2hvdHMuY2xlYXIoKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgW1xuICAgICAgLi4uZ2V0UmVsZXZhbnRGaWxlcyh7XG4gICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgfSksXG4gICAgXS5tYXAoYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgYXdhaXQgcmVhZFNuYXBzaG90KGZpbGUpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBVbnJlYWRhYmxlIChlLmcuIGp1c3QgZGVsZXRlZCkgZmlsZXMgc3RheSBhYnNlbnQgZnJvbSB0aGVcbiAgICAgICAgLy8gZnJlc2hseSBjbGVhcmVkIG1hcC5cbiAgICAgIH1cbiAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKiBSZWFkIHNuYXBzaG90cyBmb3IgZXZlcnkgY3VycmVudGx5IHJlbGV2YW50IGZpbGUgd2l0aG91dCBtdXRhdGluZyB0aGVcbiAqIHNoYXJlZCBiYXNlbGluZSBtYXAuIFVzZWQgYnkgYHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkYCB0byBjYXB0dXJlXG4gKiBjb250ZW50IGF0IHJlYnVpbGQgc3RhcnQsIHNvIHRoZSBiYXNlbGluZSBjYW4gbGF0ZXIgYmUgcGlubmVkIHRvIHdoYXQgdGhlXG4gKiByZWJ1aWxkIGFjdHVhbGx5IGNvbnN1bWVkLlxuICovXG5jb25zdCBjYXB0dXJlU291cmNlU25hcHNob3RzID0gYXN5bmMgKHtcbiAgZGlzY292ZXJlZEVudHJpZXMsXG4gIGlucHV0RmlsZXMsXG4gIG5vcm1hbGl6ZVBhdGggPSBkZWZhdWx0Tm9ybWFsaXplUGF0aCxcbiAgcmVhZFNuYXBzaG90LFxufToge1xuICBkaXNjb3ZlcmVkRW50cmllczogRGlzY292ZXJlZEVudHJpZXNMaWtlO1xuICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgbm9ybWFsaXplUGF0aD86IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcmVhZFNuYXBzaG90OiAoZmlsZTogc3RyaW5nKSA9PiBQcm9taXNlPFNvdXJjZVNuYXBzaG90Pjtcbn0pOiBQcm9taXNlPE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90Pj4gPT4ge1xuICBjb25zdCBzbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIFtcbiAgICAgIC4uLmdldFJlbGV2YW50RmlsZXMoe1xuICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgIH0pLFxuICAgIF0ubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzbmFwc2hvdHMuc2V0KGZpbGUsIGF3YWl0IHJlYWRTbmFwc2hvdChmaWxlKSk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSlcbiAgKTtcbiAgcmV0dXJuIHNuYXBzaG90cztcbn07XG5cbi8qKlxuICogUnVuIGEgZnVsbCByZWJ1aWxkIHdoaWxlIGtlZXBpbmcgdGhlIGNsYXNzaWZpZXIgYmFzZWxpbmUgYW5jaG9yZWQgdG8gdGhlXG4gKiBjb250ZW50IHRoZSByZWJ1aWxkIGNvbnN1bWVkLlxuICpcbiAqIEEgZnVsbCByZWJ1aWxkIHJlYWRzIHNvdXJjZXMgdHdpY2U6IG9uY2Ugd2hlbiB0aGUgYnVuZGxlciBjb25zdW1lcyB0aGVtIGFuZFxuICogb25jZSB3aGVuIHRoZSBiYXNlbGluZSBpcyByZWZyZXNoZWQgZnJvbSBkaXNrIGFmdGVyd2FyZHMgKHRoZSBgcmVidWlsZGBcbiAqIGNhbGxiYWNrIG93bnMgYm90aCwgaW4gdGhhdCBvcmRlcikuIEFuIGVkaXQgdGhhdCBsYW5kcyBiZXR3ZWVuIHRob3NlIHJlYWRzXG4gKiB3b3VsZCBiZSBhYnNvcmJlZCBpbnRvIHRoZSBiYXNlbGluZSB3aXRob3V0IGV2ZXIgYmVpbmcgYnVpbHQsIGFuZCBpdHNcbiAqIHF1ZXVlZCB3YXRjaGVyIGV2ZW50IHdvdWxkIHRoZW4gY2xhc3NpZnkgYXMgYSBuby1vcCwgc2lsZW50bHkgZHJvcHBpbmdcbiAqIHRoZSBjaGFuZ2UgdW50aWwgdGhlIG5leHQgdW5yZWxhdGVkIHJlYnVpbGQuXG4gKlxuICogVG8gcHJldmVudCB0aGF0LCB0aGUgcmVsZXZhbnQgZmlsZXMgYXJlIHJlLXJlYWQgZnJvbSBkaXNrIGltbWVkaWF0ZWx5XG4gKiBiZWZvcmUgdGhlIHJlYnVpbGQgc3RhcnRzLCBhbmQgZmlsZXMgcHJlc2VudCBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgZ2V0XG4gKiB0aGF0IGNhcHR1cmVkIHZhbHVlIHJlc3RvcmVkLiBBIG1pZC0obXVsdGktc2Vjb25kLSlyZWJ1aWxkIGVkaXQgdGhlbiBzdGlsbFxuICogZGlmZnMgYWdhaW5zdCB3aGF0IHRoZSByZWJ1aWxkIGNvbnN1bWVkLCB3aGlsZSBhIGR1cGxpY2F0ZSB3YXRjaGVyIGV2ZW50XG4gKiBmb3IgY29udGVudCB0aGUgcmVidWlsZCBhbHJlYWR5IGNvbnN1bWVkICh3YXRjaGVycyByb3V0aW5lbHkgZW1pdCBzZXZlcmFsXG4gKiBldmVudHMgcGVyIGVkaXQsIHRoZSB0cmlnZ2VyaW5nIGVkaXQgaW5jbHVkZWQpIGRpZmZzIGVxdWFsIGFuZCBzdGF5cyBhXG4gKiBuby1vcCBpbnN0ZWFkIG9mIGNhc2NhZGluZyBpbnRvIGJhY2stdG8tYmFjayBmdWxsIHJlYnVpbGRzLlxuICpcbiAqIFRoZSBjYXB0dXJlIGNvc3RzIG9uZSBzZXJpYWwgcmVhZCBvZiB0aGUgcmVsZXZhbnQgc2V0ICh+MTUwLTI1MG1zIGF0IH4yNTBcbiAqIGZpbGVzKSBwZXIgZnVsbCByZWRpc2NvdmVyeS4gQSB6ZXJvLXJlYWQgZm9ybXVsYXRpb24gKGNsb25pbmcgdGhlIGxpdmVcbiAqIGJhc2VsaW5lIG1hcCBhbmQgcGlubmluZyB0aGUgdHJpZ2dlcmluZyBiYXRjaCB0byB0aGUgc25hcHNob3RzXG4gKiBgY2xhc3NpZnlSZWJ1aWxkYCByZWFkKSB3YXMgdHJpZWQgYW5kIHJldmVydGVkOiB3cml0ZXMgbGFuZGluZyBpbiB0aGVcbiAqIGNhcHR1cmUgd2luZG93ICh0ZXN0LXRlYXJkb3duIHJlc3RvcmVzLCBtdWx0aS1mbHVzaCBzZXR1cCBidXJzdHMpIGFyZVxuICogY29udGVudCB0aGUgaW1taW5lbnQgYnVpbGQgY29uc3VtZXMgYW55d2F5LCBhbmQgdGhlIGNsb25lIHVuLWFic29yYnMgdGhlbVxuICogaW50byBmb2xsb3ctdXAgZnVsbCByZWJ1aWxkczsgd2l0aCByZWFsLXdvcmxkIG11bHRpLXNlY29uZCByZWJ1aWxkcyB0aGF0XG4gKiBidXJzdHMgaW50byByZWJ1aWxkIGNoYWlucy4gVGhlIGRpc2sgY2FwdHVyZSBpbnRlbnRpb25hbGx5IGNvYWxlc2NlcyBzdWNoXG4gKiB3cml0ZXMgaW50byB0aGUgaW4tZmxpZ2h0IHJlYnVpbGQuXG4gKlxuICogRmlsZXMgdGhlIHJlYnVpbGQgZGlzY292ZXJlZCBmb3IgdGhlIGZpcnN0IHRpbWUgaGF2ZSBubyBjYXB0dXJlZCBjb250ZW50XG4gKiBhbmQga2VlcCB0aGVpciBwb3N0LWJ1aWxkIGJhc2VsaW5lLiBUaGF0IGlzIGFscmVhZHkgc291bmQgZm9yIHRoZSB0d29cbiAqIGNhc2VzIHRoYXQgbWF0dGVyOiBhIG5ldyBmaWxlIHRoZSBidWlsZCBtaXNzZWQgaGFzIG5vIGJhc2VsaW5lIGF0IGFsbCwgc29cbiAqIGl0cyBxdWV1ZWQgYWRkIGV2ZW50IGZvcmNlcyB0aGUgZm9sbG93LXVwIHJlYnVpbGQsIGFuZCBhIG5ldyBmaWxlIHRoZVxuICogYnVpbGQgZGlkIGNvbnN1bWUgZ2V0cyBhIGJhc2VsaW5lIG1hdGNoaW5nIHdoYXQgaXQgY29uc3VtZWQuIFdoYXQgc3RheXNcbiAqIG5hcnJvd2VkIHJhdGhlciB0aGFuIGNsb3NlZCBpcyBhIGZpbGUgY3JlYXRlZCBhbmQgdGhlbiBlZGl0ZWQgYWdhaW4gd2l0aGluXG4gKiBvbmUgcmVidWlsZCB3aW5kb3c7IGV2aWN0aW9uLXN0eWxlIGNvbnNlcnZhdGlzbSB3YXMgdHJpZWQgYWdhaW5zdCB0aGF0XG4gKiBhbmQgcmVqZWN0ZWQgdG9vOiBpdCB0dXJuZWQgZXZlcnkgYWRkZWQgZmlsZSdzIHJvdXRpbmUgZHVwbGljYXRlIHdhdGNoZXJcbiAqIGV2ZW50cyBpbnRvIHJlZHVuZGFudCBmdWxsIHJlYnVpbGRzLlxuICovXG5leHBvcnQgY29uc3QgcGluQmFzZWxpbmVzQWNyb3NzRnVsbFJlYnVpbGQgPSBhc3luYyAoe1xuICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgaW5wdXRGaWxlcyxcbiAgbm9ybWFsaXplUGF0aCA9IGRlZmF1bHROb3JtYWxpemVQYXRoLFxuICByZWFkU25hcHNob3QsXG4gIHJlYnVpbGQsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg/OiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHJlYnVpbGQ6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBwcmVCdWlsZFNuYXBzaG90cyA9IGF3YWl0IGNhcHR1cmVTb3VyY2VTbmFwc2hvdHMoe1xuICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgIGlucHV0RmlsZXMsXG4gICAgbm9ybWFsaXplUGF0aCxcbiAgICByZWFkU25hcHNob3QsXG4gIH0pO1xuXG4gIGF3YWl0IHJlYnVpbGQoKTtcblxuICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgcHJlQnVpbGRTbmFwc2hvdHMpIHtcbiAgICBpZiAoc291cmNlU25hcHNob3RzLmhhcyhmaWxlKSkge1xuICAgICAgc291cmNlU25hcHNob3RzLnNldChmaWxlLCBzbmFwc2hvdCk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBkaWRTb3VyY2VTbmFwc2hvdENoYW5nZSA9IChcbiAgcHJldmlvdXNTbmFwc2hvdDogU291cmNlU25hcHNob3QsXG4gIG5leHRTbmFwc2hvdDogU291cmNlU25hcHNob3RcbikgPT5cbiAgcHJldmlvdXNTbmFwc2hvdC5pbXBvcnRTaWduYXR1cmUgIT09IG5leHRTbmFwc2hvdC5pbXBvcnRTaWduYXR1cmUgfHxcbiAgcHJldmlvdXNTbmFwc2hvdC5kZWZpbml0aW9uU2lnbmF0dXJlICE9PSBuZXh0U25hcHNob3QuZGVmaW5pdGlvblNpZ25hdHVyZSB8fFxuICBwcmV2aW91c1NuYXBzaG90Lmhhc0RpcmVjdGl2ZSAhPT0gbmV4dFNuYXBzaG90Lmhhc0RpcmVjdGl2ZSB8fFxuICBwcmV2aW91c1NuYXBzaG90Lmhhc1NlcmRlICE9PSBuZXh0U25hcHNob3QuaGFzU2VyZGU7XG5cbmNvbnN0IHVuaXF1ZSA9IChwYXRoczogc3RyaW5nW10pID0+IFsuLi5uZXcgU2V0KHBhdGhzKV07XG5cbmNvbnN0IHNuYXBzaG90Q2hhbmdlZEZpbGUgPSBhc3luYyAoe1xuICBmaWxlLFxuICBuZXh0U25hcHNob3RzLFxuICByZWFkU25hcHNob3QsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgZmlsZTogc3RyaW5nO1xuICBuZXh0U25hcHNob3RzOiBNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD47XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG4gIHNvdXJjZVNuYXBzaG90czogTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+O1xufSkgPT4ge1xuICBjb25zdCBwcmV2aW91c1NuYXBzaG90ID0gc291cmNlU25hcHNob3RzLmdldChmaWxlKTtcbiAgaWYgKCFwcmV2aW91c1NuYXBzaG90KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbmV4dFNuYXBzaG90ID0gYXdhaXQgcmVhZFNuYXBzaG90KGZpbGUpO1xuICBpZiAoZGlkU291cmNlU25hcHNob3RDaGFuZ2UocHJldmlvdXNTbmFwc2hvdCwgbmV4dFNuYXBzaG90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG5leHRTbmFwc2hvdHMuc2V0KGZpbGUsIG5leHRTbmFwc2hvdCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgcmVtb3ZlZEZpbGVzUmVxdWlyZUZ1bGxSZWJ1aWxkID0gKHtcbiAgZGlzY292ZXJlZEVudHJpZXMsXG4gIGlucHV0RmlsZXMsXG4gIG5vcm1hbGl6ZVBhdGgsXG4gIHJlbW92ZWRGaWxlcyxcbn06IHtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcmVtb3ZlZEZpbGVzOiBzdHJpbmdbXTtcbn0pID0+IHtcbiAgY29uc3QgcmVsZXZhbnRGaWxlcyA9IGdldFJlbGV2YW50RmlsZXMoe1xuICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgIGlucHV0RmlsZXMsXG4gICAgbm9ybWFsaXplUGF0aCxcbiAgfSk7XG4gIHJldHVybiByZW1vdmVkRmlsZXMuc29tZSgoZmlsZSkgPT4gcmVsZXZhbnRGaWxlcy5oYXMoZmlsZSkpO1xufTtcblxuY29uc3QgYWRkZWRGaWxlc1JlcXVpcmVGdWxsUmVidWlsZCA9IGFzeW5jICh7XG4gIGFkZGVkRmlsZXMsXG4gIHJlYWRTbmFwc2hvdCxcbn06IHtcbiAgYWRkZWRGaWxlczogc3RyaW5nW107XG4gIHJlYWRTbmFwc2hvdDogKGZpbGU6IHN0cmluZykgPT4gUHJvbWlzZTxTb3VyY2VTbmFwc2hvdD47XG59KSA9PiB7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBhZGRlZEZpbGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgcmVhZFNuYXBzaG90KGZpbGUpO1xuICAgICAgaWYgKHNuYXBzaG90Lmhhc0RpcmVjdGl2ZSB8fCBzbmFwc2hvdC5oYXNTZXJkZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBwcnVuZVN0YWxlQWRkZWRGaWxlcyA9IGFzeW5jICh7XG4gIGFkZGVkRmlsZXMsXG4gIHJlYWRTbmFwc2hvdCxcbiAgc291cmNlU25hcHNob3RzLFxufToge1xuICBhZGRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgcmVhZFNuYXBzaG90OiAoZmlsZTogc3RyaW5nKSA9PiBQcm9taXNlPFNvdXJjZVNuYXBzaG90PjtcbiAgc291cmNlU25hcHNob3RzOiBNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD47XG59KSA9PiB7XG4gIGNvbnN0IG5leHRBZGRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIHVuaXF1ZShhZGRlZEZpbGVzKSkge1xuICAgIGNvbnN0IHByZXZpb3VzU25hcHNob3QgPSBzb3VyY2VTbmFwc2hvdHMuZ2V0KGZpbGUpO1xuICAgIGlmICghcHJldmlvdXNTbmFwc2hvdCkge1xuICAgICAgbmV4dEFkZGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBuZXh0U25hcHNob3QgPSBhd2FpdCByZWFkU25hcHNob3QoZmlsZSk7XG4gICAgICBpZiAoZGlkU291cmNlU25hcHNob3RDaGFuZ2UocHJldmlvdXNTbmFwc2hvdCwgbmV4dFNuYXBzaG90KSkge1xuICAgICAgICBuZXh0QWRkZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNuYXBzaG90cy5zZXQoZmlsZSwgbmV4dFNuYXBzaG90KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIG5leHRBZGRlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkZWRGaWxlczogbmV4dEFkZGVkRmlsZXMsIHNuYXBzaG90cyB9O1xufTtcblxuY29uc3QgbW9kaWZpZWRGaWxlc1JlcXVpcmVGdWxsUmVidWlsZCA9IGFzeW5jICh7XG4gIG1vZGlmaWVkRmlsZXMsXG4gIHJlYWRTbmFwc2hvdCxcbiAgc291cmNlU25hcHNob3RzLFxufToge1xuICBtb2RpZmllZEZpbGVzOiBzdHJpbmdbXTtcbiAgcmVhZFNuYXBzaG90OiAoZmlsZTogc3RyaW5nKSA9PiBQcm9taXNlPFNvdXJjZVNuYXBzaG90PjtcbiAgc291cmNlU25hcHNob3RzOiBNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD47XG59KSA9PiB7XG4gIGZvciAoY29uc3QgZmlsZSBvZiB1bmlxdWUobW9kaWZpZWRGaWxlcykpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV4dFNuYXBzaG90ID0gYXdhaXQgcmVhZFNuYXBzaG90KGZpbGUpO1xuICAgICAgY29uc3QgcHJldmlvdXNTbmFwc2hvdCA9IHNvdXJjZVNuYXBzaG90cy5nZXQoZmlsZSk7XG4gICAgICBpZiAoIXByZXZpb3VzU25hcHNob3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5leHRTbmFwc2hvdC5pbXBvcnRTaWduYXR1cmUgfHxcbiAgICAgICAgICBuZXh0U25hcHNob3QuZGVmaW5pdGlvblNpZ25hdHVyZSB8fFxuICAgICAgICAgIG5leHRTbmFwc2hvdC5oYXNEaXJlY3RpdmUgfHxcbiAgICAgICAgICBuZXh0U25hcHNob3QuaGFzU2VyZGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZGlkU291cmNlU25hcHNob3RDaGFuZ2UocHJldmlvdXNTbmFwc2hvdCwgbmV4dFNuYXBzaG90KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBnZXRDaGFuZ2VkUmVsZXZhbnRGaWxlcyA9ICh7XG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBmaWxlQ2hhbmdlcyxcbiAgaW5wdXRGaWxlcyxcbiAgbm9ybWFsaXplUGF0aCxcbn06IHtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzO1xuICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgbm9ybWFsaXplUGF0aDogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xufSkgPT4ge1xuICBjb25zdCByZWxldmFudEZpbGVzID0gZ2V0UmVsZXZhbnRGaWxlcyh7XG4gICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgaW5wdXRGaWxlcyxcbiAgICBub3JtYWxpemVQYXRoLFxuICB9KTtcbiAgcmV0dXJuIHVuaXF1ZShmaWxlQ2hhbmdlcy5tb2RpZmllZEZpbGVzKS5maWx0ZXIoKGZpbGUpID0+XG4gICAgcmVsZXZhbnRGaWxlcy5oYXMoZmlsZSlcbiAgKTtcbn07XG5cbmNvbnN0IGNvbGxlY3RIb3RSZWJ1aWxkU25hcHNob3RzID0gYXN5bmMgKHtcbiAgY2hhbmdlZEZpbGVzLFxuICByZWFkU25hcHNob3QsXG4gIHNvdXJjZVNuYXBzaG90cyxcbn06IHtcbiAgY2hhbmdlZEZpbGVzOiBzdHJpbmdbXTtcbiAgcmVhZFNuYXBzaG90OiAoZmlsZTogc3RyaW5nKSA9PiBQcm9taXNlPFNvdXJjZVNuYXBzaG90PjtcbiAgc291cmNlU25hcHNob3RzOiBNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD47XG59KSA9PiB7XG4gIGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD4oKTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGNoYW5nZWRGaWxlcykge1xuICAgIGlmIChcbiAgICAgICEoYXdhaXQgc25hcHNob3RDaGFuZ2VkRmlsZSh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIG5leHRTbmFwc2hvdHM6IHNuYXBzaG90cyxcbiAgICAgICAgcmVhZFNuYXBzaG90LFxuICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICB9KSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNuYXBzaG90cztcbn07XG5cbmNvbnN0IHdvcmtmbG93RW50cnlGaWxlc0NoYW5nZWQgPSAoe1xuICBjaGFuZ2VkRmlsZXMsXG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBub3JtYWxpemVQYXRoLFxuICBwYXJlbnRIYXNDaGlsZCxcbn06IHtcbiAgY2hhbmdlZEZpbGVzOiBzdHJpbmdbXTtcbiAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzTGlrZTtcbiAgbm9ybWFsaXplUGF0aDogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xuICBwYXJlbnRIYXNDaGlsZDogKFxuICAgIHBhcmVudDogc3RyaW5nLFxuICAgIGNoaWxkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgZXhjbHVkZWRSb290cz86IEl0ZXJhYmxlPHN0cmluZz4gfVxuICApID0+IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHdvcmtmbG93RW50cnlGaWxlcyA9IFtcbiAgICAuLi5kaXNjb3ZlcmVkRW50cmllcy5kaXNjb3ZlcmVkV29ya2Zsb3dzLFxuICAgIC4uLmRpc2NvdmVyZWRFbnRyaWVzLmRpc2NvdmVyZWRTZXJkZUZpbGVzLFxuICBdLm1hcChub3JtYWxpemVQYXRoKTtcbiAgY29uc3Qgc3RlcEVudHJ5RmlsZXMgPSBbLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFN0ZXBzXS5tYXAoXG4gICAgbm9ybWFsaXplUGF0aFxuICApO1xuXG4gIHJldHVybiBjaGFuZ2VkRmlsZXMuc29tZSgoY2hhbmdlZEZpbGUpID0+IHtcbiAgICBpZiAod29ya2Zsb3dFbnRyeUZpbGVzLmluY2x1ZGVzKGNoYW5nZWRGaWxlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzdGVwRW50cnlGaWxlcy5pbmNsdWRlcyhjaGFuZ2VkRmlsZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtmbG93RW50cnlGaWxlcy5zb21lKCh3b3JrZmxvd0ZpbGUpID0+XG4gICAgICBwYXJlbnRIYXNDaGlsZCh3b3JrZmxvd0ZpbGUsIGNoYW5nZWRGaWxlLCB7XG4gICAgICAgIGV4Y2x1ZGVkUm9vdHM6IHN0ZXBFbnRyeUZpbGVzLFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IHN0ZXBSZWdpc3RyYXRpb25zTmVlZFJlZnJlc2ggPSAoe1xuICBjaGFuZ2VkRmlsZXMsXG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBub3JtYWxpemVQYXRoLFxufToge1xuICBjaGFuZ2VkRmlsZXM6IHN0cmluZ1tdO1xuICBkaXNjb3ZlcmVkRW50cmllczogRGlzY292ZXJlZEVudHJpZXNMaWtlO1xuICBub3JtYWxpemVQYXRoOiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG59KSA9PiB7XG4gIGNvbnN0IHNlcmRlRmlsZXMgPSBuZXcgU2V0KFxuICAgIFsuLi5kaXNjb3ZlcmVkRW50cmllcy5kaXNjb3ZlcmVkU2VyZGVGaWxlc10ubWFwKG5vcm1hbGl6ZVBhdGgpXG4gICk7XG4gIHJldHVybiBjaGFuZ2VkRmlsZXMuc29tZSgoZmlsZSkgPT4gc2VyZGVGaWxlcy5oYXMoZmlsZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsYXNzaWZ5UmVidWlsZCA9IGFzeW5jICh7XG4gIGRpc2NvdmVyZWRFbnRyaWVzLFxuICBmaWxlQ2hhbmdlcyxcbiAgaW5wdXRGaWxlcyxcbiAgbm9ybWFsaXplUGF0aCA9IGRlZmF1bHROb3JtYWxpemVQYXRoLFxuICBwYXJlbnRIYXNDaGlsZCxcbiAgcmVhZFNuYXBzaG90LFxuICBzb3VyY2VTbmFwc2hvdHMsXG59OiB7XG4gIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc0xpa2U7XG4gIGZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcztcbiAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gIG5vcm1hbGl6ZVBhdGg/OiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHBhcmVudEhhc0NoaWxkOiAoXG4gICAgcGFyZW50OiBzdHJpbmcsXG4gICAgY2hpbGQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBleGNsdWRlZFJvb3RzPzogSXRlcmFibGU8c3RyaW5nPiB9XG4gICkgPT4gYm9vbGVhbjtcbiAgcmVhZFNuYXBzaG90OiAoZmlsZTogc3RyaW5nKSA9PiBQcm9taXNlPFNvdXJjZVNuYXBzaG90PjtcbiAgc291cmNlU25hcHNob3RzOiBNYXA8c3RyaW5nLCBTb3VyY2VTbmFwc2hvdD47XG59KTogUHJvbWlzZTxSZWJ1aWxkRGVjaXNpb24+ID0+IHtcbiAgY29uc3QgcHJ1bmVkQWRkZWRGaWxlcyA9IGF3YWl0IHBydW5lU3RhbGVBZGRlZEZpbGVzKHtcbiAgICBhZGRlZEZpbGVzOiBmaWxlQ2hhbmdlcy5hZGRlZEZpbGVzLFxuICAgIHJlYWRTbmFwc2hvdCxcbiAgICBzb3VyY2VTbmFwc2hvdHMsXG4gIH0pO1xuICBjb25zdCBub3JtYWxpemVkRmlsZUNoYW5nZXMgPSB7XG4gICAgLi4uZmlsZUNoYW5nZXMsXG4gICAgYWRkZWRGaWxlczogcHJ1bmVkQWRkZWRGaWxlcy5hZGRlZEZpbGVzLFxuICB9O1xuXG4gIGlmIChcbiAgICByZW1vdmVkRmlsZXNSZXF1aXJlRnVsbFJlYnVpbGQoe1xuICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgIHJlbW92ZWRGaWxlczogbm9ybWFsaXplZEZpbGVDaGFuZ2VzLnJlbW92ZWRGaWxlcyxcbiAgICB9KSB8fFxuICAgIChhd2FpdCBhZGRlZEZpbGVzUmVxdWlyZUZ1bGxSZWJ1aWxkKHtcbiAgICAgIGFkZGVkRmlsZXM6IG5vcm1hbGl6ZWRGaWxlQ2hhbmdlcy5hZGRlZEZpbGVzLFxuICAgICAgcmVhZFNuYXBzaG90LFxuICAgIH0pKSB8fFxuICAgIChhd2FpdCBtb2RpZmllZEZpbGVzUmVxdWlyZUZ1bGxSZWJ1aWxkKHtcbiAgICAgIG1vZGlmaWVkRmlsZXM6IG5vcm1hbGl6ZWRGaWxlQ2hhbmdlcy5tb2RpZmllZEZpbGVzLFxuICAgICAgcmVhZFNuYXBzaG90LFxuICAgICAgc291cmNlU25hcHNob3RzLFxuICAgIH0pKVxuICApIHtcbiAgICByZXR1cm4geyBraW5kOiAnZnVsbCcgfTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5nZWRSZWxldmFudEZpbGVzID0gZ2V0Q2hhbmdlZFJlbGV2YW50RmlsZXMoe1xuICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgIGZpbGVDaGFuZ2VzOiBub3JtYWxpemVkRmlsZUNoYW5nZXMsXG4gICAgaW5wdXRGaWxlcyxcbiAgICBub3JtYWxpemVQYXRoLFxuICB9KTtcbiAgaWYgKGNoYW5nZWRSZWxldmFudEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBwcnVuZWRBZGRlZEZpbGVzLnNuYXBzaG90cy5zaXplID4gMFxuICAgICAgPyB7IGtpbmQ6ICdub25lJywgc25hcHNob3RzOiBwcnVuZWRBZGRlZEZpbGVzLnNuYXBzaG90cyB9XG4gICAgICA6IHsga2luZDogJ25vbmUnIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNuYXBzaG90cyA9IGF3YWl0IGNvbGxlY3RIb3RSZWJ1aWxkU25hcHNob3RzKHtcbiAgICAgIGNoYW5nZWRGaWxlczogY2hhbmdlZFJlbGV2YW50RmlsZXMsXG4gICAgICByZWFkU25hcHNob3QsXG4gICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgfSk7XG4gICAgaWYgKCFzbmFwc2hvdHMpIHtcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdmdWxsJyB9O1xuICAgIH1cbiAgICByZXR1cm4gd29ya2Zsb3dFbnRyeUZpbGVzQ2hhbmdlZCh7XG4gICAgICBjaGFuZ2VkRmlsZXM6IGNoYW5nZWRSZWxldmFudEZpbGVzLFxuICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgcGFyZW50SGFzQ2hpbGQsXG4gICAgfSlcbiAgICAgID8ge1xuICAgICAgICAgIGtpbmQ6ICdob3QnLFxuICAgICAgICAgIHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9uczogc3RlcFJlZ2lzdHJhdGlvbnNOZWVkUmVmcmVzaCh7XG4gICAgICAgICAgICBjaGFuZ2VkRmlsZXM6IGNoYW5nZWRSZWxldmFudEZpbGVzLFxuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNuYXBzaG90cyxcbiAgICAgICAgfVxuICAgICAgOiB7IGtpbmQ6ICdub25lJywgc25hcHNob3RzIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGtpbmQ6ICdmdWxsJyB9O1xuICB9XG59O1xuIl19
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: withWorkflow
3
- description: Configure webpack/turbopack to transform workflow directives in Next.js.
3
+ description: Configure webpack and Turbopack to transform workflow directives in Next.js.
4
4
  type: reference
5
5
  summary: Wrap your Next.js config with withWorkflow to enable workflow directive transformation.
6
6
  prerequisites:
7
7
  - /docs/getting-started/next
8
8
  ---
9
9
 
10
- Configures webpack/turbopack loaders to transform workflow code (`"use step"`/`"use workflow"` directives)
10
+ Configures webpack and Turbopack loaders to transform workflow code (`"use step"` and `"use workflow"` directives).
11
11
 
12
12
  ## Usage
13
13
 
@@ -16,13 +16,13 @@ To enable `"use step"` and `"use workflow"` directives while developing locally
16
16
  ```typescript title="next.config.ts" lineNumbers
17
17
  import { withWorkflow } from "workflow/next"; // [!code highlight]
18
18
  import type { NextConfig } from "next";
19
-
19
+
20
20
  const nextConfig: NextConfig = {
21
21
  // … rest of your Next.js config
22
22
  };
23
23
 
24
24
  // not required but allows configuring workflow options
25
- const workflowConfig = {}
25
+ const workflowConfig = {};
26
26
 
27
27
  export default withWorkflow(nextConfig, workflowConfig); // [!code highlight]
28
28
  ```
@@ -36,22 +36,22 @@ Remove that package from `serverExternalPackages` in your
36
36
  `next.config` to silence the warning.
37
37
  </Callout>
38
38
 
39
- ### Workflow Discovery in Next.js
39
+ ### Workflow discovery in Next.js
40
40
 
41
- `withWorkflow()` discovers workflows by scanning your Next.js entrypoints App
42
- Router `route`, `page`, and `layout` files (under `app/` or `src/app/`) and any
43
- file under `pages/` or `src/pages/` for `start()` calls imported from
41
+ `withWorkflow()` discovers workflows by scanning your Next.js entrypoints (App
42
+ Router `route`, `page`, and `layout` files under `app/` or `src/app/`, and any
43
+ file under `pages/` or `src/pages/`) for `start()` calls imported from
44
44
  `workflow/api`. The workflow and step files themselves can live anywhere (for
45
45
  example `src/workflows/`); they are discovered transitively through imports, as
46
46
  long as a `start()` call in an entrypoint statically reaches them.
47
47
 
48
48
  <Callout type="info">
49
49
  Call `start()` from server-side entrypoints, including Route Handlers and Server
50
- Actions. Don't call workflow functions directly that bypasses the workflow
50
+ Actions. Don't call workflow functions directly, which bypasses the workflow
51
51
  runtime.
52
52
  </Callout>
53
53
 
54
- ### Next.js Server Actions and `"use server"`
54
+ ### Next.js server actions and `"use server"`
55
55
 
56
56
  Don't put a top-level `"use server"` directive in modules imported by workflow
57
57
  or step functions. Workflow transformation wraps imported modules in synchronous
@@ -60,7 +60,7 @@ with errors like `Server Actions must be async functions`. Keep `"use server"`
60
60
  on the files that define your Server Actions, and move shared logic into
61
61
  separate modules that don't carry the directive.
62
62
 
63
- ### Monorepos and Workspace Imports
63
+ ### Monorepos and workspace imports
64
64
 
65
65
  By default, Next.js detects the correct workspace root automatically. If your Next.js app lives in a subdirectory such as `apps/web` and workspace resolution is not working correctly, you can set `outputFileTracingRoot` as a workaround:
66
66
 
@@ -107,7 +107,7 @@ export default withWorkflow(nextConfig, {
107
107
 
108
108
  ### Source maps
109
109
 
110
- The step bundle and intermediate workflow bundle default to `'inline'` source maps **in development** so stack traces from step errors and workflow VM errors point at your source files and to **`false` in production**, so function bundles stay small. The `sourcemap` option lets you change that:
110
+ The step bundle and intermediate workflow bundle default to `'inline'` source maps **in development** (so stack traces from step errors and workflow virtual machine (VM) errors point at your source files) and to **`false` in production**, so function bundles stay small. The `sourcemap` option lets you change that:
111
111
 
112
112
  | Value | Behavior |
113
113
  | --- | --- |
@@ -117,10 +117,10 @@ The step bundle and intermediate workflow bundle default to `'inline'` source ma
117
117
  | `'both'` | Emit both inline and external source maps. |
118
118
  | `false` | Omit source maps entirely. |
119
119
 
120
- In production, source maps are already off by default. Setting `sourcemap: false` explicitly also turns them off in development, and it drops the inline source map from every bundle while skipping the source-map-support runtime shim on the Vercel step function (the same behavior production gets by default) the main lever for staying under the Vercel 250MB function size limit. The tradeoff is that workflow VM stack traces will reference generated code (e.g. `evalmachine.<anonymous>`) rather than your source files.
120
+ In production, source maps are already off by default. Setting `sourcemap: false` explicitly also turns them off in development, and it drops the inline source map from every bundle while skipping the source-map-support runtime shim on the Vercel step function (the same behavior production gets by default), the main lever for staying under the Vercel 250 MB function size limit. The tradeoff is that workflow VM stack traces will reference generated code (for example, `evalmachine.<anonymous>`) rather than your source files.
121
121
 
122
122
  <Callout type="info">
123
- Setting `sourcemap` explicitly affects **all** generated bundles (steps, workflows, webhook). The legacy `WORKFLOW_EMIT_SOURCEMAPS_FOR_DEBUGGING=1` environment variable is narrower it only toggles source maps on the final workflow wrapper and webhook bundle (which default to off). It continues to work, but new code should use the `sourcemap` option or the `WORKFLOW_SOURCEMAP` environment variable instead.
123
+ Setting `sourcemap` explicitly affects **all** generated bundles (steps, workflows, webhook). The legacy `WORKFLOW_EMIT_SOURCEMAPS_FOR_DEBUGGING=1` environment variable is narrower: it only toggles source maps on the final workflow wrapper and webhook bundle (which default to off). It continues to work, but new code should use the `sourcemap` option or the `WORKFLOW_SOURCEMAP` environment variable instead.
124
124
  </Callout>
125
125
 
126
126
  The option can also be set via the `WORKFLOW_SOURCEMAP` environment variable, which accepts the same values plus `'0'` / `'1'` as aliases for `false` / `true`. Precedence is: explicit config > `WORKFLOW_SOURCEMAP` > the environment-aware default (`'inline'` in development, `false` in production). Development is detected from `next dev` / `NODE_ENV=development`, so the config option and the env var both let you force either behavior in either environment.
@@ -129,7 +129,7 @@ The option can also be set via the `WORKFLOW_SOURCEMAP` environment variable, wh
129
129
  The `workflows.local` options only affect local development. When deployed to Vercel, the runtime ignores `local` settings and uses the Vercel world automatically.
130
130
  </Callout>
131
131
 
132
- ## Exporting a Function
132
+ ## Exporting a function
133
133
 
134
134
 
135
135
  If you are exporting a function in your `next.config` you will need to ensure you call the function returned from `withWorkflow`.
@@ -158,4 +158,4 @@ export default async function config(
158
158
  }
159
159
  return nextConfig;
160
160
  }
161
- ```
161
+ ```
package/docs/next.mdx CHANGED
@@ -17,7 +17,7 @@ related:
17
17
  <Steps>
18
18
 
19
19
  <Step>
20
- ## Create Your Next.js Project
20
+ ## Create your Next.js project
21
21
 
22
22
  Start by creating a new Next.js project. This command will create a new directory named `my-workflow-app` and set up a Next.js project inside it.
23
23
 
@@ -89,7 +89,7 @@ If your Next.js app has a [proxy handler](https://nextjs.org/docs/app/api-refere
89
89
  (formerly known as "middleware"), you'll need to update the matcher pattern to exclude Workflow's
90
90
  internal paths to prevent the proxy handler from running on them.
91
91
 
92
- If you see `[local world] Queue operation failed` with `Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`, your proxy matcher is still intercepting Workflow's internal `POST /.well-known/workflow/v1/flow` request. This is especially easy to miss in Next.js 16, where `proxy.ts` replaced `middleware.ts`.
92
+ If you see `[local world] Queue operation failed` with `Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`, your proxy matcher is still intercepting Workflow's internal `POST /.well-known/workflow/v1/flow` request. This issue can be hard to spot in Next.js 16, where `proxy.ts` replaced `middleware.ts`.
93
93
 
94
94
  Add `.well-known/workflow/*` to your matcher exclusion list:
95
95
 
@@ -121,7 +121,7 @@ This ensures that internal Workflow paths are not intercepted by your middleware
121
121
 
122
122
  <Step>
123
123
 
124
- ## Create Your First Workflow
124
+ ## Create your first workflow
125
125
 
126
126
  Create a new file for our first workflow:
127
127
 
@@ -144,14 +144,14 @@ export async function handleUserSignup(email: string) {
144
144
 
145
145
  ```
146
146
 
147
- We'll fill in those functions next, but let's take a look at this code:
147
+ We'll fill in those functions next. The current code does the following:
148
148
 
149
149
  * We define a **workflow** function with the directive `"use workflow"`. Think of the workflow function as the _orchestrator_ of individual **steps**.
150
150
  * The Workflow SDK's `sleep` function allows us to suspend execution of the workflow without using up any resources. A sleep can be a few seconds, hours, days, or even months long.
151
151
 
152
- ## Create Your Workflow Steps
152
+ ## Create your workflow steps
153
153
 
154
- Let's now define those missing functions.
154
+ Define the missing functions.
155
155
 
156
156
  ```typescript title="workflows/user-signup.ts" lineNumbers
157
157
  import { FatalError } from "workflow"
@@ -204,7 +204,7 @@ We'll dive deeper into workflows, steps, and other ways to suspend or handle eve
204
204
 
205
205
  <Step>
206
206
 
207
- ## Create Your Route Handler
207
+ ## Create your route handler
208
208
 
209
209
  To invoke your new workflow, we'll need to add your workflow to a `POST` API Route Handler, `app/api/signup/route.ts`, with the following code:
210
210
 
@@ -276,12 +276,12 @@ Check the [Deploying](/docs/deploying) section to learn how your workflows can b
276
276
 
277
277
  If you see this error when upgrading to Next.js 16.1 or later:
278
278
 
279
- ```
279
+ ```text
280
280
  Build error occurred
281
281
  Error: Cannot find module 'next/dist/lib/server-external-packages.json'
282
282
  ```
283
283
 
284
- Upgrade to `workflow@4.0.1-beta.26` or later:
284
+ Upgrade `workflow` to the latest release:
285
285
 
286
286
  ```package-install
287
287
  workflow@latest
@@ -315,7 +315,7 @@ Without this configuration, you may experience intermittent issues where workflo
315
315
 
316
316
  If you see this error:
317
317
 
318
- ```
318
+ ```text
319
319
  'start' received an invalid workflow function. Ensure the Workflow SDK is configured correctly and the function includes a 'use workflow' directive.
320
320
  ```
321
321
 
@@ -326,7 +326,7 @@ Check both of these first:
326
326
 
327
327
  See [start-invalid-workflow-function](/docs/errors/start-invalid-workflow-function) for full examples and fixes.
328
328
 
329
- ## Next Steps
329
+ ## Next steps
330
330
 
331
331
  * Learn more about the [Foundations](/docs/foundations).
332
332
  * Check [Errors](/docs/errors) if you encounter issues.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/next",
3
- "version": "5.0.0-beta.43",
3
+ "version": "5.0.0-beta.44",
4
4
  "description": "Next.js integration for Workflow SDK",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -30,8 +30,8 @@
30
30
  "chokidar": "4.0.3",
31
31
  "ignore": "7.0.5",
32
32
  "semver": "7.7.4",
33
- "@workflow/builders": "5.0.0-beta.43",
34
- "@workflow/core": "5.0.0-beta.43",
33
+ "@workflow/builders": "5.0.0-beta.44",
34
+ "@workflow/core": "5.0.0-beta.44",
35
35
  "@workflow/swc-plugin": "5.0.0-beta.5"
36
36
  },
37
37
  "devDependencies": {