imm-element-ui 2.5.4 → 2.5.6

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.
@@ -832,6 +832,7 @@ export class PageFormComponent extends AmComponent {
832
832
  delRows(e) {
833
833
  const gridTab = this.resolvedGridList()[this.indexValue];
834
834
  const deleteFunc = gridTab.deleteFunc;
835
+ console.log('delRows----', e, gridTab);
835
836
  const subTable = gridTab.gridOptions.modelName;
836
837
  const ids = Array.isArray(e) ? e : [e];
837
838
  let prm = {
@@ -1434,10 +1435,35 @@ export class PageFormComponent extends AmComponent {
1434
1435
  ids = selectItem.filter((v) => v.id).map((v) => v.id);
1435
1436
  }
1436
1437
  if (ids.length > 0) {
1437
- this.web_remove({ modelName: grid.gridOptions.modelName, ids }).subscribe((res) => {
1438
+ const gridTab = this.resolvedGridList()[this.indexValue];
1439
+ const deleteFunc = gridTab.deleteFunc;
1440
+ let doneCalled = false;
1441
+ const done = () => {
1442
+ if (doneCalled) {
1443
+ return;
1444
+ }
1445
+ doneCalled = true;
1446
+ typeof this.formDetail() == 'function' ? this.formDetail()(this.id) : this.getDetail(4);
1438
1447
  this.pageFormService.removeData(grid.subDataKey, this.pageFormService.getSelectedRows(), grid);
1439
- this.pageFormService.setSelectedRows([]);
1440
- });
1448
+ this.action.loading.set(false);
1449
+ };
1450
+ if (!deleteFunc) {
1451
+ this.action.loading.set(true);
1452
+ this.web_remove({ modelName: grid.gridOptions.modelName, ids }).subscribe((res) => {
1453
+ this.pageFormService.removeData(grid.subDataKey, this.pageFormService.getSelectedRows(), grid);
1454
+ this.pageFormService.setSelectedRows([]);
1455
+ });
1456
+ }
1457
+ else {
1458
+ this.action.loading.set(true);
1459
+ const result = deleteFunc(ids, gridTab, done);
1460
+ if (isObservable(result)) {
1461
+ result.subscribe(() => done());
1462
+ }
1463
+ else if (result && typeof result.subscribe === 'function') {
1464
+ result.subscribe(() => done());
1465
+ }
1466
+ }
1441
1467
  }
1442
1468
  else {
1443
1469
  this.pageFormService.removeData(grid.subDataKey, this.pageFormService.getSelectedRows(), grid);
@@ -1485,4 +1511,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1485
1511
  type: HostListener,
1486
1512
  args: ['window:resize']
1487
1513
  }] } });
