@sachin9822/reports-lib 0.0.209 → 0.0.211

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.
Files changed (38) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +13 -12
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +4 -3
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +1 -1
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +1 -1
  5. package/esm2020/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.mjs +700 -0
  6. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +1 -1
  7. package/esm2020/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.mjs +3 -3
  8. package/esm2020/lib/components/funding-report/funding-report.component.mjs +3 -3
  9. package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +4 -3
  10. package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +3 -3
  11. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +1 -1
  12. package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +311 -0
  13. package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +7 -6
  14. package/esm2020/lib/models/branch-activity-report/branch-activity-send-report.mjs +1 -1
  15. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.mjs +6 -0
  16. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report.mjs +5 -0
  17. package/esm2020/lib/reports-lib.module.mjs +15 -5
  18. package/esm2020/lib/services/report.service.mjs +62 -4
  19. package/esm2020/lib/shared/export-generic.service.mjs +10 -1
  20. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +525 -189
  21. package/esm2020/public-api.mjs +5 -1
  22. package/fesm2015/sachin9822-reports-lib.mjs +1715 -330
  23. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
  24. package/fesm2020/sachin9822-reports-lib.mjs +1721 -329
  25. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
  26. package/lib/assets/images/Search.svg +9 -9
  27. package/lib/assets/svg-loaders/blue-tail-spin.svg +31 -31
  28. package/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.d.ts +78 -0
  29. package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +68 -0
  30. package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +1 -1
  31. package/lib/models/branch-activity-report/branch-activity-send-report.d.ts +4 -0
  32. package/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.d.ts +13 -0
  33. package/lib/models/transaction-monitoring-report/transaction-monitoring-report.d.ts +23 -0
  34. package/lib/reports-lib.module.d.ts +12 -10
  35. package/lib/services/report.service.d.ts +11 -1
  36. package/lib/shared/search-filter/search-filter.component.d.ts +7 -5
  37. package/package.json +1 -1
  38. package/public-api.d.ts +4 -0
