@piserve-tech/form-submission 1.3.107 → 1.3.108

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.
@@ -464,22 +464,24 @@ export class SubmitFormComponent {
464
464
  });
465
465
  }
466
466
  else if (element.entityType === 'MULTIFIELD') {
467
- const multiFieldsId = element.element.id;
468
- const submissionId = element.element.submissionId;
469
- let subformQuestions = { answers: [] };
470
- const subform = {
471
- formId: multiFieldsId,
472
- deletedSubmissions: [],
473
- submissions: [],
474
- };
467
+ const multifields = [];
475
468
  element.element.rows.forEach((row) => {
476
- subformQuestions = extractQuestions(row.grid, multiFieldsId, true, forms.length);
477
- subform.submissions.push({
478
- submissionId: submissionId,
479
- answers: subformQuestions.answers,
469
+ row.grid.forEach((gridItem) => {
470
+ if (gridItem.entityType === 'QUESTION') {
471
+ multifields.push({
472
+ questionId: gridItem.element.id,
473
+ answer: gridItem.element.answer,
474
+ });
475
+ }
480
476
  });
481
477
  });
482
- forms.push(subform);
478
+ console.log('multifields', multifields);
479
+ console.log('1', element);
480
+ questions.push({
481
+ questionId: element.element.id,
482
+ answer: null,
483
+ fields: multifields
484
+ });
483
485
  }
484
486
  });
485
487
  return { answers: questions, forms: forms };
@@ -785,4 +787,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
785
787
  }], apiCalled: [{
786
788
  type: Output
787
789
  }] } });