1488
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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U0FBUztnQkFDVSxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDZ0MsYUFBYTtzQkFBM0UsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBOEo3RCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQge1xuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0ZWZmZWN0LFxuXHRIb3N0TGlzdGVuZXIsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRRdWVyeUxpc3QsXG5cdHNpZ25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsIEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJvd1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9nL2xvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDcnVtYkFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFN0ZXAsIFN0ZXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMvc3RlcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRDb21wb25lbnQsIEdyaWRPcHRpb25zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xuaW1wb3J0IHsgVHJlZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCBTZWFyY2ggfSBmcm9tICcuLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0Zm9ybVR5cGVUb1Byb3BzLFxuXHRHcmlkTGlzdCxcblx0SHJlZkJ0bkxpc3QsXG5cdFBhZ2VGb3JtU2xvdENvbnRleHQsXG5cdFBhZ2VMZWZ0UGFuZWxDb25maWcsXG5cdFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlLFxuXHRQYXlsb2FkVXBzZXJ0LFxuXHRQZXJtaXNzaW9uQnRuLFxuXHRDdXN0b21MaXN0RGlhbG9nLFxuXHRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhyZWZCdG5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vaHJlZi1idG4tbGlzdC9ocmVmLWJ0bi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi9zaGFyZS91dGlscyc7XG5pbXBvcnQgeyBQYWdlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3BhZ2UtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSB9IGZyb20gJy4vcGFnZS1mb3JtLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbmFsaXplLCBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQsXG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnRcbn0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC1saXN0Ym94L3NpbmdsZS1zZWxlY3QtbGlzdGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmllbGRVdGlscyB9IGZyb20gJy4uL2Zvcm0vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEJ1dHRvbk1vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1Db21wb25lbnQsXG5cdFx0TG9nQ29tcG9uZW50LFxuXHRcdENydW1iQWN0aW9uQ29tcG9uZW50LFxuXHRcdFN0ZXBzQ29tcG9uZW50LFxuXHRcdEdyaWRDb21wb25lbnQsXG5cdFx0VGFic01vZHVsZSxcblx0XHRSb3dTZWxlY3RvckNvbXBvbmVudCxcblx0XHRUcmFuc2xhdGVQaXBlLFxuXHRcdEhyZWZCdG5MaXN0Q29tcG9uZW50LFxuXHRcdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnQsXG5cdFx0VHJlZU1vZHVsZSxcblx0XSxcblx0dGVtcGxhdGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuXHRwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlRm9ybUNvbXBvbmVudCBleHRlbmRzIEFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXHRAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudDtcblx0QFZpZXdDaGlsZHJlbignY3VzdG9tR3JpZCcpIGN1c3RvbUdyaWQhOiBRdWVyeUxpc3Q8R3JpZENvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGRyZW4oJ3RhYkZvcm0nKSB0YWJGb3JtITogUXVlcnlMaXN0PEZvcm1Db21wb25lbnQ+O1xuXHRAVmlld0NoaWxkKFJvd1NlbGVjdG9yQ29tcG9uZW50KSByb3dTZWxlY3Rvcj86IFJvd1NlbGVjdG9yQ29tcG9uZW50O1xuXHRAQ29udGVudENoaWxkcmVuKFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwYWdlRm9ybVNsb3RzITogUXVlcnlMaXN0PFBhZ2VGb3JtU2xvdERpcmVjdGl2ZT47XG5cdHNob3dMb2cgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxMb2coKSAmJiB0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdyaWdodCc7XG5cdH0pO1xuXHRhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblx0Z3JpZExpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xuXHRmb3JtID0gaW5wdXQucmVxdWlyZWQ8Rm9ybU9wdGlvbnM+KHt9KTtcblx0Z2V0UHJtSW5wdXQgPSBpbnB1dC5yZXF1aXJlZDxHZXQ+KHt9KTtcblx0c3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKTtcblx0c3RhdHVzS2V5ID0gaW5wdXQoJ3N0YXR1cycpO1xuXHRocmVmQnRuTGlzdCA9IGlucHV0PEhyZWZCdG5MaXN0W10+KFtdKTtcblx0c2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxQZXJtaXNzaW9uQnRuW10+KFtdKTtcblx0bW9kZWxMb2cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHNpZGViYXJNb2RlID0gc2lnbmFsPCdsZWZ0JyB8ICdyaWdodCc+KCdyaWdodCcpO1xuXHRmb3JtRGlzYWJsZWQgPSBpbnB1dDxGdW5jdGlvbj4oKTtcblx0c3RhdHVzQ29uZiA9IGlucHV0PGFueT4oKTtcblx0Zm9ybURldGFpbCA9IGlucHV0PGFueT4oKTtcblx0c2F2ZUZ1bmMgPSBpbnB1dDxhbnk+KCk7XG5cdHNob3dNYWluU2F2ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXHRjb25maWdOZXdQYXRoID0gaW5wdXQ8YW55PigpO1xuXHRydW50aW1lQ29udGV4dElucHV0ID0gaW5wdXQ8YW55Pih7fSk7XG5cdGN1c3RvbUxlZnRQYW5lbCA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcblx0Y3VzdG9tTGlzdEZvcm1UZW1wbGF0ZU1hcCA9IGlucHV0PFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0Pj4gfCBudWxsPihudWxsKTtcblx0Y3VzdG9tTGlzdEZvcm1JbnN0YW5jZU1hcCA9IGlucHV0PFJlY29yZDxzdHJpbmcsIEN1c3RvbUxpc3REaWFsb2cgfCB1bmRlZmluZWQ+IHwgbnVsbD4obnVsbCk7XG5cdGxlZnRQYW5lbCA9IGlucHV0PFBhZ2VMZWZ0UGFuZWxDb25maWcgfCBudWxsPihudWxsKTtcblx0cGFuZWxTZWxlY3RlZERhdGEgPSBpbnB1dDxhbnk+KHt9KTtcblx0cnVudGltZUNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuXHRwcml2YXRlIGN1cnJlbnRJZEFuZE1vZGVsTmFtZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHt9O1xuXG5cdHVzZXJIaXN0b3J5U2VydmljZSA9IGluamVjdChVc2VySGlzdG9yeVNlcnZpY2UpO1xuXHRwYWdlRm9ybVNlcnZpY2UgPSBpbmplY3QoUGFnZUZvcm1TZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRwcml2YXRlIF9pbmRleFZhbHVlID0gMDtcblx0cHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEdyaWRMaXN0ID0gc2lnbmFsPGFueVtdPihbXSk7XG5cdHByaXZhdGUgZ3JpZExpc3RPdmVycmlkZGVuID0gZmFsc2U7XG5cdHZpc2libGUgPSBmYWxzZTtcblx0ZGlhbG9nU2VhcmNoUHJtITogU2VhcmNoO1xuXHRzZWxlY3RPcHRpb25zITogR3JpZE9wdGlvbnM7XG5cdHNlbGVjdERhdGE6IGFueVtdID0gW107XG5cdHBhZ2VVcmwgPSAnJztcblx0bmV3VXJsID0gJyc7XG5cdGF1dGhMZXZlbCA9IGlucHV0PG51bWJlcj4oLTEpO1xuXHRocmVmczogYW55W10gPSBbXTtcblx0YWN0aW9uID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xuXHRzdWJGb3JtTW9kZWw6IGFueSA9IHt9O1xuXHRzYXZlQnRuRGlzYWJsZSA9IGZhbHNlO1xuXHRncmlkRGlzYWJsZSA9IGZhbHNlO1xuXHRzZWxlY3Rpb25LZXlzOiBhbnlbXSA9IFtdO1xuXHRzdWJEZWxldGVJZHM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRsZWZ0UGFuZWxUcmVlTm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcblx0bGVmdFBhbmVsU2VsZWN0ZWROb2RlOiBUcmVlTm9kZSB8IG51bGwgPSBudWxsO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlOiBhbnkgPSBudWxsO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbEV4cGFuZGVkS2V5czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0bGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBsZWZ0UGFuZWxJbml0aWFsaXplZE1vZGU6ICdsaXN0JyB8ICd0cmVlJyB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGJhc2VHcmlkTGlzdFNuYXBzaG90OiBhbnlbXSA9IFtdO1xuXG5cdHN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90RGlyZWN0aXZlPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RDb250ZXh0TWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VGb3JtU2xvdENvbnRleHQ+KCk7XG5cdGN1cnJlbnRTZWxlY3RNb2RlbENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRzbG90UmVuZGVyU3RhdGVzOiBBcnJheTx7XG5cdFx0c2xvdD86IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZTtcblx0XHRjb250ZXh0OiBQYWdlRm9ybVNsb3RDb250ZXh0O1xuXHR9PiA9IFtdO1xuXG5cdGdldCBpbmRleFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmRleFZhbHVlO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRTZWxlY3RNb2RlbENvZGUgPSB0aGlzLmN1cnJlbnRTZWxlY3RNb2RlbENvZGU7XG5cdFx0aWYgKCFjdXJyZW50U2VsZWN0TW9kZWxDb2RlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwKCk/LltjdXJyZW50U2VsZWN0TW9kZWxDb2RlXSA/PyBudWxsO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHQoKTogQ3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQge1xuXHRcdHJldHVybiB7IHBhZ2VGb3JtOiB0aGlzIH07XG5cdH1cblxuXHRnZXREaWFsb2dTZWxlY3RlZFJlc3VsdCgpIHtcblx0XHRjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLnJvd1NlbGVjdG9yPy5nZXRTZWxlY3RlZERhdGEoKSA/PyBbXTtcblx0XHRyZXR1cm4gc2VsZWN0ZWREYXRhLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucz8uY29sdW1uRGVmcz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcblx0XHRcdFx0cmVzdWx0W2NvbC5maWVsZF0gPSBpdGVtW2NvbC5maWVsZF07XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cdH1cblxuXHRzZXRSdW50aW1lQ29udGV4dChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHR0aGlzLnJ1bnRpbWVDb250ZXh0ID0ge1xuXHRcdFx0Li4uKHRoaXMucnVudGltZUNvbnRleHQgfHwge30pLFxuXHRcdFx0Li4uZGF0YSxcblx0XHR9O1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0c2V0IGluZGV4VmFsdWUodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMuX2luZGV4VmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0fVxuXG5cdGdldCBncmlkcygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk7XG5cdH1cblxuXHRzZXQgZ3JpZHModmFsdWU6IGFueVtdKSB7XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSB0cnVlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodmFsdWUgPz8gW10pO1xuXHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlZEdyaWRMaXN0KCkge1xuXHRcdGlmICh0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA/IHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpIDogdGhpcy5ncmlkTGlzdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVXBzZXJ0U3Vic2VydHMoKSB7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnRzID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXTtcblx0XHRjb25zdCBzdWJzZXJ0TWFwID0gbmV3IE1hcChjdXJyZW50U3Vic2VydHMubWFwKChpdGVtKSA9PiBbaXRlbS5zdWJNb2RlbE5hbWUsIGl0ZW1dKSk7XG5cdFx0Y29uc3QgbmV4dFN1YnNlcnRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGl0ZW1bJ21vZGVsTmFtZSddO1xuXHRcdFx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzdWJzZXJ0TWFwLmdldChzdWJNb2RlbE5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGN1cnJlbnQgfHwge1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8uZmsgfHwgaXRlbS5mayA6IGl0ZW0uZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2U6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ucmVmZXJlbmNlIHx8IGl0ZW0ucmVmZXJlbmNlIDogaXRlbS5yZWZlcmVuY2UsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgYW55W107XG5cdFx0dGhpcy51cHNlcnRQcm0uc3Vic2VydCA9IG5leHRTdWJzZXJ0cztcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQgPyAnbGVmdCcgOiAncmlnaHQnKTtcblx0fVxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykpO1xuXHRcdHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG5cdFx0XHQuam9pbignLycpXG5cdFx0XHQucmVwbGFjZSgvKFteXFwvXSopJC8sICcnKTtcblx0XHR0aGlzLm5ld1VybCA9IGAke3RoaXMucGFnZVVybH1uZXdgO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lITtcblx0XHRcdFx0dGhpcy5nZXRQcm0gPSB7IC4uLnRoaXMuZ2V0UHJtSW5wdXQoKSB9O1xuXHRcdFx0XHR0aGlzLmlkICYmICh0aGlzLmdldFBybS5pZCA9IHRoaXMuaWQpO1xuXHRcdFx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSAmJiAhdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgxKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVDb250ZXh0SW5wdXQoKSB8fCB7fTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc3RhdHVzU3RlcHMoKS5sZW5ndGggPiAwICYmICF0aGlzLmlkKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ107XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ10sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlucHV0R3JpZExpc3QgPSB0aGlzLmdyaWRMaXN0KCk7XG5cdFx0XHRcdGlmICghdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4pIHtcblx0XHRcdFx0XHQvLyB0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KFtdKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUoaW5wdXRHcmlkTGlzdCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0XHRcdGlmICghcGFuZWw/LmVuYWJsZWQpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmdldExlZnRQYW5lbE1vZGUoKTtcblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgJiYgdGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZE1vZGUgPT09IGN1cnJlbnRNb2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAmJiB0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAhPT0gY3VycmVudE1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHR0aGlzLnBhZ2VGb3JtU2xvdHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldExlZnRQYW5lbFN0YXRlKCkge1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IFtdO1xuXHRcdHRoaXMubGVmdFBhbmVsVHJlZU5vZGVzID0gW107XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZE5vZGUgPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzID0ge307XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHRoaXMuZ3JpZExpc3QoKSk7XG5cdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbCgpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpO1xuXHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSB0aGlzLmdyaWRMaXN0KCkubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0pO1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uSW5pdCcpO1xuXHRcdGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5sb2FkTGVmdFBhbmVsSXRlbXMoZGF0YVNvdXJjZSk7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IGl0ZW1zO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uSXRlbXNMb2FkZWQnLCB7IGl0ZW1zIH0pO1xuXHRcdGlmICh0aGlzLmdldExlZnRQYW5lbE1vZGUoKSA9PT0gJ3RyZWUnKSB7XG5cdFx0XHR0aGlzLmluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplTGVmdFBhbmVsTGlzdChpdGVtcywgZGF0YVNvdXJjZSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGluaXRpYWxpemVMZWZ0UGFuZWxMaXN0KGl0ZW1zOiBhbnlbXSwgZGF0YVNvdXJjZT86IFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlKSB7XG5cdFx0bGV0IGRlZmF1bHRWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMoXG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZT8uZGVmYXVsdFNlbGVjdCA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UuZGVmYXVsdFNlbGVjdCh0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCh7IGl0ZW1zIH0pKVxuXHRcdFx0XHQ6IGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QsXG5cdFx0KTtcblx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGRlZmF1bHRWYWx1ZSk7XG5cdFx0fVxuXHRcdGlmICgoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHwgZGVmYXVsdFZhbHVlID09PSBudWxsKSAmJiB0aGlzLmdldFBhbmVsQWxsb3dEZXNlbGVjdCgpID09PSBmYWxzZSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW1zWzBdKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihkZWZhdWx0VmFsdWUsIGl0ZW1zLmZpbmQoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSkgPT09IGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgbG9hZExlZnRQYW5lbEl0ZW1zKGRhdGFTb3VyY2U/OiBQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZSkge1xuXHRcdGlmICghZGF0YVNvdXJjZSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRsZXQgcmVzdWx0ID1cblx0XHRcdHR5cGVvZiBkYXRhU291cmNlLmxvYWRlciA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UubG9hZGVyKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpXG5cdFx0XHRcdDogKGRhdGFTb3VyY2UubG9hZGVyID8/IGRhdGFTb3VyY2Uub3B0aW9ucyA/PyBbXSk7XG5cdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhyZXN1bHQpO1xuXHRcdGlmIChkYXRhU291cmNlLnJlc3VsdFBhdGgpIHtcblx0XHRcdHJlc3VsdCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwocmVzdWx0LCBkYXRhU291cmNlLnJlc3VsdFBhdGgpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGFTb3VyY2UudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKGRhdGFTb3VyY2UudHJhbnNmb3JtKHJlc3VsdCwgdGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogcmVzdWx0IH0pKSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiBbXTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0TGVmdFBhbmVsTW9kZSgpOiAnbGlzdCcgfCAndHJlZScge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5tb2RlID09PSAndHJlZScgPyAndHJlZScgOiAnbGlzdCc7XG5cdH1cblxuXHRnZXRQYW5lbE9wdGlvbkxhYmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5vcHRpb25MYWJlbCB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25MYWJlbCB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5ub2RlTGFiZWwgfHwgJ2xhYmVsJztcblx0fVxuXG5cdGdldFBhbmVsT3B0aW9uVmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/Lm9wdGlvblZhbHVlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/Lm9wdGlvblZhbHVlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/Lm5vZGVWYWx1ZSB8fCAndmFsdWUnO1xuXHR9XG5cblx0Z2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5hbGxvd0Rlc2VsZWN0ID8/IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmFsbG93RGVzZWxlY3QgPz8gdHJ1ZTtcblx0fVxuXG5cdGdldFBhbmVsRW1wdHlNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5lbXB0eU1lc3NhZ2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8uZW1wdHlNZXNzYWdlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmVtcHR5TWVzc2FnZSB8fCAn5pqC5peg5pWw5o2uJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0UGFuZWxEYXRhU291cmNlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5kYXRhU291cmNlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmRhdGFTb3VyY2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGF0YVNvdXJjZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUNoaWxkcmVuRmllbGQoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmNoaWxkcmVuRmllbGQgfHwgJ2NoaWxkcmVuJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LnBhcmVudFNlbGVjdGFibGUgPz8gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUV4cGFuZGVkS2V5c1N0YXRlS2V5KCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5leHBhbmRlZEtleXNTdGF0ZUtleTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUZpZWxkVmFsdWUoaXRlbTogYW55LCBmaWVsZD86IHN0cmluZykge1xuXHRcdGlmICghZmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKGl0ZW0sIGZpZWxkKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcmVzb2x2ZU1heWJlQXN5bmModmFsdWU6IGFueSkge1xuXHRcdGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20odmFsdWUpO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFnZUZvcm06IHRoaXMsXG5cdFx0XHRtb2RlOiB0aGlzLmdldExlZnRQYW5lbE1vZGUoKSxcblx0XHRcdHNlbGVjdGVkSXRlbTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRzZWxlY3RlZFZhbHVlOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUsXG5cdFx0XHRpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyxcblx0XHRcdGdldFBybTogdGhpcy5nZXRQcm0sXG5cdFx0XHRncmlkTGlzdDogdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCksXG5cdFx0XHRiYXNlR3JpZExpc3Q6IHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QsXG5cdFx0XHRwYW5lbFNlbGVjdGVkRGF0YTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRydW50aW1lQ29udGV4dDogdGhpcy5ydW50aW1lQ29udGV4dCxcblx0XHRcdHNldFN0YXRlOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0Li4uZXh0cmEsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcnVuTGVmdFBhbmVsRXZlbnQoZXZlbnROYW1lOiBrZXlvZiBOb25OdWxsYWJsZTxQYWdlTGVmdFBhbmVsQ29uZmlnWydldmVudHMnXT4sIGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRjb25zdCBoYW5kbGVyID0gdGhpcy5sZWZ0UGFuZWwoKT8uZXZlbnRzPy5bZXZlbnROYW1lXTtcblx0XHRpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmV0dXJuIGhhbmRsZXIodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoZXh0cmEpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUob3B0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0UGFuZWxPcHRpb25WYWx1ZSgpO1xuXHRcdGlmICghb3B0aW9uVmFsdWUpIHtcblx0XHRcdHJldHVybiBvcHRpb247XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKG9wdGlvbiwgb3B0aW9uVmFsdWUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCkge1xuXHRcdGlmIChldmVudC52YWx1ZSA9PSBudWxsICYmIHRoaXMuZ2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihldmVudC52YWx1ZSwgZXZlbnQub3B0aW9uKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24odmFsdWU6IGFueSwgb3B0aW9uPzogYW55KSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICdsaXN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBvcHRpb24gPz8gdGhpcy5sZWZ0UGFuZWxJdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW0pID09PSB2YWx1ZSkgPz8gbnVsbDtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZSh2YWx1ZSwgc2VsZWN0ZWRJdGVtKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZTogdmFsdWUsXG5cdFx0XHRub2RlOiBudWxsLFxuXHRcdFx0cmF3Tm9kZTogbnVsbCxcblx0XHRcdGlzUGFyZW50OiBmYWxzZSxcblx0XHRcdGlzTGVhZjogdHJ1ZSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKSB7XG5cdFx0Y29uc3QgZml0ZXJQcmVsb2FkcyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gKEFycmF5LmlzQXJyYXkoaXRlbT8uZml0ZXJQcmVsb2FkcykgPyBpdGVtLmZpdGVyUHJlbG9hZHMgOiBbXSkpO1xuXHRcdHRoaXMuZ2V0UHJtLmZpdGVyUHJlbG9hZHMgPSBmaXRlclByZWxvYWRzO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jR2V0UHJtRm9yQ3VycmVudFZpZXcoKSB7XG5cdFx0aWYgKCF0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRQcmVsb2FkcyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LnN1YkRhdGFLZXkpXG5cdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+ICEhaXRlbSk7XG5cdFx0aWYgKGN1cnJlbnRQcmVsb2Fkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmdldFBybS5wcmVsb2FkcyA9IGN1cnJlbnRQcmVsb2Fkcztcblx0XHR9XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jTGVmdFBhbmVsU2VsZWN0aW9uU3RhdGUodmFsdWU6IGFueSwgc2VsZWN0ZWRJdGVtOiBhbnkpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuZ2V0UHJtLmRhdGEpIHtcblx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKHBhbmVsLnN0YXRlS2V5KSB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHBhbmVsLnN0YXRlS2V5LCB2YWx1ZSk7XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5wYW5lbFNlbGVjdGVkRGF0YUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5wYW5lbFNlbGVjdGVkRGF0YUtleSwgc2VsZWN0ZWRJdGVtKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zOiBhbnlbXSkge1xuXHRcdGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLnJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cyA9IGV4cGFuZGVkU3RhdGUgfHwge307XG5cdFx0dGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMgPSB0aGlzLmJ1aWxkVHJlZU5vZGVzKGl0ZW1zKTtcblx0XHR2b2lkIHRoaXMuYXBwbHlUcmVlRGVmYXVsdFNlbGVjdGlvbigpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlcyhpdGVtczogYW55W10sIHBhcmVudEtleSA9ICdyb290Jyk6IFRyZWVOb2RlW10ge1xuXHRcdGNvbnN0IGNoaWxkcmVuRmllbGQgPSB0aGlzLmdldFRyZWVDaGlsZHJlbkZpZWxkKCk7XG5cdFx0Y29uc3QgaWNvbkZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uaWNvbkZpZWxkO1xuXHRcdGNvbnN0IGxlYWZGaWVsZCA9IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmxlYWZGaWVsZDtcblx0XHRjb25zdCBkaXNhYmxlZEZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGlzYWJsZWRGaWVsZDtcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5idWlsZFRyZWVOb2RlS2V5KGl0ZW0sIHBhcmVudEtleSwgaW5kZXgpO1xuXHRcdFx0Y29uc3QgY2hpbGRJdGVtcyA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgY2hpbGRyZW5GaWVsZCk7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtcykgPyB0aGlzLmJ1aWxkVHJlZU5vZGVzKGNoaWxkSXRlbXMsIGtleSkgOiBbXTtcblx0XHRcdGNvbnN0IGlzTGVhZiA9IGxlYWZGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBsZWFmRmllbGQpIDogY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuXHRcdFx0Y29uc3QgaXNQYXJlbnQgPSBjaGlsZHJlbi5sZW5ndGggPiAwO1xuXHRcdFx0Y29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB8fCAhaXNQYXJlbnQ7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnJlc29sdmVUcmVlTm9kZUxhYmVsKGl0ZW0pLFxuXHRcdFx0XHRkYXRhOiBpdGVtLFxuXHRcdFx0XHRjaGlsZHJlbjogY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGNoaWxkcmVuIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsZWFmOiBpc0xlYWYsXG5cdFx0XHRcdGV4cGFuZGVkOiB0aGlzLnNob3VsZEV4cGFuZFRyZWVOb2RlKGtleSwgaXNQYXJlbnQpLFxuXHRcdFx0XHRzZWxlY3RhYmxlLFxuXHRcdFx0XHRkaXNhYmxlZDogZGlzYWJsZWRGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBkaXNhYmxlZEZpZWxkKSA6IGZhbHNlLFxuXHRcdFx0XHRpY29uOiBpY29uRmllbGQgPyB0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGljb25GaWVsZCkgOiB1bmRlZmluZWQsXG5cdFx0XHR9IGFzIFRyZWVOb2RlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlS2V5KGl0ZW06IGFueSwgcGFyZW50S2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSk7XG5cdFx0cmV0dXJuIGAke3BhcmVudEtleX0tJHt2YWx1ZSA/PyBpbmRleH1gO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlVHJlZU5vZGVMYWJlbChpdGVtOiBhbnkpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgdGhpcy5nZXRQYW5lbE9wdGlvbkxhYmVsKCkpO1xuXHRcdHJldHVybiBsYWJlbCA9PSBudWxsID8gJycgOiBTdHJpbmcobGFiZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBzaG91bGRFeHBhbmRUcmVlTm9kZShrZXk6IHN0cmluZywgaXNQYXJlbnQ6IGJvb2xlYW4pIHtcblx0XHRpZiAoIWlzUGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuICEhdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRlZmF1bHRFeHBhbmQgPz8gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIHJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXkgPSB0aGlzLmdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpO1xuXHRcdGlmICghc3RhdGVLZXkpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgc3RhdGVLZXkpIHx8IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVHJlZUV4cGFuZGVkS2V5c1N0YXRlKCkge1xuXHRcdGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5nZXRUcmVlRXhwYW5kZWRLZXlzU3RhdGVLZXkoKTtcblx0XHRpZiAoIXN0YXRlS2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHN0YXRlS2V5LCB7IC4uLnRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseVRyZWVEZWZhdWx0U2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0JyAmJiAhKCdrZXknIGluIGRlZmF1bHRWYWx1ZSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpPy5rZXkgPz8gbnVsbDtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc29sdmVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24oZGVmYXVsdFZhbHVlKTtcblx0XHRjb25zdCBuZXh0Tm9kZSA9IHRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUocmVzb2x2ZWROb2RlKVxuXHRcdFx0PyByZXNvbHZlZE5vZGVcblx0XHRcdDogdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpO1xuXHRcdGlmIChuZXh0Tm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obmV4dE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmICh0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUuY2hpbGRyZW4pO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVUcmVlTm9kZUJ5U2VsZWN0aW9uKHNlbGVjdGlvbjogYW55KTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRpZiAoc2VsZWN0aW9uICYmIHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmICdrZXknIGluIHNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmluZFRyZWVOb2RlQnlLZXkodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbi5rZXkpID8/IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmZpbmRUcmVlTm9kZUJ5VmFsdWUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGZpbmRUcmVlTm9kZUJ5VmFsdWUobm9kZXM6IFRyZWVOb2RlW10sIHZhbHVlOiBhbnkpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0Y29uc3Qgbm9kZVZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShub2RlLmRhdGEpO1xuXHRcdFx0aWYgKG5vZGVWYWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeVZhbHVlKG5vZGUuY2hpbGRyZW4sIHZhbHVlKTtcblx0XHRcdFx0aWYgKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBmaW5kVHJlZU5vZGVCeUtleShub2RlczogVHJlZU5vZGVbXSwga2V5OiBzdHJpbmcpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUua2V5ID09PSBrZXkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeUtleShub2RlLmNoaWxkcmVuLCBrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGlzVHJlZVBhcmVudE5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0cmV0dXJuICEhbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0aWYgKCFub2RlIHx8IChub2RlIGFzIGFueSkuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxUcmVlTm9kZVNlbGVjdChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qgbm9kZSA9IGV2ZW50Py5ub2RlID8/IG51bGw7XG5cdFx0aWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0b25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldID0gdHJ1ZTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdG9uTGVmdFBhbmVsVHJlZU5vZGVDb2xsYXBzZShldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxUcmVlU2VsZWN0aW9uKG5vZGU6IFRyZWVOb2RlKSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICd0cmVlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByYXdOb2RlID0gbm9kZS5kYXRhO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKHJhd05vZGUpO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWROb2RlID0gbm9kZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gcmF3Tm9kZTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFZhbHVlLCByYXdOb2RlKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtOiByYXdOb2RlLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZSxcblx0XHRcdG5vZGUsXG5cdFx0XHRyYXdOb2RlLFxuXHRcdFx0aXNQYXJlbnQ6IHRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHRcdGlzTGVhZjogIXRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGFCeUtleSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcblx0XHRcdHRoaXMubWVyZ2VVcHNlcnQodmFsdWUgYXMgUGF5bG9hZFVwc2VydCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKGdyaWQpID0+IHtcblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdGNvbnN0IGZvcm1EYXRhID0gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGZvcm1EYXRhKSkge1xuXHRcdFx0XHRcdHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gPSBmb3JtRGF0YVswXSA/PyB7fTtcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtRGF0YSAmJiB0eXBlb2YgZm9ybURhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JpZC50eXBlID09ICdncmlkJyAmJiAhdGhpcy5nZXRQcm0uZGF0YT8uaGFzT3duUHJvcGVydHkoZ3JpZC5zdWJEYXRhS2V5KSkge1xuXHRcdFx0XHR0aGlzLmdldFBybS5kYXRhW2dyaWQuc3ViRGF0YUtleV0gPSBbXTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyDmj5Lmp73nu4Tku7Yg5pu05pawdXBzZXJ0XG5cdHByaXZhdGUgbWVyZ2VVcHNlcnQocGF5bG9hZDogUGF5bG9hZFVwc2VydCkge1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBmaWVsZCwgaGVhZGVyTmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlLCByZWNvcmRJbmRleCwgaW5kZXgsIGRhdGEsIHNlbGVjdE5hbWUgfSA9IHBheWxvYWQ7XG5cdFx0bGV0IHN1YiA9IHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQhW2luZGV4XTtcblx0XHRpZiAoYWN0aW9uID09ICdhZGQnKSB7XG5cdFx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbaW5kZXhdWydncmlkT3B0aW9ucyddWydtYWluRmllbGQnXTtcblx0XHRcdHN1YlsnbWFwdG1wJ10/LnNldChyZWNvcmRJbmRleCwgeyAuLi5kYXRhIH0pO1xuXHRcdFx0aWYgKGZpZWxkID09IG1haW5GaWVsZCkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgaWQ6IDAsIGxhYmVsOiBoZWFkZXJOYW1lIH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcblx0XHRcdGxldCBvOiBhbnk7XG5cdFx0XHRpZiAoc3ViWydtYXB0bXAnXT8uaGFzKHJlY29yZEluZGV4ISkpIHtcblx0XHRcdFx0byA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG8sIHsgW2ZpZWxkXTogbmV3VmFsdWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvID0geyBpZDogZGF0YVsnaWQnXSwgW2ZpZWxkXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3ROYW1lKSB7XG5cdFx0XHRcdG9bc2VsZWN0TmFtZV0gPSBkYXRhW3NlbGVjdE5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4ISwgbyk7XG5cdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRpZDogZGF0YVsnaWQnXSxcblx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRsZXQgZGF0YSA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRkYXRhW2ZpZWxkXSAmJiBkZWxldGUgZGF0YVtmaWVsZF07XG5cdFx0XHRcdGxldCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0XHRrZXlzLmxlbmd0aCA9PSAwICYmIHN1YlsnbWFwdG1wJ10/LmRlbGV0ZShyZWNvcmRJbmRleCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViWydsb2d0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISArIGZpZWxkISkpIHtcblx0XHRcdFx0c3ViWydsb2d0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4ISArIGZpZWxkISk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHRzdWJbJ21hcHRtcCddPy5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpOiBhbnkge1xuXHRcdGxldCBzdWJGb3JtID0gdHJ1ZTtcblx0XHRpZiAodGhpcy50YWJGb3JtLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMudGFiRm9ybS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghaXRlbS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdFx0c3ViRm9ybSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY0Zvcm0udmFsaWRhdGUoKSAmJiBzdWJGb3JtKSB7XG5cdFx0XHRsZXQgY2I6IGFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0eXBlb2YgdGhpcy5zYXZlRnVuYygpID09ICdmdW5jdGlvbicgPyB0aGlzLnNhdmVGdW5jKCkodGhpcy51cHNlcnRQcm0sIHRoaXMuaWQsIGNiKSA6IHRoaXMudXBzZXJ0KG51bGwsIGNiKTtcblx0XHR9XG5cdH1cblxuXHRkZWxSb3dzKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWRUYWIgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmM7XG5cdFx0Y29uc3Qgc3ViVGFibGUgPSBncmlkVGFiLmdyaWRPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGUpID8gZSA6IFtlXTtcblxuXHRcdGxldCBwcm0gPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHN1YlRhYmxlLFxuXHRcdFx0aWRzLFxuXHRcdH07XG5cdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdFx0aWYgKGRvbmVDYWxsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9uZUNhbGxlZCA9IHRydWU7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGlkcyB9KTtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR9O1xuXHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0aGlzLndlYl9yZW1vdmUocHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRkb25lKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGdW5jKGlkcywgZ3JpZFRhYiwgZG9uZSk7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR1cENiKHJlcz86IGFueSkge1xuXHRcdGlmIChyZXMuaWQgPT0gMCkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0bGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YDtcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2VkaXRVcmxdKTtcblx0XHRcdH0sIDE1MDApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSk7XG5cdFx0dGhpcy5jRm9ybS5maW5hbGl6ZSgpO1xuXHR9XG5cdC8vIFRPRE8g5piv5ZCm6ZyA6KaB5pWw5o2u6L2s5o2i5Zue6LCD5Ye95pWwXG5cdG9uT2soZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhID0gW107XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgdW5pcXVlS2V5cyA9IFtdO1xuXHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygncm93RGF0YS0tLS0tJyxyb3dEYXRhKVxuXHRcdFx0XHR1bmlxdWVLZXlzID0gcm93RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3VuaXF1ZUtleXMtLS0tLScsdW5pcXVlS2V5cywpXG5cdFx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb2JqID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyBncmlkLnNlbGVjdERhdGFDYihpdGVtKSA6IHsgLi4uaXRlbSB9O1xuXHRcdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCAmJiB1bmlxdWVLZXlzLmluY2x1ZGVzKG9ialtncmlkLnVuaXF1ZUZpZWxkIV0gfHwgJycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdyaWQuc2VsZWN0RGF0YSEucHVzaChvYmopO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdhZGQnLCBkYXRhOiBncmlkLnNlbGVjdERhdGEgfSk7XG5cdFx0aWYgKCEhZ3JpZC5zbG90S2V5KSB7XG5cdFx0XHRjb25zdCB7IHN1YkRhdGFLZXkgfSA9IGdyaWQ7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGdyaWQuc2VsZWN0RGF0YSk7XG5cdFx0XHQvLyB0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DYW5jZWxTZWxlY3RlZChlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRsZXQgZGF0YXM6IGFueSA9IFtdO1xuXHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyB7IC4uLmdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIH0gOiBpdGVtO1xuXHRcdFx0ZGF0YXMucHVzaChkYXRhKTtcblx0XHR9KTtcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IGRhdGFzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGRdKTtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRsZXQgZGVsZXRlZFJvd3MgPSByb3dEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBrZXlzLmluY2x1ZGVzKGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pKTtcblx0XHRcdHRoaXMuc3ViRGVsZXRlSWRzID0gZGVsZXRlZFJvd3MubWFwKCh2OiBhbnkpID0+IHYuaWQpLmZpbHRlcigodjogYW55KSA9PiB2KTtcblx0XHRcdGNvbnN0IGlkTm90Um93cyA9IGRlbGV0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiAhdi5pZCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnaWROb3RSb3dzLS0tLScsaWROb3RSb3dzKVxuXHRcdFx0Y29uc3QgZGVsZXRlTm9kZXM6IGFueSA9IFtdO1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgbWFpbiA9IG5vZGUuZGF0YVtncmlkLnVuaXF1ZUZpZWxkXTtcblx0XHRcdFx0XHRsZXQgaXNFeGl0ID0gaWROb3RSb3dzLmZpbmRJbmRleCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IG1haW4pO1xuXHRcdFx0XHRcdGlmIChpc0V4aXQgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlTm9kZXMucHVzaChub2RlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBpZihkZWxldGVkSWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gXHR0aGlzLmRlbFJvd3MoZGVsZXRlZElkcylcblx0XHRcdC8vIH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZU5vZGVzKTtcblx0XHRcdC8vIH1cblx0XHR9XG5cdH1cblx0Z2V0RGV0YWlsKGluZGV4PzogbnVtYmVyKSB7XG5cdFx0Y29uc29sZS5sb2coYGdldERldGFpbDogJHtpbmRleH1gKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8g6I635Y+W6K+m5oOF5Zue6LCDXG5cdGRldGFpbENiKHJlczogYW55KSB7XG5cdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHJlcztcblx0XHR0aGlzLnVwZGF0ZVRpdGxlKHJlcyk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHRpZiAodHlwZW9mIHRoaXMuZm9ybURpc2FibGVkKCkgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5mb3JtRGlzRnVuYygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ocmVmQnRuTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0SHJlZlZhbHVlKCk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIHRoaXMuZ3JpZExpc3QoKSx0aGlzLnJlc29sdmVkR3JpZExpc3QoKSlcblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHt9O1xuXHRcdHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJyF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLS0tLS0nLCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdC8vIGN1c3RvbVN0ZXBzLnJlZnJlc2hTdGVwcygpXG5cdFx0fVxuXHR9XG5cblx0Zm9ybURpc0Z1bmMoKSB7XG5cdFx0bGV0IGRhdGEgPSB0aGlzLmZvcm1EaXNhYmxlZCgpISh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuXHRcdFx0dGhpcy5zYXZlQnRuRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGF0YTtcblx0XHRcdHRoaXMuZGlzYWJsZUZvcm0oZGF0YSk7XG5cdFx0XHR0aGlzLmRpc2FibGVkQ2hpbGQoZGF0YSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGNvbnN0IGRpc2FiZWxkID0gZGF0YS5kaXNhYmxlZDtcblx0XHRcdGNvbnN0IGZpbHRlcnMgPSBkYXRhLmZpbHRlcnMgfHwgW107XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2Zvcm0nKSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHRcdGlmICghZmlsdGVycy5pbmNsdWRlcygnZ3JpZCcpKSB7XG5cdFx0XHRcdHRoaXMuZ3JpZERpc2FibGUgPSBkaXNhYmVsZDtcblx0XHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZGlzYWJsZUZvcm0oZGlzYWJsZTogYm9vbGVhbikge1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHR2Lmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0aWYgKGRpc2FibGUpIHtcblx0XHRcdFx0XHR0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0ZGlzYWJsZWRDaGlsZChkaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYsIGluZGV4OiBhbnkpID0+IHtcblx0XHRcdGlmKHYuaGFzT3duUHJvcGVydHkoJ2dyaWRDdXN0b21EaXNhYmxlZCcpICYmIHR5cGVvZiB2LmdyaWRDdXN0b21EaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0XHRcdFx0di5ncmlkRGlzYWJsZWQgPSB2LmdyaWRDdXN0b21EaXNhYmxlZCh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2LmdyaWREaXNhYmxlZCA9IGRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHRpZiAodi50eXBlID09ICdncmlkJykge1xuXHRcdFx0XHR2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHYuZ3JpZERpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8g5ZCM5LiA5Liq6aG16Z2iZGlzYWJsZWQgZmFsc2UgID0+IHRydWVcblx0XHRcdFx0XHRpZiAoIXYuZ3JpZERpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgJiYgIWl0ZW0uZWRpdGFibGUgJiYgdHlwZW9mIGl0ZW0uZWRpdGFibGUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dHlwZW9mIHRoaXMuY3VzdG9tR3JpZD8uZ2V0KGluZGV4KSEuZ2V0R3JpZCA9PSdmdW5jdGlvbicgJiYgdGhpcy5jdXN0b21HcmlkPy5nZXQoaW5kZXgpIS5nZXRHcmlkKCkuYXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMpO1xuXHRcdFx0fSBlbHNlIGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAodi5ncmlkRGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQhZmllbGREaXNhYmxlZCAmJiB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRzZXREaXNhYmxlZCgpIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR0YWJDbGljaygpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSAmJiB0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnJlQ2FsY0xhYmVsU2l6ZSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSwgMCk7XG5cdH1cblx0dG9nZ2xlTG9nKCkge1xuXHRcdHRoaXMuc2lkZWJhck1vZGUuc2V0KHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG5cdH1cblxuXHRwcml2YXRlIHJlYnVpbGRTbG90TWFwKCkge1xuXHRcdHRoaXMuc2xvdE1hcC5jbGVhcigpO1xuXHRcdGZvciAoY29uc3Qgc2xvdCBvZiB0aGlzLnBhZ2VGb3JtU2xvdHM/LnRvQXJyYXkoKSA/PyBbXSkge1xuXHRcdFx0Y29uc3Qgc2xvdEtleSA9IHNsb3Quc2xvdEtleSgpO1xuXHRcdFx0aWYgKCF0aGlzLnNsb3RNYXAuaGFzKHNsb3RLZXkpKSB7XG5cdFx0XHRcdHRoaXMuc2xvdE1hcC5zZXQoc2xvdEtleSwgc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpIHtcblx0XHR0aGlzLnNsb3RSZW5kZXJTdGF0ZXMgPSAodGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkgPz8gW10pLm1hcCgoZ3JpZCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IHNsb3RLZXkgPSB0aGlzLnJlc29sdmVTbG90S2V5KGdyaWQpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2xvdDogc2xvdEtleSA/IHRoaXMuc2xvdE1hcC5nZXQoc2xvdEtleSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRleHQ6IHRoaXMuZ2V0T3JDcmVhdGVQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQsIGluZGV4LCBzbG90S2V5KSxcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldE9yQ3JlYXRlUGFnZUZvcm1TbG90Q29udGV4dChncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlciwgc2xvdEtleTogc3RyaW5nKTogUGFnZUZvcm1TbG90Q29udGV4dCB7XG5cdFx0Y29uc3QgcmVuZGVyS2V5ID0gdGhpcy5nZXRHcmlkUmVuZGVyS2V5KGdyaWQsIGluZGV4KTtcblx0XHRsZXQgY29udGV4dCA9IHRoaXMuc2xvdENvbnRleHRNYXAuZ2V0KHJlbmRlcktleSk7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHRjb250ZXh0ID0ge30gYXMgUGFnZUZvcm1TbG90Q29udGV4dDtcblx0XHRcdHRoaXMuc2xvdENvbnRleHRNYXAuc2V0KHJlbmRlcktleSwgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC4kaW1wbGljaXQgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQuc2xvdEtleSA9IHNsb3RLZXk7XG5cdFx0Y29udGV4dC5ncmlkID0gZ3JpZDtcblx0XHRjb250ZXh0LmluZGV4ID0gaW5kZXg7XG5cdFx0Y29udGV4dC5wYWdlRm9ybSA9IHRoaXM7XG5cdFx0Y29udGV4dC5kYXRhID0gKHRoaXMuZ2V0UHJtLmRhdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnRleHQubW9kZWwgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleSFdIHx8IHt9O1xuXHRcdGNvbnRleHQudXBzZXJ0ID0gdGhpcy51cHNlcnRQcm07XG5cdFx0Y29udGV4dC5hY3RpdmUgPSB0aGlzLmluZGV4VmFsdWUgPT09IGluZGV4O1xuXHRcdGNvbnRleHQuZ3JpZERpc2FibGUgPSB0aGlzLmdyaWREaXNhYmxlO1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlU2xvdEtleShncmlkOiBHcmlkTGlzdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyaWQuc2xvdEtleSB8fCBncmlkLnN1YkRhdGFLZXk7XG5cdH1cblxuXHRwcml2YXRlIGdldEdyaWRSZW5kZXJLZXkoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgZ3JpZC5zdWJEYXRhS2V5IHx8IGdyaWQuc2xvdEtleSB8fCBgJHtpbmRleH1gO1xuXHR9XG5cblx0Z2V0Q3VycmVudEdyaWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpPy5bdGhpcy5pbmRleFZhbHVlXSA/PyBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDdXJyZW50U3ViTW9kZWxOYW1lKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRHcmlkLnR5cGUgPT09ICdncmlkJyA/IGN1cnJlbnRHcmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgJycgOiBjdXJyZW50R3JpZC5tb2RlbE5hbWUgfHwgJyc7XG5cdH1cblxuXHRwcml2YXRlIGdldFN1YnNlcnRCeUdyaWQoZ3JpZDogR3JpZExpc3QgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFncmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc3ViTW9kZWxOYW1lID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgOiBncmlkWydtb2RlbE5hbWUnXTtcblx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnVwc2VydFBybS5zdWJzZXJ0Py5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uc3ViTW9kZWxOYW1lID09PSBzdWJNb2RlbE5hbWUpID8/IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGNsb25lU3Vic2VydChzdWJzZXJ0OiBhbnkpIHtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3Vic2VydCxcblx0XHRcdHN1YkRhdGE6IEFycmF5LmlzQXJyYXkoc3Vic2VydC5zdWJEYXRhKSA/IHN1YnNlcnQuc3ViRGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiBbXSxcblx0XHRcdG1hcHRtcDogbmV3IE1hcDxhbnksIGFueT4oc3Vic2VydC5tYXB0bXAgPyAoQXJyYXkuZnJvbShzdWJzZXJ0Lm1hcHRtcC5lbnRyaWVzKCkpIGFzIFthbnksIGFueV1bXSkgOiBbXSksXG5cdFx0XHRsb2d0bXA6IG5ldyBNYXA8YW55LCBhbnk+KHN1YnNlcnQubG9ndG1wID8gKEFycmF5LmZyb20oc3Vic2VydC5sb2d0bXAuZW50cmllcygpKSBhcyBbYW55LCBhbnldW10pIDogW10pLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgY3VycmVudEdyaWQudHlwZSA9PT0gJ2dyaWQnKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybUluZGV4ID1cblx0XHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHRcdC5zbGljZSgwLCB0aGlzLmluZGV4VmFsdWUgKyAxKVxuXHRcdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSAhPT0gJ2dyaWQnKS5sZW5ndGggLSAxO1xuXHRcdHJldHVybiBmb3JtSW5kZXggPj0gMCA/ICh0aGlzLnRhYkZvcm0uZ2V0KGZvcm1JbmRleCkgPz8gbnVsbCkgOiBudWxsO1xuXHR9XG5cblx0Y2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXV0aExldmVsKCkgPj0gMyAmJiBjdXJyZW50R3JpZCA9PT0gdGhpcy5nZXRDdXJyZW50R3JpZCgpICYmIGN1cnJlbnRHcmlkLnN1YlNhdmU/LmVuYWJsZWQgPT09IHRydWU7XG5cdH1cblxuXHRnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8ubGFiZWwgfHwgJ+S/neWtmCc7XG5cdH1cblxuXHRwcml2YXRlIGhhc01haW5QZW5kaW5nQ2hhbmdlcygpIHtcblx0XHRjb25zdCBhZGREYXRhID0gdGhpcy51cHNlcnRQcm0uYWRkRGF0YSB8fCB7fTtcblx0XHRjb25zdCB1cGREYXRhID0gdGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYWRkRGF0YSkubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyh1cGREYXRhKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhIShcblx0XHRcdChzdWJzZXJ0LnN1YkRhdGEgJiYgc3Vic2VydC5zdWJEYXRhLmxlbmd0aCA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5tYXB0bXAgJiYgc3Vic2VydC5tYXB0bXAuc2l6ZSA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5sb2d0bXAgJiYgc3Vic2VydC5sb2d0bXAuc2l6ZSA+IDApXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpIHtcblx0XHRjb25zdCBkaXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9KSwgLi4uT2JqZWN0LmtleXModGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fSldKTtcblx0XHRjb25zdCBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGRpcnR5UGF0aHMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRzbmFwc2hvdFtrZXldID0gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdDtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQ6IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKCFncmlkIHx8IGdyaWQgPT09IGN1cnJlbnRHcmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoZ3JpZCk7XG5cdFx0XHRpZiAoIXRoaXMuaGFzU3Vic2VydFBlbmRpbmdDaGFuZ2VzKHN1YnNlcnQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XSB8fCBbXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gfHwge307XG5cdFx0XHRzbmFwc2hvdHMuc2V0KGdyaWQuc3ViRGF0YUtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50RGF0YSkgPyBjdXJyZW50RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLmN1cnJlbnREYXRhIH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdHM7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdWJEYXRhU25hcHNob3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmVudHJpZXMobWFpbkRhdGFTbmFwc2hvdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHRcdHN1YkRhdGFTbmFwc2hvdHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLnZhbHVlIH07XG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhdGhpcy5pZCB8fCAhdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbkRhdGFTbmFwc2hvdCA9IHRoaXMuY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IG90aGVyRGlydHlTbmFwc2hvdHMgPSB0aGlzLmNvbGxlY3RPdGhlckRpcnR5U3ViRGF0YVNuYXBzaG90KGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0XHR0aGlzLnJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90LCBvdGhlckRpcnR5U25hcHNob3RzKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRDdXJyZW50VGFiVXBzZXJ0U3RhdGUoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3Vic2VydC5tYXB0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5sb2d0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5zdWJEYXRhID0gW107XG5cdH1cblxuXHRwcml2YXRlIHJlY2FsY3VsYXRlU2F2ZVNpZ25hbCgpIHtcblx0XHRjb25zdCBoYXNEaXJ0eVN1YnNlcnRzID0gKHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW10pLnNvbWUoKHN1YnNlcnQ6IGFueSkgPT4gdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpO1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRoaXMuaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkgfHwgaGFzRGlydHlTdWJzZXJ0cyk7XG5cdH1cblxuXHRidWlsZEN1cnJlbnRUYWJVcHNlcnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoY3VycmVudEdyaWQpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgIWN1cnJlbnRTdWJzZXJ0IHx8ICF0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZDogYW55ID0ge1xuXHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdHVwZERhdGE6IHtcblx0XHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRcdC4uLih0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9KSxcblx0XHRcdH0sXG5cdFx0XHRzdWJzZXJ0OiBbdGhpcy5jbG9uZVN1YnNlcnQoY3VycmVudFN1YnNlcnQpXSxcblx0XHR9O1xuXHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRwYXlsb2FkLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdHBheWxvYWQubG9nID0ge1xuXHRcdFx0XHQuLi4odGhpcy51cHNlcnRQcm0ubG9nIHx8IHt9KSxcblx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsLCBjYj86IEZ1bmN0aW9uLCByZXM/OiBhbnkpIHtcblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0dGhpcy5yZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWZyZXNoQ3VycmVudFRhYkRhdGEoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMucmVjYWxjdWxhdGVTYXZlU2lnbmFsKCk7XG5cdFx0Y2IgJiYgY2IocmVzKTtcblx0fVxuXG5cdHNhdmVDdXJyZW50VGFiKGNiPzogRnVuY3Rpb24pIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZEN1cnJlbnRUYWJVcHNlcnQoKTtcblx0XHRpZiAoIXBheWxvYWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7flhYjkv53lrZjkuLvooagnIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudEdyaWQ/LnR5cGUgIT09ICdncmlkJykge1xuXHRcdFx0Y29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCk7XG5cdFx0XHRpZiAoY3VycmVudEZvcm0gJiYgIWN1cnJlbnRGb3JtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRjb25zdCBmaW5hbGl6ZVNhdmUgPSAocmVzPzogYW55KSA9PiB0aGlzLmhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZCwgY2IsIHJlcyk7XG5cdFx0aWYgKHR5cGVvZiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uc2F2ZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGN1cnJlbnRHcmlkLnN1YlNhdmUuc2F2ZUZ1bmMocGF5bG9hZCwgdGhpcy5pZCwgZmluYWxpemVTYXZlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy53ZWJfdXBzZXJ0KHBheWxvYWQpXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZmluYWxpemVTYXZlKHJlcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFkZFJvd0NsaWNrSGFuZGxlcihncmlkOiBHcmlkTGlzdCkge1xuXHRcdGNvbnN0IHN1YkRhdGFLZXkgPSBncmlkLnN1YkRhdGFLZXk7XG5cblx0XHRpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSA9PT0gJ2hhbmRsZScpIHtcblx0XHRcdGNvbnN0IGFkZEl0ZW0gPSBncmlkLmdyaWRPcHRpb25zPy5hZGREYXRhQ2I/LigpID8/IHt9O1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBhZGRJdGVtLCBncmlkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIHVuZGVmaW5lZCwgZ3JpZCk7XG5cdFx0dGhpcy5kYXRhU291cmNlU2hvdygpO1xuXHR9XG5cblx0ZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc2VsZWN0SXRlbTogYW55ID0gdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkgfHwgW107XG5cdFx0bGV0IGlkczogbnVtYmVyW10gPSBbXTtcblx0XHRpZiAoZ3JpZC5zbG90S2V5ID09PSAnZ2FudHQnKSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkICYmIHR5cGVvZiB2LmlkID09PSAnbnVtYmVyJykubWFwKCh2OiBhbnkpID0+IHYuaWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fVxuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHsgbW9kZWxOYW1lOiBncmlkLmdyaWRPcHRpb25zLm1vZGVsTmFtZSwgaWRzIH0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWQ6b3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDwhLS0g5L+d5a2Y5paw5bu65pON5L2c5Yy6IC0tPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdFtzaG93U2F2ZUJ1dHRvbl09XCJzaG93TWFpblNhdmVCdXR0b24oKVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG4gIDwhLS0gIGZvcm0g5Li75Yy65Z+fLS0+XG4gIEBpZih0aGlzLmZvcm0oKS5mb3JtKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgIEBpZiAoY3VzdG9tTGVmdFBhbmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LWZpdCBtZDptYXgtdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxlZnRQYW5lbCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobGVmdFBhbmVsKCk/LmVuYWJsZWQgJiYgbGVmdFBhbmVsKCk/Lm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctWzIyMHB4XSBtZDptYXgtdy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1mb3JtLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgIDxhbS1zaW5nbGUtc2VsZWN0LWxpc3Rib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwibGVmdFBhbmVsSXRlbXNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZ2V0UGFuZWxPcHRpb25WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImdldFBhbmVsT3B0aW9uTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiZ2V0UGFuZWxFbXB0eU1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAgIFthbGxvd0Rlc2VsZWN0XT1cImdldFBhbmVsQWxsb3dEZXNlbGVjdCgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbCBwYWdlLWZvcm0tdHJlZS1wYW5lbFwiPlxuICAgICAgICAgICAgQGlmIChsZWZ0UGFuZWxUcmVlTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8cC10cmVlXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxlZnRQYW5lbFRyZWVOb2Rlc1wiXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgWyhzZWxlY3Rpb24pXT1cImxlZnRQYW5lbFNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICAgICAgW2VtcHR5TWVzc2FnZV09XCJnZXRQYW5lbEVtcHR5TWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFnZS1mb3JtLWxlZnQtdHJlZVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVFeHBhbmQpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlQ29sbGFwc2UpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUNvbGxhcHNlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbC1lbXB0eVwiPnt7IGdldFBhbmVsRW1wdHlNZXNzYWdlKCkgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOm1pbi13LTAgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAjY0Zvcm1cbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YSA/PyB7fVwiPjwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChncmlkcyAmJiBncmlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItMlwiPlxuICAgICAgICAgICAgICA8cC10YWJzIFsodmFsdWUpXT1cImluZGV4VmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsaXN0PlxuICAgICAgICAgICAgICAgICAgQGZvciAoZmNoaWxkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZmNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLXRhYlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFiQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZjaGlsZC5pMThuS2V5ID8gaTE4bi5mYW55aShmY2hpbGQuaTE4bktleSkgOiBmY2hpbGQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wLXRhYj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3AtdGFibGlzdD5cbiAgICAgICAgICAgICAgPC9wLXRhYnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAoZ3JpZCBvZiBncmlkczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGdyaWQpIHtcbiAgICAgICAgICAgIEBsZXQgc2xvdFN0YXRlID0gc2xvdFJlbmRlclN0YXRlc1tpXTtcbiAgICAgICAgICAgIEBsZXQgc2xvdCA9IHNsb3RTdGF0ZT8uc2xvdDtcbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIiBbc3R5bGUuaGVpZ2h0XT1cInNsb3QgPyBncmlkLmdyaWRPcHRpb25zLnNjcm9sbEhlaWdodCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgQGlmIChzbG90KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNsb3QudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHNsb3RTdGF0ZS5jb250ZXh0XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkLmdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSAhPSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGdyaWQuc2hvd0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgI2N1c3RvbUdyaWQ+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC50eXBlID09ICdncmlkJykge1xuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1ncmlkXG4gICAgICAgICAgICAgICAgICAgICNjdXN0b21HcmlkXG4gICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV1cIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVFbWl0KT1cImRlbFJvd3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGRUeXBlXT1cImdyaWQuc3ViVGFibGVTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkRW1pdCk9XCJkYXRhU291cmNlU2hvdygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWQuZ3JpZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZERpc2FibGVdPVwiZ3JpZC5ncmlkRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwiZ3JpZC5zaG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVWaXNpYmxlXT1cImNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlTGFiZWxdPVwiZ2V0Q3VycmVudFRhYlNhdmVMYWJlbChncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlRGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0RGF0YV09XCJncmlkLnNlbGVjdERhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYWRkU29ydF09XCJncmlkLmFkZFNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAoc3ViU2F2ZUVtaXQpPVwic2F2ZUN1cnJlbnRUYWIoKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZ3JpZD5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB4LTIgcHQtMiBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAgICAgI3RhYkZvcm1cbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ3JpZFwiXG4gICAgICAgICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cInN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoc2hvd0xvZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbGc6dy1bNDAwcHhdIG1kOnctWzMwMHB4XSBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIGhpZGRlbiBtZDpibG9ja1wiPlxuICAgICAgICAgIDxjdXN0b20tbG9nIFtsb2dzXT1cImdldFBybS5kYXRhPy5sb2cgPz8gW11cIj48L2N1c3RvbS1sb2c+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxyb3ctc2VsZWN0b3Jcblx0Wyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcblx0W3NlYXJjaFBybV09XCJkaWFsb2dTZWFyY2hQcm1cIlxuXHRbZ3JpZE9wdGlvbnNdPVwic2VsZWN0T3B0aW9uc1wiXG5cdFtzZWxlY3Rpb25LZXlzXT1cInNlbGVjdGlvbktleXNcIlxuXHRbc2VsZWN0TW9kZWxDb2RlXT1cImN1cnJlbnRTZWxlY3RNb2RlbENvZGUgfHwgdW5kZWZpbmVkXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2ddPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVcIlxuXHRbY3VzdG9tTGlzdEZvcm1CeURpYWxvZ0NvbnRleHRdPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dFwiXG5cdFtjdXN0b21MaXN0RGlhbG9nTWFwXT1cImN1c3RvbUxpc3RGb3JtSW5zdGFuY2VNYXAoKVwiXG5cdChvbk9rKT1cIm9uT2soJGV2ZW50KVwiXG5cdChjYW5jZWxTZWxlY3QpPVwib25DYW5jZWxTZWxlY3RlZCgkZXZlbnQpXCI+XG48L3Jvdy1zZWxlY3Rvcj5cbiJdfQ==
1514
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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bUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLFVBQVU7cUJBQ1YsYUFHVSxFQUFFO3dEQUdPLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDVSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVk7Z0JBQ0QsT0FBTztzQkFBL0IsWUFBWTt1QkFBQyxTQUFTO2dCQUNVLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNnQyxhQUFhO3NCQUEzRSxlQUFlO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkE4SjdELFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS91c2VySGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7XG5cdEFmdGVyQ29udGVudEluaXQsXG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRlZmZlY3QsXG5cdEhvc3RMaXN0ZW5lcixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdFF1ZXJ5TGlzdCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCwgRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9mb3JtL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm93U2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9yb3ctc2VsZWN0b3Ivcm93LXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2cvbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENydW1iQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RlcCwgU3RlcHNDb21wb25lbnQgfSBmcm9tICcuLi9zdGVwcy9zdGVwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCwgR3JpZE9wdGlvbnMgfSBmcm9tICcuLi9ncmlkL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFic01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFicyc7XG5pbXBvcnQgeyBUcmVlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90cmVlJztcbmltcG9ydCB7IEFtQ29tcG9uZW50LCBHZXQsIFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuXHRmb3JtVHlwZVRvUHJvcHMsXG5cdEdyaWRMaXN0LFxuXHRIcmVmQnRuTGlzdCxcblx0UGFnZUZvcm1TbG90Q29udGV4dCxcblx0UGFnZUxlZnRQYW5lbENvbmZpZyxcblx0UGFnZUxlZnRQYW5lbERhdGFTb3VyY2UsXG5cdFBheWxvYWRVcHNlcnQsXG5cdFBlcm1pc3Npb25CdG4sXG5cdEN1c3RvbUxpc3REaWFsb2csXG5cdEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0LFxufSBmcm9tICcuL3BhZ2UtZm9ybS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSHJlZkJ0bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi9ocmVmLWJ0bi1saXN0L2hyZWYtYnRuLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gJy4uL3NoYXJlL3V0aWxzJztcbmltcG9ydCB7IFBhZ2VGb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvcGFnZS1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnZUZvcm1TbG90RGlyZWN0aXZlIH0gZnJvbSAnLi9wYWdlLWZvcm0tc2xvdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZmluYWxpemUsIGZpcnN0VmFsdWVGcm9tLCBpc09ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCxcblx0U2luZ2xlU2VsZWN0TGlzdGJveENvbXBvbmVudFxufSBmcm9tICcuLi9zaW5nbGUtc2VsZWN0LWxpc3Rib3gvc2luZ2xlLXNlbGVjdC1saXN0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmaWVsZFV0aWxzIH0gZnJvbSAnLi4vZm9ybS9mb3JtLWZpZWxkL2ZpZWxkLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLXBhZ2UtZm9ybScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0QnV0dG9uTW9kdWxlLFxuXHRcdEZvcm1zTW9kdWxlLFxuXHRcdFJlYWN0aXZlRm9ybXNNb2R1bGUsXG5cdFx0Rm9ybUNvbXBvbmVudCxcblx0XHRMb2dDb21wb25lbnQsXG5cdFx0Q3J1bWJBY3Rpb25Db21wb25lbnQsXG5cdFx0U3RlcHNDb21wb25lbnQsXG5cdFx0R3JpZENvbXBvbmVudCxcblx0XHRUYWJzTW9kdWxlLFxuXHRcdFJvd1NlbGVjdG9yQ29tcG9uZW50LFxuXHRcdFRyYW5zbGF0ZVBpcGUsXG5cdFx0SHJlZkJ0bkxpc3RDb21wb25lbnQsXG5cdFx0U2luZ2xlU2VsZWN0TGlzdGJveENvbXBvbmVudCxcblx0XHRUcmVlTW9kdWxlLFxuXHRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vcGFnZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuc2NzcycsXG5cdHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VGb3JtQ29tcG9uZW50IGV4dGVuZHMgQW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cdEBWaWV3Q2hpbGQoJ2NGb3JtJykgY0Zvcm0hOiBGb3JtQ29tcG9uZW50O1xuXHRAVmlld0NoaWxkcmVuKCdjdXN0b21HcmlkJykgY3VzdG9tR3JpZCE6IFF1ZXJ5TGlzdDxHcmlkQ29tcG9uZW50Pjtcblx0QFZpZXdDaGlsZHJlbigndGFiRm9ybScpIHRhYkZvcm0hOiBRdWVyeUxpc3Q8Rm9ybUNvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGQoUm93U2VsZWN0b3JDb21wb25lbnQpIHJvd1NlbGVjdG9yPzogUm93U2VsZWN0b3JDb21wb25lbnQ7XG5cdEBDb250ZW50Q2hpbGRyZW4oUGFnZUZvcm1TbG90RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHBhZ2VGb3JtU2xvdHMhOiBRdWVyeUxpc3Q8UGFnZUZvcm1TbG90RGlyZWN0aXZlPjtcblx0c2hvd0xvZyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2RlbExvZygpICYmIHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ3JpZ2h0Jztcblx0fSk7XG5cdGFkZFZpc2libGUgPSBpbnB1dDxib29sZWFuPigpO1xuXHRncmlkTGlzdCA9IGlucHV0PGFueVtdPihbXSk7XG5cdGZvcm0gPSBpbnB1dC5yZXF1aXJlZDxGb3JtT3B0aW9ucz4oe30pO1xuXHRnZXRQcm1JbnB1dCA9IGlucHV0LnJlcXVpcmVkPEdldD4oe30pO1xuXHRzdGF0dXNTdGVwcyA9IGlucHV0PFN0ZXBbXT4oW10pO1xuXHRzdGF0dXNLZXkgPSBpbnB1dCgnc3RhdHVzJyk7XG5cdGhyZWZCdG5MaXN0ID0gaW5wdXQ8SHJlZkJ0bkxpc3RbXT4oW10pO1xuXHRzZXRUaXRsZSA9IGlucHV0PHN0cmluZz4oKTtcblx0YWN0aW9uTGlzdCA9IGlucHV0PFBlcm1pc3Npb25CdG5bXT4oW10pO1xuXHRtb2RlbExvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0c2lkZWJhck1vZGUgPSBzaWduYWw8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ3JpZ2h0Jyk7XG5cdGZvcm1EaXNhYmxlZCA9IGlucHV0PEZ1bmN0aW9uPigpO1xuXHRzdGF0dXNDb25mID0gaW5wdXQ8YW55PigpO1xuXHRmb3JtRGV0YWlsID0gaW5wdXQ8YW55PigpO1xuXHRzYXZlRnVuYyA9IGlucHV0PGFueT4oKTtcblx0c2hvd01haW5TYXZlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGNvbmZpZ05ld1BhdGggPSBpbnB1dDxhbnk+KCk7XG5cdHJ1bnRpbWVDb250ZXh0SW5wdXQgPSBpbnB1dDxhbnk+KHt9KTtcblx0Y3VzdG9tTGVmdFBhbmVsID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQ+PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgQ3VzdG9tTGlzdERpYWxvZyB8IHVuZGVmaW5lZD4gfCBudWxsPihudWxsKTtcblx0bGVmdFBhbmVsID0gaW5wdXQ8UGFnZUxlZnRQYW5lbENvbmZpZyB8IG51bGw+KG51bGwpO1xuXHRwYW5lbFNlbGVjdGVkRGF0YSA9IGlucHV0PGFueT4oe30pO1xuXHRydW50aW1lQ29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG5cdHByaXZhdGUgY3VycmVudElkQW5kTW9kZWxOYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG5cblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XG5cdHBhZ2VGb3JtU2VydmljZSA9IGluamVjdChQYWdlRm9ybVNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHByaXZhdGUgX2luZGV4VmFsdWUgPSAwO1xuXHRwcml2YXRlIHJlYWRvbmx5IGludGVybmFsR3JpZExpc3QgPSBzaWduYWw8YW55W10+KFtdKTtcblx0cHJpdmF0ZSBncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0dmlzaWJsZSA9IGZhbHNlO1xuXHRkaWFsb2dTZWFyY2hQcm0hOiBTZWFyY2g7XG5cdHNlbGVjdE9wdGlvbnMhOiBHcmlkT3B0aW9ucztcblx0c2VsZWN0RGF0YTogYW55W10gPSBbXTtcblx0cGFnZVVybCA9ICcnO1xuXHRuZXdVcmwgPSAnJztcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGhyZWZzOiBhbnlbXSA9IFtdO1xuXHRhY3Rpb24gPSBpbmplY3QoQWN0aW9uU2VydmljZSk7XG5cdHN1YkZvcm1Nb2RlbDogYW55ID0ge307XG5cdHNhdmVCdG5EaXNhYmxlID0gZmFsc2U7XG5cdGdyaWREaXNhYmxlID0gZmFsc2U7XG5cdHNlbGVjdGlvbktleXM6IGFueVtdID0gW107XG5cdHN1YkRlbGV0ZUlkczogYW55W10gPSBbXTtcblx0bGVmdFBhbmVsSXRlbXM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbFRyZWVOb2RlczogVHJlZU5vZGVbXSA9IFtdO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZE5vZGU6IFRyZWVOb2RlIHwgbnVsbCA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkVmFsdWU6IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcblx0bGVmdFBhbmVsRXhwYW5kZWRLZXlzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRsZWZ0UGFuZWxJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRwcml2YXRlIGxlZnRQYW5lbEluaXRpYWxpemVkTW9kZTogJ2xpc3QnIHwgJ3RyZWUnIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgYmFzZUdyaWRMaXN0U25hcHNob3Q6IGFueVtdID0gW107XG5cblx0c3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2xvdE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlRm9ybVNsb3REaXJlY3RpdmU+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2xvdENvbnRleHRNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90Q29udGV4dD4oKTtcblx0Y3VycmVudFNlbGVjdE1vZGVsQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHNsb3RSZW5kZXJTdGF0ZXM6IEFycmF5PHtcblx0XHRzbG90PzogUGFnZUZvcm1TbG90RGlyZWN0aXZlO1xuXHRcdGNvbnRleHQ6IFBhZ2VGb3JtU2xvdENvbnRleHQ7XG5cdH0+ID0gW107XG5cblx0Z2V0IGluZGV4VmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZGV4VmFsdWU7XG5cdH1cblxuXHRnZXQgY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGUoKSB7XG5cdFx0Y29uc3QgY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZTtcblx0XHRpZiAoIWN1cnJlbnRTZWxlY3RNb2RlbENvZGUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmN1c3RvbUxpc3RGb3JtVGVtcGxhdGVNYXAoKT8uW2N1cnJlbnRTZWxlY3RNb2RlbENvZGVdID8/IG51bGw7XG5cdH1cblxuXHRnZXQgY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dCgpOiBDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCB7XG5cdFx0cmV0dXJuIHsgcGFnZUZvcm06IHRoaXMgfTtcblx0fVxuXG5cdGdldERpYWxvZ1NlbGVjdGVkUmVzdWx0KCkge1xuXHRcdGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMucm93U2VsZWN0b3I/LmdldFNlbGVjdGVkRGF0YSgpID8/IFtdO1xuXHRcdHJldHVybiBzZWxlY3RlZERhdGEubWFwKChpdGVtKSA9PiB7XG5cdFx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zPy5jb2x1bW5EZWZzPy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbY29sLmZpZWxkXSA9IGl0ZW1bY29sLmZpZWxkXTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblx0fVxuXG5cdHNldFJ1bnRpbWVDb250ZXh0KGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuXHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB7XG5cdFx0XHQuLi4odGhpcy5ydW50aW1lQ29udGV4dCB8fCB7fSksXG5cdFx0XHQuLi5kYXRhLFxuXHRcdH07XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRzZXQgaW5kZXhWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5faW5kZXhWYWx1ZSA9IHZhbHVlO1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHR9XG5cblx0Z2V0IGdyaWRzKCkge1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVkR3JpZExpc3QoKTtcblx0fVxuXG5cdHNldCBncmlkcyh2YWx1ZTogYW55W10pIHtcblx0XHR0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA9IHRydWU7XG5cdFx0dGhpcy5pbnRlcm5hbEdyaWRMaXN0LnNldCh2YWx1ZSA/PyBbXSk7XG5cdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVkR3JpZExpc3QoKSB7XG5cdFx0aWYgKHRoaXMubGVmdFBhbmVsKCk/LmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmludGVybmFsR3JpZExpc3QoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ3JpZExpc3RPdmVycmlkZGVuID8gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCkgOiB0aGlzLmdyaWRMaXN0KCk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNVcHNlcnRTdWJzZXJ0cygpIHtcblx0XHRjb25zdCBjdXJyZW50U3Vic2VydHMgPSB0aGlzLnVwc2VydFBybS5zdWJzZXJ0IHx8IFtdO1xuXHRcdGNvbnN0IHN1YnNlcnRNYXAgPSBuZXcgTWFwKGN1cnJlbnRTdWJzZXJ0cy5tYXAoKGl0ZW0pID0+IFtpdGVtLnN1Yk1vZGVsTmFtZSwgaXRlbV0pKTtcblx0XHRjb25zdCBuZXh0U3Vic2VydHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHN1Yk1vZGVsTmFtZSA9IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIDogaXRlbVsnbW9kZWxOYW1lJ107XG5cdFx0XHRcdGlmICghc3ViTW9kZWxOYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY3VycmVudCA9IHN1YnNlcnRNYXAuZ2V0KHN1Yk1vZGVsTmFtZSk7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0Y3VycmVudCB8fCB7XG5cdFx0XHRcdFx0XHRzdWJNb2RlbE5hbWUsXG5cdFx0XHRcdFx0XHRmazogaXRlbS50eXBlID09PSAnZ3JpZCcgPyBpdGVtLmdyaWRPcHRpb25zPy5mayB8fCBpdGVtLmZrIDogaXRlbS5mayxcblx0XHRcdFx0XHRcdHN1YkRhdGE6IFtdLFxuXHRcdFx0XHRcdFx0bWFwdG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRsb2d0bXA6IG5ldyBNYXAoKSxcblx0XHRcdFx0XHRcdHJlZmVyZW5jZTogaXRlbS50eXBlID09PSAnZ3JpZCcgPyBpdGVtLmdyaWRPcHRpb25zPy5yZWZlcmVuY2UgfHwgaXRlbS5yZWZlcmVuY2UgOiBpdGVtLnJlZmVyZW5jZSxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyBhbnlbXTtcblx0XHR0aGlzLnVwc2VydFBybS5zdWJzZXJ0ID0gbmV4dFN1YnNlcnRzO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuc2lkZWJhck1vZGUuc2V0KHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNCA/ICdsZWZ0JyA6ICdyaWdodCcpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5pZCA9IE51bWJlcih0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSk7XG5cdFx0dGhpcy5wYWdlVXJsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC51cmxcblx0XHRcdC5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aClcblx0XHRcdC5qb2luKCcvJylcblx0XHRcdC5yZXBsYWNlKC8oW15cXC9dKikkLywgJycpO1xuXHRcdHRoaXMubmV3VXJsID0gYCR7dGhpcy5wYWdlVXJsfW5ld2A7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm1vZGVsTmFtZSA9IHRoaXMuZ2V0UHJtSW5wdXQoKS5tb2RlbE5hbWUhO1xuXHRcdFx0XHR0aGlzLmdldFBybSA9IHsgLi4udGhpcy5nZXRQcm1JbnB1dCgpIH07XG5cdFx0XHRcdHRoaXMuaWQgJiYgKHRoaXMuZ2V0UHJtLmlkID0gdGhpcy5pZCk7XG5cdFx0XHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lICYmICF0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodi50eXBlID09ICdncmlkJykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhW3Yuc3ViRGF0YUtleV0gPSBbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHRoaXMuZm9ybU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9ybU9wdGlvbnMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5ydW50aW1lQ29udGV4dCA9IHRoaXMucnVudGltZUNvbnRleHRJbnB1dCgpIHx8IHt9O1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5pc0xvZyA9IHRoaXMubW9kZWxMb2coKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5zdGF0dXNTdGVwcygpLmxlbmd0aCA+IDAgJiYgIXRoaXMuaWQpIHtcblx0XHRcdFx0XHR0aGlzLnVwc2VydFBybS5hZGREYXRhIVt0aGlzLnN0YXR1c0tleSgpXSA9IHRoaXMuc3RhdHVzU3RlcHMoKVswXVsndmFsdWUnXTtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFx0XHRbdGhpcy5zdGF0dXNLZXkoKV06IHRoaXMuc3RhdHVzU3RlcHMoKVswXVsndmFsdWUnXSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dGhMZXZlbCgpIDwgMykge1xuXHRcdFx0XHRcdHRoaXMuc2V0RGlzYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgaW5wdXRHcmlkTGlzdCA9IHRoaXMuZ3JpZExpc3QoKTtcblx0XHRcdFx0aWYgKCF0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbikge1xuXHRcdFx0XHRcdC8vIHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQoW10pO1xuXHRcdFx0XHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5iYXNlR3JpZExpc3RTbmFwc2hvdCA9IGRlZXBDbG9uZShpbnB1dEdyaWRMaXN0LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRcdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHRoaXMucmVzZXRMZWZ0UGFuZWxTdGF0ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9kZSA9IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpO1xuXHRcdFx0XHRpZiAodGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZCAmJiB0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9PT0gY3VycmVudE1vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWRNb2RlICYmIHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWRNb2RlICE9PSBjdXJyZW50TW9kZSkge1xuXHRcdFx0XHRcdHRoaXMucmVzZXRMZWZ0UGFuZWxTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmluaXRpYWxpemVMZWZ0UGFuZWwoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdH1cblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5yZWJ1aWxkU2xvdE1hcCgpO1xuXHRcdHRoaXMucGFnZUZvcm1TbG90cy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5yZWJ1aWxkU2xvdE1hcCgpO1xuXHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnVwQ2IgPSB0aGlzLnVwQ2IuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdFx0dGhpcy5iaW5kUGFnZUZvcm1TZXJ2aWNlKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRlc3Ryb3kkLm5leHQoKTtcblx0XHR0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc2V0TGVmdFBhbmVsU3RhdGUoKSB7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWRNb2RlID0gbnVsbDtcblx0XHR0aGlzLmxlZnRQYW5lbEl0ZW1zID0gW107XG5cdFx0dGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMgPSBbXTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkTm9kZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlID0gbnVsbDtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXMgPSB7fTtcblx0XHR0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodGhpcy5ncmlkTGlzdCgpKTtcblx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTGVmdFBhbmVsKCkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWRNb2RlID0gdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCk7XG5cdFx0dGhpcy5iYXNlR3JpZExpc3RTbmFwc2hvdCA9IHRoaXMuZ3JpZExpc3QoKS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbSk7XG5cdFx0Y29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZ2V0UGFuZWxEYXRhU291cmNlKCk7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25Jbml0Jyk7XG5cdFx0Y29uc3QgaXRlbXMgPSBhd2FpdCB0aGlzLmxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlKTtcblx0XHR0aGlzLmxlZnRQYW5lbEl0ZW1zID0gaXRlbXM7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25JdGVtc0xvYWRlZCcsIHsgaXRlbXMgfSk7XG5cdFx0aWYgKHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpID09PSAndHJlZScpIHtcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZUxlZnRQYW5lbFRyZWUoaXRlbXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVMZWZ0UGFuZWxMaXN0KGl0ZW1zLCBkYXRhU291cmNlKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbExpc3QoaXRlbXM6IGFueVtdLCBkYXRhU291cmNlPzogUGFnZUxlZnRQYW5lbERhdGFTb3VyY2UpIHtcblx0XHRsZXQgZGVmYXVsdFZhbHVlID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhcblx0XHRcdHR5cGVvZiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0ID09PSAnZnVuY3Rpb24nXG5cdFx0XHRcdD8gZGF0YVNvdXJjZS5kZWZhdWx0U2VsZWN0KHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KHsgaXRlbXMgfSkpXG5cdFx0XHRcdDogZGF0YVNvdXJjZT8uZGVmYXVsdFNlbGVjdCxcblx0XHQpO1xuXHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBkZWZhdWx0VmFsdWUgPT09IG51bGwpICYmIHRoaXMuZ2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkgPT09IGZhbHNlICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbXNbMF0pO1xuXHRcdH1cblx0XHRpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5TGVmdFBhbmVsU2VsZWN0aW9uKGRlZmF1bHRWYWx1ZSwgaXRlbXMuZmluZCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShpdGVtKSA9PT0gZGVmYXVsdFZhbHVlKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBsb2FkTGVmdFBhbmVsSXRlbXMoZGF0YVNvdXJjZT86IFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlKSB7XG5cdFx0aWYgKCFkYXRhU291cmNlKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGxldCByZXN1bHQgPVxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2UubG9hZGVyID09PSAnZnVuY3Rpb24nXG5cdFx0XHRcdD8gZGF0YVNvdXJjZS5sb2FkZXIodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoKSlcblx0XHRcdFx0OiAoZGF0YVNvdXJjZS5sb2FkZXIgPz8gZGF0YVNvdXJjZS5vcHRpb25zID8/IFtdKTtcblx0XHRyZXN1bHQgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKHJlc3VsdCk7XG5cdFx0aWYgKGRhdGFTb3VyY2UucmVzdWx0UGF0aCkge1xuXHRcdFx0cmVzdWx0ID0gZmllbGRVdGlscy5nZXRNb2RlbChyZXN1bHQsIGRhdGFTb3VyY2UucmVzdWx0UGF0aCk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZGF0YVNvdXJjZS50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMoZGF0YVNvdXJjZS50cmFuc2Zvcm0ocmVzdWx0LCB0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCh7IGl0ZW1zOiByZXN1bHQgfSkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtdO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRMZWZ0UGFuZWxNb2RlKCk6ICdsaXN0JyB8ICd0cmVlJyB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/Lm1vZGUgPT09ICd0cmVlJyA/ICd0cmVlJyA6ICdsaXN0Jztcblx0fVxuXG5cdGdldFBhbmVsT3B0aW9uTGFiZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/Lm9wdGlvbkxhYmVsIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/Lm9wdGlvbkxhYmVsIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/Lm5vZGVMYWJlbCB8fCAnbGFiZWwnO1xuXHR9XG5cblx0Z2V0UGFuZWxPcHRpb25WYWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8ub3B0aW9uVmFsdWUgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8ub3B0aW9uVmFsdWUgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8ubm9kZVZhbHVlIHx8ICd2YWx1ZSc7XG5cdH1cblxuXHRnZXRQYW5lbEFsbG93RGVzZWxlY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LmFsbG93RGVzZWxlY3QgPz8gdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8uYWxsb3dEZXNlbGVjdCA/PyB0cnVlO1xuXHR9XG5cblx0Z2V0UGFuZWxFbXB0eU1lc3NhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LmVtcHR5TWVzc2FnZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5lbXB0eU1lc3NhZ2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZW1wdHlNZXNzYWdlIHx8ICfmmoLml6DmlbDmja4nO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRQYW5lbERhdGFTb3VyY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LmRhdGFTb3VyY2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8uZGF0YVNvdXJjZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5kYXRhU291cmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUcmVlQ2hpbGRyZW5GaWVsZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uY2hpbGRyZW5GaWVsZCB8fCAnY2hpbGRyZW4nO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUcmVlUGFyZW50U2VsZWN0YWJsZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8ucGFyZW50U2VsZWN0YWJsZSA/PyB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUcmVlRXhwYW5kZWRLZXlzU3RhdGVLZXkoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmV4cGFuZGVkS2V5c1N0YXRlS2V5O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUcmVlRmllbGRWYWx1ZShpdGVtOiBhbnksIGZpZWxkPzogc3RyaW5nKSB7XG5cdFx0aWYgKCFmaWVsZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgZmllbGQpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyByZXNvbHZlTWF5YmVBc3luYyh2YWx1ZTogYW55KSB7XG5cdFx0aWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbSh2YWx1ZSk7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdHJldHVybiBhd2FpdCB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoZXh0cmE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRwYWdlRm9ybTogdGhpcyxcblx0XHRcdG1vZGU6IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpLFxuXHRcdFx0c2VsZWN0ZWRJdGVtOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSxcblx0XHRcdHNlbGVjdGVkVmFsdWU6IHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSxcblx0XHRcdGl0ZW1zOiB0aGlzLmxlZnRQYW5lbEl0ZW1zLFxuXHRcdFx0Z2V0UHJtOiB0aGlzLmdldFBybSxcblx0XHRcdGdyaWRMaXN0OiB0aGlzLnJlc29sdmVkR3JpZExpc3QoKSxcblx0XHRcdGJhc2VHcmlkTGlzdDogdGhpcy5iYXNlR3JpZExpc3RTbmFwc2hvdCxcblx0XHRcdHBhbmVsU2VsZWN0ZWREYXRhOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSxcblx0XHRcdHJ1bnRpbWVDb250ZXh0OiB0aGlzLnJ1bnRpbWVDb250ZXh0LFxuXHRcdFx0c2V0U3RhdGU6IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuZ2V0UHJtLmRhdGEpIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXksIHZhbHVlKTtcblx0XHRcdH0sXG5cdFx0XHQuLi5leHRyYSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBydW5MZWZ0UGFuZWxFdmVudChldmVudE5hbWU6IGtleW9mIE5vbk51bGxhYmxlPFBhZ2VMZWZ0UGFuZWxDb25maWdbJ2V2ZW50cyddPiwgZXh0cmE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSB0aGlzLmxlZnRQYW5lbCgpPy5ldmVudHM/LltldmVudE5hbWVdO1xuXHRcdGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gaGFuZGxlcih0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dChleHRyYSkpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShvcHRpb246IGFueSkge1xuXHRcdGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5nZXRQYW5lbE9wdGlvblZhbHVlKCk7XG5cdFx0aWYgKCFvcHRpb25WYWx1ZSkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwob3B0aW9uLCBvcHRpb25WYWx1ZSk7XG5cdH1cblxuXHRhc3luYyBvbkxlZnRQYW5lbFNlbGVjdGlvbkNoYW5nZShldmVudDogU2luZ2xlU2VsZWN0TGlzdGJveENoYW5nZUV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LnZhbHVlID09IG51bGwgJiYgdGhpcy5nZXRQYW5lbEFsbG93RGVzZWxlY3QoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmFwcGx5TGVmdFBhbmVsU2VsZWN0aW9uKGV2ZW50LnZhbHVlLCBldmVudC5vcHRpb24pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseUxlZnRQYW5lbFNlbGVjdGlvbih2YWx1ZTogYW55LCBvcHRpb24/OiBhbnkpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCB8fCB0aGlzLmdldExlZnRQYW5lbE1vZGUoKSAhPT0gJ2xpc3QnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNlbGVjdGVkSXRlbSA9IG9wdGlvbiA/PyB0aGlzLmxlZnRQYW5lbEl0ZW1zLmZpbmQoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSkgPT09IHZhbHVlKSA/PyBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtO1xuXHRcdHRoaXMuc3luY0xlZnRQYW5lbFNlbGVjdGlvblN0YXRlKHZhbHVlLCBzZWxlY3RlZEl0ZW0pO1xuXHRcdHRoaXMuaW5kZXhWYWx1ZSA9IDA7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25TZWxlY3Rpb25DaGFuZ2UnLCB7XG5cdFx0XHRzZWxlY3RlZEl0ZW0sXG5cdFx0XHRzZWxlY3RlZFZhbHVlOiB2YWx1ZSxcblx0XHRcdG5vZGU6IG51bGwsXG5cdFx0XHRyYXdOb2RlOiBudWxsLFxuXHRcdFx0aXNQYXJlbnQ6IGZhbHNlLFxuXHRcdFx0aXNMZWFmOiB0cnVlLFxuXHRcdH0pO1xuXHRcdHRoaXMuc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKTtcblx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0aWYgKHRoaXMuaWQgJiYgdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpIHtcblx0XHRjb25zdCBmaXRlclByZWxvYWRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZmxhdE1hcCgoaXRlbTogYW55KSA9PiAoQXJyYXkuaXNBcnJheShpdGVtPy5maXRlclByZWxvYWRzKSA/IGl0ZW0uZml0ZXJQcmVsb2FkcyA6IFtdKSk7XG5cdFx0dGhpcy5nZXRQcm0uZml0ZXJQcmVsb2FkcyA9IGZpdGVyUHJlbG9hZHM7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpIHtcblx0XHRpZiAoIXRoaXMubGVmdFBhbmVsKCk/LmVuYWJsZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFByZWxvYWRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uc3ViRGF0YUtleSlcblx0XHRcdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gISFpdGVtKTtcblx0XHRpZiAoY3VycmVudFByZWxvYWRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuZ2V0UHJtLnByZWxvYWRzID0gY3VycmVudFByZWxvYWRzO1xuXHRcdH1cblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZSh2YWx1ZTogYW55LCBzZWxlY3RlZEl0ZW06IGFueSkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRpZiAocGFuZWwuc3RhdGVLZXkpIHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgcGFuZWwuc3RhdGVLZXksIHZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHBhbmVsLnBhbmVsU2VsZWN0ZWREYXRhS2V5KSB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHBhbmVsLnBhbmVsU2VsZWN0ZWREYXRhS2V5LCBzZWxlY3RlZEl0ZW0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaW5pdGlhbGl6ZUxlZnRQYW5lbFRyZWUoaXRlbXM6IGFueVtdKSB7XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGF0ZSA9IHRoaXMucmVhZFRyZWVFeHBhbmRlZEtleXNTdGF0ZSgpO1xuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzID0gZXhwYW5kZWRTdGF0ZSB8fCB7fTtcblx0XHR0aGlzLmxlZnRQYW5lbFRyZWVOb2RlcyA9IHRoaXMuYnVpbGRUcmVlTm9kZXMoaXRlbXMpO1xuXHRcdHZvaWQgdGhpcy5hcHBseVRyZWVEZWZhdWx0U2VsZWN0aW9uKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkVHJlZU5vZGVzKGl0ZW1zOiBhbnlbXSwgcGFyZW50S2V5ID0gJ3Jvb3QnKTogVHJlZU5vZGVbXSB7XG5cdFx0Y29uc3QgY2hpbGRyZW5GaWVsZCA9IHRoaXMuZ2V0VHJlZUNoaWxkcmVuRmllbGQoKTtcblx0XHRjb25zdCBpY29uRmllbGQgPSB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5pY29uRmllbGQ7XG5cdFx0Y29uc3QgbGVhZkZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8ubGVhZkZpZWxkO1xuXHRcdGNvbnN0IGRpc2FibGVkRmllbGQgPSB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5kaXNhYmxlZEZpZWxkO1xuXHRcdHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLmJ1aWxkVHJlZU5vZGVLZXkoaXRlbSwgcGFyZW50S2V5LCBpbmRleCk7XG5cdFx0XHRjb25zdCBjaGlsZEl0ZW1zID0gZmllbGRVdGlscy5nZXRNb2RlbChpdGVtLCBjaGlsZHJlbkZpZWxkKTtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZEl0ZW1zKSA/IHRoaXMuYnVpbGRUcmVlTm9kZXMoY2hpbGRJdGVtcywga2V5KSA6IFtdO1xuXHRcdFx0Y29uc3QgaXNMZWFmID0gbGVhZkZpZWxkID8gISF0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGxlYWZGaWVsZCkgOiBjaGlsZHJlbi5sZW5ndGggPT09IDA7XG5cdFx0XHRjb25zdCBpc1BhcmVudCA9IGNoaWxkcmVuLmxlbmd0aCA+IDA7XG5cdFx0XHRjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5nZXRUcmVlUGFyZW50U2VsZWN0YWJsZSgpIHx8ICFpc1BhcmVudDtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGtleSxcblx0XHRcdFx0bGFiZWw6IHRoaXMucmVzb2x2ZVRyZWVOb2RlTGFiZWwoaXRlbSksXG5cdFx0XHRcdGRhdGE6IGl0ZW0sXG5cdFx0XHRcdGNoaWxkcmVuOiBjaGlsZHJlbi5sZW5ndGggPiAwID8gY2hpbGRyZW4gOiB1bmRlZmluZWQsXG5cdFx0XHRcdGxlYWY6IGlzTGVhZixcblx0XHRcdFx0ZXhwYW5kZWQ6IHRoaXMuc2hvdWxkRXhwYW5kVHJlZU5vZGUoa2V5LCBpc1BhcmVudCksXG5cdFx0XHRcdHNlbGVjdGFibGUsXG5cdFx0XHRcdGRpc2FibGVkOiBkaXNhYmxlZEZpZWxkID8gISF0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGRpc2FibGVkRmllbGQpIDogZmFsc2UsXG5cdFx0XHRcdGljb246IGljb25GaWVsZCA/IHRoaXMuZ2V0VHJlZUZpZWxkVmFsdWUoaXRlbSwgaWNvbkZpZWxkKSA6IHVuZGVmaW5lZCxcblx0XHRcdH0gYXMgVHJlZU5vZGU7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkVHJlZU5vZGVLZXkoaXRlbTogYW55LCBwYXJlbnRLZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShpdGVtKTtcblx0XHRyZXR1cm4gYCR7cGFyZW50S2V5fS0ke3ZhbHVlID8/IGluZGV4fWA7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVUcmVlTm9kZUxhYmVsKGl0ZW06IGFueSkge1xuXHRcdGNvbnN0IGxhYmVsID0gZmllbGRVdGlscy5nZXRNb2RlbChpdGVtLCB0aGlzLmdldFBhbmVsT3B0aW9uTGFiZWwoKSk7XG5cdFx0cmV0dXJuIGxhYmVsID09IG51bGwgPyAnJyA6IFN0cmluZyhsYWJlbCk7XG5cdH1cblxuXHRwcml2YXRlIHNob3VsZEV4cGFuZFRyZWVOb2RlKGtleTogc3RyaW5nLCBpc1BhcmVudDogYm9vbGVhbikge1xuXHRcdGlmICghaXNQYXJlbnQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKE9iamVjdC5rZXlzKHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gISF0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGVmYXVsdEV4cGFuZCA/PyBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZFRyZWVFeHBhbmRlZEtleXNTdGF0ZSgpIHtcblx0XHRjb25zdCBzdGF0ZUtleSA9IHRoaXMuZ2V0VHJlZUV4cGFuZGVkS2V5c1N0YXRlS2V5KCk7XG5cdFx0aWYgKCFzdGF0ZUtleSkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBzdGF0ZUtleSkgfHwge307XG5cdH1cblxuXHRwcml2YXRlIHN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXkgPSB0aGlzLmdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpO1xuXHRcdGlmICghc3RhdGVLZXkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0fVxuXHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgc3RhdGVLZXksIHsgLi4udGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXMgfSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFwcGx5VHJlZURlZmF1bHRTZWxlY3Rpb24oKSB7XG5cdFx0Y29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZ2V0UGFuZWxEYXRhU291cmNlKCk7XG5cdFx0bGV0IGRlZmF1bHRWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMoXG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZT8uZGVmYXVsdFNlbGVjdCA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UuZGVmYXVsdFNlbGVjdCh0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCh7IGl0ZW1zOiB0aGlzLmxlZnRQYW5lbEl0ZW1zIH0pKVxuXHRcdFx0XHQ6IGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QsXG5cdFx0KTtcblx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdvYmplY3QnICYmICEoJ2tleScgaW4gZGVmYXVsdFZhbHVlKSkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShkZWZhdWx0VmFsdWUpO1xuXHRcdH1cblx0XHRpZiAoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHwgZGVmYXVsdFZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLmZpbmRGaXJzdFNlbGVjdGFibGVUcmVlTm9kZSh0aGlzLmxlZnRQYW5lbFRyZWVOb2Rlcyk/LmtleSA/PyBudWxsO1xuXHRcdH1cblx0XHRpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcmVzb2x2ZWROb2RlID0gdGhpcy5yZXNvbHZlVHJlZU5vZGVCeVNlbGVjdGlvbihkZWZhdWx0VmFsdWUpO1xuXHRcdGNvbnN0IG5leHROb2RlID0gdGhpcy5pc1NlbGVjdGFibGVUcmVlTm9kZShyZXNvbHZlZE5vZGUpXG5cdFx0XHQ/IHJlc29sdmVkTm9kZVxuXHRcdFx0OiB0aGlzLmZpbmRGaXJzdFNlbGVjdGFibGVUcmVlTm9kZSh0aGlzLmxlZnRQYW5lbFRyZWVOb2Rlcyk7XG5cdFx0aWYgKG5leHROb2RlKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5TGVmdFBhbmVsVHJlZVNlbGVjdGlvbihuZXh0Tm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBmaW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUobm9kZXM6IFRyZWVOb2RlW10pOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKHRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUobm9kZS5jaGlsZHJlbik7XG5cdFx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24oc2VsZWN0aW9uOiBhbnkpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGlmIChzZWxlY3Rpb24gJiYgdHlwZW9mIHNlbGVjdGlvbiA9PT0gJ29iamVjdCcgJiYgJ2tleScgaW4gc2VsZWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5maW5kVHJlZU5vZGVCeUtleSh0aGlzLmxlZnRQYW5lbFRyZWVOb2Rlcywgc2VsZWN0aW9uLmtleSkgPz8gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZmluZFRyZWVOb2RlQnlWYWx1ZSh0aGlzLmxlZnRQYW5lbFRyZWVOb2Rlcywgc2VsZWN0aW9uKTtcblx0fVxuXG5cdHByaXZhdGUgZmluZFRyZWVOb2RlQnlWYWx1ZShub2RlczogVHJlZU5vZGVbXSwgdmFsdWU6IGFueSk6IFRyZWVOb2RlIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRjb25zdCBub2RlVmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKG5vZGUuZGF0YSk7XG5cdFx0XHRpZiAobm9kZVZhbHVlID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblx0XHRcdGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLmZpbmRUcmVlTm9kZUJ5VmFsdWUobm9kZS5jaGlsZHJlbiwgdmFsdWUpO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGZpbmRUcmVlTm9kZUJ5S2V5KG5vZGVzOiBUcmVlTm9kZVtdLCBrZXk6IHN0cmluZyk6IFRyZWVOb2RlIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRpZiAobm9kZS5rZXkgPT09IGtleSkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblx0XHRcdGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLmZpbmRUcmVlTm9kZUJ5S2V5KG5vZGUuY2hpbGRyZW4sIGtleSk7XG5cdFx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgaXNUcmVlUGFyZW50Tm9kZShub2RlOiBUcmVlTm9kZSB8IG51bGwpIHtcblx0XHRyZXR1cm4gISFub2RlPy5jaGlsZHJlbj8ubGVuZ3RoO1xuXHR9XG5cblx0cHJpdmF0ZSBpc1NlbGVjdGFibGVUcmVlTm9kZShub2RlOiBUcmVlTm9kZSB8IG51bGwpIHtcblx0XHRpZiAoIW5vZGUgfHwgKG5vZGUgYXMgYW55KS5kaXNhYmxlZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAodGhpcy5nZXRUcmVlUGFyZW50U2VsZWN0YWJsZSgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICF0aGlzLmlzVHJlZVBhcmVudE5vZGUobm9kZSk7XG5cdH1cblxuXHRhc3luYyBvbkxlZnRQYW5lbFRyZWVOb2RlU2VsZWN0KGV2ZW50OiB7IG5vZGU6IFRyZWVOb2RlIH0pIHtcblx0XHRjb25zdCBub2RlID0gZXZlbnQ/Lm5vZGUgPz8gbnVsbDtcblx0XHRpZiAoIXRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZSkpIHtcblx0XHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWROb2RlID0gdGhpcy5yZXNvbHZlVHJlZU5vZGVCeVNlbGVjdGlvbih0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChub2RlKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5TGVmdFBhbmVsVHJlZVNlbGVjdGlvbihub2RlKTtcblx0XHR9XG5cdH1cblxuXHRvbkxlZnRQYW5lbFRyZWVOb2RlRXhwYW5kKGV2ZW50OiB7IG5vZGU6IFRyZWVOb2RlIH0pIHtcblx0XHRjb25zdCBrZXkgPSBldmVudD8ubm9kZT8ua2V5O1xuXHRcdGlmICgha2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzW2tleV0gPSB0cnVlO1xuXHRcdHRoaXMuc3luY1RyZWVFeHBhbmRlZEtleXNTdGF0ZSgpO1xuXHR9XG5cblx0b25MZWZ0UGFuZWxUcmVlTm9kZUNvbGxhcHNlKGV2ZW50OiB7IG5vZGU6IFRyZWVOb2RlIH0pIHtcblx0XHRjb25zdCBrZXkgPSBldmVudD8ubm9kZT8ua2V5O1xuXHRcdGlmICgha2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldO1xuXHRcdHRoaXMuc3luY1RyZWVFeHBhbmRlZEtleXNTdGF0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obm9kZTogVHJlZU5vZGUpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCB8fCB0aGlzLmdldExlZnRQYW5lbE1vZGUoKSAhPT0gJ3RyZWUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJhd05vZGUgPSBub2RlLmRhdGE7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUocmF3Tm9kZSk7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZE5vZGUgPSBub2RlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSByYXdOb2RlO1xuXHRcdHRoaXMuc3luY0xlZnRQYW5lbFNlbGVjdGlvblN0YXRlKHNlbGVjdGVkVmFsdWUsIHJhd05vZGUpO1xuXHRcdHRoaXMuaW5kZXhWYWx1ZSA9IDA7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25TZWxlY3Rpb25DaGFuZ2UnLCB7XG5cdFx0XHRzZWxlY3RlZEl0ZW06IHJhd05vZGUsXG5cdFx0XHRzZWxlY3RlZFZhbHVlLFxuXHRcdFx0bm9kZSxcblx0XHRcdHJhd05vZGUsXG5cdFx0XHRpc1BhcmVudDogdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpLFxuXHRcdFx0aXNMZWFmOiAhdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpLFxuXHRcdH0pO1xuXHRcdHRoaXMuc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKTtcblx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0aWYgKHRoaXMuaWQgJiYgdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZEZvcm1PcHRpb25zKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzb3VyY2VGb3JtID0gdGhpcy5mb3JtKCk7XG5cdFx0XHRjb25zdCBmb3JtRmllbGRzID0gc291cmNlRm9ybT8uZmllbGRzID8gWy4uLnNvdXJjZUZvcm0uZmllbGRzXSA6IFtdO1xuXHRcdFx0Y29uc3QgZmlyc3RGaWVsZCA9IGZvcm1GaWVsZHNbMF1cblx0XHRcdFx0PyB7IC4uLmZvcm1GaWVsZHNbMF0sIGdyb3VwOiBBcnJheS5pc0FycmF5KGZvcm1GaWVsZHNbMF0uZ3JvdXApID8gWy4uLmZvcm1GaWVsZHNbMF0uZ3JvdXBdIDogW10gfVxuXHRcdFx0XHQ6IHsgZ3JvdXBDbGFzczogJ2ZsZXggZmxleC1yb3cgZmxleC13cmFwJywgZ3JvdXA6IFtdIH07XG5cdFx0XHRmb3JtRmllbGRzWzBdID0gZmlyc3RGaWVsZCBhcyBhbnk7XG5cdFx0XHRjb25zdCBmb3JtT3B0aW9ucyA9IHtcblx0XHRcdFx0Li4uc291cmNlRm9ybSxcblx0XHRcdFx0ZmllbGRzOiBmb3JtRmllbGRzLFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGFwcGVuZEdyb3VwcyA9IHRoaXMucmVzb2x2ZUxlZnRQYW5lbEFwcGVuZEdyb3VwcygpO1xuXHRcdFx0Y29uc3QgbWFpbkdyb3VwID0gZm9ybU9wdGlvbnM/LmZpZWxkcz8uWzBdPy5ncm91cDtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG1haW5Hcm91cCkgJiYgYXBwZW5kR3JvdXBzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9ybU9wdGlvbnMuZmllbGRzWzBdLmdyb3VwID0gWy4uLm1haW5Hcm91cCwgLi4uYXBwZW5kR3JvdXBzXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmb3JtT3B0aW9ucztcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignYnVpbGRGb3JtT3B0aW9ucyDmiafooYzlpLHotKXvvIzlm57pgIDliLDljp/lp4vooajljZXphY3nva46JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZUxlZnRQYW5lbEFwcGVuZEdyb3VwcygpIHtcblx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLmxlZnRQYW5lbCgpPy5hcHBlbmRHcm91cHM7XG5cdFx0aWYgKCFhcHBlbmRHcm91cHMpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcnNlZCA9IHR5cGVvZiBhcHBlbmRHcm91cHMgPT09ICdmdW5jdGlvbicgPyBhcHBlbmRHcm91cHModGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoKSkgOiBhcHBlbmRHcm91cHM7XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpXG5cdFx0XHRcdD8gZGVlcENsb25lKHBhcnNlZCwgdGhpcykubWFwKChpdGVtOiBhbnkpID0+ICh7XG5cdFx0XHRcdFx0XHQuLi5pdGVtLFxuXHRcdFx0XHRcdFx0ZXh0cmE6IHtcblx0XHRcdFx0XHRcdFx0Li4uKGl0ZW0/LmV4dHJhIHx8IHt9KSxcblx0XHRcdFx0XHRcdFx0ZGlzcGxheU9ubHk6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQ6IFtdO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdsZWZ0UGFuZWwuYXBwZW5kR3JvdXBzIOaJp+ihjOWksei0pTonLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBtZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwoZGV0YWlsOiBhbnkpIHtcblx0XHRjb25zdCBtZXJnZWREZXRhaWwgPSB7XG5cdFx0XHQuLi5kZXRhaWwsXG5cdFx0XHQuLi4odGhpcy5wYW5lbFNlbGVjdGVkRGF0YSgpIHx8IHt9KSxcblx0XHRcdC4uLih0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSB8fCB7fSksXG5cdFx0fTtcblx0XHRjb25zdCBtZXJnZWRSZXN1bHQgPSB0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvbkRldGFpbE1lcmdlJywgeyBkZXRhaWwsIG1lcmdlZERldGFpbCB9KTtcblx0XHRyZXR1cm4gbWVyZ2VkUmVzdWx0ID09PSB1bmRlZmluZWQgPyBtZXJnZWREZXRhaWwgOiBtZXJnZWRSZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGJpbmRQYWdlRm9ybVNlcnZpY2UoKSB7XG5cdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UudXBkYXRlRGF0YSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuXHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UudXBkYXRlRGF0YUJ5S2V5JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh7IGtleSwgdmFsdWUgfSkgPT4ge1xuXHRcdFx0dGhpcy5tZXJnZVVwc2VydCh2YWx1ZSBhcyBQYXlsb2FkVXBzZXJ0KTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKSB7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKGdyaWQudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0Y29uc3QgZm9ybURhdGEgPSB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9ybURhdGEpKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhWzBdID8/IHt9O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXldID0gZm9ybURhdGE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnICYmICF0aGlzLmdldFBybS5kYXRhPy5oYXNPd25Qcm9wZXJ0eShncmlkLnN1YkRhdGFLZXkpKSB7XG5cdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGFbZ3JpZC5zdWJEYXRhS2V5XSA9IFtdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8vIOaPkuanvee7hOS7tiDmm7TmlrB1cHNlcnRcblx0cHJpdmF0ZSBtZXJnZVVwc2VydChwYXlsb2FkOiBQYXlsb2FkVXBzZXJ0KSB7XG5cdFx0Y29uc3QgeyBhY3Rpb24sIGZpZWxkLCBoZWFkZXJOYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHJlY29yZEluZGV4LCBpbmRleCwgZGF0YSwgc2VsZWN0TmFtZSB9ID0gcGF5bG9hZDtcblx0XHRsZXQgc3ViID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCFbaW5kZXhdO1xuXHRcdGlmIChhY3Rpb24gPT0gJ2FkZCcpIHtcblx0XHRcdGxldCBtYWluRmllbGQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVtpbmRleF1bJ2dyaWRPcHRpb25zJ11bJ21haW5GaWVsZCddO1xuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4LCB7IC4uLmRhdGEgfSk7XG5cdFx0XHRpZiAoZmllbGQgPT0gbWFpbkZpZWxkKSB7XG5cdFx0XHRcdHN1YlsnbG9ndG1wJ10/LnNldChyZWNvcmRJbmRleCEgKyBmaWVsZCEsIHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBpZDogMCwgbGFiZWw6IGhlYWRlck5hbWUgfSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09ICdlZGl0Jykge1xuXHRcdFx0bGV0IG86IGFueTtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRvID0gc3ViWydtYXB0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISk7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obywgeyBbZmllbGRdOiBuZXdWYWx1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gPSB7IGlkOiBkYXRhWydpZCddLCBbZmllbGRdOiBuZXdWYWx1ZSB9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNlbGVjdE5hbWUpIHtcblx0XHRcdFx0b1tzZWxlY3ROYW1lXSA9IGRhdGFbc2VsZWN0TmFtZV07XG5cdFx0XHR9XG5cdFx0XHRzdWJbJ21hcHRtcCddPy5zZXQocmVjb3JkSW5kZXghLCBvKTtcblx0XHRcdHN1YlsnbG9ndG1wJ10/LnNldChyZWNvcmRJbmRleCEgKyBmaWVsZCEsIHtcblx0XHRcdFx0bmV3VmFsdWU6IG5ld1ZhbHVlLFxuXHRcdFx0XHRvbGRWYWx1ZTogb2xkVmFsdWUsXG5cdFx0XHRcdGlkOiBkYXRhWydpZCddLFxuXHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuXHRcdFx0aWYgKHN1YlsnbWFwdG1wJ10/LmhhcyhyZWNvcmRJbmRleCEpKSB7XG5cdFx0XHRcdGxldCBkYXRhID0gc3ViWydtYXB0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISk7XG5cdFx0XHRcdGRhdGFbZmllbGRdICYmIGRlbGV0ZSBkYXRhW2ZpZWxkXTtcblx0XHRcdFx0bGV0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0XHRcdGtleXMubGVuZ3RoID09IDAgJiYgc3ViWydtYXB0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4KTtcblx0XHRcdH1cblx0XHRcdGlmIChzdWJbJ2xvZ3RtcCddPy5nZXQocmVjb3JkSW5kZXghICsgZmllbGQhKSkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5kZWxldGUocmVjb3JkSW5kZXghICsgZmllbGQhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHN1YlsnbWFwdG1wJ10/LmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHRzdWJbJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRydWUpO1xuXHR9XG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmkxOG4uY2hhbmdlLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHR0aGlzLnN0ZXBzVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sIDEwMCk7XG5cdFx0fSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCk6IGFueSB7XG5cdFx0bGV0IHN1YkZvcm0gPSB0cnVlO1xuXHRcdGlmICh0aGlzLnRhYkZvcm0ubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy50YWJGb3JtLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKCFpdGVtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0XHRzdWJGb3JtID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jRm9ybS52YWxpZGF0ZSgpICYmIHN1YkZvcm0pIHtcblx0XHRcdGxldCBjYjogYW55ID0gdGhpcy5pZCA9PT0gMCA/IG51bGwgOiB0aGlzLnVwQ2I7XG5cdFx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRcdHR5cGVvZiB0aGlzLnNhdmVGdW5jKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuc2F2ZUZ1bmMoKSh0aGlzLnVwc2VydFBybSwgdGhpcy5pZCwgY2IpIDogdGhpcy51cHNlcnQobnVsbCwgY2IpO1xuXHRcdH1cblx0fVxuXG5cdGRlbFJvd3MoZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZFRhYiA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0Y29uc3QgZGVsZXRlRnVuYyA9IGdyaWRUYWIuZGVsZXRlRnVuYztcblx0XHRjb25zb2xlLmxvZygnZGVsUm93cy0tLS0nLCBlLCBncmlkVGFiKTtcblx0XHRjb25zdCBzdWJUYWJsZSA9IGdyaWRUYWIuZ3JpZE9wdGlvbnMubW9kZWxOYW1lO1xuXHRcdGNvbnN0IGlkcyA9IEFycmF5LmlzQXJyYXkoZSkgPyBlIDogW2VdO1xuXG5cdFx0bGV0IHBybSA9IHtcblx0XHRcdG1vZGVsTmFtZTogc3ViVGFibGUsXG5cdFx0XHRpZHMsXG5cdFx0fTtcblx0XHRsZXQgZG9uZUNhbGxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IGRvbmUgPSAoKSA9PiB7XG5cdFx0XHRpZiAoZG9uZUNhbGxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRkb25lQ2FsbGVkID0gdHJ1ZTtcblx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCg0KTtcblx0XHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oeyB0eXBlOiAnZGVsZXRlJywgZGF0YTogaWRzIH0pO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQoZmFsc2UpO1xuXHRcdH07XG5cdFx0aWYgKCFkZWxldGVGdW5jKSB7XG5cdFx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRcdHRoaXMud2ViX3JlbW92ZShwcm0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdGRvbmUoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGRlbGV0ZUZ1bmMoaWRzLCBncmlkVGFiLCBkb25lKTtcblx0XHRcdGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXN1bHQuc3Vic2NyaWJlKCgpID0+IGRvbmUoKSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRyZXN1bHQuc3Vic2NyaWJlKCgpID0+IGRvbmUoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHVwQ2IocmVzPzogYW55KSB7XG5cdFx0aWYgKHJlcy5pZCA9PSAwKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRsZXQgZWRpdFVybCA9IGAke3RoaXMucGFnZVVybH0ke3Jlcy5pZH1gO1xuXHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZWRpdFVybF0pO1xuXHRcdFx0fSwgMTUwMCk7XG5cdFx0fVxuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KGZhbHNlKTtcblx0XHR0aGlzLmNGb3JtLmZpbmFsaXplKCk7XG5cdH1cblx0Ly8gVE9ETyDmmK/lkKbpnIDopoHmlbDmja7ovazmjaLlm57osIPlh73mlbBcblx0b25PayhlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdLnNlbGVjdERhdGEgPSBbXTtcblxuXHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCB1bmlxdWVLZXlzID0gW107XG5cdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdyb3dEYXRhLS0tLS0nLHJvd0RhdGEpXG5cdFx0XHRcdHVuaXF1ZUtleXMgPSByb3dEYXRhLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGQhXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZygndW5pcXVlS2V5cy0tLS0tJyx1bmlxdWVLZXlzLClcblx0XHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBvYmogPSBncmlkLnNlbGVjdERhdGFDYiA/IGdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIDogeyAuLi5pdGVtIH07XG5cdFx0XHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkICYmIHVuaXF1ZUtleXMuaW5jbHVkZXMob2JqW2dyaWQudW5pcXVlRmllbGQhXSB8fCAnJykpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Z3JpZC5zZWxlY3REYXRhIS5wdXNoKG9iaik7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRydWUpO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2FkZCcsIGRhdGE6IGdyaWQuc2VsZWN0RGF0YSB9KTtcblx0XHRpZiAoISFncmlkLnNsb3RLZXkpIHtcblx0XHRcdGNvbnN0IHsgc3ViRGF0YUtleSB9ID0gZ3JpZDtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLmFkZERhdGEoc3ViRGF0YUtleSwgZ3JpZC5zZWxlY3REYXRhKTtcblx0XHRcdC8vIHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR9XG5cdH1cblxuXHRvbkNhbmNlbFNlbGVjdGVkKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGxldCBkYXRhczogYW55ID0gW107XG5cdFx0ZS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBncmlkLnNlbGVjdERhdGFDYiA/IHsgLi4uZ3JpZC5zZWxlY3REYXRhQ2IoaXRlbSkgfSA6IGl0ZW07XG5cdFx0XHRkYXRhcy5wdXNoKGRhdGEpO1xuXHRcdH0pO1xuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCBrZXlzID0gZGF0YXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pO1xuXHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0Lm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdGxldCBkZWxldGVkUm93cyA9IHJvd0RhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGtleXMuaW5jbHVkZXMoaXRlbVtncmlkLnVuaXF1ZUZpZWxkXSkpO1xuXHRcdFx0dGhpcy5zdWJEZWxldGVJZHMgPSBkZWxldGVkUm93cy5tYXAoKHY6IGFueSkgPT4gdi5pZCkuZmlsdGVyKCh2OiBhbnkpID0+IHYpO1xuXHRcdFx0Y29uc3QgaWROb3RSb3dzID0gZGVsZXRlZFJvd3MuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlkKTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdpZE5vdFJvd3MtLS0tJyxpZE5vdFJvd3MpXG5cdFx0XHRjb25zdCBkZWxldGVOb2RlczogYW55ID0gW107XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZm9yRWFjaE5vZGUoKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGxldCBtYWluID0gbm9kZS5kYXRhW2dyaWQudW5pcXVlRmllbGRdO1xuXHRcdFx0XHRcdGxldCBpc0V4aXQgPSBpZE5vdFJvd3MuZmluZEluZGV4KCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gbWFpbik7XG5cdFx0XHRcdFx0aWYgKGlzRXhpdCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRkZWxldGVOb2Rlcy5wdXNoKG5vZGUuZGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdC8vIGlmKGRlbGV0ZWRJZHMubGVuZ3RoID4gMCl7XG5cdFx0XHQvLyBcdHRoaXMuZGVsUm93cyhkZWxldGVkSWRzKVxuXHRcdFx0Ly8gfSBlbHNlIHtcblx0XHRcdHRoaXMuY3VzdG9tR3JpZC5nZXQodGhpcy5pbmRleFZhbHVlKSEuc2VsZWN0Um93c0RlbGV0ZWQoZGVsZXRlTm9kZXMpO1xuXHRcdFx0Ly8gfVxuXHRcdH1cblx0fVxuXHRnZXREZXRhaWwoaW5kZXg/OiBudW1iZXIpIHtcblx0XHRjb25zb2xlLmxvZyhgZ2V0RGV0YWlsOiAke2luZGV4fWApO1xuXHRcdHRoaXMuc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCk7XG5cdFx0dGhpcy53ZWJfZ2V0KHRoaXMuZ2V0UHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5kZXRhaWxDYih0aGlzLm1lcmdlRGV0YWlsV2l0aExlZnRQYW5lbChyZXMpKTtcblx0XHR9KTtcblx0fVxuXHQvLyDojrflj5bor6bmg4Xlm57osINcblx0ZGV0YWlsQ2IocmVzOiBhbnkpIHtcblx0XHR0aGlzLmdldFBybS5kYXRhID0gcmVzO1xuXHRcdHRoaXMudXBkYXRlVGl0bGUocmVzKTtcblx0XHR0aGlzLnN5bmNTdWJGb3JtTW9kZWxGcm9tRGF0YSgpO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5mb3JtRGlzYWJsZWQoKSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aGlzLmZvcm1EaXNGdW5jKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmhyZWZCdG5MaXN0KCkubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zZXRIcmVmVmFsdWUoKTtcblx0XHR9XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cdHNldEhyZWZWYWx1ZSgpIHtcblx0XHR0aGlzLmhyZWZCdG5MaXN0KCkubWFwKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KCdzZWFyY2hDb3VudCcpICYmIHR5cGVvZiBpdGVtLnNlYXJjaENvdW50ID09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGl0ZW0uc2VhcmNoQ291bnQuY29sdW1uRmlsdGVycy5mb3JFYWNoKCh2OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMud2ViX3NlYXJjaENvdW50KGl0ZW0uc2VhcmNoQ291bnQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdFx0aXRlbS52YWx1ZSA9IHJlcy50b3RhbE51bSB8fCAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR1cGRhdGVUaXRsZShyZXM6IGFueSkge1xuXHRcdGxldCBtYWluRmllbGQgPSB0aGlzLmZvcm0oKS5tYWluRmllbGQ7XG5cdFx0bGV0IHRpdGxlID0gcmVzW21haW5GaWVsZCFdO1xuXHRcdHRoaXMudXNlckhpc3RvcnlTZXJ2aWNlLnNldExhc3RUaXRsZSh0aXRsZSk7XG5cdH1cblx0ZGF0YVNvdXJjZVNob3coKSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5jdXJyZW50U2VsZWN0TW9kZWxDb2RlID0gZ3JpZD8uc2VsZWN0TW9kZWxDb2RlIHx8IG51bGw7XG5cdFx0Y29uc29sZS5sb2coYGRhdGFTb3VyY2VTaG93YCwgdGhpcy5ncmlkTGlzdCgpLHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpKVxuXHRcdHRoaXMuZGlhbG9nU2VhcmNoUHJtID0ge307XG5cdFx0dGhpcy5zZWxlY3RPcHRpb25zID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXVsnc2VsZWN0T3B0aW9ucyddITtcblx0XHRpZiAoKHRoaXMuc2VsZWN0T3B0aW9ucyBhcyBhbnkpPy5zZWFyY2hQcm0pIHtcblx0XHRcdGxldCBzZWFyY2hQcm0gPSBkZWVwQ2xvbmUoKHRoaXMuc2VsZWN0T3B0aW9ucyBhcyBhbnkpLnNlYXJjaFBybSwgdGhpcyk7XG5cdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycz8uZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2Ygdi5maXRlciA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0di5maXRlciA9IHYuZml0ZXIobnVsbCwgdGhpcy5nZXRQcm0uZGF0YSB8fCB0aGlzLmNGb3JtLm1vZGVsKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuZGlhbG9nU2VhcmNoUHJtID0gc2VhcmNoUHJtO1xuXHRcdH1cblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybS5tb2RlbE5hbWUgPSB0aGlzLnNlbGVjdE9wdGlvbnMubW9kZWxOYW1lO1xuXHRcdGlmICh0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZSkge1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnN1cHByZXNzUm93RGVzZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZTtcblx0XHRcdGNvbnN0IGlzUm93U2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0T3B0aW9ucy5pc1Jvd1NlbGVjdGFibGU7XG5cdFx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUgIT0gJ25vbmUnKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPSB7XG5cdFx0XHRcdFx0bW9kZTogdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUgPT0gJ3NpbmdsZScgPyAnc2luZ2xlUm93JyA6ICdtdWx0aVJvdycsXG5cdFx0XHRcdFx0aXNSb3dTZWxlY3RhYmxlOiBpc1Jvd1NlbGVjdGFibGUgPyBpc1Jvd1NlbGVjdGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZygnIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24tLS0tLScsIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pXG5cdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHR0aGlzLnNlbGVjdGlvbktleXMgPSByb3dEYXRhPy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pIHx8IFtdO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0aW9uS2V5cy0tLS0nLHRoaXMuc2VsZWN0aW9uS2V5cylcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLmNoZWNrYm94ZXMgPSAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdFx0bGV0IGl0ZW0gPVxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0PyByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YVt0aGlzLnNlbGVjdE9wdGlvbnMuZGF0YUtleSFdKVxuXHRcdFx0XHRcdFx0XHQ6IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhLmlkKTtcblx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbikge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6ICdtdWx0aVJvdycsXG5cdFx0XHRcdFx0Y2hlY2tib3hlczogKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGl0ZW0gPVxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMuZGF0YUtleSAhPSAnJ1xuXHRcdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0XHQ6IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhLmlkKTtcblx0XHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0uaWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gW107XG5cdFx0fVxuXHRcdHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdH1cblxuXHRnb1J1bihkYXRhOiBhbnkpIHtcblx0XHRpZiAodHlwZW9mIGRhdGEudXJsID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRsZXQgdXJsID0gZGF0YS51cmwodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7fphY3nva7ot7Povazpk77mjqUnIH0pO1xuXHRcdH1cblx0fVxuXG5cdGF1dGhDbGljayhidG46IGFueSkge1xuXHRcdGlmIChidG4uaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSkge1xuXHRcdFx0YnRuLm9uQ2xpY2sodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0fVxuXHR9XG5cdHN0YXR1c0NoYW5nZSh2YWx1ZTogYW55LCBjdXN0b21TdGVwczogU3RlcHNDb21wb25lbnQpIHtcblx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDQgfHwgIXRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2spIHJldHVybjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0bGV0IHBhcmFtOiBhbnkgPSB7XG5cdFx0XHRcdG1vZGVsTmFtZTogdGhpcy5tb2RlbE5hbWUsXG5cdFx0XHRcdGRhdGE6IHsgaWQ6IHRoaXMuaWQsIFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSxcblx0XHRcdH07XG5cdFx0XHRpZiAodGhpcy5pc0xvZykge1xuXHRcdFx0XHRwYXJhbS5sb2dNb2RlbCA9IGAke3RoaXMubW9kZWxOYW1lfUxvZ2A7XG5cdFx0XHRcdHBhcmFtLmxvZyA9IHtcblx0XHRcdFx0XHRwaWQ6IHRoaXMuaWQsXG5cdFx0XHRcdFx0Y29udGVudDogYFvnirbmgIFdICR7dGhpcy5nZXRQcm0uZGF0YSFbdGhpcy5zdGF0dXNLZXkoKV19IC0+ICR7dmFsdWV9YCxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMud2ViX3dyaXRlKHBhcmFtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHR0aGlzLmdldERldGFpbCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuZ2V0UHJtLmRhdGEgfHwge30sIHtcblx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZSxcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB2YWx1ZTtcblx0XHRcdHRoaXMuY0Zvcm0udHJpZ2dlck1vZGVsRWZmZWN0KHsgW3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZSB9KTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0Ly8gY3VzdG9tU3RlcHMucmVmcmVzaFN0ZXBzKClcblx0XHR9XG5cdH1cblxuXHRmb3JtRGlzRnVuYygpIHtcblx0XHRsZXQgZGF0YSA9IHRoaXMuZm9ybURpc2FibGVkKCkhKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aGlzLnNhdmVCdG5EaXNhYmxlID0gZGF0YTtcblx0XHRcdHRoaXMuZ3JpZERpc2FibGUgPSBkYXRhO1xuXHRcdFx0dGhpcy5kaXNhYmxlRm9ybShkYXRhKTtcblx0XHRcdHRoaXMuZGlzYWJsZWRDaGlsZChkYXRhKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Y29uc3QgZGlzYWJlbGQgPSBkYXRhLmRpc2FibGVkO1xuXHRcdFx0Y29uc3QgZmlsdGVycyA9IGRhdGEuZmlsdGVycyB8fCBbXTtcblx0XHRcdGlmICghZmlsdGVycy5pbmNsdWRlcygnZm9ybScpKSB7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZUZvcm0oZGlzYWJlbGQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFmaWx0ZXJzLmluY2x1ZGVzKCdncmlkJykpIHtcblx0XHRcdFx0dGhpcy5ncmlkRGlzYWJsZSA9IGRpc2FiZWxkO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVkQ2hpbGQoZGlzYWJlbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRkaXNhYmxlRm9ybShkaXNhYmxlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucy5maWVsZHM/LmZvckVhY2goKHYpID0+IHtcblx0XHRcdHYuZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgZmllbGREaXNhYmxlZCA9IGdbZm9ybVR5cGVUb1Byb3BzW2cudHlwZV1dLmRpc2FibGVkIHx8IGZhbHNlO1xuXHRcdFx0XHRpZiAoZGlzYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHR0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQhZmllbGREaXNhYmxlZCAmJiB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRkaXNhYmxlZENoaWxkKGRpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodiwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0aWYodi5oYXNPd25Qcm9wZXJ0eSgnZ3JpZEN1c3RvbURpc2FibGVkJykgJiYgdHlwZW9mIHYuZ3JpZEN1c3RvbURpc2FibGVkID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0XHR2LmdyaWREaXNhYmxlZCA9IHYuZ3JpZEN1c3RvbURpc2FibGVkKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHYuZ3JpZERpc2FibGVkID0gZGlzYWJsZWQ7XG5cdFx0XHRcdH1cblx0XHRcdGlmICh2LnR5cGUgPT0gJ2dyaWQnKSB7XG5cdFx0XHRcdHYuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAodi5ncmlkRGlzYWJsZWQgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSkge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyDlkIzkuIDkuKrpobXpnaJkaXNhYmxlZCBmYWxzZSAgPT4gdHJ1ZVxuXHRcdFx0XHRcdGlmICghdi5ncmlkRGlzYWJsZWQgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSAmJiAhaXRlbS5lZGl0YWJsZSAmJiB0eXBlb2YgaXRlbS5lZGl0YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmVkaXRhYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0eXBlb2YgdGhpcy5jdXN0b21HcmlkPy5nZXQoaW5kZXgpIS5nZXRHcmlkID09J2Z1bmN0aW9uJyAmJiB0aGlzLmN1c3RvbUdyaWQ/LmdldChpbmRleCkhLmdldEdyaWQoKS5hcGkuc2V0R3JpZE9wdGlvbignY29sdW1uRGVmcycsIHYuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyk7XG5cdFx0XHR9IGVsc2UgaWYgKHYudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0di5maWVsZHM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0XHRcdGlmICh2LmdyaWREaXNhYmxlZCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHNldERpc2FibGVkKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYsIGluZGV4OiBhbnkpID0+IHtcblx0XHRcdGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHRhYkNsaWNrKCkge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy50YWJGb3JtLmdldCh0aGlzLmluZGV4VmFsdWUpICYmIHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSEucmVDYWxjTGFiZWxTaXplKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9LCAwKTtcblx0fVxuXHR0b2dnbGVMb2coKSB7XG5cdFx0dGhpcy5zaWRlYmFyTW9kZS5zZXQodGhpcy5zaWRlYmFyTW9kZSgpID09PSAnbGVmdCcgPyAncmlnaHQnIDogJ2xlZnQnKTtcblx0fVxuXG5cdHByaXZhdGUgcmVidWlsZFNsb3RNYXAoKSB7XG5cdFx0dGhpcy5zbG90TWFwLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBzbG90IG9mIHRoaXMucGFnZUZvcm1TbG90cz8udG9BcnJheSgpID8/IFtdKSB7XG5cdFx0XHRjb25zdCBzbG90S2V5ID0gc2xvdC5zbG90S2V5KCk7XG5cdFx0XHRpZiAoIXRoaXMuc2xvdE1hcC5oYXMoc2xvdEtleSkpIHtcblx0XHRcdFx0dGhpcy5zbG90TWFwLnNldChzbG90S2V5LCBzbG90KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCkge1xuXHRcdHRoaXMuc2xvdFJlbmRlclN0YXRlcyA9ICh0aGlzLnJlc29sdmVkR3JpZExpc3QoKSA/PyBbXSkubWFwKChncmlkLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2xvdEtleSA9IHRoaXMucmVzb2x2ZVNsb3RLZXkoZ3JpZCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzbG90OiBzbG90S2V5ID8gdGhpcy5zbG90TWFwLmdldChzbG90S2V5KSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29udGV4dDogdGhpcy5nZXRPckNyZWF0ZVBhZ2VGb3JtU2xvdENvbnRleHQoZ3JpZCwgaW5kZXgsIHNsb3RLZXkpLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQ6IEdyaWRMaXN0LCBpbmRleDogbnVtYmVyLCBzbG90S2V5OiBzdHJpbmcpOiBQYWdlRm9ybVNsb3RDb250ZXh0IHtcblx0XHRjb25zdCByZW5kZXJLZXkgPSB0aGlzLmdldEdyaWRSZW5kZXJLZXkoZ3JpZCwgaW5kZXgpO1xuXHRcdGxldCBjb250ZXh0ID0gdGhpcy5zbG90Q29udGV4dE1hcC5nZXQocmVuZGVyS2V5KTtcblx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdGNvbnRleHQgPSB7fSBhcyBQYWdlRm9ybVNsb3RDb250ZXh0O1xuXHRcdFx0dGhpcy5zbG90Q29udGV4dE1hcC5zZXQocmVuZGVyS2V5LCBjb250ZXh0KTtcblx0XHR9XG5cblx0XHRjb250ZXh0LiRpbXBsaWNpdCA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dC5zbG90S2V5ID0gc2xvdEtleTtcblx0XHRjb250ZXh0LmdyaWQgPSBncmlkO1xuXHRcdGNvbnRleHQuaW5kZXggPSBpbmRleDtcblx0XHRjb250ZXh0LnBhZ2VGb3JtID0gdGhpcztcblx0XHRjb250ZXh0LmRhdGEgPSAodGhpcy5nZXRQcm0uZGF0YSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29udGV4dC5tb2RlbCA9IGdyaWQudHlwZSA9PT0gJ2dyaWQnID8gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleSFdIDogdGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5IV0gfHwge307XG5cdFx0Y29udGV4dC51cHNlcnQgPSB0aGlzLnVwc2VydFBybTtcblx0XHRjb250ZXh0LmFjdGl2ZSA9IHRoaXMuaW5kZXhWYWx1ZSA9PT0gaW5kZXg7XG5cdFx0Y29udGV4dC5ncmlkRGlzYWJsZSA9IHRoaXMuZ3JpZERpc2FibGU7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVTbG90S2V5KGdyaWQ6IEdyaWRMaXN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZ3JpZC5zbG90S2V5IHx8IGdyaWQuc3ViRGF0YUtleTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0R3JpZFJlbmRlcktleShncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyaWQuZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSB8fCBncmlkLnN1YkRhdGFLZXkgfHwgZ3JpZC5zbG90S2V5IHx8IGAke2luZGV4fWA7XG5cdH1cblxuXHRnZXRDdXJyZW50R3JpZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk/Llt0aGlzLmluZGV4VmFsdWVdID8/IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnRTdWJNb2RlbE5hbWUoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEdyaWQudHlwZSA9PT0gJ2dyaWQnID8gY3VycmVudEdyaWQuZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSB8fCAnJyA6IGN1cnJlbnRHcmlkLm1vZGVsTmFtZSB8fCAnJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0U3Vic2VydEJ5R3JpZChncmlkOiBHcmlkTGlzdCB8IG51bGwgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoIWdyaWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IGdyaWQuZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGdyaWRbJ21vZGVsTmFtZSddO1xuXHRcdGlmICghc3ViTW9kZWxOYW1lKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQ/LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5zdWJNb2RlbE5hbWUgPT09IHN1Yk1vZGVsTmFtZSkgPz8gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgY2xvbmVTdWJzZXJ0KHN1YnNlcnQ6IGFueSkge1xuXHRcdGlmICghc3Vic2VydCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5zdWJzZXJ0LFxuXHRcdFx0c3ViRGF0YTogQXJyYXkuaXNBcnJheShzdWJzZXJ0LnN1YkRhdGEpID8gc3Vic2VydC5zdWJEYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKSA6IFtdLFxuXHRcdFx0bWFwdG1wOiBuZXcgTWFwPGFueSwgYW55PihzdWJzZXJ0Lm1hcHRtcCA/IChBcnJheS5mcm9tKHN1YnNlcnQubWFwdG1wLmVudHJpZXMoKSkgYXMgW2FueSwgYW55XVtdKSA6IFtdKSxcblx0XHRcdGxvZ3RtcDogbmV3IE1hcDxhbnksIGFueT4oc3Vic2VydC5sb2d0bXAgPyAoQXJyYXkuZnJvbShzdWJzZXJ0LmxvZ3RtcC5lbnRyaWVzKCkpIGFzIFthbnksIGFueV1bXSkgOiBbXSksXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q3VycmVudEZvcm1Db21wb25lbnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCBjdXJyZW50R3JpZC50eXBlID09PSAnZ3JpZCcpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBmb3JtSW5kZXggPVxuXHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdFx0LnNsaWNlKDAsIHRoaXMuaW5kZXhWYWx1ZSArIDEpXG5cdFx0XHRcdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS50eXBlICE9PSAnZ3JpZCcpLmxlbmd0aCAtIDE7XG5cdFx0cmV0dXJuIGZvcm1JbmRleCA+PSAwID8gKHRoaXMudGFiRm9ybS5nZXQoZm9ybUluZGV4KSA/PyBudWxsKSA6IG51bGw7XG5cdH1cblxuXHRjYW5TaG93Q3VycmVudFRhYlNhdmUoZ3JpZD86IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gZ3JpZCA/PyB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hdXRoTGV2ZWwoKSA+PSAzICYmIGN1cnJlbnRHcmlkID09PSB0aGlzLmdldEN1cnJlbnRHcmlkKCkgJiYgY3VycmVudEdyaWQuc3ViU2F2ZT8uZW5hYmxlZCA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldEN1cnJlbnRUYWJTYXZlTGFiZWwoZ3JpZD86IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gZ3JpZCA/PyB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0cmV0dXJuIGN1cnJlbnRHcmlkPy5zdWJTYXZlPy5sYWJlbCB8fCAn5L+d5a2YJztcblx0fVxuXG5cdHByaXZhdGUgaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkge1xuXHRcdGNvbnN0IGFkZERhdGEgPSB0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9O1xuXHRcdGNvbnN0IHVwZERhdGEgPSB0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9O1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhhZGREYXRhKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHVwZERhdGEpLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRwcml2YXRlIGhhc1N1YnNlcnRQZW5kaW5nQ2hhbmdlcyhzdWJzZXJ0OiBhbnkpIHtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KHN1YnNlcnQuc3ViRGF0YSAmJiBzdWJzZXJ0LnN1YkRhdGEubGVuZ3RoID4gMCkgfHxcblx0XHRcdChzdWJzZXJ0Lm1hcHRtcCAmJiBzdWJzZXJ0Lm1hcHRtcC5zaXplID4gMCkgfHxcblx0XHRcdChzdWJzZXJ0LmxvZ3RtcCAmJiBzdWJzZXJ0LmxvZ3RtcC5zaXplID4gMClcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0RGlydHlNYWluRGF0YVNuYXBzaG90KCkge1xuXHRcdGNvbnN0IGRpcnR5UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oWy4uLk9iamVjdC5rZXlzKHRoaXMudXBzZXJ0UHJtLmFkZERhdGEgfHwge30pLCAuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9KV0pO1xuXHRcdGNvbnN0IHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cdFx0ZGlydHlQYXRocy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdHNuYXBzaG90W2tleV0gPSBmaWVsZFV0aWxzLmdldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNuYXBzaG90O1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0T3RoZXJEaXJ0eVN1YkRhdGFTbmFwc2hvdChjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKChncmlkKSA9PiB7XG5cdFx0XHRpZiAoIWdyaWQgfHwgZ3JpZCA9PT0gY3VycmVudEdyaWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRcdGlmICghdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY3VycmVudERhdGEgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXldIHx8IFtdIDogdGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSB8fCB7fTtcblx0XHRcdHNuYXBzaG90cy5zZXQoZ3JpZC5zdWJEYXRhS2V5LCBBcnJheS5pc0FycmF5KGN1cnJlbnREYXRhKSA/IGN1cnJlbnREYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKSA6IHsgLi4uY3VycmVudERhdGEgfSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNuYXBzaG90cztcblx0fVxuXG5cdHByaXZhdGUgcmVzdG9yZURpcnR5U25hcHNob3RzKG1haW5EYXRhU25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIGFueT4sIHN1YkRhdGFTbmFwc2hvdHM6IE1hcDxzdHJpbmcsIGFueT4pIHtcblx0XHRPYmplY3QuZW50cmllcyhtYWluRGF0YVNuYXBzaG90KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViRGF0YVNuYXBzaG90cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhW2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKSA6IHsgLi4udmFsdWUgfTtcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNTdWJGb3JtTW9kZWxGcm9tRGF0YSgpO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgcmVmcmVzaEN1cnJlbnRUYWJEYXRhKGN1cnJlbnRHcmlkOiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRpZiAoIWN1cnJlbnRHcmlkIHx8ICF0aGlzLmlkIHx8ICF0aGlzLm1vZGVsTmFtZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtYWluRGF0YVNuYXBzaG90ID0gdGhpcy5jb2xsZWN0RGlydHlNYWluRGF0YVNuYXBzaG90KCk7XG5cdFx0Y29uc3Qgb3RoZXJEaXJ0eVNuYXBzaG90cyA9IHRoaXMuY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMuc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCk7XG5cdFx0dGhpcy53ZWJfZ2V0KHRoaXMuZ2V0UHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5kZXRhaWxDYih0aGlzLm1lcmdlRGV0YWlsV2l0aExlZnRQYW5lbChyZXMpKTtcblx0XHRcdHRoaXMucmVzdG9yZURpcnR5U25hcHNob3RzKG1haW5EYXRhU25hcHNob3QsIG90aGVyRGlydHlTbmFwc2hvdHMpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShncmlkOiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBzdWJzZXJ0ID0gdGhpcy5nZXRTdWJzZXJ0QnlHcmlkKGdyaWQpO1xuXHRcdGlmICghc3Vic2VydCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRzdWJzZXJ0Lm1hcHRtcCA9IG5ldyBNYXAoKTtcblx0XHRzdWJzZXJ0LmxvZ3RtcCA9IG5ldyBNYXAoKTtcblx0XHRzdWJzZXJ0LnN1YkRhdGEgPSBbXTtcblx0fVxuXG5cdHByaXZhdGUgcmVjYWxjdWxhdGVTYXZlU2lnbmFsKCkge1xuXHRcdGNvbnN0IGhhc0RpcnR5U3Vic2VydHMgPSAodGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXSkuc29tZSgoc3Vic2VydDogYW55KSA9PiB0aGlzLmhhc1N1YnNlcnRQZW5kaW5nQ2hhbmdlcyhzdWJzZXJ0KSk7XG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQodGhpcy5oYXNNYWluUGVuZGluZ0NoYW5nZXMoKSB8fCBoYXNEaXJ0eVN1YnNlcnRzKTtcblx0fVxuXG5cdGJ1aWxkQ3VycmVudFRhYlVwc2VydCgpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBjdXJyZW50U3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChjdXJyZW50R3JpZCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhY3VycmVudFN1YnNlcnQgfHwgIXRoaXMuaWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0dXBkRGF0YToge1xuXHRcdFx0XHRpZDogdGhpcy5pZCxcblx0XHRcdFx0Li4uKHRoaXMudXBzZXJ0UHJtLnVwZERhdGEgfHwge30pLFxuXHRcdFx0fSxcblx0XHRcdHN1YnNlcnQ6IFt0aGlzLmNsb25lU3Vic2VydChjdXJyZW50U3Vic2VydCldLFxuXHRcdH07XG5cdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdHBheWxvYWQubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0cGF5bG9hZC5sb2cgPSB7XG5cdFx0XHRcdC4uLih0aGlzLnVwc2VydFBybS5sb2cgfHwge30pLFxuXHRcdFx0XHRwaWQ6IHRoaXMuaWQsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQ3VycmVudFRhYlNhdmVTdWNjZXNzKGN1cnJlbnRHcmlkOiBHcmlkTGlzdCB8IG51bGwsIGNiPzogRnVuY3Rpb24sIHJlcz86IGFueSkge1xuXHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR0aGlzLnJlc2V0Q3VycmVudFRhYlVwc2VydFN0YXRlKGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWNhbGN1bGF0ZVNhdmVTaWduYWwoKTtcblx0XHRjYiAmJiBjYihyZXMpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRUYWIoY2I/OiBGdW5jdGlvbikge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1aWxkQ3VycmVudFRhYlVwc2VydCgpO1xuXHRcdGlmICghcGF5bG9hZCkge1xuXHRcdFx0dGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnV2FybicsIGRldGFpbDogJ+ivt+WFiOS/neWtmOS4u+ihqCcgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50R3JpZD8udHlwZSAhPT0gJ2dyaWQnKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Rm9ybSA9IHRoaXMuZ2V0Q3VycmVudEZvcm1Db21wb25lbnQoKTtcblx0XHRcdGlmIChjdXJyZW50Rm9ybSAmJiAhY3VycmVudEZvcm0udmFsaWRhdGUoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdGNvbnN0IGZpbmFsaXplU2F2ZSA9IChyZXM/OiBhbnkpID0+IHRoaXMuaGFuZGxlQ3VycmVudFRhYlNhdmVTdWNjZXNzKGN1cnJlbnRHcmlkLCBjYiwgcmVzKTtcblx0XHRpZiAodHlwZW9mIGN1cnJlbnRHcmlkPy5zdWJTYXZlPy5zYXZlRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3VycmVudEdyaWQuc3ViU2F2ZS5zYXZlRnVuYyhwYXlsb2FkLCB0aGlzLmlkLCBmaW5hbGl6ZVNhdmUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLndlYl91cHNlcnQocGF5bG9hZClcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQoZmFsc2UpO1xuXHRcdFx0XHR9KSxcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRmaW5hbGl6ZVNhdmUocmVzKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0YWRkUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc3ViRGF0YUtleSA9IGdyaWQuc3ViRGF0YUtleTtcblxuXHRcdGlmIChncmlkLnN1YlRhYmxlU291cmNlID09PSAnaGFuZGxlJykge1xuXHRcdFx0Y29uc3QgYWRkSXRlbSA9IGdyaWQuZ3JpZE9wdGlvbnM/LmFkZERhdGFDYj8uKCkgPz8ge307XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGFkZEl0ZW0sIGdyaWQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLmFkZERhdGEoc3ViRGF0YUtleSwgdW5kZWZpbmVkLCBncmlkKTtcblx0XHR0aGlzLmRhdGFTb3VyY2VTaG93KCk7XG5cdH1cblxuXHRkZWxSb3dDbGlja0hhbmRsZXIoZ3JpZDogR3JpZExpc3QpIHtcblx0XHRjb25zdCBzZWxlY3RJdGVtOiBhbnkgPSB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSB8fCBbXTtcblx0XHRsZXQgaWRzOiBudW1iZXJbXSA9IFtdO1xuXHRcdGlmIChncmlkLnNsb3RLZXkgPT09ICdnYW50dCcpIHtcblx0XHRcdGlkcyA9IHNlbGVjdEl0ZW0uZmlsdGVyKCh2OiBhbnkpID0+IHYuaWQgJiYgdHlwZW9mIHYuaWQgPT09ICdudW1iZXInKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlkcyA9IHNlbGVjdEl0ZW0uZmlsdGVyKCh2OiBhbnkpID0+IHYuaWQpLm1hcCgodjogYW55KSA9PiB2LmlkKTtcblx0XHR9XG5cdFx0aWYgKGlkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBncmlkVGFiID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRcdGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmM7XG5cdFx0XHRsZXQgZG9uZUNhbGxlZCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGRvbmVDYWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZG9uZUNhbGxlZCA9IHRydWU7XG5cdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCg0KTtcblx0XHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQoZmFsc2UpO1xuXHRcdFx0fTtcblx0XHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHsgbW9kZWxOYW1lOiBncmlkLmdyaWRPcHRpb25zLm1vZGVsTmFtZSwgaWRzIH0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGdW5jKGlkcywgZ3JpZFRhYiwgZG9uZSk7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcdFxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5yZW1vdmVEYXRhKGdyaWQuc3ViRGF0YUtleSwgdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCksIGdyaWQpO1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2Uuc2V0U2VsZWN0ZWRSb3dzKFtdKTtcblx0XHR9XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZDpvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPCEtLSDkv53lrZjmlrDlu7rmk43kvZzljLogLS0+XG5cdDxkaXYgY2xhc3M9XCJmbGV4IG1kOmZsZXgtd3JhcCBsZzpmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuIHB5LTEgcHgtMSBib3JkZXItYi1bMXB4XSBib3JkZXItWyNkYmRiZGJdIGJnLXdoaXRlXCI+XG5cdFx0PGRpdiBjbGFzcz1cImxnOmJhc2lzLTEvMyBvcmRlci0xXCI+XG5cdFx0XHQ8YXBwLWNydW1iLWFjdGlvblxuXHRcdFx0XHRbYWRkVmlzaWJsZV09XCJhZGRWaXNpYmxlKClcIlxuXHRcdFx0XHRbbmV3VXJsXT1cIm5ld1VybFwiXG5cdFx0XHRcdFtpc1Nob3dDb2ddPVwidHJ1ZVwiXG5cdFx0XHRcdFtvdXRsaW5lZF09XCJ0cnVlXCJcblx0XHRcdFx0W2F1dGhMZXZlbF09XCJhdXRoTGV2ZWwoKVwiXG5cdFx0XHRcdFthY3Rpb25MaXN0XT1cImFjdGlvbkxpc3QoKVwiXG5cdFx0XHRcdFtjb25maWdOZXdQYXRoXT1cImNvbmZpZ05ld1BhdGgoKVwiXG5cdFx0XHRcdFtkYXRhXT1cImdldFBybS5kYXRhID8/IHt9XCJcblx0XHRcdFx0W3NhdmVCdG5EaXNhYmxlXT1cInNhdmVCdG5EaXNhYmxlXCJcblx0XHRcdFx0W3Nob3dTYXZlQnV0dG9uXT1cInNob3dNYWluU2F2ZUJ1dHRvbigpXCJcblx0XHRcdFx0KGFjdGlvbkV2ZW50KT1cImF1dGhDbGljaygkZXZlbnQpXCJcblx0XHRcdFx0KHNhdmVFdmVudCk9XCJzdWJtaXRGb3JtKClcIj5cblx0XHRcdDwvYXBwLWNydW1iLWFjdGlvbj5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJiYXNpcy0xLzUgbGc6YmFzaXMtMi8zIG9yZGVyLTIgbGc6b3JkZXItMiBtZDpvcmRlci1sYXN0IG1kOmJhc2lzLWZ1bGwgbWQ6bXQtWzZweF1cIj5cblx0XHRcdDxocmVmLWJ0bi1saXN0XG5cdFx0XHRcdFtocmVmc109XCJocmVmQnRuTGlzdCgpXCJcblx0XHRcdFx0KGhyZWZDbGljayk9XCJnb1J1bigkZXZlbnQpXCI+PC9ocmVmLWJ0bi1saXN0PlxuXHRcdFx0PCEtLSBAaWYgKGlkKSB7XG5cdFx0XHRcdEBmb3IgKGJ0biBvZiBocmVmQnRuTGlzdCgpOyB0cmFjayBidG4pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdFt2YXJpYW50XT1cImJ0bj8udmFyaWFudFwiXG5cdFx0XHRcdFx0XHRbc2V2ZXJpdHldPVwiYnRuPy5zZXZlcml0eVwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cIm1yLVs2cHhdXCJcblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJidG4/Lmljb25cIlxuXHRcdFx0XHRcdFx0bGFiZWw9XCJ7eyBidG4uaTE4bktleSA/IGkxOG4uZmFueWkoYnRuLmkxOG5LZXkpIDogYnRuLmxhYmVsIH19XCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJnb1J1bihidG4pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0fSAtLT5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS8zIG9yZGVyLTMgZmxleCBmbGV4LXJvdy1yZXZlcnNlXCI+XG5cdFx0XHRAaWYgKG1vZGVsTG9nKCkpIHtcblx0XHRcdFx0PGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9ja1wiPlxuXHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRbY2xhc3NdPVwiJ2ljb25mb250IGljb24tc2lkZWJhciBpY29uLXNpZGViYXItJyArIHNpZGViYXJNb2RlKClcIlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cInRvZ2dsZUxvZygpXCI+PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJmbGV4XCI+XG5cdFx0PGRpdiBjbGFzcz1cInB4LTIgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGZsZXgtMVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImhpZGRlbiBtZDpiYXNpcy0xLzMgcHktMSBiYXNpcy1mdWxsIG1kOmZsZXggaXRlbXMtY2VudGVyIGZsZXgtcm93IG9yZGVyLTFcIj5cblx0XHRcdFx0QGZvciAoYWN0aW9uIG9mIGFjdGlvbkxpc3QoKTsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGFjdGlvbikge1xuXHRcdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdFx0c2l6ZT1cInNtYWxsXCJcblx0XHRcdFx0XHRcdFtpY29uXT1cImdldFBybS5kYXRhPy5pY29uXCJcblx0XHRcdFx0XHRcdFtsb2FkaW5nXT1cImFjdGlvbi5sb2FkaW5nXCJcblx0XHRcdFx0XHRcdFtsYWJlbF09XCJhY3Rpb24uaTE4bktleSA/IChhY3Rpb24uaTE4bktleSB8IHRyYW5zbGF0ZSkgOiBhY3Rpb24ubGFiZWxcIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImFjdGlvbi5idG5EaXNhYmxlZCA/IGFjdGlvbi5idG5EaXNhYmxlZChnZXRQcm0uZGF0YSkgOiBmYWxzZVwiXG5cdFx0XHRcdFx0XHRbc3R5bGVDbGFzc109XCJcblx0XHRcdFx0XHRcdFx0KGFjdGlvbi5hdXRoIHx8IDApID4gKGF1dGhMZXZlbCgpIHx8IDApIHx8ICEhYWN0aW9uLmJ0bkhpZGRlbj8uKGdldFBybS5kYXRhKVxuXHRcdFx0XHRcdFx0XHRcdD8gJ2Zvcm0tYWN0aW9uIGhpZGRlbidcblx0XHRcdFx0XHRcdFx0XHQ6ICdmb3JtLWFjdGlvbiBibG9jayBtci1bLjVyZW1dJ1xuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImFjdGlvbi5vbkNsaWNrICE9ICcnICYmIGFjdGlvbi5vbkNsaWNrPy4oZ2V0UHJtLmRhdGEsIGFjdGlvbilcIj5cblx0XHRcdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtZDpiYXNpcy0yLzMgYmFzaXMtZnVsbCBmbGV4IG1kOmZsZXgtcm93LXJldmVyc2UgZmxleC1yb3cgbWQ6b3JkZXItMiBvcmRlci1maXJzdCB3LWZ1bGxcIj5cblx0XHRcdFx0QGlmIChzdGVwc1Zpc2libGUpIHtcblx0XHRcdFx0XHQ8Y3VzdG9tLXN0ZXBzXG5cdFx0XHRcdFx0XHQjY3VzdG9tU3RlcHNcblx0XHRcdFx0XHRcdGNsYXNzPVwidy1mdWxsXCJcblx0XHRcdFx0XHRcdFtzdGVwc109XCJzdGF0dXNTdGVwcygpXCJcblx0XHRcdFx0XHRcdFttb2RlbExvZ109XCJzaG93TG9nKClcIlxuXHRcdFx0XHRcdFx0W2N1cnJlbnRdPVwiZ2V0UHJtLmRhdGEgJiYgZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldICE9PSB1bmRlZmluZWQgPyBnZXRQcm0uZGF0YVtzdGF0dXNLZXkoKV0gOiAwXCJcblx0XHRcdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRcdFx0W2lzQ2xpY2tdPVwidGhpcy5zdGF0dXNDb25mKCkuaXNDbGlja1wiXG5cdFx0XHRcdFx0XHQoY2hhbmdlKT1cInN0YXR1c0NoYW5nZSgkZXZlbnQsIGN1c3RvbVN0ZXBzKVwiPlxuXHRcdFx0XHRcdDwvY3VzdG9tLXN0ZXBzPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHRAaWYgKHNob3dMb2coKSkge1xuXHRcdFx0PGRpdiBjbGFzcz1cImxnOnctWzQwMHB4XSBtZDp3LVszMDBweF0gaGlkZGVuIG1kOmJsb2NrXCI+PC9kaXY+XG5cdFx0fVxuXHQ8L2Rpdj5cbiAgPCEtLSAgZm9ybSDkuLvljLrln58tLT5cbiAgQGlmKHRoaXMuZm9ybSgpLmZvcm0pIHtcbiAgICA8ZGl2IGNsYXNzPVwibWFpbiBmbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgQGlmIChjdXN0b21MZWZ0UGFuZWwoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctZml0IG1kOm1heC13LWZ1bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tTGVmdFBhbmVsKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbFwiPlxuICAgICAgICAgICAgPGFtLXNpbmdsZS1zZWxlY3QtbGlzdGJveFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJsZWZ0UGFuZWxJdGVtc1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxlZnRQYW5lbFNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJnZXRQYW5lbE9wdGlvblZhbHVlKClcIlxuICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiZ2V0UGFuZWxPcHRpb25MYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2VtcHR5TWVzc2FnZV09XCJnZXRQYW5lbEVtcHR5TWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgW2FsbG93RGVzZWxlY3RdPVwiZ2V0UGFuZWxBbGxvd0Rlc2VsZWN0KClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGxlZnRQYW5lbCgpPy5lbmFibGVkICYmIGxlZnRQYW5lbCgpPy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LVsyMjBweF0gbWQ6bWF4LXctZnVsbCBweC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtZm9ybS1sZWZ0LXBhbmVsIHBhZ2UtZm9ybS10cmVlLXBhbmVsXCI+XG4gICAgICAgICAgICBAaWYgKGxlZnRQYW5lbFRyZWVOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxwLXRyZWVcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGVmdFBhbmVsVHJlZU5vZGVzXCJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwic2luZ2xlXCJcbiAgICAgICAgICAgICAgICBbKHNlbGVjdGlvbildPVwibGVmdFBhbmVsU2VsZWN0ZWROb2RlXCJcbiAgICAgICAgICAgICAgICBbZW1wdHlNZXNzYWdlXT1cImdldFBhbmVsRW1wdHlNZXNzYWdlKClcIlxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwYWdlLWZvcm0tbGVmdC10cmVlXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlU2VsZWN0KT1cIm9uTGVmdFBhbmVsVHJlZU5vZGVTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZUV4cGFuZCk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlRXhwYW5kKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVDb2xsYXBzZSk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlQ29sbGFwc2UoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtZm9ybS1sZWZ0LXBhbmVsLWVtcHR5XCI+e3sgZ2V0UGFuZWxFbXB0eU1lc3NhZ2UoKSB9fTwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWQ6bWluLXctMCBtZDpmbGV4LTEgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgbXgtMiBmb3JtLXBhbmVsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBmbGV4LTFcIj5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybSgpLmZvcm0hXCI+XG4gICAgICAgICAgICAgIDxjdXN0b20tZm9ybVxuICAgICAgICAgICAgICAgICNjRm9ybVxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1PcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImdldFBybS5kYXRhID8/IHt9XCI+PC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGdyaWRzICYmIGdyaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBtYi0yXCI+XG4gICAgICAgICAgICAgIDxwLXRhYnMgWyh2YWx1ZSldPVwiaW5kZXhWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxpc3Q+XG4gICAgICAgICAgICAgICAgICBAZm9yIChmY2hpbGQgb2YgZ3JpZHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBmY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZmNoaWxkLmkxOG5LZXkgPyBpMThuLmZhbnlpKGZjaGlsZC5pMThuS2V5KSA6IGZjaGlsZC50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3AtdGFiPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvcC10YWJsaXN0PlxuICAgICAgICAgICAgICA8L3AtdGFicz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChncmlkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZ3JpZCkge1xuICAgICAgICAgICAgQGxldCBzbG90U3RhdGUgPSBzbG90UmVuZGVyU3RhdGVzW2ldO1xuICAgICAgICAgICAgQGxldCBzbG90ID0gc2xvdFN0YXRlPy5zbG90O1xuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImluZGV4VmFsdWUgIT0gaVwiIFtzdHlsZS5oZWlnaHRdPVwic2xvdCA/IGdyaWQuZ3JpZE9wdGlvbnMuc2Nyb2xsSGVpZ2h0IDogbnVsbFwiPlxuICAgICAgICAgICAgICBAaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2xvdC50ZW1wbGF0ZVJlZjsgY29udGV4dDogc2xvdFN0YXRlLmNvbnRleHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcHktWzVweF0gcHItWzhweF0gYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNhdmVDdXJyZW50VGFiKClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmIChncmlkLnN1YlRhYmxlU291cmNlICE9ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGx1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWRkUm93Q2xpY2tIYW5kbGVyKGdyaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC5zaG93RGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkLmdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJkZWxSb3dDbGlja0hhbmRsZXIoZ3JpZClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiAjY3VzdG9tR3JpZD48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnKSB7XG4gICAgICAgICAgICAgICAgICA8Y3VzdG9tLWdyaWRcbiAgICAgICAgICAgICAgICAgICAgI2N1c3RvbUdyaWRcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXVwiXG4gICAgICAgICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUVtaXQpPVwiZGVsUm93cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZFR5cGVdPVwiZ3JpZC5zdWJUYWJsZVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgIChhZGRFbWl0KT1cImRhdGFTb3VyY2VTaG93KClcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZC5ncmlkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncmlkRGlzYWJsZV09XCJncmlkLmdyaWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJncmlkLnNob3dEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZVZpc2libGVdPVwiY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVMYWJlbF09XCJnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVEaXNhYmxlZF09XCJncmlkLmdyaWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3REYXRhXT1cImdyaWQuc2VsZWN0RGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGRTb3J0XT1cImdyaWQuYWRkU29ydFwiXG4gICAgICAgICAgICAgICAgICAgIChzdWJTYXZlRW1pdCk9XCJzYXZlQ3VycmVudFRhYigpXCI+XG4gICAgICAgICAgICAgICAgICA8L2N1c3RvbS1ncmlkPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGlmIChjYW5TaG93Q3VycmVudFRhYlNhdmUoZ3JpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcHgtMiBwdC0yIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkLmdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNhdmVDdXJyZW50VGFiKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxjdXN0b20tZm9ybVxuICAgICAgICAgICAgICAgICAgICAjdGFiRm9ybVxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJncmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwic3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleSFdIHx8IHt9XCI+XG4gICAgICAgICAgICAgICAgICA8L2N1c3RvbS1mb3JtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChzaG93TG9nKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gaGlkZGVuIG1kOmJsb2NrXCI+XG4gICAgICAgICAgPGN1c3RvbS1sb2cgW2xvZ3NdPVwiZ2V0UHJtLmRhdGE/LmxvZyA/PyBbXVwiPjwvY3VzdG9tLWxvZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuPHJvdy1zZWxlY3RvclxuXHRbKHZpc2libGUpXT1cInZpc2libGVcIlxuXHRbc2VhcmNoUHJtXT1cImRpYWxvZ1NlYXJjaFBybVwiXG5cdFtncmlkT3B0aW9uc109XCJzZWxlY3RPcHRpb25zXCJcblx0W3NlbGVjdGlvbktleXNdPVwic2VsZWN0aW9uS2V5c1wiXG5cdFtzZWxlY3RNb2RlbENvZGVdPVwiY3VycmVudFNlbGVjdE1vZGVsQ29kZSB8fCB1bmRlZmluZWRcIlxuXHRbY3VzdG9tTGlzdEZvcm1CeURpYWxvZ109XCJjdXJyZW50Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZVwiXG5cdFtjdXN0b21MaXN0Rm9ybUJ5RGlhbG9nQ29udGV4dF09XCJjdXJyZW50Q3VzdG9tTGlzdEZvcm1Db250ZXh0XCJcblx0W2N1c3RvbUxpc3REaWFsb2dNYXBdPVwiY3VzdG9tTGlzdEZvcm1JbnN0YW5jZU1hcCgpXCJcblx0KG9uT2spPVwib25PaygkZXZlbnQpXCJcblx0KGNhbmNlbFNlbGVjdCk9XCJvbkNhbmNlbFNlbGVjdGVkKCRldmVudClcIj5cbjwvcm93LXNlbGVjdG9yPlxuIl19