@@ -139,6 +139,15 @@ export class GenericExportService {
139
139
  body: rows,
140
140
  startY: currentY,
141
141
  theme: 'grid',
142
+ didParseCell: function (data) {
143
+ // Check if this row contains 'Total'
144
+ const rowValues = data.row.cells;
145
+ const isTotalRow = Object.values(rowValues).some((cell) => cell.raw === 'Total');
146
+ if (isTotalRow) {
147
+ data.cell.styles.fontStyle = 'bold';
148
+ data.cell.styles.fontSize = 10;
149
+ }
150
+ },
142
151
  headStyles: {
143
152
  fillColor: [220, 220, 220],
144
153
  textColor: 0,
@@ -431,4 +440,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
431
440
  type: Injectable,
432
441
  args: [{ providedIn: 'root' }]
433
442
  }], ctorParameters: function () { return []; } });
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvc2hhcmVkL2V4cG9ydC1nZW5lcmljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7O0FBZ0J4QyxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCO1FBSmlCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBR2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNwQixHQUFHLENBQUMsTUFB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QUFPLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7YUFDL0U7WUFDRDtnQkFDSSxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNsQztJQUNMLENBQUM7O2lIQXZnQlEsb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FEUCxNQUFNOzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXhwb3J0LWdlbmVyaWMuc2VydmljZS50c1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRPcHRpb25zIHtcclxuICAgIGN1cnJlbmN5RmllbGRzPzogc3RyaW5nW107XHJcbiAgICBkYXRlRmllbGRzPzogc3RyaW5nW107XHJcbiAgICBkYXRlRmllbGRGb3JtYXRzPzoge1xyXG4gICAgICAgIFtmaWVsZDogc3RyaW5nXTogJ2RkL01NL3l5eXknIHwgJ2RkL01NL3l5eXkgaGg6bW0gYScgfCAnZGQvTU0veXl5eSBISDptbScgfCBzdHJpbmc7XHJcbiAgICB9O1xyXG4gICAgZXhjbHVkZUZpZWxkcz86IHN0cmluZ1tdO1xyXG4gICAgZ3JvdXBCeUtleT86IGJvb2xlYW47XHJcbiAgICBzcGVjaWFsRGVjaW1hbEZpZWxkcz86IHtcclxuICAgICAgICBbZmllbGQ6IHN0cmluZ106IG51bWJlcjtcclxuICAgIH07XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljRXhwb3J0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGxvZ29CYXNlNjQ/OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBkZkZvbnRTaXplID0gMTA7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBkZkxpbmVIZWlnaHQgPSA3O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZGZMZWZ0TWFyZ2luID0gMTU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkSW1hZ2VBc0Jhc2U2NCgnYXNzZXRzL3JlcG9ydHMtbGliL2Fzc2V0cy9pbWFnZXMvWE1Mb2dvLnBuZycpLnRoZW4oYmFzZTY0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvQmFzZTY0ID0gYmFzZTY0O1xyXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdMb2dvIGltYWdlIGZhaWxlZCB0byBsb2FkJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkSW1hZ2VBc0Jhc2U2NChpbWFnZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgICAgICAgICBpbWcuc3JjID0gaW1hZ2VQYXRoO1xyXG4gICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSA2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiBzY2FsZTtcclxuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICogc2NhbGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoc2NhbGUsIHNjYWxlKTtcclxuICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0LicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgaW1hZ2U6ICcgKyBpbWFnZVBhdGgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09IFBERiBFWFBPUlQgPT09PT09PT09PT09PT09PT09PT1cclxuICAgIGFzeW5jIGV4cG9ydFRvUGRmKHsgdGl0bGUsIG1ldGFkYXRhLCBzZWFyY2hDcml0ZXJpYSwgY29sdW1ucywgZGF0YSwgb3B0aW9ucyA9IHt9IH06IHtcclxuICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuICAgICAgICBjb2x1bW5zOiBhbnlbXTtcclxuICAgICAgICBkYXRhOiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIGFueVtdPjtcclxuICAgICAgICBvcHRpb25zPzogRXhwb3J0T3B0aW9ucztcclxuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBkb2MgPSBuZXcganNQREYoeyBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScsIHVuaXQ6ICdtbScsIGZvcm1hdDogWzQwMCwgMjEwXSB9KTtcclxuICAgICAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICAgICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IDE1O1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4uY29sdW1ucy5tYXAoYyA9PiBjLmhlYWRlck5hbWUgfHwgYy5maWVsZCldO1xyXG4gICAgICAgIGxldCByb3dzOiBhbnlbXVtdID0gW107XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmdyb3VwQnlLZXkgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIGl0ZW1zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKFt7IGNvbnRlbnQ6IGdyb3VwLCBjb2xTcGFuOiBoZWFkZXJzLmxlbmd0aCwgc3R5bGVzOiB7IGhhbGlnbjogJ2xlZnQnLCBmb250U3R5bGU6ICdib2xkJyB9IH1dKTtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaCguLi50aGlzLnByZXBhcmVUYWJsZVJvd3MoaXRlbXMsIGNvbHVtbnMsIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvd3MgPSB0aGlzLnByZXBhcmVUYWJsZVJvd3MoZGF0YSBhcyBhbnlbXSwgY29sdW1ucywgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgbG9nbyBhdCB0b3AgbGVmdCBpZiBhdmFpbGFibGVcclxuICAgICAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgICAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmxvZ29CYXNlNjQsICdQTkcnLCAxNSwgMTAsIDM4LjQsIDE3LjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KHRpdGxlLCBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLyAyLCAxOCwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XHJcblxyXG4gICAgICAgIC8vIE1ldGFkYXRhXHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gMzI7XHJcbiAgICAgICAgZG9jLnNldEZvbnRTaXplKHRoaXMucGRmRm9udFNpemUpO1xyXG4gICAgICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiB0aGlzLnBkZkxpbmVIZWlnaHQ7XHJcbiAgICAgICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBsYWJlbFdpdGhDb2xvbiA9IGxhYmVsICsgJyA6JztcclxuICAgICAgICAgICAgZG9jLnRleHQobGFiZWxXaXRoQ29sb24sIHRoaXMucGRmTGVmdE1hcmdpbiwgeSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsV2l0aENvbG9uICsgJyAnKTtcclxuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICAgICAgZG9jLnRleHQodmFsdWUsIHRoaXMucGRmTGVmdE1hcmdpbiArIGxhYmVsV2lkdGgsIHkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjdXJyZW50WSArPSBtZXRhZGF0YS5sZW5ndGggKiB0aGlzLnBkZkxpbmVIZWlnaHQgKyA1O1xyXG5cclxuICAgICAgICAvLyAtLS0gZHJhdyBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dCgnU2VhcmNoIENyaXRlcmlhOi0nLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XHJcbiAgICAgICAgY3VycmVudFkgKz0gODtcclxuXHJcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0UGVyTGluZSA9IDY7XHJcbiAgICAgICAgY29uc3QgbWluR2FwID0gMjsgLy8gZ2FwIGJldHdlZW4ga2V5IGFuZCB2YWx1ZVxyXG4gICAgICAgIGNvbnN0IGJldHdlZW5Db2x1bW5zR2FwID0gMTU7IC8vIGdhcCBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGNvbHVtbnMgKHlvdSBjYW4gdHVuZSB0aGlzKVxyXG4gICAgICAgIGNvbnN0IHBhZ2VDb250ZW50V2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSAyICogbWFyZ2luTGVmdDtcclxuXHJcbiAgICAgICAgLy8gLS0tIGhlbHBlciBmdW5jdGlvbiB0byBtZWFzdXJlIHRvdGFsIHdpZHRoIG9mIGEga2V5LXZhbHVlIHBhaXIgLS0tXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZVBhaXJXaWR0aCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5V2lkdGggKyBtaW5HYXAgKyB2YWx1ZVdpZHRoO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIC0tLSBjYWxjdWxhdGUgbWF4IHdpZHRoIG9mIGxlZnQgY29sdW1uIHBhaXJzIGR5bmFtaWNhbGx5IC0tLVxyXG4gICAgICAgIGxldCBtYXhMZWZ0UGFpcldpZHRoID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IG1lYXN1cmVQYWlyV2lkdGgoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBtYXhMZWZ0UGFpcldpZHRoKSBtYXhMZWZ0UGFpcldpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLSBjb21wdXRlIHdoZXJlIHJpZ2h0IGNvbHVtbiBzaG91bGQgc3RhcnQgLS0tXHJcbiAgICAgICAgY29uc3QgbGVmdENvbHVtblN0YXJ0ID0gbWFyZ2luTGVmdDtcclxuICAgICAgICBjb25zdCByaWdodENvbHVtblN0YXJ0ID0gbGVmdENvbHVtblN0YXJ0ICsgbWF4TGVmdFBhaXJXaWR0aCArIGJldHdlZW5Db2x1bW5zR2FwO1xyXG5cclxuICAgICAgICAvLyAtLS0gcHJpbnQgc2VhcmNoIGNyaXRlcmlhIGR5bmFtaWNhbGx5IC0tLVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgbGV0IG1heExpbmVDb3VudCA9IDE7XHJcblxyXG4gICAgICAgICAgICAvLyBMZWZ0IGNvbHVtblxyXG4gICAgICAgICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgICAgICAgICBkb2MudGV4dChrZXksIGxlZnRDb2x1bW5TdGFydCwgY3VycmVudFkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlWCA9IGxlZnRDb2x1bW5TdGFydCArIGtleVdpZHRoICsgbWluR2FwO1xyXG4gICAgICAgICAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSaWdodCBjb2x1bW5cclxuICAgICAgICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgICAgICAgICBkb2MudGV4dChrZXksIHJpZ2h0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGtleSArICcgJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVggPSByaWdodENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdmFsdWVYLCBjdXJyZW50WSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRZICs9IHJvd0hlaWdodFBlckxpbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUYWJsZSBzdHlsaW5nXHJcbiAgICAgICAgY29uc3QgY29sdW1uU3R5bGVzOiB7IFtrZXk6IG51bWJlcl06IGFueSB9ID0ge307XHJcbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiBjb2x1bW5TdHlsZXNbaV0gPSB7IGNlbGxXaWR0aDogJ2F1dG8nIH0pO1xyXG5cclxuICAgICAgICBkb2MuYXV0b1RhYmxlKHtcclxuICAgICAgICAgICAgaGVhZDogW2hlYWRlcnNdLFxyXG4gICAgICAgICAgICBib2R5OiByb3dzLFxyXG4gICAgICAgICAgICBzdGFydFk6IGN1cnJlbnRZLFxyXG4gICAgICAgICAgICB0aGVtZTogJ2dyaWQnLFxyXG4gICAgICAgICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSxcclxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMCxcclxuICAgICAgICAgICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDksXHJcbiAgICAgICAgICAgICAgICBoYWxpZ246ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJvZHlTdHlsZXM6IHtcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXHJcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IFswLCAwLCAwXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdHlsZXM6IHtcclxuICAgICAgICAgICAgICAgIGNlbGxQYWRkaW5nOiAyLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLFxyXG4gICAgICAgICAgICAgICAgbWluQ2VsbEhlaWdodDogNlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb2x1bW5TdHlsZXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFnZUNvdW50ID0gKGRvYyBhcyBhbnkpLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwYWdlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udChcImhlbHZldGljYVwiLCBcImJvbGRcIik7XHJcbiAgICAgICAgICAgIGRvYy5zZXRQYWdlKGkpO1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XHJcbiAgICAgICAgICAgIGRvYy5zZXRUZXh0Q29sb3IoMTAwKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvb3RlclkgPSBwYWdlSGVpZ2h0IC0gNjtcclxuXHJcbiAgICAgICAgICAgIGRvYy50ZXh0KFxyXG4gICAgICAgICAgICAgICAgYFBhZ2UgJHtpfSBvZiAke3BhZ2VDb3VudH1gLFxyXG4gICAgICAgICAgICAgICAgcGFnZVdpZHRoIC0gMTUsXHJcbiAgICAgICAgICAgICAgICBmb290ZXJZLFxyXG4gICAgICAgICAgICAgICAgeyBhbGlnbjogJ3JpZ2h0JyB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb2Muc2F2ZSh0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcucGRmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PSBFWENFTCBFWFBPUlQgPT09PT09PT09PVxyXG4gICAgYXN5bmMgZXhwb3J0VG9FeGNlbCh7XHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgbWV0YWRhdGEsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWEsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG9wdGlvbnMgPSB7fVxyXG4gICAgfToge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gICAgICAgIGNvbHVtbnM6IGFueVtdO1xyXG4gICAgICAgIGRhdGE6IGFueVtdIHwgUmVjb3JkPHN0cmluZywgYW55W10+O1xyXG4gICAgICAgIG9wdGlvbnM/OiBFeHBvcnRPcHRpb25zO1xyXG4gICAgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgICAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQodGl0bGUpO1xyXG5cclxuICAgICAgICAvLyBQcmUtY2FsY1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckxhYmVscyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmhlYWRlck5hbWUgfHwgY29sLmZpZWxkKV07XHJcbiAgICAgICAgY29uc3QgdG90YWxDb2xzID0gaGVhZGVyTGFiZWxzLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB0aXRsZVN0YXJ0Q29sID0gNDsgLy8gVGl0bGUgaW4gNHRoIENlbGxcclxuICAgICAgICBjb25zdCB0aXRsZUNvbExldHRlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjQgKyB0aXRsZVN0YXJ0Q29sKTtcclxuICAgICAgICBjb25zdCB0aXRsZU1lcmdlRW5kID0gU3RyaW5nLmZyb21DaGFyQ29kZSg2NCArIHRvdGFsQ29scyk7XHJcblxyXG4gICAgICAgIC8vIC0tLSBBZGQgbG9nbyBpbiBBMTpDMywgYW5kIG1ha2UgdGhvc2UgY2VsbHMgdGFsbFxyXG4gICAgICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICAgICAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogJ3BuZycsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xyXG4gICAgICAgICAgICAgICAgdGw6IHsgY29sOiAwLCByb3c6IDAgfSxcclxuICAgICAgICAgICAgICAgIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsbHksIG1ha2Ugcm93cyAxLTMgdGFsbGVyIHRvIGZ1bGx5IGRpc3BsYXkgbG9nb1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KDEpLmhlaWdodCA9IDI0O1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KDIpLmhlaWdodCA9IDIyO1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KDMpLmhlaWdodCA9IDIyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tIFRpdGxlIGluIEQxIG1lcmdlZCB1cCB0byBlbmRcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgJHt0aXRsZUNvbExldHRlcn0xOiR7dGl0bGVNZXJnZUVuZH0xYCk7XHJcbiAgICAgICAgY29uc3QgdGl0bGVDZWxsID0gd29ya3NoZWV0LmdldFJvdygxKS5nZXRDZWxsKHRpdGxlU3RhcnRDb2wpO1xyXG4gICAgICAgIHRpdGxlQ2VsbC52YWx1ZSA9IHRpdGxlO1xyXG4gICAgICAgIHRpdGxlQ2VsbC5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gICAgICAgIHRpdGxlQ2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2xlZnQnIH07XHJcblxyXG4gICAgICAgIC8vIC0tLSBMZWF2ZSBBMjpDMyBlbXB0eSAoZm9yIGltYWdlKSwgcGxhY2UgbWV0YWRhdGEgc3RhcnRpbmcgYXQgcm93IDRcclxuICAgICAgICBsZXQgbWV0YVJvd1N0YXJ0ID0gNDtcclxuICAgICAgICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3cobWV0YVJvd1N0YXJ0ICsgaWR4KTtcclxuICAgICAgICAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgdGV4dDogYCR7bGFiZWx9IDogYCwgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgQSR7cm93Lm51bWJlcn06JHt0aXRsZU1lcmdlRW5kfSR7cm93Lm51bWJlcn1gKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSBtZXRhUm93U3RhcnQgKyBtZXRhZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5nZXRSb3coKytjdXJyZW50Um93KS5oZWlnaHQgPSA2OyAvLyBCbGFuayBmb3IgcmVhZGFiaWxpdHlcclxuICAgICAgICBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGN1cnJlbnRSb3csIDEsIGN1cnJlbnRSb3csIDYpO1xyXG4gICAgICAgIHdvcmtzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpLnZhbHVlID0gJ1NlYXJjaCBDcml0ZXJpYTotJztcclxuICAgICAgICB3b3Jrc2hlZXQuZ2V0Q2VsbChjdXJyZW50Um93LCAxKS5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgY3VycmVudFJvdyArPSAyO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07IC8vIG1heSBiZSB1bmRlZmluZWRcclxuICAgICAgICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG5cclxuICAgICAgICAgICAgLy8gTGVmdCBjZWxsXHJcbiAgICAgICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDEsIHJvdy5udW1iZXIsIDMpO1xyXG4gICAgICAgICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAobGVmdD8uWzBdID8/ICcnKSArICcgJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IGxlZnQ/LlsxXSA/PyAnJyB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJvdy5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgd3JhcFRleHQ6IHRydWUsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgICAgICAgICAgLy8gUmlnaHQgY2VsbCAob25seSBpZiBwcmVzZW50KVxyXG4gICAgICAgICAgICBpZiAocmlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDQsIHJvdy5udW1iZXIsIDYpO1xyXG4gICAgICAgICAgICAgICAgcm93LmdldENlbGwoNCkudmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAocmlnaHQ/LlswXSA/PyAnJykgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGV4dDogcmlnaHQ/LlsxXSA/PyAnJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJvdy5nZXRDZWxsKDQpLmFsaWdubWVudCA9IHsgd3JhcFRleHQ6IHRydWUsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAgICAgLy8gQWRkIGhlYWRlcnMgYW5kIHJlc3QgYXMgYmVmb3JlLi4uXHJcbiAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIGhlYWRlckxhYmVscy5mb3JFYWNoKChoZWFkZXIsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgICAgICAgICAgY2VsbC5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIGNlbGwuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgICAgICAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgICAgICAgICAgY2VsbC5ib3JkZXIgPSB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIERhdGEgcm93cyAoaGFuZGxlIGdyb3VwaW5nIGlmIHByZXNlbnQpXHJcbiAgICAgICAgbGV0IHJvd0lkeCA9IGN1cnJlbnRSb3c7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHcm91cCBoZWFkZXI6IGJvbGQsIG1lcmdlZCByb3dcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUm93ID0gd29ya3NoZWV0LmdldFJvdyhyb3dJZHgrKyk7XHJcbiAgICAgICAgICAgICAgICBncm91cFJvdy5nZXRDZWxsKDEpLnZhbHVlID0gZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICBncm91cFJvdy5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgQSR7Z3JvdXBSb3cubnVtYmVyfToke3RpdGxlTWVyZ2VFbmR9JHtncm91cFJvdy5udW1iZXJ9YCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRGF0YSByb3dzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoaXRlbXMsIGNvbHVtbnMsIG9wdGlvbnMpLmZvckVhY2gocm93RGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVJvdyA9IHdvcmtzaGVldC5nZXRSb3cocm93SWR4KyspO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEuZm9yRWFjaCgoY2VsbFZhbCwgY0lkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gZGF0YVJvdy5nZXRDZWxsKGNJZHggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlVGFibGVSb3dzKGRhdGEgYXMgYW55W10sIGNvbHVtbnMsIG9wdGlvbnMpLmZvckVhY2gocm93RGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gd29ya3NoZWV0LmdldFJvdyhyb3dJZHgrKyk7XHJcbiAgICAgICAgICAgICAgICByb3dEYXRhLmZvckVhY2goKGNlbGxWYWwsIGNJZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gZGF0YVJvdy5nZXRDZWxsKGNJZHggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsLmJvcmRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAtLS0gQXV0byBjb2x1bW4gd2lkdGhzXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxDb2xzOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IG1heExlbmd0aCA9IDEwOyAvLyBtaW5pbXVtIHdpZHRoXHJcbiAgICAgICAgICAgIHdvcmtzaGVldC5lYWNoUm93KHsgaW5jbHVkZUVtcHR5OiB0cnVlIH0sIChyb3cpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpKTtcclxuICAgICAgICAgICAgICAgIGlmIChjZWxsLmlzTWVyZ2VkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBsZXQgY2VsbFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC52YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjZWxsLnZhbHVlID09PSAnb2JqZWN0JyAmJiAncmljaFRleHQnIGluIGNlbGwudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSBjZWxsLnZhbHVlLnJpY2hUZXh0Lm1hcChydCA9PiBydC50ZXh0KS5qb2luKCcnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlID0gY2VsbC52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5tYXgobWF4TGVuZ3RoLCBjZWxsVmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGNhcCBtYXggd2lkdGggKHNvIGJyYW5jaCBuYW1lcyBkb24ndCBleHBsb2RlIHNoZWV0KVxyXG4gICAgICAgICAgICBjb25zdCBhZGp1c3RlZFdpZHRoID0gTWF0aC5taW4obWF4TGVuZ3RoLCA1MCk7XHJcbiAgICAgICAgICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oaSkud2lkdGggPSBhZGp1c3RlZFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tIFNhdmUgd29ya2Jvb2tcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XHJcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhcclxuICAgICAgICAgICAgbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KSxcclxuICAgICAgICAgICAgdGl0bGUucmVwbGFjZSgvXFxzL2csICctJykgKyAnLnhsc3gnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPT09PT09PT09PSBDU1YgRVhQT1JUID09PT09PT09PT1cclxuICAgIGV4cG9ydFRvQ3N2KHtcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYSxcclxuICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgb3B0aW9ucyA9IHt9XHJcbiAgICB9OiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgICBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gICAgICAgIHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgY29sdW1uczogYW55W107XHJcbiAgICAgICAgZGF0YTogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCBhbnlbXT47XHJcbiAgICAgICAgb3B0aW9ucz86IEV4cG9ydE9wdGlvbnM7XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbWV0YWRhdGEubWFwKChbbGJsLCB2YWxdKSA9PiBgJHtsYmx9OiAke3ZhbH1gKTtcclxuICAgICAgICBsZXQgY3N2ID0gW3RpdGxlLCAuLi5tZXRhTGluZXMsICcnXTtcclxuXHJcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgICAgY3N2LnB1c2goJ1NlYXJjaCBDcml0ZXJpYTotJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1heExlZnRMZW5ndGggPSBNYXRoLm1heCguLi5zZWFyY2hDcml0ZXJpYS5tYXAoKFtrLCB2XSkgPT4gKGsgKyAnICcgKyB2KS5sZW5ndGgpKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbGVmdFRleHQgPSBsZWZ0ID8gYCR7bGVmdFswXX0gJHtsZWZ0WzFdfWAucGFkRW5kKG1heExlZnRMZW5ndGggKyA1LCAnICcpIDogJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHJpZ2h0ID8gYCR7cmlnaHRbMF19ICR7cmlnaHRbMV19YCA6ICcnO1xyXG5cclxuICAgICAgICAgICAgY3N2LnB1c2goYFwiJHtsZWZ0VGV4dH0ke3JpZ2h0VGV4dH1cImApOyAvLyB3cmFwIGluIHF1b3RlcyBmb3Igc2luZ2xlIENTViBjZWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjc3YucHVzaCgnJyk7IC8vIGJsYW5rIGxpbmUgYWZ0ZXIgY3JpdGVyaWFcclxuXHJcbiAgICAgICAgLy8gLS0tIEhlYWRlcnMgLS0tXHJcbiAgICAgICAgY3N2LnB1c2goaGVhZGVycy5qb2luKCcsJykpO1xyXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICBjc3YucHVzaChncm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoaXRlbXMsIGNvbHVtbnMsIG9wdGlvbnMpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjc3YucHVzaChyb3cubWFwKHZhbCA9PiBgXCIke3ZhbH1cImApLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVRhYmxlUm93cyhkYXRhIGFzIGFueVtdLCBjb2x1bW5zLCBvcHRpb25zKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjc3YucHVzaChyb3cubWFwKHZhbCA9PiBgXCIke3ZhbH1cImApLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRG93bmxvYWRcclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Nzdi5qb2luKCdcXG4nKV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIHRpdGxlLnJlcGxhY2UoL1xccy9nLCAnLScpICsgJy5jc3YnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PSBIRUxQRVI6IFRBQkxFIFJPVyBQUkVQQVJBVElPTiA9PT09PT09PT09PT09PT09PVxyXG4gICAgcHJpdmF0ZSBwcmVwYXJlVGFibGVSb3dzKGRhdGE6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgb3B0aW9uczogRXhwb3J0T3B0aW9ucyA9IHt9KTogYW55W11bXSB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICBleGNsdWRlRmllbGRzID0gW10sXHJcbiAgICAgICAgICAgIGN1cnJlbmN5RmllbGRzID0gW10sXHJcbiAgICAgICAgICAgIGRhdGVGaWVsZHMgPSBbXSxcclxuICAgICAgICAgICAgZGF0ZUZpZWxkRm9ybWF0cyA9IHt9LFxyXG4gICAgICAgICAgICBzcGVjaWFsRGVjaW1hbEZpZWxkcyA9IHt9XHJcbiAgICAgICAgfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gY29sdW1ucy5maWx0ZXIoYyA9PlxyXG4gICAgICAgICAgICBjLmZpZWxkICYmICFleGNsdWRlRmllbGRzLnNvbWUoZiA9PiBjLmZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZikpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKChyb3csIGlkeCkgPT4gKFtcclxuICAgICAgICAgICAgaWR4ICsgMSxcclxuICAgICAgICAgICAgLi4uZmlsdGVyZWQubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbY29sLmZpZWxkXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgZGF0ZSBmaWVsZHMgd2l0aCBjdXN0b20gZm9ybWF0cyBpZiBzcGVjaWZpZWRcclxuICAgICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgJiYgKGRhdGVGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSB8fCBjb2wuZmllbGQgaW4gZGF0ZUZpZWxkRm9ybWF0cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBkYXRlRmllbGRGb3JtYXRzW2NvbC5maWVsZF0gfHwgJ2RkL01NL3l5eXknO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXREYXRlQnlGb3JtYXQodmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgc3BlY2lhbCBkZWNpbWFsIGZpZWxkcyB3aXRoIHNwZWNpZmljIGRlY2ltYWxzXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZmllbGQgJiYgY29sLmZpZWxkIGluIHNwZWNpYWxEZWNpbWFsRmllbGRzICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IHNwZWNpYWxEZWNpbWFsRmllbGRzW2NvbC5maWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKGRlY2ltYWxzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCByZWd1bGFyIGN1cnJlbmN5IGZpZWxkcyB3aXRoIDMgZGVjaW1hbHNcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5maWVsZCAmJiBjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcm1hdERhdGVCeUZvcm1hdCh2YWw6IGFueSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIEhlbHBlciB0byBwYWQgc2luZ2xlIGRpZ2l0c1xyXG4gICAgICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG5cclxuICAgICAgICAvLyBQYXJzZSBkYXRlIGZvciBcIkREL01NL1lZWVkgaGg6bW0gQU0vUE1cIiBmb3JtYXQgbWFudWFsbHlcclxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0gXFxkezJ9OlxcZHsyfSBbQVBdTSQvLnRlc3QodmFsKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5tYXRjaCgvXihcXGR7Mn0pXFwvKFxcZHsyfSlcXC8oXFxkezR9KSAoXFxkezJ9KTooXFxkezJ9KSAoW0FQXU0pJC8pO1xyXG4gICAgICAgICAgICBpZiAoIXBhcnRzKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIGxldCBbLCBkZCwgbW0sIHl5eXksIGhoLCBtaW4sIGFtcG1dID0gcGFydHM7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IHBhcnNlSW50KGhoLCAxMCk7XHJcbiAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXJzICE9PSAxMikgaG91cnMgKz0gMTI7XHJcbiAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXJzID09PSAxMikgaG91cnMgPSAwO1xyXG4gICAgICAgICAgICB2YWwgPSBuZXcgRGF0ZShwYXJzZUludCh5eXl5LCAxMCksIHBhcnNlSW50KG1tLCAxMCkgLSAxLCBwYXJzZUludChkZCwgMTApLCBob3VycywgcGFyc2VJbnQobWluLCAxMCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbCA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOYU4odmFsLmdldFRpbWUoKSkpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgY29uc3QgZHQgPSB2YWw7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RkL01NL3l5eXkgaGg6bW0gYSc6IHsgLy8gMTEvMDcvMjAyNSAxMDo1NiBQTVxyXG4gICAgICAgICAgICAgICAgbGV0IGhvdXJzMTIgPSBkdC5nZXRIb3VycygpICUgMTIgfHwgMTI7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW1wbSA9IGR0LmdldEhvdXJzKCkgPj0gMTIgPyAnUE0nIDogJ0FNJztcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtwYWQoZHQuZ2V0RGF0ZSgpKX0vJHtwYWQoZHQuZ2V0TW9udGgoKSArIDEpfS8ke2R0LmdldEZ1bGxZZWFyKCl9ICR7cGFkKGhvdXJzMTIpfToke3BhZChkdC5nZXRNaW51dGVzKCkpfSAke2FtcG19YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdkZC9NTS95eXl5IEhIOm1tJzogeyAvLyAyOC8wNy8yMDI1IDEzOjA4XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cGFkKGR0LmdldERhdGUoKSl9LyR7cGFkKGR0LmdldE1vbnRoKCkgKyAxKX0vJHtkdC5nZXRGdWxsWWVhcigpfSAke3BhZChkdC5nZXRIb3VycygpKX06JHtwYWQoZHQuZ2V0TWludXRlcygpKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2RkL01NL3l5eXknOiB7IC8vIDI4LzA3LzIwMjVcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtwYWQoZHQuZ2V0RGF0ZSgpKX0vJHtwYWQoZHQuZ2V0TW9udGgoKSArIDEpfS8ke2R0LmdldEZ1bGxZZWFyKCl9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGR0LnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvc2hhcmVkL2V4cG9ydC1nZW5lcmljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7O0FBZ0J4QyxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCO1FBSmlCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBR2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNwQixHQUFHLENBQUMsTUFB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RUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7YUFDL0g7WUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUMsRUFBRSxtQkFBbUI7Z0JBQzFDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzdIO1lBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQyxFQUFFLGFBQWE7Z0JBQzlCLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzthQUMvRTtZQUNEO2dCQUNJLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzs7aUhBcmhCUSxvQkFBb0I7cUhBQXBCLG9CQUFvQixjQURQLE1BQU07MkZBQ25CLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHBvcnQtZ2VuZXJpYy5zZXJ2aWNlLnRzXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydE9wdGlvbnMge1xyXG4gICAgY3VycmVuY3lGaWVsZHM/OiBzdHJpbmdbXTtcclxuICAgIGRhdGVGaWVsZHM/OiBzdHJpbmdbXTtcclxuICAgIGRhdGVGaWVsZEZvcm1hdHM/OiB7XHJcbiAgICAgICAgW2ZpZWxkOiBzdHJpbmddOiAnZGQvTU0veXl5eScgfCAnZGQvTU0veXl5eSBoaDptbSBhJyB8ICdkZC9NTS95eXl5IEhIOm1tJyB8IHN0cmluZztcclxuICAgIH07XHJcbiAgICBleGNsdWRlRmllbGRzPzogc3RyaW5nW107XHJcbiAgICBncm91cEJ5S2V5PzogYm9vbGVhbjtcclxuICAgIHNwZWNpYWxEZWNpbWFsRmllbGRzPzoge1xyXG4gICAgICAgIFtmaWVsZDogc3RyaW5nXTogbnVtYmVyO1xyXG4gICAgfTtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNFeHBvcnRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgbG9nb0Jhc2U2ND86IHN0cmluZztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGRmRm9udFNpemUgPSAxMDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGRmTGluZUhlaWdodCA9IDc7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBkZkxlZnRNYXJnaW4gPSAxNTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmxvYWRJbWFnZUFzQmFzZTY0KCdhc3NldHMvcmVwb3J0cy1saWIvYXNzZXRzL2ltYWdlcy9YTUxvZ28ucG5nJykudGhlbihiYXNlNjQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ29CYXNlNjQgPSBiYXNlNjQ7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0xvZ28gaW1hZ2UgZmFpbGVkIHRvIGxvYWQnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KGltYWdlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgICAgICAgIGltZy5zcmMgPSBpbWFnZVBhdGg7XHJcbiAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IDY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQgKiBzY2FsZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycsIDEuMCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBpbWFnZTogJyArIGltYWdlUGF0aCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT0gUERGIEVYUE9SVCA9PT09PT09PT09PT09PT09PT09PVxyXG4gICAgYXN5bmMgZXhwb3J0VG9QZGYoeyB0aXRsZSwgbWV0YWRhdGEsIHNlYXJjaENyaXRlcmlhLCBjb2x1bW5zLCBkYXRhLCBvcHRpb25zID0ge30gfToge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gICAgICAgIGNvbHVtbnM6IGFueVtdO1xyXG4gICAgICAgIGRhdGE6IGFueVtdIHwgUmVjb3JkPHN0cmluZywgYW55W10+O1xyXG4gICAgICAgIG9wdGlvbnM/OiBFeHBvcnRPcHRpb25zO1xyXG4gICAgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNDAwLCAyMTBdIH0pO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgICAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodDtcclxuICAgICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gMTU7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgbGV0IHJvd3M6IGFueVtdW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goW3sgY29udGVudDogZ3JvdXAsIGNvbFNwYW46IGhlYWRlcnMubGVuZ3RoLCBzdHlsZXM6IHsgaGFsaWduOiAnbGVmdCcsIGZvbnRTdHlsZTogJ2JvbGQnIH0gfV0pO1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKC4uLnRoaXMucHJlcGFyZVRhYmxlUm93cyhpdGVtcywgY29sdW1ucywgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93cyA9IHRoaXMucHJlcGFyZVRhYmxlUm93cyhkYXRhIGFzIGFueVtdLCBjb2x1bW5zLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBsb2dvIGF0IHRvcCBsZWZ0IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIDE1LCAxMCwgMzguNCwgMTcuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQodGl0bGUsIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAvIDIsIDE4LCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICAgICAgLy8gTWV0YWRhdGFcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAzMjtcclxuICAgICAgICBkb2Muc2V0Rm9udFNpemUodGhpcy5wZGZGb250U2l6ZSk7XHJcbiAgICAgICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIHRoaXMucGRmTGluZUhlaWdodDtcclxuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsV2l0aENvbG9uID0gbGFiZWwgKyAnIDonO1xyXG4gICAgICAgICAgICBkb2MudGV4dChsYWJlbFdpdGhDb2xvbiwgdGhpcy5wZGZMZWZ0TWFyZ2luLCB5KTtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWxXaXRoQ29sb24gKyAnICcpO1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdGhpcy5wZGZMZWZ0TWFyZ2luICsgbGFiZWxXaWR0aCwgeSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIHRoaXMucGRmTGluZUhlaWdodCArIDU7XHJcblxyXG4gICAgICAgIC8vIC0tLSBkcmF3IHNlYXJjaCBjcml0ZXJpYSBoZWFkaW5nIC0tLVxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KCdTZWFyY2ggQ3JpdGVyaWE6LScsIG1hcmdpbkxlZnQsIGN1cnJlbnRZKTtcclxuICAgICAgICBjdXJyZW50WSArPSA4O1xyXG5cclxuICAgICAgICBjb25zdCByb3dIZWlnaHRQZXJMaW5lID0gNjtcclxuICAgICAgICBjb25zdCBtaW5HYXAgPSAyOyAvLyBnYXAgYmV0d2VlbiBrZXkgYW5kIHZhbHVlXHJcbiAgICAgICAgY29uc3QgYmV0d2VlbkNvbHVtbnNHYXAgPSAxNTsgLy8gZ2FwIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgY29sdW1ucyAoeW91IGNhbiB0dW5lIHRoaXMpXHJcbiAgICAgICAgY29uc3QgcGFnZUNvbnRlbnRXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIDIgKiBtYXJnaW5MZWZ0O1xyXG5cclxuICAgICAgICAvLyAtLS0gaGVscGVyIGZ1bmN0aW9uIHRvIG1lYXN1cmUgdG90YWwgd2lkdGggb2YgYSBrZXktdmFsdWUgcGFpciAtLS1cclxuICAgICAgICBjb25zdCBtZWFzdXJlUGFpcldpZHRoID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChrZXkgKyAnICcpO1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlXaWR0aCArIG1pbkdhcCArIHZhbHVlV2lkdGg7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gLS0tIGNhbGN1bGF0ZSBtYXggd2lkdGggb2YgbGVmdCBjb2x1bW4gcGFpcnMgZHluYW1pY2FsbHkgLS0tXHJcbiAgICAgICAgbGV0IG1heExlZnRQYWlyV2lkdGggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gbWVhc3VyZVBhaXJXaWR0aChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IG1heExlZnRQYWlyV2lkdGgpIG1heExlZnRQYWlyV2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tIGNvbXB1dGUgd2hlcmUgcmlnaHQgY29sdW1uIHNob3VsZCBzdGFydCAtLS1cclxuICAgICAgICBjb25zdCBsZWZ0Q29sdW1uU3RhcnQgPSBtYXJnaW5MZWZ0O1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0Q29sdW1uU3RhcnQgPSBsZWZ0Q29sdW1uU3RhcnQgKyBtYXhMZWZ0UGFpcldpZHRoICsgYmV0d2VlbkNvbHVtbnNHYXA7XHJcblxyXG4gICAgICAgIC8vIC0tLSBwcmludCBzZWFyY2ggY3JpdGVyaWEgZHluYW1pY2FsbHkgLS0tXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICAgICAgICBsZXQgbWF4TGluZUNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgICAgIC8vIExlZnQgY29sdW1uXHJcbiAgICAgICAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICAgICAgICAgIGRvYy50ZXh0KGtleSwgbGVmdENvbHVtblN0YXJ0LCBjdXJyZW50WSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChrZXkgKyAnICcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVYID0gbGVmdENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdmFsdWVYLCBjdXJyZW50WSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJpZ2h0IGNvbHVtblxyXG4gICAgICAgICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaSArIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07XHJcbiAgICAgICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICAgICAgICAgIGRvYy50ZXh0KGtleSwgcmlnaHRDb2x1bW5TdGFydCwgY3VycmVudFkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlWCA9IHJpZ2h0Q29sdW1uU3RhcnQgKyBrZXlXaWR0aCArIG1pbkdhcDtcclxuICAgICAgICAgICAgICAgIGRvYy50ZXh0KHZhbHVlLCB2YWx1ZVgsIGN1cnJlbnRZKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VycmVudFkgKz0gcm93SGVpZ2h0UGVyTGluZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRhYmxlIHN0eWxpbmdcclxuICAgICAgICBjb25zdCBjb2x1bW5TdHlsZXM6IHsgW2tleTogbnVtYmVyXTogYW55IH0gPSB7fTtcclxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKF8sIGkpID0+IGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfSk7XHJcblxyXG4gICAgICAgIGRvYy5hdXRvVGFibGUoe1xyXG4gICAgICAgICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgICAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgICAgICAgIHN0YXJ0WTogY3VycmVudFksXHJcbiAgICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgICAgICAgIGRpZFBhcnNlQ2VsbDogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJvdyBjb250YWlucyAnVG90YWwnXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dWYWx1ZXMgPSBkYXRhLnJvdy5jZWxscztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1RvdGFsUm93ID0gT2JqZWN0LnZhbHVlcyhyb3dWYWx1ZXMpLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKGNlbGw6IGFueSkgPT4gY2VsbC5yYXcgPT09ICdUb3RhbCdcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzVG90YWxSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmNlbGwuc3R5bGVzLmZvbnRTdHlsZSA9ICdib2xkJztcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmNlbGwuc3R5bGVzLmZvbnRTaXplID0gMTA7IFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSxcclxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMCxcclxuICAgICAgICAgICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDksXHJcbiAgICAgICAgICAgICAgICBoYWxpZ246ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJvZHlTdHlsZXM6IHtcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXHJcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IFswLCAwLCAwXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdHlsZXM6IHtcclxuICAgICAgICAgICAgICAgIGNlbGxQYWRkaW5nOiAyLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLFxyXG4gICAgICAgICAgICAgICAgbWluQ2VsbEhlaWdodDogNlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb2x1bW5TdHlsZXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFnZUNvdW50ID0gKGRvYyBhcyBhbnkpLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwYWdlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udChcImhlbHZldGljYVwiLCBcImJvbGRcIik7XHJcbiAgICAgICAgICAgIGRvYy5zZXRQYWdlKGkpO1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XHJcbiAgICAgICAgICAgIGRvYy5zZXRUZXh0Q29sb3IoMTAwKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvb3RlclkgPSBwYWdlSGVpZ2h0IC0gNjtcclxuXHJcbiAgICAgICAgICAgIGRvYy50ZXh0KFxyXG4gICAgICAgICAgICAgICAgYFBhZ2UgJHtpfSBvZiAke3BhZ2VDb3VudH1gLFxyXG4gICAgICAgICAgICAgICAgcGFnZVdpZHRoIC0gMTUsXHJcbiAgICAgICAgICAgICAgICBmb290ZXJZLFxyXG4gICAgICAgICAgICAgICAgeyBhbGlnbjogJ3JpZ2h0JyB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb2Muc2F2ZSh0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcucGRmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PSBFWENFTCBFWFBPUlQgPT09PT09PT09PVxyXG4gICAgYXN5bmMgZXhwb3J0VG9FeGNlbCh7XHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgbWV0YWRhdGEsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWEsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG9wdGlvbnMgPSB7fVxyXG4gICAgfToge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gICAgICAgIGNvbHVtbnM6IGFueVtdO1xyXG4gICAgICAgIGRhdGE6IGFueVtdIHwgUmVjb3JkPHN0cmluZywgYW55W10+O1xyXG4gICAgICAgIG9wdGlvbnM/OiBFeHBvcnRPcHRpb25zO1xyXG4gICAgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgICAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQodGl0bGUpO1xyXG5cclxuICAgICAgICAvLyBQcmUtY2FsY1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckxhYmVscyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmhlYWRlck5hbWUgfHwgY29sLmZpZWxkKV07XHJcbiAgICAgICAgY29uc3QgdG90YWxDb2xzID0gaGVhZGVyTGFiZWxzLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB0aXRsZVN0YXJ0Q29sID0gNDsgLy8gVGl0bGUgaW4gNHRoIENlbGxcclxuICAgICAgICBjb25zdCB0aXRsZUNvbExldHRlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjQgKyB0aXRsZVN0YXJ0Q29sKTtcclxuICAgICAgICBjb25zdCB0aXRsZU1lcmdlRW5kID0gU3RyaW5nLmZyb21DaGFyQ29kZSg2NCArIHRvdGFsQ29scyk7XHJcblxyXG4gICAgICAgIC8vIC0tLSBBZGQgbG9nbyBpbiBBMTpDMywgYW5kIG1ha2UgdGhvc2UgY2VsbHMgdGFsbFxyXG4gICAgICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICAgICAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogJ3BuZycsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xyXG4gICAgICAgICAgICAgICAgdGw6IHsgY29sOiAwLCByb3c6IDAgfSxcclxuICAgICAgICAgICAgICAgIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsbHksIG1ha2Ugcm93cyAxLTMgdGFsbGVyIHRvIGZ1bGx5IGRpc3BsYXkgbG9nb1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KDEpLmhlaWdodCA9IDI0O1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KDIpLmhlaWdodCA9IDIyO1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KDMpLmhlaWdodCA9IDIyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tIFRpdGxlIGluIEQxIG1lcmdlZCB1cCB0byBlbmRcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgJHt0aXRsZUNvbExldHRlcn0xOiR7dGl0bGVNZXJnZUVuZH0xYCk7XHJcbiAgICAgICAgY29uc3QgdGl0bGVDZWxsID0gd29ya3NoZWV0LmdldFJvdygxKS5nZXRDZWxsKHRpdGxlU3RhcnRDb2wpO1xyXG4gICAgICAgIHRpdGxlQ2VsbC52YWx1ZSA9IHRpdGxlO1xyXG4gICAgICAgIHRpdGxlQ2VsbC5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gICAgICAgIHRpdGxlQ2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2xlZnQnIH07XHJcblxyXG4gICAgICAgIC8vIC0tLSBMZWF2ZSBBMjpDMyBlbXB0eSAoZm9yIGltYWdlKSwgcGxhY2UgbWV0YWRhdGEgc3RhcnRpbmcgYXQgcm93IDRcclxuICAgICAgICBsZXQgbWV0YVJvd1N0YXJ0ID0gNDtcclxuICAgICAgICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3cobWV0YVJvd1N0YXJ0ICsgaWR4KTtcclxuICAgICAgICAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgdGV4dDogYCR7bGFiZWx9IDogYCwgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgQSR7cm93Lm51bWJlcn06JHt0aXRsZU1lcmdlRW5kfSR7cm93Lm51bWJlcn1gKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSBtZXRhUm93U3RhcnQgKyBtZXRhZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5nZXRSb3coKytjdXJyZW50Um93KS5oZWlnaHQgPSA2OyAvLyBCbGFuayBmb3IgcmVhZGFiaWxpdHlcclxuICAgICAgICBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGN1cnJlbnRSb3csIDEsIGN1cnJlbnRSb3csIDYpO1xyXG4gICAgICAgIHdvcmtzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpLnZhbHVlID0gJ1NlYXJjaCBDcml0ZXJpYTotJztcclxuICAgICAgICB3b3Jrc2hlZXQuZ2V0Q2VsbChjdXJyZW50Um93LCAxKS5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgY3VycmVudFJvdyArPSAyO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07IC8vIG1heSBiZSB1bmRlZmluZWRcclxuICAgICAgICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG5cclxuICAgICAgICAgICAgLy8gTGVmdCBjZWxsXHJcbiAgICAgICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDEsIHJvdy5udW1iZXIsIDMpO1xyXG4gICAgICAgICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAobGVmdD8uWzBdID8/ICcnKSArICcgJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IGxlZnQ/LlsxXSA/PyAnJyB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJvdy5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgd3JhcFRleHQ6IHRydWUsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgICAgICAgICAgLy8gUmlnaHQgY2VsbCAob25seSBpZiBwcmVzZW50KVxyXG4gICAgICAgICAgICBpZiAocmlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDQsIHJvdy5udW1iZXIsIDYpO1xyXG4gICAgICAgICAgICAgICAgcm93LmdldENlbGwoNCkudmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAocmlnaHQ/LlswXSA/PyAnJykgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGV4dDogcmlnaHQ/LlsxXSA/PyAnJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJvdy5nZXRDZWxsKDQpLmFsaWdubWVudCA9IHsgd3JhcFRleHQ6IHRydWUsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAgICAgLy8gQWRkIGhlYWRlcnMgYW5kIHJlc3QgYXMgYmVmb3JlLi4uXHJcbiAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIGhlYWRlckxhYmVscy5mb3JFYWNoKChoZWFkZXIsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgICAgICAgICAgY2VsbC5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIGNlbGwuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgICAgICAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgICAgICAgICAgY2VsbC5ib3JkZXIgPSB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIERhdGEgcm93cyAoaGFuZGxlIGdyb3VwaW5nIGlmIHByZXNlbnQpXHJcbiAgICAgICAgbGV0IHJvd0lkeCA9IGN1cnJlbnRSb3c7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHcm91cCBoZWFkZXI6IGJvbGQsIG1lcmdlZCByb3dcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUm93ID0gd29ya3NoZWV0LmdldFJvdyhyb3dJZHgrKyk7XHJcbiAgICAgICAgICAgICAgICBncm91cFJvdy5nZXRDZWxsKDEpLnZhbHVlID0gZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICBncm91cFJvdy5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgQSR7Z3JvdXBSb3cubnVtYmVyfToke3RpdGxlTWVyZ2VFbmR9JHtncm91cFJvdy5udW1iZXJ9YCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRGF0YSByb3dzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoaXRlbXMsIGNvbHVtbnMsIG9wdGlvbnMpLmZvckVhY2gocm93RGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVJvdyA9IHdvcmtzaGVldC5nZXRSb3cocm93SWR4KyspO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEuZm9yRWFjaCgoY2VsbFZhbCwgY0lkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gZGF0YVJvdy5nZXRDZWxsKGNJZHggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlVGFibGVSb3dzKGRhdGEgYXMgYW55W10sIGNvbHVtbnMsIG9wdGlvbnMpLmZvckVhY2gocm93RGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gd29ya3NoZWV0LmdldFJvdyhyb3dJZHgrKyk7XHJcbiAgICAgICAgICAgICAgICByb3dEYXRhLmZvckVhY2goKGNlbGxWYWwsIGNJZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gZGF0YVJvdy5nZXRDZWxsKGNJZHggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsLmJvcmRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAtLS0gQXV0byBjb2x1bW4gd2lkdGhzXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxDb2xzOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IG1heExlbmd0aCA9IDEwOyAvLyBtaW5pbXVtIHdpZHRoXHJcbiAgICAgICAgICAgIHdvcmtzaGVldC5lYWNoUm93KHsgaW5jbHVkZUVtcHR5OiB0cnVlIH0sIChyb3cpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpKTtcclxuICAgICAgICAgICAgICAgIGlmIChjZWxsLmlzTWVyZ2VkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBsZXQgY2VsbFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC52YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjZWxsLnZhbHVlID09PSAnb2JqZWN0JyAmJiAncmljaFRleHQnIGluIGNlbGwudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSBjZWxsLnZhbHVlLnJpY2hUZXh0Lm1hcChydCA9PiBydC50ZXh0KS5qb2luKCcnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlID0gY2VsbC52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5tYXgobWF4TGVuZ3RoLCBjZWxsVmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGNhcCBtYXggd2lkdGggKHNvIGJyYW5jaCBuYW1lcyBkb24ndCBleHBsb2RlIHNoZWV0KVxyXG4gICAgICAgICAgICBjb25zdCBhZGp1c3RlZFdpZHRoID0gTWF0aC5taW4obWF4TGVuZ3RoLCA1MCk7XHJcbiAgICAgICAgICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oaSkud2lkdGggPSBhZGp1c3RlZFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tIFNhdmUgd29ya2Jvb2tcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XHJcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhcclxuICAgICAgICAgICAgbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KSxcclxuICAgICAgICAgICAgdGl0bGUucmVwbGFjZSgvXFxzL2csICctJykgKyAnLnhsc3gnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPT09PT09PT09PSBDU1YgRVhQT1JUID09PT09PT09PT1cclxuICAgIGV4cG9ydFRvQ3N2KHtcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYSxcclxuICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgb3B0aW9ucyA9IHt9XHJcbiAgICB9OiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgICBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gICAgICAgIHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgY29sdW1uczogYW55W107XHJcbiAgICAgICAgZGF0YTogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCBhbnlbXT47XHJcbiAgICAgICAgb3B0aW9ucz86IEV4cG9ydE9wdGlvbnM7XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbWV0YWRhdGEubWFwKChbbGJsLCB2YWxdKSA9PiBgJHtsYmx9OiAke3ZhbH1gKTtcclxuICAgICAgICBsZXQgY3N2ID0gW3RpdGxlLCAuLi5tZXRhTGluZXMsICcnXTtcclxuXHJcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgICAgY3N2LnB1c2goJ1NlYXJjaCBDcml0ZXJpYTotJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1heExlZnRMZW5ndGggPSBNYXRoLm1heCguLi5zZWFyY2hDcml0ZXJpYS5tYXAoKFtrLCB2XSkgPT4gKGsgKyAnICcgKyB2KS5sZW5ndGgpKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbGVmdFRleHQgPSBsZWZ0ID8gYCR7bGVmdFswXX0gJHtsZWZ0WzFdfWAucGFkRW5kKG1heExlZnRMZW5ndGggKyA1LCAnICcpIDogJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHJpZ2h0ID8gYCR7cmlnaHRbMF19ICR7cmlnaHRbMV19YCA6ICcnO1xyXG5cclxuICAgICAgICAgICAgY3N2LnB1c2goYFwiJHtsZWZ0VGV4dH0ke3JpZ2h0VGV4dH1cImApOyAvLyB3cmFwIGluIHF1b3RlcyBmb3Igc2luZ2xlIENTViBjZWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjc3YucHVzaCgnJyk7IC8vIGJsYW5rIGxpbmUgYWZ0ZXIgY3JpdGVyaWFcclxuXHJcbiAgICAgICAgLy8gLS0tIEhlYWRlcnMgLS0tXHJcbiAgICAgICAgY3N2LnB1c2goaGVhZGVycy5qb2luKCcsJykpO1xyXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICBjc3YucHVzaChncm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoaXRlbXMsIGNvbHVtbnMsIG9wdGlvbnMpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjc3YucHVzaChyb3cubWFwKHZhbCA9PiBgXCIke3ZhbH1cImApLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVRhYmxlUm93cyhkYXRhIGFzIGFueVtdLCBjb2x1bW5zLCBvcHRpb25zKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjc3YucHVzaChyb3cubWFwKHZhbCA9PiBgXCIke3ZhbH1cImApLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRG93bmxvYWRcclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Nzdi5qb2luKCdcXG4nKV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIHRpdGxlLnJlcGxhY2UoL1xccy9nLCAnLScpICsgJy5jc3YnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PSBIRUxQRVI6IFRBQkxFIFJPVyBQUkVQQVJBVElPTiA9PT09PT09PT09PT09PT09PVxyXG4gICAgcHJpdmF0ZSBwcmVwYXJlVGFibGVSb3dzKGRhdGE6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgb3B0aW9uczogRXhwb3J0T3B0aW9ucyA9IHt9KTogYW55W11bXSB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICBleGNsdWRlRmllbGRzID0gW10sXHJcbiAgICAgICAgICAgIGN1cnJlbmN5RmllbGRzID0gW10sXHJcbiAgICAgICAgICAgIGRhdGVGaWVsZHMgPSBbXSxcclxuICAgICAgICAgICAgZGF0ZUZpZWxkRm9ybWF0cyA9IHt9LFxyXG4gICAgICAgICAgICBzcGVjaWFsRGVjaW1hbEZpZWxkcyA9IHt9XHJcbiAgICAgICAgfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gY29sdW1ucy5maWx0ZXIoYyA9PlxyXG4gICAgICAgICAgICBjLmZpZWxkICYmICFleGNsdWRlRmllbGRzLnNvbWUoZiA9PiBjLmZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZikpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKChyb3csIGlkeCkgPT4gKFtcclxuICAgICAgICAgICAgaWR4ICsgMSxcclxuICAgICAgICAgICAgLi4uZmlsdGVyZWQubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbY29sLmZpZWxkXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgZGF0ZSBmaWVsZHMgd2l0aCBjdXN0b20gZm9ybWF0cyBpZiBzcGVjaWZpZWRcclxuICAgICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgJiYgKGRhdGVGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSB8fCBjb2wuZmllbGQgaW4gZGF0ZUZpZWxkRm9ybWF0cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBkYXRlRmllbGRGb3JtYXRzW2NvbC5maWVsZF0gfHwgJ2RkL01NL3l5eXknO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXREYXRlQnlGb3JtYXQodmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgc3BlY2lhbCBkZWNpbWFsIGZpZWxkcyB3aXRoIHNwZWNpZmljIGRlY2ltYWxzXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZmllbGQgJiYgY29sLmZpZWxkIGluIHNwZWNpYWxEZWNpbWFsRmllbGRzICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IHNwZWNpYWxEZWNpbWFsRmllbGRzW2NvbC5maWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKGRlY2ltYWxzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCByZWd1bGFyIGN1cnJlbmN5IGZpZWxkcyB3aXRoIDMgZGVjaW1hbHNcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5maWVsZCAmJiBjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcm1hdERhdGVCeUZvcm1hdCh2YWw6IGFueSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIEhlbHBlciB0byBwYWQgc2luZ2xlIGRpZ2l0c1xyXG4gICAgICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG5cclxuICAgICAgICAvLyBQYXJzZSBkYXRlIGZvciBcIkREL01NL1lZWVkgaGg6bW0gQU0vUE1cIiBmb3JtYXQgbWFudWFsbHlcclxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0gXFxkezJ9OlxcZHsyfSBbQVBdTSQvLnRlc3QodmFsKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5tYXRjaCgvXihcXGR7Mn0pXFwvKFxcZHsyfSlcXC8oXFxkezR9KSAoXFxkezJ9KTooXFxkezJ9KSAoW0FQXU0pJC8pO1xyXG4gICAgICAgICAgICBpZiAoIXBhcnRzKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIGxldCBbLCBkZCwgbW0sIHl5eXksIGhoLCBtaW4sIGFtcG1dID0gcGFydHM7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IHBhcnNlSW50KGhoLCAxMCk7XHJcbiAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXJzICE9PSAxMikgaG91cnMgKz0gMTI7XHJcbiAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXJzID09PSAxMikgaG91cnMgPSAwO1xyXG4gICAgICAgICAgICB2YWwgPSBuZXcgRGF0ZShwYXJzZUludCh5eXl5LCAxMCksIHBhcnNlSW50KG1tLCAxMCkgLSAxLCBwYXJzZUludChkZCwgMTApLCBob3VycywgcGFyc2VJbnQobWluLCAxMCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbCA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOYU4odmFsLmdldFRpbWUoKSkpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgY29uc3QgZHQgPSB2YWw7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RkL01NL3l5eXkgaGg6bW0gYSc6IHsgLy8gMTEvMDcvMjAyNSAxMDo1NiBQTVxyXG4gICAgICAgICAgICAgICAgbGV0IGhvdXJzMTIgPSBkdC5nZXRIb3VycygpICUgMTIgfHwgMTI7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW1wbSA9IGR0LmdldEhvdXJzKCkgPj0gMTIgPyAnUE0nIDogJ0FNJztcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtwYWQoZHQuZ2V0RGF0ZSgpKX0vJHtwYWQoZHQuZ2V0TW9udGgoKSArIDEpfS8ke2R0LmdldEZ1bGxZZWFyKCl9ICR7cGFkKGhvdXJzMTIpfToke3BhZChkdC5nZXRNaW51dGVzKCkpfSAke2FtcG19YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdkZC9NTS95eXl5IEhIOm1tJzogeyAvLyAyOC8wNy8yMDI1IDEzOjA4XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cGFkKGR0LmdldERhdGUoKSl9LyR7cGFkKGR0LmdldE1vbnRoKCkgKyAxKX0vJHtkdC5nZXRGdWxsWWVhcigpfSAke3BhZChkdC5nZXRIb3VycygpKX06JHtwYWQoZHQuZ2V0TWludXRlcygpKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2RkL01NL3l5eXknOiB7IC8vIDI4LzA3LzIwMjVcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtwYWQoZHQuZ2V0RGF0ZSgpKX0vJHtwYWQoZHQuZ2V0TW9udGgoKSArIDEpfS8ke2R0LmdldEZ1bGxZZWFyKCl9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGR0LnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=