788
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sS0FBSyxNQUFNLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7OztBQW9DeEQsTUFBTSxPQUFPLG1CQUFtQjtJQStDOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDO1FBSmxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFuRDVDLGFBQVEsR0FBc0IsSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUN0QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFELGNBQVMsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV6RSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLHNCQUFpQixHQUFZLEtB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LENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQ0FBRSxPQUFPLE1BQU0sQ0FBQzt5QkFDcEM7cUJBRUY7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQztRQUVGLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUN6QixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ25CLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxLQUFVO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOytHQXJ5QlUsbUJBQW1CO21HQUFuQixtQkFBbUIsMlBDdENoQyx5L0NBMENBOzs0RkRKYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzRNQU1sQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbWFwcGVyIGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFB1YmxpY0Zvcm0gfSBmcm9tICcuLi8uLi9tb2RlbHMvcHVibGljRm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY2FwdGNoYS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIEFuc3dlciB7XG4gIHF1ZXN0aW9uSWQ6IHN0cmluZztcbiAgYW5zd2VyOiBhbnk7XG4gIGFuc3dlcklkPzogc3RyaW5nO1xuICBkZWxldGVGaWxlcz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU3VibWlzc2lvbiB7XG4gIHN1Ym1pc3Npb25JZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbn1cblxuaW50ZXJmYWNlIEZvcm0ge1xuICBmb3JtSWQ6IHN0cmluZztcbiAgZGVsZXRlZFN1Ym1pc3Npb25zOiBhbnlbXTtcbiAgc3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXTtcbn1cblxuaW50ZXJmYWNlIFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbiAgZm9ybXM6IEZvcm1bXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1Ym1pdC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Ym1pdC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3VibWl0LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VibWl0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcXVlc3Rpb246IFB1YmxpY0Zvcm0gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbW9kdWxlTmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYWNjZXB0ZWRMYW5ndWFnZTogc3RyaW5nID0gJyc7XG4gIEBPdXRwdXQoKSBzdWJtaXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBhcGlDYWxsZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBuYW1lOiBzdHJpbmcgPSAnJztcbiAgc2F2ZUF1dG9tYXRpY2FsbHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZUludGVydmFsOiBudW1iZXIgPSAwO1xuICBjdXN0b21pemVGb250OiBib29sZWFuID0gZmFsc2U7XG4gIGZvbnRGYW1pbHk6IHN0cmluZyA9ICcnO1xuICBmb250U2l6ZTogbnVtYmVyID0gMDtcbiAgZW5hYmxlRGF0YUV4cG9ydDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWxlRm9ybWF0czogc3RyaW5nW10gPSBbXTtcbiAgZW5hYmxlUXVlc3Rpb25OdW1iZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcXVlc3Rpb25OdW1iZXJpbmc6IHN0cmluZyA9ICcnO1xuICBlbmFibGVHb29nbGVSZWNhcHRjaGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ29vZ2xlUmVjYXB0Y2hhS2V5OiBzdHJpbmcgPSAnJztcbiAgZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0OiBzdHJpbmcgPSAnJztcbiAgbmF2aWdhdGlvbjogc3RyaW5nID0gJyc7XG4gIG1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIHBhZ2VzOiBhbnkgPSBbXTtcbiAgY3VycmVudFBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcHJldmlvdXNQYWdlOiBhbnkgPSB7fTtcbiAgY3VycmVudFBhZ2U6IGFueSA9IHt9O1xuICBuZXh0UGFnZTogYW55ID0ge307XG4gIGxhc3RUYWI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcXVlc3Rpb25BbnN3ZXJzOiBRdWVzdGlvbkFuc3dlcnNXcmFwcGVyID0geyBwYXJlbnRJZDogJycsIGFuc3dlcnM6IFtdLCBmb3JtczogW10gfTtcbiAgZmlsZXM6IHsgcXVlc3Rpb25JZDogc3RyaW5nOyBmaWxlOiBhbnkgfVtdID0gW107XG4gIHBhcmVudFF1ZXN0aW9uczogYW55O1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7fTtcbiAgcGFyZW50UXVlc3Rpb25BbnN3ZXJzOiBhbnk7XG4gIHBhcmVudFN1Ym1pc3Npb25JZDogc3RyaW5nID0gJyc7XG4gIHN1Ym1pc3Npb25JblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIHJlY2FwdGNoYVRva2VuOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBpc1JlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDsgXG4gIHBhZ2VEZXRhaWxzOiBhbnkgPSBbXTtcbiAgcGFnZU51bWJlcjogbnVtYmVyID0gMTtcbiAgcm93U2V0OiBudW1iZXIgPSAwO1xuICByb3dTZXRDb3VudDogW251bWJlcl0gPSBbMF07XG4gIGVsaWdpYmxlRm9yU3VibWlzc2lvbjp7IHN0YXR1czogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gPSB7IHN0YXR1czogdHJ1ZSwgbWVzc2FnZTogJycgfTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNhcHRjaGFTZXJ2aWNlOiBSZWNhcHRjaGFTZXJ2aWNlXG4gICkge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpO1xuICAgIHRoaXMuc3VibWlzc2lvbiA9IG5hdmlnYXRpb24/LmV4dHJhcy5zdGF0ZT8uWydzdWJtaXNzaW9uJ11cbiAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHRoaXMuc3VibWlzc2lvbj8uaWQ7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbkFuc3dlcnMgPSB0aGlzLnN1Ym1pc3Npb24/LnF1ZXN0aW9uQW5zd2Vyc1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25zID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3BhcmVudFF1ZXN0aW9ucyddO1xuICAgIHRoaXMuZGF0YVNlcnZpY2Uuc2V0UGFyZW50UXVlc3Rpb25zKHRoaXMucGFyZW50UXVlc3Rpb25zKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICBjb25zb2xlLmxvZygnU3RvcHBlZCByZUNBUFRDSEEgdG9rZW4gcmVmcmVzaC4nKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMuYWNjZXB0ZWRMYW5ndWFnZSA9IGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZighdGhpcy5lZGl0KVxuICAgICAgdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuZ2V0U3VibWl0dGVkRm9ybURhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdGhpcy5zdGFydFRva2VuUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5nZXRSZWNhcHRjaGFUb2tlbigpO1xuICAgICAgdGhpcy5yZWNhcHRjaGFUb2tlbiA9IHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblxuXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBnZXR0aW5nIHJlQ0FQVENIQSB0b2tlbjonLCBlcnJvci5lcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFRva2VuUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1JlZnJlc2hpbmcpIHJldHVybjsgLy8gUHJldmVudCBtdWx0aXBsZSBjYWxsc1xuXG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIHRoaXMuZ2V0VG9rZW4oKTsgLy8gSW5pdGlhbCB0b2tlbiBmZXRjaFxuXG4gICAgdGhpcy5pbnRlcnZhbElkID1zZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmdldFRva2VuKCk7IFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVmcmVzaGluZyByZUNBUFRDSEEgdG9rZW46JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0sIDYwMDAwKTsgLy8gUmVmcmVzaCBldmVyeSAxIG1pbnV0ZVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRm9udChmb250VXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IGZvbnRVcmw7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgfVxuXG4gIGdldEZvcm1EYXRhKCkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uPy5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuXG4gICAgICAvL3NldCBmb250IGZhbWlseSBhbmQgZm9udCBzaXplXG4gICAgICBpZiAocmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24uY3VzdG9taXplRm9udCkge1xuICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbi5mb250RmFtaWx5XG4gICAgICAgIHRoaXMuZm9udFNpemUgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbi5mb250U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb250RmFtaWx5ID0gJ3BvcHBpbnMnO1xuICAgICAgICB0aGlzLmZvbnRTaXplID0gMTg7XG4gICAgICB9XG4gICAgICBpZihyZXNwb25zZT8ucmVzdWx0Py5wYWdlRGV0YWlscyl7XG4gICAgICAgIHRoaXMucGFnZURldGFpbHMgPSByZXNwb25zZS5yZXN1bHQucGFnZURldGFpbHM7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3dTZXRDb3VudFswXSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJyYXJ5LWZvbnQtZmFtaWx5JywgdGhpcy5mb250RmFtaWx5KTtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJyYXJ5LWZvbnQtc2l6ZScsIHRoaXMuZm9udFNpemUgKyAncHgnKTtcbiAgICAgIGNvbnN0IGZvbnRVcmwgPSBgaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmZvbnRGYW1pbHkpfWA7XG4gICAgICB0aGlzLmxvYWRGb250KGZvbnRVcmwpO1xuXG4gICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpXG4gICAgICAgIHRoaXMuc3RhcnRUb2tlblJlZnJlc2goKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1Ym1pdHRlZEZvcm1EYXRhKCkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgIC5nZXRTdWJtaXR0ZWRGb3JtKHRoaXMubW9kdWxlTmFtZSwgdGhpcy5zdWJtaXNzaW9uSWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uLmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG1hcHBlci5tYXBQdWJsaWNGb3JtVG9Nb2RlbChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICBpZihyZXNwb25zZT8ucmVzdWx0Py5wYWdlRGV0YWlscyl7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgICAgdGhpcy5wYWdlc1tpXSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG4gICAgICAgICAgdGhpcy5zdGFydFRva2VuUmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzc2lnblF1ZXN0aW9uUHJvcGVydGllcyhxdWVzdGlvbjogUHVibGljRm9ybSkge1xuICAgIHRoaXMubmFtZSA9IHF1ZXN0aW9uLm5hbWU7XG4gICAgdGhpcy5wYWdlcyA9IHF1ZXN0aW9uLnBhZ2VzO1xuICAgIGlmICh0aGlzLnBhcmVudFF1ZXN0aW9ucykge1xuICAgICAgdGhpcy5wYXJlbnRRdWVzdGlvbkFuc3dlcnMgPSBxdWVzdGlvbj8ucXVlc3Rpb25BbnN3ZXJzO1xuICAgICAgdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQgPSBxdWVzdGlvbj8ucGFyZW50SWQ7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzWzBdO1xuICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VzWzFdO1xuICAgIHRoaXMuc2F2ZUF1dG9tYXRpY2FsbHkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5zYXZlQXV0b21hdGljYWxseTtcbiAgICB0aGlzLnNhdmVJbnRlcnZhbCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVJbnRlcnZhbDtcbiAgICB0aGlzLmN1c3RvbWl6ZUZvbnQgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5jdXN0b21pemVGb250O1xuICAgIHRoaXMuZm9udEZhbWlseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmZvbnRGYW1pbHk7XG4gICAgdGhpcy5mb250U2l6ZSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmZvbnRTaXplO1xuICAgIHRoaXMuZW5hYmxlRGF0YUV4cG9ydCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmVuYWJsZURhdGFFeHBvcnQ7XG4gICAgdGhpcy5maWxlRm9ybWF0cyA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmZpbGVGb3JtYXRzO1xuICAgIHRoaXMuZW5hYmxlUXVlc3Rpb25OdW1iZXJpbmcgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlUXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5xdWVzdGlvbk51bWJlcmluZyA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnF1ZXN0aW9uTnVtYmVyaW5nO1xuICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICB0aGlzLmdvb2dsZVJlY2FwdGNoYUtleSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYUtleTtcbiAgICB0aGlzLmdvb2dsZVJlY2FwdGNoYVNlY3JldCA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5nb29nbGVSZWNhcHRjaGFTZWNyZXQ7XG4gICAgdGhpcy5uYXZpZ2F0aW9uID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubmF2aWdhdGlvbjtcbiAgICB0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkO1xuICAgIHRoaXMuYXBpQ2FsbGVkLmVtaXQodHJ1ZSlcbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFnZSgpIHsgXG4gICAgdGhpcy5zZXRDdXJyZW50UGFnZSh0aGlzLmN1cnJlbnRQYWdlSW5kZXgrMSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUmVzcG9uc2UgPVxuICAgICAgICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpO1xuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlLmlzVmFsaWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYWdlRGV0YWlscyAmJiB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXgrMV07XG4gICAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcodmFsaWRhdGlvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4Kys7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUluZGV4ID4gMCkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUmVzcG9uc2UgPVxuICAgICAgICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpO1xuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlLmlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleC0tO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleC0xXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKHZhbGlkYXRpb25SZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXgtMV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5lbGlnaWJsZUZvclN1Ym1pc3Npb24gPSB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgc2V0Q3VycmVudFBhZ2UoaW5kZXg6IG51bWJlcikgeyAgICBcbiAgICBpZiAoaW5kZXggPCB0aGlzLnBhZ2VzLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLnBhZ2VzW2luZGV4XSB8fCB0aGlzLnBhZ2VzW2luZGV4XS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICB9XG4gICAgICB0aGlzLnBhZ2VOdW1iZXIgPSBpbmRleCArIDE7XG4gICAgICBpZih0aGlzLmVkaXQpe1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmdldFN1Ym1pdHRlZEZvcm0odGhpcy5tb2R1bGVOYW1lLCB0aGlzLnN1Ym1pc3Npb25JZCwgdGhpcy5wYWdlTnVtYmVyLCB0aGlzLnJvd1NldCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlc1swXTsgICBcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleD1pbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIH0pO1xuICAgICAgfWVsc2V7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsdGhpcy5wYWdlTnVtYmVyLHRoaXMucm93U2V0KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0gPSByZXNwb25zZS5yZXN1bHQucGFnZXNbMF07ICAgXG4gICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleD1pbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3BvbnNlID1cbiAgICAgICAgdGhpcy52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSk7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlLmlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKHZhbGlkYXRpb25SZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgbG9hZE1vcmVEYXRhKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgcm93Q291bnRMaW1pdCA9IHRoaXMucm93U2V0Q291bnRbaW5kZXhdO1xuICAgIGxldCByb3dDb3VudCA9dGhpcy5wYWdlc1tpbmRleF0ucm93cy5sZW5ndGgvMjA7XG4gICAgcm93Q291bnQgPSBNYXRoLmNlaWwocm93Q291bnQpO1xuICAgIFxuICAgIGlmKHJvd0NvdW50KzE+cm93Q291bnRMaW1pdClcbiAgICB7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYodGhpcy5lZGl0KXtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0U3VibWl0dGVkRm9ybSh0aGlzLm1vZHVsZU5hbWUsIHRoaXMuc3VibWlzc2lvbklkLCBpbmRleCsxLCByb3dDb3VudCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFsuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLCAuLi5uZXdSb3dzXTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PWluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIGluZGV4KzEsIHJvd0NvdW50KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSwgLi4ubmV3Um93c107XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9aW5kZXg7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICB9KTtcbiAgfSAgXG4gICAgfVxuXG4gIGdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCkge1xuICAgIGNvbnN0IGV4dHJhY3RRdWVzdGlvbnMgPSAoXG4gICAgICBmb3JtRWxlbWVudHM6IGFueVtdLFxuICAgICAgcGFyZW50Rm9ybUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgIGlzSW5TdWJGb3JtOiBib29sZWFuID0gZmFsc2UsXG4gICAgICBzdWJGb3JtSW5kZXg6IG51bWJlciA9IDBcbiAgICApOiB7IGFuc3dlcnM6IEFuc3dlcltdOyBmb3JtczogRm9ybVtdIH0gPT4ge1xuICAgICAgY29uc3QgcXVlc3Rpb25zOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZm9ybXM6IEZvcm1bXSA9IFtdO1xuXG4gICAgICBmb3JtRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgbGV0IGJhc2VRdWVzdGlvbjogYW55O1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBpc0luU3ViRm9ybVxuICAgICAgICAgICAgICAgID8gYCR7cGFyZW50Rm9ybUlkfV8ke3N1YkZvcm1JbmRleH1fJHtlbGVtZW50LmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgIDogZWxlbWVudC5lbGVtZW50LmlkO1xuICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgZmlsZTogZWxlbWVudC5lbGVtZW50LmFuc3dlcixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICBhbnN3ZXI6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLmJhc2VRdWVzdGlvbixcbiAgICAgICAgICAgICAgYW5zd2VySWQ6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXJJZCB8fCAnJyxcbiAgICAgICAgICAgICAgZGVsZXRlRmlsZXM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb3JtSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5TdWJGb3JtLFxuICAgICAgICAgICAgICAgICAgICBzdWJGb3JtSW5kZXhcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgICAgICAgICBmb3Jtcy5wdXNoKC4uLnJlc3VsdC5mb3Jtcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcbiAgICAgICAgICBjb25zdCBzdWJmb3JtSWQgPSBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gICAgICAgICAgY29uc3Qgc3VibWlzc2lvbklkID0gZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25JZDtcblxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGxldCBzdWJmb3JtUXVlc3Rpb25zOiBhbnkgPSB7IGFuc3dlcnM6IFtdIH07XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHN1YmZvcm1RdWVzdGlvbnMgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHN1YmZvcm0uc3VibWlzc2lvbnMucHVzaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uSWQ6IHN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcnM6IHN1YmZvcm1RdWVzdGlvbnMuYW5zd2VycyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm1BbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IHN1YmZvcm1RdWVzdGlvbnM6IGFueSA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHN1YmZvcm1RdWVzdGlvbnMgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJmb3JtID0gZm9ybXMuZmluZChcbiAgICAgICAgICAgICAgKGZvcm0pID0+IGZvcm0uZm9ybUlkID09PSBzdWJmb3JtSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5mb3JFYWNoKFxuICAgICAgICAgICAgICAoc3VibWlzc2lvbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmh0bWxDb250ZW50O1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyLmZpbGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gYCR7c3ViZm9ybUlkfV8ke2luZGV4fV8ke2Fuc3dlci5xdWVzdGlvbklkfWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBhbnN3ZXIuZmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmZpbGVzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5hdHRhY2htZW50cztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybTogRm9ybSA9IHtcbiAgICAgICAgICAgICAgZm9ybUlkOiBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTdWJtaXNzaW9uczogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWRTdWJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyl7XG4gICAgICAgICAgLy8gSGFuZGxlIFF1ZXN0aW9uIEdyb3VwIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHJvd3NcbiAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZ3JpZEl0ZW0uZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihlbGVtZW50LmVudGl0eVR5cGUgPT09ICdNVUxUSUZJRUxEJyl7XG4gICAgICAgICAgY29uc3QgbXVsdGlGaWVsZHNJZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuXG4gICAgICAgICAgbGV0IHN1YmZvcm1RdWVzdGlvbnM6IGFueSA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgZm9ybUlkOiBtdWx0aUZpZWxkc0lkLFxuICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICBzdWJmb3JtUXVlc3Rpb25zID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgIG11bHRpRmllbGRzSWQsXG4gICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc3ViZm9ybS5zdWJtaXNzaW9ucy5wdXNoKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbklkOiBzdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgYW5zd2Vyczogc3ViZm9ybVF1ZXN0aW9ucy5hbnN3ZXJzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3JtcyB9O1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9jZXNzUGFnZXMgPSAoXG4gICAgICBwYWdlczogYW55W11cbiAgICApOiB7IGFuc3dlcnM6IEFuc3dlcltdOyBmb3JtczogRm9ybVtdIH0gPT4ge1xuICAgICAgY29uc3QgcXVlc3Rpb25zOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZm9ybXM6IEZvcm1bXSA9IFtdO1xuXG4gICAgICBwYWdlcy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICAgIHBhZ2Uucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICBmb3Jtcy5wdXNoKC4uLnJlc3VsdC5mb3Jtcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IGFuc3dlcnM6IHF1ZXN0aW9ucywgZm9ybXM6IGZvcm1zIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgIGFuc3dlcnM6IHJlc3VsdC5hbnN3ZXJzLFxuICAgICAgZm9ybXM6IHJlc3VsdC5mb3JtcyxcbiAgICB9O1xuICB9XG4gIHZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpOiB7IHN0YXR1czogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBlbnN1cmUgYWxsIHBhZ2VzIGFyZSBmdWxseSB2aXNpYmxlIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBmb3JtLlwiXG4gICAgICB9O1xuICAgIH1cbiAgXG4gICAgY29uc3QgaW5jb21wbGV0ZVBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICBcbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goKHA6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoIXAgfHwgIUFycmF5LmlzQXJyYXkocC5yb3dzKSB8fCBNYXRoLmNlaWwocC5yb3dzLmxlbmd0aCAvIDIwKSA8IHRoaXMucm93U2V0Q291bnRbaV0pIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgXG4gICAgaWYgKGluY29tcGxldGVQYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgU29tZSBzZWN0aW9ucyBhcmUgc3RpbGwgbG9hZGluZy4gUGxlYXNlIHNjcm9sbCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcGFnZXMgdG8gZW5zdXJlIGFsbCBxdWVzdGlvbnMgYXJlIGxvYWRlZDogJHtpbmNvbXBsZXRlUGFnZXMuam9pbihcIiwgXCIpfS5gLFxuICAgICAgfTtcbiAgICB9XG4gIFxuICAgIHJldHVybiB7IHN0YXR1czogdHJ1ZSwgbWVzc2FnZTogXCJHcmVhdCEgQWxsIHNlY3Rpb25zIGFyZSBjb21wbGV0ZS4gWW91IGNhbiBub3cgc3VibWl0IHRoZSBmb3JtLlwiIH07XG4gIH1cblxuICBzdWJtaXRGb3JtKCkge1xuICAgIGlmKCF0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpLnN0YXR1cyl7XG4gICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKCdQbGVhc2Ugd2FpdCBmb3IgYWxsIGVsZW1lbnRzIHRvIGxvYWQnKTsgIFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy52YWxpZGF0ZUZvcm0odGhpcy5wYWdlcyk7XG4gICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpO1xuICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnBhcmVudElkID0gdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQ7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb24nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uQW5zd2VycykpO1xuICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmZpbGVzLmZvckVhY2goKGZpbGVJdGVtKSA9PiB7XG4gICAgICAgICAgZmlsZUl0ZW0uZmlsZS5mb3JFYWNoKChmaWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWxlSXRlbS5xdWVzdGlvbklkLCBmaWxlLl9maWxlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmb3JtU2VydmljZUNhbGwgPSB0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWRcbiAgICAgICAgPyB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm0odGhpcy5tb2R1bGVOYW1lLCB0aGlzLnN1Ym1pc3Npb25JZCwgZm9ybURhdGEsIHRoaXMucmVjYXB0Y2hhVG9rZW4pXG4gICAgICAgIDogdGhpcy5mb3JtU2VydmljZS5zdWJtaXRGb3JtKHRoaXMubW9kdWxlTmFtZSwgZm9ybURhdGEsIHRoaXMucmVjYXB0Y2hhVG9rZW4pO1xuXG4gICAgICBmb3JtU2VydmljZUNhbGwuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2Vzcyh0aGlzLmVkaXQgPyAnRm9ybSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScgOiAnRm9ybSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCgnc3VjY2VzcycpO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTsgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodmFsaWRhdGlvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRm9ybShqc29uRGF0YTogYW55KToge1xuICAgIGlzVmFsaWQ6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHBhZ2VJbmRleDogbnVtYmVyIHwgMDtcbiAgfSB7XG4gICAgY29uc3QgdmFsaWRhdGVRdWVzdGlvbnMgPSAoXG4gICAgICBmb3JtRWxlbWVudHM6IGFueVtdXG4gICAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IHBhZ2VJbmRleDogbnVtYmVyIHwgMCB9ID0+IHtcbiAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZm9ybUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IGVsZW1lbnQuZWxlbWVudC5yZXF1aXJlZDtcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBlbGVtZW50LmVsZW1lbnQuYW5zd2VyO1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbjtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZWxlbWVudC5lbGVtZW50LmF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICgoIWFuc3dlciB8fCBhbnN3ZXIubGVuZ3RoID09PSAwKSAmJiBhdHRhY2htZW50Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFJlcXVpcmVkIGZpbGUgcXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGhhcyBubyBmaWxlcyB1cGxvYWRlZC5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICghYW5zd2VyIHx8IE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXF1aXJlZCAmJiBhbnN3ZXIgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgbm90IHJlcXVpcmVkIGJ1dCBhbnN3ZXIgcHJvdmlkZWQgd2l0aCB2YWxpZGF0aW9uIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKGxvZ2ljLnJvd3MpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGVsZW1lbnQuZWxlbWVudC5yb3dzO1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRRdWVzdGlvbklkcyA9IGRhdGFcbiAgICAgICAgICAgICAgLmZsYXRNYXAoKHJvdzogYW55KSA9PiByb3cuZ3JpZCkgLy8gRXh0cmFjdGluZyBncmlkIGl0ZW1zIGZyb20gZWFjaCBvYmplY3RcbiAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZWxlbWVudC5yZXF1aXJlZDsgLy8gRW5zdXJpbmcgdGhlIGZpbHRlciBwcm9wZXJseSBjaGVja3MgJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uZWxlbWVudC5pZCk7XG5cbiAgICAgICAgICAgIGlmIChyZXF1aXJlZFF1ZXN0aW9uSWRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICBpZiAoZWxlbWVudD8uZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmVSZXF1aXJlZFF1ZXN0aW9uc0Fuc3dlcmVkID0gcmVxdWlyZWRRdWVzdGlvbklkcy5ldmVyeSgocmVxdWlyZWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ0Fuc3dlciA9IGVsZW1lbnQ/LmVsZW1lbnQ/LnN1Ym1pc3Npb25zXG4gICAgICAgICAgICAgICAgICAgIC5mbGF0TWFwKChzdWI6IGFueSkgPT4gc3ViLmFuc3dlcnMpXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLnF1ZXN0aW9uSWQgPT09IHJlcXVpcmVkSWQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoaW5nQW5zd2VyICYmIG1hdGNoaW5nQW5zd2VyLmFuc3dlci50cmltKCkgIT09IFwiXCI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcmVSZXF1aXJlZFF1ZXN0aW9uc0Fuc3dlcmVkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLlwiLFxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiBcIlwiLCBwYWdlSW5kZXg6IDAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJGb3JtIGlzIGludmFsaWQgLSBObyBzdWJtaXNzaW9ucyBwcm92aWRlZCBmb3IgcmVxdWlyZWQgcXVlc3Rpb25zLlwiLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogXCJcIiwgcGFnZUluZGV4OiAwIH07XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LnJvd3MpIHsgIFxuICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gZWxlbWVudC5lbGVtZW50LnJvd3MubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7IFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHJlc3VsdHMuZXZlcnkoKHJlczogYW55KSA9PiByZXMuaXNWYWxpZCk7XG4gICAgICAgICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAvLyBjb25zdCByZXN1bHQgPSAgZWxlbWVudC5lbGVtZW50LnJvd3MuZmxhdE1hcCgocm93OiBhbnkpID0+IFxuICAgICAgICAgICAgICAvLyAgIHtcbiAgICAgICAgICAgICAgLy8gICAgIHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgICAgLy8gICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogJycsIHBhZ2VJbmRleDogMCB9O1xuICAgIH07XG5cbiAgICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCBqc29uRGF0YS5sZW5ndGg7IHBhZ2VJbmRleCsrKSB7XG4gICAgICBjb25zdCBwYWdlID0ganNvbkRhdGFbcGFnZUluZGV4XTtcbiAgICAgIGZvciAobGV0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogYFBhZ2UgJHtwYWdlSW5kZXggKyAxfTogJHtyZXN1bHQubWVzc2FnZX1gLFxuICAgICAgICAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6ICdGb3JtIGlzIHZhbGlkLicsXG4gICAgICBwYWdlSW5kZXg6IDAsXG4gICAgfTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMocGFnZTogYW55KTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgdmFsaWRhdGVRdWVzdGlvbnMgPSAoXG4gICAgICBmb3JtRWxlbWVudHM6IGFueVtdXG4gICAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSA9PiB7XG4gICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGZvcm1FbGVtZW50cykge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSBlbGVtZW50LmVsZW1lbnQucmVxdWlyZWQ7XG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gZWxlbWVudC5lbGVtZW50LmFuc3dlcjtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgfHwgYW5zd2VyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgYW5zd2VyZWQuYCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoIWFuc3dlciB8fCBPYmplY3Qua2V5cyhhbnN3ZXIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXF1aXJlZCBxdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgbm90IGFuc3dlcmVkLmAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJykge1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogJ0FsbCByZXF1aXJlZCBxdWVzdGlvbnMgYXJlIGFuc3dlcmVkLicgfTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnQWxsIHJlcXVpcmVkIHF1ZXN0aW9ucyBhcmUgYW5zd2VyZWQuJyB9O1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucyhldmVudDogYW55KSB7XG4gICAgdGhpcy51cGRhdGVTdWJGb3JtKHRoaXMucGFnZXMsIGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm0gPSAocGFnZXM6IGFueVtdLCB1cGRhdGVkU3ViRm9ybTogYW55KSA9PiB7XG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgcGFnZS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgPT09IHVwZGF0ZWRTdWJGb3JtLmZvcm1JZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBzdWJmb3JtIHdpdGggdGhlIG5ldyBkYXRhXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQgPSB1cGRhdGVkU3ViRm9ybTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCAhPT0gdXBkYXRlZFN1YkZvcm0uZm9ybUlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgc3ViZm9ybXMgbG9naWMgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3NcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBjaGlsZCBsb2dpY3NcbiAgICAgICAgICAgIC8vIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcy5mb3JFYWNoKChsb2dpYzogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnVwZGF0ZVN1YkZvcm0obG9naWMucm93cywgdXBkYXRlZFN1YkZvcm0pO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwib3V0ZXItY29udGFpbmVyXCI+XG4gIFxuICBcbiAgPGRpdiBjbGFzcz1cImhlYWQgY29udGFpbmVyXCI+XG4gICAgPGxpYi1oZWFkZXIgW25hbWVdPVwibmFtZVwiPjwvbGliLWhlYWRlcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJib2R5IGNvbnRhaW5lclwiPlxuICAgIFxuICAgIDxsaWItc3VibWlzc2lvbi1jb250YWluZXIgW3BhcmVudFF1ZXN0aW9uQW5zd2Vyc109XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIlxuICAgICpuZ0lmPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCI+PC9saWItc3VibWlzc2lvbi1jb250YWluZXI+XG4gICAgXG4gICAgPGxpYi1uYXZpZ2F0aW9uLXRhYnNcbiAgICAgICpuZ0lmPVwibmF2aWdhdGlvbiA9PSAnVEFCJ1wiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICAocGFnZUNoYW5nZWQpPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIFtlbGlnaWJsZUZvclN1Ym1pc3Npb25dPVwiZWxpZ2libGVGb3JTdWJtaXNzaW9uXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdID0gXCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXG4gICAgICAocm93U2V0SW5kZXgpPVwibG9hZE1vcmVEYXRhKCRldmVudClcIlxuICAgID48L2xpYi1uYXZpZ2F0aW9uLXRhYnM+XG4gICAgPGxpYi1uZXh0LXByZXYtbmF2aWdhdGlvblxuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdORVhUX0FORF9QUkVWSU9VU19CVVRUT04nXCJcbiAgICAgIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW3ByZXZpb3VzUGFnZV09XCJwcmV2aW91c1BhZ2VcIlxuICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgIFtuZXh0UGFnZV09XCJuZXh0UGFnZVwiXG4gICAgICAobmF2aWdhdGVOZXh0KT1cIm5hdmlnYXRlVG9OZXh0UGFnZSgpXCJcbiAgICAgIChuYXZpZ2F0ZVByZXZpb3VzKT1cIm5hdmlnYXRlVG9QcmV2aW91c1BhZ2UoKVwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgKHN1Ym1pdEVtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICA+PC9saWItbmV4dC1wcmV2LW5hdmlnYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
790
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sS0FBSyxNQUFNLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7OztBQXFDeEQsTUFBTSxPQUFPLG1CQUFtQjtJQStDOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDO1FBSmxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFuRDVDLGFBQVEsR0FBc0IsSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUN0QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFELGNBQVMsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV6RSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLHNCQUFpQixHQUFZLEtB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Q0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQ0FBRSxPQUFPLE1BQU0sQ0FBQzt5QkFDcEM7cUJBRUY7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQztRQUVGLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUN6QixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ25CLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxLQUFVO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOytHQXB5QlUsbUJBQW1CO21HQUFuQixtQkFBbUIsMlBDdkNoQyx5L0NBMENBOzs0RkRIYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzRNQU1sQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbWFwcGVyIGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFB1YmxpY0Zvcm0gfSBmcm9tICcuLi8uLi9tb2RlbHMvcHVibGljRm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY2FwdGNoYS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIEFuc3dlciB7XG4gIHF1ZXN0aW9uSWQ6IHN0cmluZztcbiAgYW5zd2VyOiBhbnk7XG4gIGFuc3dlcklkPzogc3RyaW5nO1xuICBkZWxldGVGaWxlcz86IHN0cmluZ1tdO1xuICBmaWVsZHM/OiBhbnk7XG59XG5cbmludGVyZmFjZSBTdWJtaXNzaW9uIHtcbiAgc3VibWlzc2lvbklkOiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xufVxuXG5pbnRlcmZhY2UgRm9ybSB7XG4gIGZvcm1JZDogc3RyaW5nO1xuICBkZWxldGVkU3VibWlzc2lvbnM6IGFueVtdO1xuICBzdWJtaXNzaW9uczogU3VibWlzc2lvbltdO1xufVxuXG5pbnRlcmZhY2UgUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciB7XG4gIHBhcmVudElkOiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xuICBmb3JtczogRm9ybVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VibWl0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJtaXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWVzdGlvbjogUHVibGljRm9ybSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhY2NlcHRlZExhbmd1YWdlOiBzdHJpbmcgPSAnJztcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGFwaUNhbGxlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuICBzYXZlQXV0b21hdGljYWxseTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlSW50ZXJ2YWw6IG51bWJlciA9IDA7XG4gIGN1c3RvbWl6ZUZvbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9udEZhbWlseTogc3RyaW5nID0gJyc7XG4gIGZvbnRTaXplOiBudW1iZXIgPSAwO1xuICBlbmFibGVEYXRhRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIGZpbGVGb3JtYXRzOiBzdHJpbmdbXSA9IFtdO1xuICBlbmFibGVRdWVzdGlvbk51bWJlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbk51bWJlcmluZzogc3RyaW5nID0gJyc7XG4gIGVuYWJsZUdvb2dsZVJlY2FwdGNoYTogYm9vbGVhbiA9IGZhbHNlO1xuICBnb29nbGVSZWNhcHRjaGFLZXk6IHN0cmluZyA9ICcnO1xuICBnb29nbGVSZWNhcHRjaGFTZWNyZXQ6IHN0cmluZyA9ICcnO1xuICBuYXZpZ2F0aW9uOiBzdHJpbmcgPSAnJztcbiAgbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnZXM6IGFueSA9IFtdO1xuICBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xuICBwcmV2aW91c1BhZ2U6IGFueSA9IHt9O1xuICBjdXJyZW50UGFnZTogYW55ID0ge307XG4gIG5leHRQYWdlOiBhbnkgPSB7fTtcbiAgbGFzdFRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbkFuc3dlcnM6IFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIgPSB7IHBhcmVudElkOiAnJywgYW5zd2VyczogW10sIGZvcm1zOiBbXSB9O1xuICBmaWxlczogeyBxdWVzdGlvbklkOiBzdHJpbmc7IGZpbGU6IGFueSB9W10gPSBbXTtcbiAgcGFyZW50UXVlc3Rpb25zOiBhbnk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHt9O1xuICBwYXJlbnRRdWVzdGlvbkFuc3dlcnM6IGFueTtcbiAgcGFyZW50U3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgc3VibWlzc2lvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsOyBcbiAgcGFnZURldGFpbHM6IGFueSA9IFtdO1xuICBwYWdlTnVtYmVyOiBudW1iZXIgPSAxO1xuICByb3dTZXQ6IG51bWJlciA9IDA7XG4gIHJvd1NldENvdW50OiBbbnVtYmVyXSA9IFswXTtcbiAgZWxpZ2libGVGb3JTdWJtaXNzaW9uOnsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSA9IHsgc3RhdHVzOiB0cnVlLCBtZXNzYWdlOiAnJyB9O1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2FwdGNoYVNlcnZpY2U6IFJlY2FwdGNoYVNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XG4gICAgdGhpcy5zdWJtaXNzaW9uID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3N1Ym1pc3Npb24nXVxuICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gdGhpcy5zdWJtaXNzaW9uPy5pZDtcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHRoaXMuc3VibWlzc2lvbj8ucXVlc3Rpb25BbnN3ZXJzXG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbnMgPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/LlsncGFyZW50UXVlc3Rpb25zJ107XG4gICAgdGhpcy5kYXRhU2VydmljZS5zZXRQYXJlbnRRdWVzdGlvbnModGhpcy5wYXJlbnRRdWVzdGlvbnMpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW1vdmVSZWNhcHRjaGFTY3JpcHQoKTtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xuICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnNvbGUubG9nKCdTdG9wcGVkIHJlQ0FQVENIQSB0b2tlbiByZWZyZXNoLicpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5hY2NlcHRlZExhbmd1YWdlID0gY2hhbmdlc1snYWNjZXB0ZWRMYW5ndWFnZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmKCF0aGlzLmVkaXQpXG4gICAgICB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgdGhpcy5nZXRTdWJtaXR0ZWRGb3JtRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG4gICAgICB0aGlzLnN0YXJ0VG9rZW5SZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmdldFJlY2FwdGNoYVRva2VuKCk7XG4gICAgICB0aGlzLnJlY2FwdGNoYVRva2VuID0gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGdldHRpbmcgcmVDQVBUQ0hBIHRva2VuOicsIGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0VG9rZW5SZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IG11bHRpcGxlIGNhbGxzXG5cbiAgICB0aGlzLmlzUmVmcmVzaGluZyA9IHRydWU7XG4gICAgdGhpcy5nZXRUb2tlbigpOyAvLyBJbml0aWFsIHRva2VuIGZldGNoXG5cbiAgICB0aGlzLmludGVydmFsSWQgPXNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTsgXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIHJlQ0FQVENIQSB0b2tlbjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSwgNjAwMDApOyAvLyBSZWZyZXNoIGV2ZXJ5IDEgbWludXRlXG4gIH1cblxuICBwcml2YXRlIGxvYWRGb250KGZvbnRVcmw6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgbGluay5ocmVmID0gZm9udFVybDtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICB9XG5cbiAgZ2V0Rm9ybURhdGEoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZS5nZXRRdWVzdGlvbnModGhpcy5tb2R1bGVOYW1lKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG5cbiAgICAgIC8vc2V0IGZvbnQgZmFtaWx5IGFuZCBmb250IHNpemVcbiAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbi5jdXN0b21pemVGb250KSB7XG4gICAgICAgIHRoaXMuZm9udEZhbWlseSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uLmZvbnRGYW1pbHlcbiAgICAgICAgdGhpcy5mb250U2l6ZSA9IHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uLmZvbnRTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSAncG9wcGlucyc7XG4gICAgICAgIHRoaXMuZm9udFNpemUgPSAxODtcbiAgICAgIH1cbiAgICAgIGlmKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKXtcbiAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbMV07XG4gICAgICB9XG4gICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnJhcnktZm9udC1mYW1pbHknLCB0aGlzLmZvbnRGYW1pbHkpO1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnJhcnktZm9udC1zaXplJywgdGhpcy5mb250U2l6ZSArICdweCcpO1xuICAgICAgY29uc3QgZm9udFVybCA9IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZm9udEZhbWlseSl9YDtcbiAgICAgIHRoaXMubG9hZEZvbnQoZm9udFVybCk7XG5cbiAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSlcbiAgICAgICAgdGhpcy5zdGFydFRva2VuUmVmcmVzaCgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5wYWdlc1tpXSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkRm9ybURhdGEoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFN1Ym1pdHRlZEZvcm0odGhpcy5tb2R1bGVOYW1lLCB0aGlzLnN1Ym1pc3Npb25JZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIGlmKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKXtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93U2V0Q291bnRbMF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlc1tpXSkge1xuICAgICAgICAgICAgICB0aGlzLnBhZ2VzW2ldID0gW107XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0VG9rZW5SZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uOiBQdWJsaWNGb3JtKSB7XG4gICAgdGhpcy5uYW1lID0gcXVlc3Rpb24ubmFtZTtcbiAgICB0aGlzLnBhZ2VzID0gcXVlc3Rpb24ucGFnZXM7XG4gICAgaWYgKHRoaXMucGFyZW50UXVlc3Rpb25zKSB7XG4gICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHF1ZXN0aW9uPy5wYXJlbnRJZDtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbMF07XG4gICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZXNbMV07XG4gICAgdGhpcy5zYXZlQXV0b21hdGljYWxseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVBdXRvbWF0aWNhbGx5O1xuICAgIHRoaXMuc2F2ZUludGVydmFsID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUludGVydmFsO1xuICAgIHRoaXMuY3VzdG9taXplRm9udCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmN1c3RvbWl6ZUZvbnQ7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udEZhbWlseTtcbiAgICB0aGlzLmZvbnRTaXplID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udFNpemU7XG4gICAgdGhpcy5lbmFibGVEYXRhRXhwb3J0ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlRGF0YUV4cG9ydDtcbiAgICB0aGlzLmZpbGVGb3JtYXRzID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZmlsZUZvcm1hdHM7XG4gICAgdGhpcy5lbmFibGVRdWVzdGlvbk51bWJlcmluZyA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVRdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLnF1ZXN0aW9uTnVtYmVyaW5nID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ucXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhS2V5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhS2V5O1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0ID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYVNlY3JldDtcbiAgICB0aGlzLm5hdmlnYXRpb24gPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5uYXZpZ2F0aW9uO1xuICAgIHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ7XG4gICAgdGhpcy5hcGlDYWxsZWQuZW1pdCh0cnVlKVxuICB9XG5cbiAgbmF2aWdhdGVUb05leHRQYWdlKCkgeyBcbiAgICB0aGlzLnNldEN1cnJlbnRQYWdlKHRoaXMuY3VycmVudFBhZ2VJbmRleCsxKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUluZGV4IDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXNwb25zZSA9XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2VEZXRhaWxzICYmIHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCsxXTtcbiAgICAgICAgfSBlbHNlIHsgXG4gICAgICAgICAgdGhpcy50b2FzdHIud2FybmluZyh2YWxpZGF0aW9uUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZVRvUHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggPiAwKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXNwb25zZSA9XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4LTFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcodmFsaWRhdGlvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleC0xXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsaWdpYmxlRm9yU3VibWlzc2lvbiA9IHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBzZXRDdXJyZW50UGFnZShpbmRleDogbnVtYmVyKSB7ICAgIFxuICAgIGlmIChpbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaW5kZXhdIHx8IHRoaXMucGFnZXNbaW5kZXhdLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgIH1cbiAgICAgIHRoaXMucGFnZU51bWJlciA9IGluZGV4ICsgMTtcbiAgICAgIGlmKHRoaXMuZWRpdCl7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0U3VibWl0dGVkRm9ybSh0aGlzLm1vZHVsZU5hbWUsIHRoaXMuc3VibWlzc2lvbklkLCB0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucm93U2V0KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdOyAgIFxuICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PWluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgfSk7XG4gICAgICB9ZWxzZXtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSx0aGlzLnBhZ2VOdW1iZXIsdGhpcy5yb3dTZXQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlc1swXTsgICBcbiAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PWluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzcG9uc2UgPVxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKTtcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcodmFsaWRhdGlvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBsb2FkTW9yZURhdGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCByb3dDb3VudExpbWl0ID0gdGhpcy5yb3dTZXRDb3VudFtpbmRleF07XG4gICAgbGV0IHJvd0NvdW50ID10aGlzLnBhZ2VzW2luZGV4XS5yb3dzLmxlbmd0aC8yMDtcbiAgICByb3dDb3VudCA9IE1hdGguY2VpbChyb3dDb3VudCk7XG4gICAgXG4gICAgaWYocm93Q291bnQrMT5yb3dDb3VudExpbWl0KVxuICAgIHtcbiAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZih0aGlzLmVkaXQpe1xuICAgICAgdGhpcy5mb3JtU2VydmljZS5nZXRTdWJtaXR0ZWRGb3JtKHRoaXMubW9kdWxlTmFtZSwgdGhpcy5zdWJtaXNzaW9uSWQsIGluZGV4KzEsIHJvd0NvdW50KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzID0gWy4uLih0aGlzLnBhZ2VzW2luZGV4XT8ucm93cyA/PyBbXSksIC4uLm5ld1Jvd3NdO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9aW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNle1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgaW5kZXgrMSwgcm93Q291bnQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFsuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLCAuLi5uZXdSb3dzXTtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleD1pbmRleDtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgIH0pO1xuICB9ICBcbiAgICB9XG5cbiAgZ2VuZXJhdGVRdWVzdGlvbkFuc3dlcnMoKSB7XG4gICAgY29uc3QgZXh0cmFjdFF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W10sXG4gICAgICBwYXJlbnRGb3JtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgaXNJblN1YkZvcm06IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgIHN1YkZvcm1JbmRleDogbnVtYmVyID0gMFxuICAgICk6IHsgYW5zd2VyczogQW5zd2VyW107IGZvcm1zOiBGb3JtW10gfSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbnM6IEFuc3dlcltdID0gW107XG4gICAgICBjb25zdCBmb3JtczogRm9ybVtdID0gW107XG5cbiAgICAgIGZvcm1FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBsZXQgYmFzZVF1ZXN0aW9uOiBhbnk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2VsZW1lbnQuZWxlbWVudC5pZH1gXG4gICAgICAgICAgICAgICAgOiBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICBmaWxlOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogZWxlbWVudC5lbGVtZW50LmFuc3dlcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uYmFzZVF1ZXN0aW9uLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogZWxlbWVudC5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICBkZWxldGVGaWxlczogZWxlbWVudC5lbGVtZW50LmRlbGV0ZUZpbGVzIHx8IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKGJhc2VRdWVzdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJykge1xuICAgICAgICAgIGNvbnN0IHN1YmZvcm1JZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgbGV0IHN1YmZvcm1RdWVzdGlvbnM6IGFueSA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm06IEZvcm0gPSB7XG4gICAgICAgICAgICAgIGZvcm1JZDogc3ViZm9ybUlkLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IFtdLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgc3ViZm9ybVF1ZXN0aW9ucyA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgc3ViZm9ybUlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybXMubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgc3ViZm9ybS5zdWJtaXNzaW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb25JZDogc3VibWlzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgYW5zd2Vyczogc3ViZm9ybVF1ZXN0aW9ucy5hbnN3ZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZvcm1zLnB1c2goc3ViZm9ybSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybUFuc3dlcnM6IEFuc3dlcltdID0gW107XG4gICAgICAgICAgICBsZXQgc3ViZm9ybVF1ZXN0aW9uczogYW55ID0geyBhbnN3ZXJzOiBbXSB9O1xuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgc3ViZm9ybVF1ZXN0aW9ucyA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgc3ViZm9ybUlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybXMubGVuZ3RoXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1N1YmZvcm0gPSBmb3Jtcy5maW5kKFxuICAgICAgICAgICAgICAoZm9ybSkgPT4gZm9ybS5mb3JtSWQgPT09IHN1YmZvcm1JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAgIChzdWJtaXNzaW9uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLmFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuaHRtbENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIuZmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBgJHtzdWJmb3JtSWR9XyR7aW5kZXh9XyR7YW5zd2VyLnF1ZXN0aW9uSWR9YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGFuc3dlci5maWxlcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuZmlsZXM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlZFN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICBzdWJtaXNzaW9uczogZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvcm1zLnB1c2goc3ViZm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnKXtcbiAgICAgICAgICAvLyBIYW5kbGUgUXVlc3Rpb24gR3JvdXAgYnkgaXRlcmF0aW5nIHRocm91Z2ggcm93c1xuICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnKXtcblxuICAgICAgICAgIGNvbnN0IG11bHRpZmllbGRzOiBhbnkgPSBbXTtcblxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgICAgICAgbXVsdGlmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnbXVsdGlmaWVsZHMnLCBtdWx0aWZpZWxkcyk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc29sZS5sb2coJzEnLCBlbGVtZW50KTtcblxuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgIGFuc3dlcjogbnVsbCxcbiAgICAgICAgICAgIGZpZWxkczogbXVsdGlmaWVsZHNcblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IGFuc3dlcnM6IHF1ZXN0aW9ucywgZm9ybXM6IGZvcm1zIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHByb2Nlc3NQYWdlcyA9IChcbiAgICAgIHBhZ2VzOiBhbnlbXVxuICAgICk6IHsgYW5zd2VyczogQW5zd2VyW107IGZvcm1zOiBGb3JtW10gfSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbnM6IEFuc3dlcltdID0gW107XG4gICAgICBjb25zdCBmb3JtczogRm9ybVtdID0gW107XG5cbiAgICAgIHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcbiAgICAgICAgcGFnZS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2goLi4ucmVzdWx0LmFuc3dlcnMpO1xuICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc1BhZ2VzKHRoaXMucGFnZXMpO1xuICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzID0ge1xuICAgICAgcGFyZW50SWQ6ICcnLFxuICAgICAgYW5zd2VyczogcmVzdWx0LmFuc3dlcnMsXG4gICAgICBmb3JtczogcmVzdWx0LmZvcm1zLFxuICAgIH07XG4gIH1cbiAgdmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk6IHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGxlYXNlIGVuc3VyZSBhbGwgcGFnZXMgYXJlIGZ1bGx5IHZpc2libGUgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uXCJcbiAgICAgIH07XG4gICAgfVxuICBcbiAgICBjb25zdCBpbmNvbXBsZXRlUGFnZXM6IHN0cmluZ1tdID0gW107XG4gIFxuICAgIHRoaXMucGFnZXMuZm9yRWFjaCgocDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghcCB8fCAhQXJyYXkuaXNBcnJheShwLnJvd3MpIHx8IE1hdGguY2VpbChwLnJvd3MubGVuZ3RoIC8gMjApIDwgdGhpcy5yb3dTZXRDb3VudFtpXSkge1xuICAgICAgICBpbmNvbXBsZXRlUGFnZXMucHVzaCh0aGlzLnBhZ2VEZXRhaWxzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICBcbiAgICBpZiAoaW5jb21wbGV0ZVBhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBTb21lIHNlY3Rpb25zIGFyZSBzdGlsbCBsb2FkaW5nLiBQbGVhc2Ugc2Nyb2xsIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwYWdlcyB0byBlbnN1cmUgYWxsIHF1ZXN0aW9ucyBhcmUgbG9hZGVkOiAke2luY29tcGxldGVQYWdlcy5qb2luKFwiLCBcIil9LmAsXG4gICAgICB9O1xuICAgIH1cbiAgXG4gICAgcmV0dXJuIHsgc3RhdHVzOiB0cnVlLCBtZXNzYWdlOiBcIkdyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uXCIgfTtcbiAgfVxuXG4gIHN1Ym1pdEZvcm0oKSB7XG4gICAgaWYoIXRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCkuc3RhdHVzKXtcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ1BsZWFzZSB3YWl0IGZvciBhbGwgZWxlbWVudHMgdG8gbG9hZCcpOyAgXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGxldCB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0aGlzLnZhbGlkYXRlRm9ybSh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLmdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCk7XG4gICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZS5pc1ZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMucGFyZW50SWQgPSB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZDtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbicsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc3Rpb25BbnN3ZXJzKSk7XG4gICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaCgoZmlsZUl0ZW0pID0+IHtcbiAgICAgICAgICBmaWxlSXRlbS5maWxlLmZvckVhY2goKGZpbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpbGVJdGVtLnF1ZXN0aW9uSWQsIGZpbGUuX2ZpbGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1TZXJ2aWNlQ2FsbCA9IHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZFxuICAgICAgICA/IHRoaXMuZm9ybVNlcnZpY2UudXBkYXRlRm9ybSh0aGlzLm1vZHVsZU5hbWUsIHRoaXMuc3VibWlzc2lvbklkLCBmb3JtRGF0YSwgdGhpcy5yZWNhcHRjaGFUb2tlbilcbiAgICAgICAgOiB0aGlzLmZvcm1TZXJ2aWNlLnN1Ym1pdEZvcm0odGhpcy5tb2R1bGVOYW1lLCBmb3JtRGF0YSwgdGhpcy5yZWNhcHRjaGFUb2tlbik7XG5cbiAgICAgIGZvcm1TZXJ2aWNlQ2FsbC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHRoaXMuZWRpdCA/ICdGb3JtIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5JyA6ICdGb3JtIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KCdzdWNjZXNzJyk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpOyBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcih2YWxpZGF0aW9uUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVGb3JtKGpzb25EYXRhOiBhbnkpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCAwO1xuICB9IHtcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W11cbiAgICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgcGFnZUluZGV4OiBudW1iZXIgfCAwIH0gPT4ge1xuICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gZWxlbWVudC5lbGVtZW50LnJlcXVpcmVkO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXI7XG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uO1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBlbGVtZW50LmVsZW1lbnQuYXR0YWNobWVudHM7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCghYW5zd2VyIHx8IGFuc3dlci5sZW5ndGggPT09IDApICYmIGF0dGFjaG1lbnQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUmVxdWlyZWQgZmlsZSBxdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgfHwgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgdmFsaWRhdGlvbiBpcyBmYWxzZS5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlcXVpcmVkICYmIGFuc3dlciAmJiBPYmplY3Qua2V5cyhhbnN3ZXIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgcmVxdWlyZWQgYnV0IGFuc3dlciBwcm92aWRlZCB3aXRoIHZhbGlkYXRpb24gZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMobG9naWMucm93cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJykge1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZWxlbWVudC5lbGVtZW50LnJvd3M7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZFF1ZXN0aW9uSWRzID0gZGF0YVxuICAgICAgICAgICAgICAuZmxhdE1hcCgocm93OiBhbnkpID0+IHJvdy5ncmlkKSAvLyBFeHRyYWN0aW5nIGdyaWQgaXRlbXMgZnJvbSBlYWNoIG9iamVjdFxuICAgICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lbGVtZW50LnJlcXVpcmVkOyAvLyBFbnN1cmluZyB0aGUgZmlsdGVyIHByb3Blcmx5IGNoZWNrcyAncmVxdWlyZWQnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5lbGVtZW50LmlkKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVpcmVkUXVlc3Rpb25JZHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50Py5lbGVtZW50Py5zdWJtaXNzaW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZVJlcXVpcmVkUXVlc3Rpb25zQW5zd2VyZWQgPSByZXF1aXJlZFF1ZXN0aW9uSWRzLmV2ZXJ5KChyZXF1aXJlZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQW5zd2VyID0gZWxlbWVudD8uZWxlbWVudD8uc3VibWlzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoKHN1YjogYW55KSA9PiBzdWIuYW5zd2VycylcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIucXVlc3Rpb25JZCA9PT0gcmVxdWlyZWRJZCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hpbmdBbnN3ZXIgJiYgbWF0Y2hpbmdBbnN3ZXIuYW5zd2VyLnRyaW0oKSAhPT0gXCJcIjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWFyZVJlcXVpcmVkUXVlc3Rpb25zQW5zd2VyZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6IFwiXCIsIHBhZ2VJbmRleDogMCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkZvcm0gaXMgaW52YWxpZCAtIE5vIHN1Ym1pc3Npb25zIHByb3ZpZGVkIGZvciByZXF1aXJlZCBxdWVzdGlvbnMuXCIsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiBcIlwiLCBwYWdlSW5kZXg6IDAgfTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucm93cykgeyAgXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBlbGVtZW50LmVsZW1lbnQucm93cy5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDsgXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gcmVzdWx0cy5ldmVyeSgocmVzOiBhbnkpID0+IHJlcy5pc1ZhbGlkKTtcbiAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgIC8vIGNvbnN0IHJlc3VsdCA9ICBlbGVtZW50LmVsZW1lbnQucm93cy5mbGF0TWFwKChyb3c6IGFueSkgPT4gXG4gICAgICAgICAgICAgIC8vICAge1xuICAgICAgICAgICAgICAvLyAgICAgdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgICAgICAvLyAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgLy8gfSlcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnJywgcGFnZUluZGV4OiAwIH07XG4gICAgfTtcblxuICAgIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IGpzb25EYXRhLmxlbmd0aDsgcGFnZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBqc29uRGF0YVtwYWdlSW5kZXhdO1xuICAgICAgZm9yIChsZXQgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUGFnZSAke3BhZ2VJbmRleCArIDF9OiAke3Jlc3VsdC5tZXNzYWdlfWAsXG4gICAgICAgICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0Zvcm0gaXMgdmFsaWQuJyxcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhwYWdlOiBhbnkpOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W11cbiAgICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9ID0+IHtcbiAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZm9ybUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IGVsZW1lbnQuZWxlbWVudC5yZXF1aXJlZDtcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBlbGVtZW50LmVsZW1lbnQuYW5zd2VyO1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoIWFuc3dlciB8fCBhbnN3ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFJlcXVpcmVkIGZpbGUgcXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIG5vdCBhbnN3ZXJlZC5gLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICghYW5zd2VyIHx8IE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFJlcXVpcmVkIHF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgYW5zd2VyZWQuYCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnQWxsIHJlcXVpcmVkIHF1ZXN0aW9ucyBhcmUgYW5zd2VyZWQuJyB9O1xuICAgIH07XG5cbiAgICBmb3IgKGxldCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICdBbGwgcmVxdWlyZWQgcXVlc3Rpb25zIGFyZSBhbnN3ZXJlZC4nIH07XG4gIH1cblxuICB1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVN1YkZvcm0odGhpcy5wYWdlcywgZXZlbnQpO1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybSA9IChwYWdlczogYW55W10sIHVwZGF0ZWRTdWJGb3JtOiBhbnkpID0+IHtcbiAgICBwYWdlcy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCA9PT0gdXBkYXRlZFN1YkZvcm0uZm9ybUlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHN1YmZvcm0gd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudCA9IHVwZGF0ZWRTdWJGb3JtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkICE9PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzdWJmb3JtcyBsb2dpYyBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdXBkYXRlIGNoaWxkIGxvZ2ljc1xuICAgICAgICAgICAgLy8gZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goKGxvZ2ljOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMudXBkYXRlU3ViRm9ybShsb2dpYy5yb3dzLCB1cGRhdGVkU3ViRm9ybSk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXJcIj5cbiAgXG4gIFxuICA8ZGl2IGNsYXNzPVwiaGVhZCBjb250YWluZXJcIj5cbiAgICA8bGliLWhlYWRlciBbbmFtZV09XCJuYW1lXCI+PC9saWItaGVhZGVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJvZHkgY29udGFpbmVyXCI+XG4gICAgXG4gICAgPGxpYi1zdWJtaXNzaW9uLWNvbnRhaW5lciBbcGFyZW50UXVlc3Rpb25BbnN3ZXJzXT1cInBhcmVudFF1ZXN0aW9uQW5zd2Vyc1wiXG4gICAgKm5nSWY9XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIj48L2xpYi1zdWJtaXNzaW9uLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8bGliLW5hdmlnYXRpb24tdGFic1xuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdUQUInXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbY3VycmVudFBhZ2VJbmRleF09XCJjdXJyZW50UGFnZUluZGV4XCJcbiAgICAgIChwYWdlQ2hhbmdlZCk9XCJzZXRDdXJyZW50UGFnZSgkZXZlbnQpXCJcbiAgICAgIChzdWJtaXRFbWl0KT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgW2VsaWdpYmxlRm9yU3VibWlzc2lvbl09XCJlbGlnaWJsZUZvclN1Ym1pc3Npb25cIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgPjwvbGliLW5hdmlnYXRpb24tdGFicz5cbiAgICA8bGliLW5leHQtcHJldi1uYXZpZ2F0aW9uXG4gICAgICAqbmdJZj1cIm5hdmlnYXRpb24gPT0gJ05FWFRfQU5EX1BSRVZJT1VTX0JVVFRPTidcIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbcHJldmlvdXNQYWdlXT1cInByZXZpb3VzUGFnZVwiXG4gICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgICAgW25leHRQYWdlXT1cIm5leHRQYWdlXCJcbiAgICAgIChuYXZpZ2F0ZU5leHQpPVwibmF2aWdhdGVUb05leHRQYWdlKClcIlxuICAgICAgKG5hdmlnYXRlUHJldmlvdXMpPVwibmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpXCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgID48L2xpYi1uZXh0LXByZXYtbmF2aWdhdGlvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -4638,22 +4638,24 @@ class SubmitFormComponent {
4638
4638
  });
4639
4639
  }
4640
4640
  else if (element.entityType === 'MULTIFIELD') {
4641
- const multiFieldsId = element.element.id;
4642
- const submissionId = element.element.submissionId;
4643
- let subformQuestions = { answers: [] };
4644
- const subform = {
4645
- formId: multiFieldsId,
4646
- deletedSubmissions: [],
4647
- submissions: [],
4648
- };
4641
+ const multifields = [];
4649
4642
  element.element.rows.forEach((row) => {
4650
- subformQuestions = extractQuestions(row.grid, multiFieldsId, true, forms.length);
4651
- subform.submissions.push({
4652
- submissionId: submissionId,
4653
- answers: subformQuestions.answers,
4643
+ row.grid.forEach((gridItem) => {
4644
+ if (gridItem.entityType === 'QUESTION') {
4645
+ multifields.push({
4646
+ questionId: gridItem.element.id,
4647
+ answer: gridItem.element.answer,
4648
+ });
4649
+ }
4654
4650
  });
4655
4651
  });
4656
- forms.push(subform);
4652
+ console.log('multifields', multifields);
4653
+ console.log('1', element);
4654
+ questions.push({
4655
+ questionId: element.element.id,
4656
+ answer: null,
4657
+ fields: multifields
4658
+ });
4657
4659
  }
4658
4660
  });
4659
4661
  return { answers: questions, forms: forms };