@cqa-lib/cqa-ui 1.1.495 → 1.1.497
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.
- package/esm2020/lib/mixed-variable-input/mixed-variable-input.component.mjs +18 -7
- package/esm2020/lib/test-case-details/api-mocking-card/api-mocking-card.component.mjs +129 -0
- package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +66 -5
- package/esm2020/lib/test-case-details/test-case-details.component.mjs +58 -4
- package/esm2020/lib/ui-kit.module.mjs +6 -1
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +264 -11
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +264 -11
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/test-case-details/api-mocking-card/api-mocking-card.component.d.ts +78 -0
- package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +36 -1
- package/lib/test-case-details/test-case-details.component.d.ts +25 -1
- package/lib/ui-kit.module.d.ts +40 -39
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/styles.css +1 -1
|
@@ -475,15 +475,26 @@ export class MixedVariableInputComponent {
|
|
|
475
475
|
this.placeCaretAfter(chip);
|
|
476
476
|
return;
|
|
477
477
|
}
|
|
478
|
-
|
|
478
|
+
let node = range.startContainer;
|
|
479
|
+
let offset = range.startOffset;
|
|
480
|
+
// Caret may sit on the editor element (e.g. right after a pasted text node).
|
|
481
|
+
// Walk into the previous text node so we replace the trailing word instead
|
|
482
|
+
// of just inserting the chip alongside it.
|
|
479
483
|
if (node.nodeType !== Node.TEXT_NODE) {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
484
|
+
const prev = node.childNodes[offset - 1];
|
|
485
|
+
if (prev && prev.nodeType === Node.TEXT_NODE) {
|
|
486
|
+
node = prev;
|
|
487
|
+
offset = (prev.nodeValue || '').length;
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
range.insertNode(chip);
|
|
491
|
+
this.placeCaretAfter(chip);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
483
494
|
}
|
|
484
495
|
const text = node.nodeValue || '';
|
|
485
|
-
const before = text.slice(0,
|
|
486
|
-
const after = text.slice(
|
|
496
|
+
const before = text.slice(0, offset);
|
|
497
|
+
const after = text.slice(offset);
|
|
487
498
|
const wordMatch = before.match(VAR_PATH_TAIL_REGEX);
|
|
488
499
|
let beforeKept = wordMatch ? before.slice(0, before.length - wordMatch[1].length) : before;
|
|
489
500
|
let afterKept = after;
|
|
@@ -578,4 +589,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
578
589
|
type: HostListener,
|
|
579
590
|
args: ['document:selectionchange']
|
|
580
591
|
}] } });
|
|
581
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtdmFyaWFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9taXhlZC12YXJpYWJsZS1pbnB1dC9taXhlZC12YXJpYWJsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21peGVkLXZhcmlhYmxlLWlucHV0L21peGVkLXZhcmlhYmxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBWWpNLE1BQU0sUUFBUSxHQUFHLGlFQUFpRSxDQUFDO0FBQ25GLE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlELE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFDckQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFTL0IsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxHQUFzQixFQUN0QixPQUFnQztRQURoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQXJCakMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcs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S0FBSyxDQUFDLENBQUM7UUFDdEIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7d0hBbmpCVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiw2aUJDMUJ4Qyx1eUNBaUNBOzJGRFBhLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2lJQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFZ0MsU0FBUztzQkFBL0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWlHckMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVE5Qyx5QkFBeUI7c0JBRHhCLFlBQVk7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1peGVkU2VnbWVudCB7XG4gIHR5cGU6ICd0ZXh0JyB8ICd2YXJpYWJsZSc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWl4ZWRWYXJpYWJsZVZhbGlkaXR5IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBWQVJfUEFUSCA9ICdbQS1aYS16X11bQS1aYS16MC05X10qKD86XFxcXC5bQS1aYS16X11bQS1aYS16MC05X10qfFxcXFxbXFxcXGQrXFxcXF0pKic7XG5jb25zdCBWQVJfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ14nICsgVkFSX1BBVEggKyAnJCcpO1xuY29uc3QgVkFSX1RPS0VOX1JFR0VYID0gbmV3IFJlZ0V4cCgnXFxcXCRcXFxceygnICsgVkFSX1BBVEggKyAnKVxcXFx9JywgJ2cnKTtcbmNvbnN0IFZBUl9QQVRIX1RBSUxfUkVHRVggPSBuZXcgUmVnRXhwKCcoJyArIFZBUl9QQVRIICsgJykkJyk7XG5jb25zdCBJTlZBTElEX1ZBUl9NRVNTQUdFID0gJ0ludmFsaWQgdmFyaWFibGUgbmFtZS4nO1xuY29uc3QgQkxVUl9ISURFX0RFTEFZX01TID0gMTUwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbWl4ZWQtdmFyaWFibGUtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWl4ZWQtdmFyaWFibGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBNaXhlZFZhcmlhYmxlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSB2YWx1ZSA9ICcnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdUZXh0IElucHV0JztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHZhbGlkaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNaXhlZFZhcmlhYmxlVmFsaWRpdHk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9yJywgeyBzdGF0aWM6IHRydWUgfSkgZWRpdG9yUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgcGVuZGluZ1dvcmQgPSAnJztcbiAgY2FuQWRkQXNWYXJpYWJsZSA9IGZhbHNlO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc2VsZWN0aW9uUmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VsZWN0aW9uTW9kZSA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkID0gJyc7XG4gIHByaXZhdGUgbGFzdFZhbGlkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge31cblxuICAvLyAtLS0tIExpZmVjeWNsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCFjaGFuZ2VzWyd2YWx1ZSddIHx8ICF0aGlzLmVkaXRvclJlZikgcmV0dXJuO1xuICAgIGNvbnN0IGluY29taW5nID0gY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPz8gJyc7XG4gICAgaWYgKGluY29taW5nID09PSB0aGlzLmxhc3RFbWl0dGVkKSByZXR1cm47XG4gICAgdGhpcy5yZW5kZXIoaW5jb21pbmcpO1xuICAgIHRoaXMudmFsaWRhdGUoaW5jb21pbmcpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLnZhbHVlIHx8ICcnO1xuICAgIHRoaXMucmVuZGVyKGluaXRpYWwpO1xuICAgIHRoaXMudmFsaWRhdGUoaW5pdGlhbCk7XG4gIH1cblxuICAvLyAtLS0tIEVkaXRvciBldmVudCBoYW5kbGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5mbGF0dGVuU3RydWN0dXJlKCk7XG4gICAgdGhpcy5zYW5pdGl6ZUNoaXBzKCk7XG4gICAgdGhpcy5hdXRvQ2hpcGlmeSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgdGhpcy5yZWZyZXNoU3VnZ2VzdGlvbigpO1xuICB9XG5cbiAgb25FZGl0b3JGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTdWdnZXN0aW9uKCk7XG4gIH1cblxuICBvbkVkaXRvckJsdXIoKTogdm9pZCB7XG4gICAgLy8gRGVsYXkgc28gY2xpY2tzIG9uIHN1Z2dlc3Rpb24gYnV0dG9ucyByZWdpc3RlciBiZWZvcmUgd2UgaGlkZSB0aGVtLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hdXRvQ2hpcGlmeSh0cnVlKTtcbiAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICB9LCBCTFVSX0hJREVfREVMQVlfTVMpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHJldHVybjtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgaWYgKHRoaXMuc2hvd1N1Z2dlc3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJlZm9yZUNhcmV0KCk7XG4gICAgICBpZiAobm9kZSAmJiAobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0Py5jb250YWlucygnY3FhLXZhci1jaGlwJykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLm9uSW5wdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKSA/PyAnJztcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICB0aGlzLmluc2VydFBsYWluVGV4dEF0Q2FyZXQodGV4dCk7XG4gICAgdGhpcy5vbklucHV0KCk7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnO1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmluc2VydFBsYWluVGV4dEF0Q2FyZXQodGV4dCk7XG4gICAgfVxuICAgIHRoaXMub25JbnB1dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ3N0YXJ0JywgWyckZXZlbnQnXSlcbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50TW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dTdWdnZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkgcmV0dXJuO1xuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnNlbGVjdGlvbmNoYW5nZScpXG4gIG9uRG9jdW1lbnRTZWxlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgdGhpcy5yZWZyZXNoU3VnZ2VzdGlvbigpO1xuICB9XG5cbiAgLy8gLS0tLSBTdWdnZXN0aW9uIGFjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgYWRkQXNUZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBhZGRBc1ZhcmlhYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vcm1hbGl6ZUNhbmRpZGF0ZSh0aGlzLnBlbmRpbmdXb3JkIHx8ICcnKTtcbiAgICBpZiAoIW5hbWUgfHwgIVZBUl9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAmJiB0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBpZiAodGhpcy5yYW5nZUNyb3NzZXNDaGlwKHRoaXMuc2VsZWN0aW9uUmFuZ2UpKSB7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnNlcnRDaGlwUmVwbGFjaW5nUmFuZ2UobmFtZSwgdGhpcy5zZWxlY3Rpb25SYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zZXJ0Q2hpcFJlcGxhY2luZ0N1cnJlbnRXb3JkKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmhpZGVTdWdnZXN0aW9uKCk7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIC0tLS0gVmFsdWUgZW1pc3Npb24gLyB2YWxpZGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBlbWl0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RyID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICBpZiAoc3RyICE9PSB0aGlzLmxhc3RFbWl0dGVkKSB7XG4gICAgICB0aGlzLmxhc3RFbWl0dGVkID0gc3RyO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHN0cik7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGUoc3RyKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGUoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvciA9IHRoaXMuZmluZFZhbGlkYXRpb25FcnJvcihzdHIpO1xuICAgIGNvbnN0IHZhbGlkID0gZXJyb3IgPT09IG51bGw7XG4gICAgaWYgKHRoaXMubGFzdFZhbGlkID09PSB2YWxpZCAmJiB0aGlzLmVycm9yTWVzc2FnZSA9PT0gZXJyb3IpIHJldHVybjtcbiAgICB0aGlzLmxhc3RWYWxpZCA9IHZhbGlkO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgdGhpcy52YWxpZGl0eUNoYW5nZS5lbWl0KHsgdmFsaWQsIGVycm9yIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVmFsaWRhdGlvbkVycm9yKHN0cjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJyYWNlQm9keSA9IC9cXCRcXHsoW159XSopXFx9L2c7XG4gICAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgYnJhY2VCb2R5Lmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKChtID0gYnJhY2VCb2R5LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBtWzFdO1xuICAgICAgaWYgKGJvZHkgIT09IGJvZHkudHJpbSgpIHx8ICFWQVJfTkFNRV9SRUdFWC50ZXN0KGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBJTlZBTElEX1ZBUl9NRVNTQUdFO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvcGVuQ291bnQgPSAoc3RyLm1hdGNoKC9cXCRcXHsvZykgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBjbG9zZWRDb3VudCA9IChzdHIubWF0Y2goYnJhY2VCb2R5KSB8fCBbXSkubGVuZ3RoO1xuICAgIGlmIChvcGVuQ291bnQgPiBjbG9zZWRDb3VudCkgcmV0dXJuIElOVkFMSURfVkFSX01FU1NBR0U7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0tIFN1Z2dlc3Rpb24gc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIHJlZnJlc2hTdWdnZXN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbEluZm8gPSB0aGlzLmdldFNlbGVjdGVkSW5mbygpO1xuICAgIGlmIChzZWxJbmZvKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVDYW5kaWRhdGUoc2VsSW5mby50ZXh0KTtcbiAgICAgIHRoaXMucGVuZGluZ1dvcmQgPSBub3JtYWxpemVkO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IHNlbEluZm8ucmFuZ2U7XG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gICAgICB0aGlzLmNhbkFkZEFzVmFyaWFibGUgPVxuICAgICAgICAhIW5vcm1hbGl6ZWQgJiYgVkFSX05BTUVfUkVHRVgudGVzdChub3JtYWxpemVkKSAmJiAhdGhpcy5yYW5nZUNyb3NzZXNDaGlwKHNlbEluZm8ucmFuZ2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBudWxsO1xuICAgIGNvbnN0IHdvcmQgPSB0aGlzLmdldEN1cnJlbnRXb3JkKCk7XG4gICAgdGhpcy5wZW5kaW5nV29yZCA9IHdvcmQ7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9ICEhd29yZDtcbiAgICB0aGlzLmNhbkFkZEFzVmFyaWFibGUgPSAhIXdvcmQgJiYgVkFSX05BTUVfUkVHRVgudGVzdCh3b3JkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZVN1Z2dlc3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dTdWdnZXN0aW9uICYmICF0aGlzLnBlbmRpbmdXb3JkKSByZXR1cm47XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1dvcmQgPSAnJztcbiAgICB0aGlzLmNhbkFkZEFzVmFyaWFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ2FuZGlkYXRlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHQgPSB0ZXh0LnRyaW0oKTtcbiAgICBpZiAodC5zdGFydHNXaXRoKCckeycpICYmIHQuZW5kc1dpdGgoJ30nKSkge1xuICAgICAgdCA9IHQuc2xpY2UoMiwgLTEpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuICAvLyAtLS0tIERPTSBzYW5pdGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGZsYXR0ZW5TdHJ1Y3R1cmUoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3cmFwcGVycyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdiwgcCcpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IHN0cmF5SW5saW5lcyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4nKSkuZmlsdGVyKFxuICAgICAgKHMpID0+ICFzLmNsYXNzTGlzdC5jb250YWlucygnY3FhLXZhci1jaGlwJykgJiYgIXMuY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpLFxuICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIFsuLi53cmFwcGVycywgLi4uc3RyYXlJbmxpbmVzXSkge1xuICAgICAgaWYgKGVsLmNsb3Nlc3QoJy5jcWEtdmFyLWNoaXAnKSkgY29udGludWU7XG4gICAgICB3aGlsZSAoZWwuZmlyc3RDaGlsZCkgZWwucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGVsLmZpcnN0Q2hpbGQsIGVsKTtcbiAgICAgIGVsLnJlbW92ZSgpO1xuICAgIH1cbiAgICBjb25zdCBicnMgPSBBcnJheS5mcm9tKGVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCdicicpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgYnIgb2YgYnJzKSB7XG4gICAgICBpZiAoYnIuY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpKSBjb250aW51ZTtcbiAgICAgIGJyLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCBicik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZUNoaXBzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2hpcHMgPSBBcnJheS5mcm9tKGVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY3FhLXZhci1jaGlwJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgZm9yIChjb25zdCBjaGlwIG9mIGNoaXBzKSB7XG4gICAgICBjb25zdCBuYW1lID0gKGNoaXAuZ2V0QXR0cmlidXRlKCdkYXRhLXZhcicpIHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAoIW5hbWUgfHwgIVZBUl9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgY2hpcC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpcC50ZXh0Q29udGVudCB8fCAnJyksIGNoaXApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0cnVjdHVyZUJyb2tlbiA9XG4gICAgICAgIGNoaXAuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSAhPT0gJ2ZhbHNlJyB8fFxuICAgICAgICAhY2hpcC5xdWVyeVNlbGVjdG9yKCcuY3FhLXZhci1jaGlwX19yZW1vdmUnKTtcbiAgICAgIGlmIChzdHJ1Y3R1cmVCcm9rZW4pIHtcbiAgICAgICAgY2hpcC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQodGhpcy5idWlsZENoaXAobmFtZSksIGNoaXApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgc3RyYXkgcmVtb3ZlIGljb25zIGxlZnQgZnJvbSBwYXJ0aWFsIHVuZG8vcmVkbyBzdGF0ZXMuXG4gICAgY29uc3Qgb3JwaGFucyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtdmFyLWNoaXBfX3JlbW92ZScpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgbyBvZiBvcnBoYW5zKSB7XG4gICAgICBpZiAoIW8uY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpKSBvLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0gQ2hpcGlmaWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgYXV0b0NoaXBpZnkoZm9yY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2FyZXRSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0Q2hpcDogTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCB0biBvZiB0aGlzLmNvbGxlY3REZXNjZW5kYW50VGV4dE5vZGVzKGVkaXRvcikpIHtcbiAgICAgIGlmICghdG4ucGFyZW50Tm9kZSkgY29udGludWU7XG4gICAgICBjb25zdCB0ZXh0ID0gdG4ubm9kZVZhbHVlIHx8ICcnO1xuICAgICAgVkFSX1RPS0VOX1JFR0VYLmxhc3RJbmRleCA9IDA7XG4gICAgICBpZiAoIVZBUl9UT0tFTl9SRUdFWC50ZXN0KHRleHQpKSBjb250aW51ZTtcbiAgICAgIFZBUl9UT0tFTl9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBjYXJldE9mZnNldCA9XG4gICAgICAgICFmb3JjZSAmJiBjYXJldFJhbmdlICYmIGNhcmV0UmFuZ2UuY29sbGFwc2VkICYmIGNhcmV0UmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHRuXG4gICAgICAgICAgPyBjYXJldFJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgOiAtMTtcblxuICAgICAgY29uc3QgbWF0Y2hlczogQXJyYXk8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH0+ID0gW107XG4gICAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICAgIHdoaWxlICgobSA9IFZBUl9UT0tFTl9SRUdFWC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IG0uaW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgbVswXS5sZW5ndGg7XG4gICAgICAgIC8vIEtlZXAgdGhlIHRva2VuIGFzIHBsYWluIHRleHQgd2hpbGUgdGhlIGNhcmV0IGlzIHN0cmljdGx5IGluc2lkZS5cbiAgICAgICAgaWYgKGNhcmV0T2Zmc2V0ID4gc3RhcnQgJiYgY2FyZXRPZmZzZXQgPCBlbmQpIGNvbnRpbnVlO1xuICAgICAgICBtYXRjaGVzLnB1c2goeyBzdGFydCwgZW5kLCBuYW1lOiBtWzFdIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFtYXRjaGVzLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBsZXQgY3Vyc29yID0gMDtcbiAgICAgIGZvciAoY29uc3QgbXQgb2YgbWF0Y2hlcykge1xuICAgICAgICBpZiAobXQuc3RhcnQgPiBjdXJzb3IpIHtcbiAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQuc2xpY2UoY3Vyc29yLCBtdC5zdGFydCkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlwID0gdGhpcy5idWlsZENoaXAobXQubmFtZSk7XG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2hpcCk7XG4gICAgICAgIGxhc3RDaGlwID0gY2hpcDtcbiAgICAgICAgY3Vyc29yID0gbXQuZW5kO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnNvciA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShjdXJzb3IpKSk7XG4gICAgICB9XG4gICAgICB0bi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnLCB0bik7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCAmJiBsYXN0Q2hpcCkgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIobGFzdENoaXApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0RGVzY2VuZGFudFRleHROb2Rlcyhyb290OiBFbGVtZW50KTogVGV4dFtdIHtcbiAgICBjb25zdCBvdXQ6IFRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIHtcbiAgICAgIGFjY2VwdE5vZGU6IChub2RlKSA9PiB7XG4gICAgICAgIGxldCBwOiBOb2RlIHwgbnVsbCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgd2hpbGUgKHAgJiYgcCAhPT0gcm9vdCkge1xuICAgICAgICAgIGlmICgocCBhcyBFbGVtZW50KS5jbGFzc0xpc3Q/LmNvbnRhaW5zPy4oJ2NxYS12YXItY2hpcCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwID0gcC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGxldCBuOiBOb2RlIHwgbnVsbDtcbiAgICB3aGlsZSAoKG4gPSB3YWxrZXIubmV4dE5vZGUoKSkpIG91dC5wdXNoKG4gYXMgVGV4dCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8vIC0tLS0gUmVuZGVyIC8gc2VyaWFsaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgcmVuZGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGVkaXRvci5pbm5lckhUTUwgPSAnJztcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgVkFSX1RPS0VOX1JFR0VYLmxhc3RJbmRleCA9IDA7XG4gICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgd2hpbGUgKChtID0gVkFSX1RPS0VOX1JFR0VYLmV4ZWModmFsdWUpKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG0uaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlLnNsaWNlKGxhc3RJbmRleCwgbS5pbmRleCkpKTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkQ2hpcChtWzFdKSk7XG4gICAgICBsYXN0SW5kZXggPSBtLmluZGV4ICsgbVswXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChsYXN0SW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGVkaXRvci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZS5zbGljZShsYXN0SW5kZXgpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGxldCBvdXQgPSAnJztcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpOiB2b2lkID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBvdXQgKz0gKG5vZGUubm9kZVZhbHVlIHx8ICcnKS5yZXBsYWNlKC9cXHUwMGEwL2csICcgJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgcmV0dXJuO1xuICAgICAgY29uc3QgZWwgPSBub2RlIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnY3FhLXZhci1jaGlwJykpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS12YXInKSB8fCAnJztcbiAgICAgICAgaWYgKG5hbWUpIG91dCArPSAnJHsnICsgbmFtZSArICd9JztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsLnRhZ05hbWUgPT09ICdCUicpIHtcbiAgICAgICAgb3V0ICs9ICdcXG4nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc0Jsb2NrID0gZWwudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWwudGFnTmFtZSA9PT0gJ1AnO1xuICAgICAgaWYgKGlzQmxvY2sgJiYgb3V0Lmxlbmd0aCA+IDAgJiYgIW91dC5lbmRzV2l0aCgnXFxuJykpIG91dCArPSAnXFxuJztcbiAgICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKTtcbiAgICB9O1xuICAgIGVkaXRvci5jaGlsZE5vZGVzLmZvckVhY2god2Fsayk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlwKG5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGNoaXAuY2xhc3NOYW1lID0gJ2NxYS12YXItY2hpcCc7XG4gICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpO1xuICAgIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLXZhcicsIG5hbWUpO1xuICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGxhYmVsLmNsYXNzTmFtZSA9ICdjcWEtdmFyLWNoaXBfX2xhYmVsJztcbiAgICBsYWJlbC50ZXh0Q29udGVudCA9ICckeycgKyBuYW1lICsgJ30nO1xuICAgIGNvbnN0IHJlbW92ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICByZW1vdmUuY2xhc3NOYW1lID0gJ2NxYS12YXItY2hpcF9fcmVtb3ZlJztcbiAgICByZW1vdmUudGV4dENvbnRlbnQgPSAnw5cnO1xuICAgIHJlbW92ZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICByZW1vdmUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNoaXAucmVtb3ZlKCk7XG4gICAgICB0aGlzLm9uSW5wdXQoKTtcbiAgICB9KTtcbiAgICBjaGlwLmFwcGVuZENoaWxkKGxhYmVsKTtcbiAgICBjaGlwLmFwcGVuZENoaWxkKHJlbW92ZSk7XG4gICAgcmV0dXJuIGNoaXA7XG4gIH1cblxuICAvLyAtLS0tIFNlbGVjdGlvbiAvIGNhcmV0IGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0aW9uUmFuZ2UoKTogUmFuZ2UgfCBudWxsIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKCF0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEluZm8oKTogeyB0ZXh0OiBzdHJpbmc7IHJhbmdlOiBSYW5nZSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsIHx8IHNlbC5yYW5nZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpIHx8ICFlZGl0b3IuY29udGFpbnMocmFuZ2UuZW5kQ29udGFpbmVyKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdGV4dCA9IHJhbmdlLnRvU3RyaW5nKCk7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB0ZXh0LCByYW5nZTogcmFuZ2UuY2xvbmVSYW5nZSgpIH07XG4gIH1cblxuICBwcml2YXRlIHJhbmdlQ3Jvc3Nlc0NoaXAocmFuZ2U6IFJhbmdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udGVudHMgPSByYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgcmV0dXJuICEhY29udGVudHMucXVlcnlTZWxlY3Rvcj8uKCcuY3FhLXZhci1jaGlwJyk7XG4gIH1cblxuICBwcml2YXRlIGdldE5vZGVCZWZvcmVDYXJldCgpOiBOb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UuY29sbGFwc2VkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gc3RhcnRDb250YWluZXIucHJldmlvdXNTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tzdGFydE9mZnNldCAtIDFdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRXb3JkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UuY29sbGFwc2VkKSByZXR1cm4gJyc7XG4gICAgbGV0IG5vZGU6IE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBsZXQgb2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCBwcmV2ID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgaWYgKCFwcmV2IHx8IHByZXYubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm4gJyc7XG4gICAgICBub2RlID0gcHJldjtcbiAgICAgIG9mZnNldCA9IChwcmV2Lm5vZGVWYWx1ZSB8fCAnJykubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkubm9kZVZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGJyYWNlT3BlbiA9IHRleHQubGFzdEluZGV4T2YoJyR7Jywgb2Zmc2V0IC0gMSk7XG4gICAgaWYgKGJyYWNlT3BlbiAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGNsb3NlSWR4ID0gdGV4dC5pbmRleE9mKCd9JywgYnJhY2VPcGVuICsgMik7XG4gICAgICBjb25zdCB0b2tlbkNsb3NlZEJlZm9yZUNhcmV0ID0gY2xvc2VJZHggIT09IC0xICYmIGNsb3NlSWR4IDwgb2Zmc2V0O1xuICAgICAgaWYgKCF0b2tlbkNsb3NlZEJlZm9yZUNhcmV0KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYnJhY2VPcGVuICsgMjtcbiAgICAgICAgY29uc3QgZW5kID0gY2xvc2VJZHggPT09IC0xID8gdGV4dC5sZW5ndGggOiBjbG9zZUlkeDtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBvZmZzZXQpLm1hdGNoKFZBUl9QQVRIX1RBSUxfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cblxuICAvLyAtLS0tIENoaXAgaW5zZXJ0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGluc2VydENoaXBSZXBsYWNpbmdSYW5nZShuYW1lOiBzdHJpbmcsIHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgIGNvbnN0IGNoaXAgPSB0aGlzLmJ1aWxkQ2hpcChuYW1lKTtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgIHJhbmdlLmluc2VydE5vZGUoY2hpcCk7XG4gICAgdGhpcy5zdHJpcEJyYWNlc0Fyb3VuZChjaGlwKTtcbiAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0Q2hpcFJlcGxhY2luZ0N1cnJlbnRXb3JkKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgIGNvbnN0IGNoaXAgPSB0aGlzLmJ1aWxkQ2hpcChuYW1lKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGNoaXApO1xuICAgICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIoY2hpcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoY2hpcCk7XG4gICAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IG5vZGUubm9kZVZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGJlZm9yZSA9IHRleHQuc2xpY2UoMCwgcmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgIGNvbnN0IGFmdGVyID0gdGV4dC5zbGljZShyYW5nZS5zdGFydE9mZnNldCk7XG4gICAgY29uc3Qgd29yZE1hdGNoID0gYmVmb3JlLm1hdGNoKFZBUl9QQVRIX1RBSUxfUkVHRVgpO1xuICAgIGxldCBiZWZvcmVLZXB0ID0gd29yZE1hdGNoID8gYmVmb3JlLnNsaWNlKDAsIGJlZm9yZS5sZW5ndGggLSB3b3JkTWF0Y2hbMV0ubGVuZ3RoKSA6IGJlZm9yZTtcbiAgICBsZXQgYWZ0ZXJLZXB0ID0gYWZ0ZXI7XG4gICAgaWYgKGJlZm9yZUtlcHQuZW5kc1dpdGgoJyR7JykgJiYgYWZ0ZXJLZXB0LnN0YXJ0c1dpdGgoJ30nKSkge1xuICAgICAgYmVmb3JlS2VwdCA9IGJlZm9yZUtlcHQuc2xpY2UoMCwgLTIpO1xuICAgICAgYWZ0ZXJLZXB0ID0gYWZ0ZXJLZXB0LnNsaWNlKDEpO1xuICAgIH0gZWxzZSBpZiAoYmVmb3JlS2VwdC5lbmRzV2l0aCgnJHsnKSkge1xuICAgICAgYmVmb3JlS2VwdCA9IGJlZm9yZUtlcHQuc2xpY2UoMCwgLTIpO1xuICAgIH1cbiAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGlmIChiZWZvcmVLZXB0KSBmcmFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGJlZm9yZUtlcHQpKTtcbiAgICBmcmFnLmFwcGVuZENoaWxkKGNoaXApO1xuICAgIGlmIChhZnRlcktlcHQpIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYWZ0ZXJLZXB0KSk7XG4gICAgbm9kZS5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQoZnJhZywgbm9kZSk7XG4gICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIoY2hpcCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmlwQnJhY2VzQXJvdW5kKGNoaXA6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldiA9IGNoaXAucHJldmlvdXNTaWJsaW5nO1xuICAgIGNvbnN0IG5leHQgPSBjaGlwLm5leHRTaWJsaW5nO1xuICAgIGlmIChwcmV2ICYmIHByZXYubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCB0ID0gcHJldi5ub2RlVmFsdWUgfHwgJyc7XG4gICAgICBpZiAodC5lbmRzV2l0aCgnJHsnKSkgcHJldi5ub2RlVmFsdWUgPSB0LnNsaWNlKDAsIC0yKTtcbiAgICB9XG4gICAgaWYgKG5leHQgJiYgbmV4dC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnN0IHQgPSBuZXh0Lm5vZGVWYWx1ZSB8fCAnJztcbiAgICAgIGlmICh0LnN0YXJ0c1dpdGgoJ30nKSkgbmV4dC5ub2RlVmFsdWUgPSB0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0UGxhaW5UZXh0QXRDYXJldCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICAgIHRoaXMucGxhY2VDYXJldEF0RW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7XG4gICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIobm9kZSk7XG4gIH1cblxuICBwcml2YXRlIHBsYWNlQ2FyZXRBZnRlcihub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSByZXR1cm47XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobm9kZSk7XG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIHBsYWNlQ2FyZXRBdEVuZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1taXhlZC12YXItd3JhcHBlclwiPlxuICA8ZGl2XG4gICAgI2VkaXRvclxuICAgIGNsYXNzPVwiY3FhLW1peGVkLXZhci1lZGl0b3JcIlxuICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgIFthdHRyLmNvbnRlbnRlZGl0YWJsZV09XCIhZGlzYWJsZWRcIlxuICAgIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJlcnJvck1lc3NhZ2UgPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbY2xhc3MuY3FhLW1peGVkLXZhci1lZGl0b3ItLWludmFsaWRdPVwiZXJyb3JNZXNzYWdlXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dCgpXCJcbiAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgKGZvY3VzKT1cIm9uRWRpdG9yRm9jdXMoKVwiXG4gICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgIChibHVyKT1cIm9uRWRpdG9yQmx1cigpXCI+XG4gIDwvZGl2PlxuICA8cCAqbmdJZj1cImVycm9yTWVzc2FnZVwiIGNsYXNzPVwiY3FhLW1peGVkLXZhci1lcnJvclwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93U3VnZ2VzdGlvblwiXG4gICAgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RcIlxuICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNxYS1taXhlZC12YXItc3VnZ2VzdF9faXRlbVwiIChjbGljayk9XCJhZGRBc1RleHQoKVwiPlxuICAgICAgQWRkIGFzIFRleHQgPHNwYW4gKm5nSWY9XCJwZW5kaW5nV29yZFwiIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19oaW50XCI+XCJ7eyBwZW5kaW5nV29yZCB9fVwiPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJjYW5BZGRBc1ZhcmlhYmxlXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1taXhlZC12YXItc3VnZ2VzdF9faXRlbSBjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RfX2l0ZW0tLXByaW1hcnlcIlxuICAgICAgKGNsaWNrKT1cImFkZEFzVmFyaWFibGUoKVwiPlxuICAgICAgQWRkIGFzIGxvY2FsIHZhcmlhYmxlIDxzcGFuIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19oaW50XCI+JHt7ICd7JyB9fXt7IHBlbmRpbmdXb3JkIH19e3sgJ30nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
592
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtdmFyaWFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9taXhlZC12YXJpYWJsZS1pbnB1dC9taXhlZC12YXJpYWJsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21peGVkLXZhcmlhYmxlLWlucHV0L21peGVkLXZhcmlhYmxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBWWpNLE1BQU0sUUFBUSxHQUFHLGlFQUFpRSxDQUFDO0FBQ25GLE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlELE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFDckQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFTL0IsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxHQUFzQixFQUN0QixPQUFnQztRQURoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQXJCakMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcs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ZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWl4ZWRTZWdtZW50IHtcbiAgdHlwZTogJ3RleHQnIHwgJ3ZhcmlhYmxlJztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaXhlZFZhcmlhYmxlVmFsaWRpdHkge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IFZBUl9QQVRIID0gJ1tBLVphLXpfXVtBLVphLXowLTlfXSooPzpcXFxcLltBLVphLXpfXVtBLVphLXowLTlfXSp8XFxcXFtcXFxcZCtcXFxcXSkqJztcbmNvbnN0IFZBUl9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXicgKyBWQVJfUEFUSCArICckJyk7XG5jb25zdCBWQVJfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKCdcXFxcJFxcXFx7KCcgKyBWQVJfUEFUSCArICcpXFxcXH0nLCAnZycpO1xuY29uc3QgVkFSX1BBVEhfVEFJTF9SRUdFWCA9IG5ldyBSZWdFeHAoJygnICsgVkFSX1BBVEggKyAnKSQnKTtcbmNvbnN0IElOVkFMSURfVkFSX01FU1NBR0UgPSAnSW52YWxpZCB2YXJpYWJsZSBuYW1lLic7XG5jb25zdCBCTFVSX0hJREVfREVMQVlfTVMgPSAxNTA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1taXhlZC12YXJpYWJsZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9taXhlZC12YXJpYWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIE1peGVkVmFyaWFibGVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1RleHQgSW5wdXQnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgdmFsaWRpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1peGVkVmFyaWFibGVWYWxpZGl0eT4oKTtcblxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0b3JSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBzaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICBwZW5kaW5nV29yZCA9ICcnO1xuICBjYW5BZGRBc1ZhcmlhYmxlID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SYW5nZTogUmFuZ2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWQgPSAnJztcbiAgcHJpdmF0ZSBsYXN0VmFsaWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgKSB7fVxuXG4gIC8vIC0tLS0gTGlmZWN5Y2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIWNoYW5nZXNbJ3ZhbHVlJ10gfHwgIXRoaXMuZWRpdG9yUmVmKSByZXR1cm47XG4gICAgY29uc3QgaW5jb21pbmcgPSBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA/PyAnJztcbiAgICBpZiAoaW5jb21pbmcgPT09IHRoaXMubGFzdEVtaXR0ZWQpIHJldHVybjtcbiAgICB0aGlzLnJlbmRlcihpbmNvbWluZyk7XG4gICAgdGhpcy52YWxpZGF0ZShpbmNvbWluZyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbCA9IHRoaXMudmFsdWUgfHwgJyc7XG4gICAgdGhpcy5yZW5kZXIoaW5pdGlhbCk7XG4gICAgdGhpcy52YWxpZGF0ZShpbml0aWFsKTtcbiAgfVxuXG4gIC8vIC0tLS0gRWRpdG9yIGV2ZW50IGhhbmRsZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZsYXR0ZW5TdHJ1Y3R1cmUoKTtcbiAgICB0aGlzLnNhbml0aXplQ2hpcHMoKTtcbiAgICB0aGlzLmF1dG9DaGlwaWZ5KCk7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB0aGlzLnJlZnJlc2hTdWdnZXN0aW9uKCk7XG4gIH1cblxuICBvbkVkaXRvckZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaFN1Z2dlc3Rpb24oKTtcbiAgfVxuXG4gIG9uRWRpdG9yQmx1cigpOiB2b2lkIHtcbiAgICAvLyBEZWxheSBzbyBjbGlja3Mgb24gc3VnZ2VzdGlvbiBidXR0b25zIHJlZ2lzdGVyIGJlZm9yZSB3ZSBoaWRlIHRoZW0uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmF1dG9DaGlwaWZ5KHRydWUpO1xuICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgIH0sIEJMVVJfSElERV9ERUxBWV9NUyk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBpZiAodGhpcy5zaG93U3VnZ2VzdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9uKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQmVmb3JlQ2FyZXQoKTtcbiAgICAgIGlmIChub2RlICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdjcWEtdmFyLWNoaXAnKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAobm9kZSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMub25JbnB1dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIHRoaXMuaW5zZXJ0UGxhaW5UZXh0QXRDYXJldCh0ZXh0KTtcbiAgICB0aGlzLm9uSW5wdXQoKTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5nZXREYXRhKCd0ZXh0L3BsYWluJykgPz8gJyc7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuaW5zZXJ0UGxhaW5UZXh0QXRDYXJldCh0ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5vbklucHV0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnc3RhcnQnLCBbJyRldmVudCddKVxuICBvbkRyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1N1Z2dlc3Rpb24pIHJldHVybjtcbiAgICBpZiAodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSByZXR1cm47XG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2VsZWN0aW9uY2hhbmdlJylcbiAgb25Eb2N1bWVudFNlbGVjdGlvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICB0aGlzLnJlZnJlc2hTdWdnZXN0aW9uKCk7XG4gIH1cblxuICAvLyAtLS0tIFN1Z2dlc3Rpb24gYWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBhZGRBc1RleHQoKTogdm9pZCB7XG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGFkZEFzVmFyaWFibGUoKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubm9ybWFsaXplQ2FuZGlkYXRlKHRoaXMucGVuZGluZ1dvcmQgfHwgJycpO1xuICAgIGlmICghbmFtZSB8fCAhVkFSX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLnJhbmdlQ3Jvc3Nlc0NoaXAodGhpcy5zZWxlY3Rpb25SYW5nZSkpIHtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmluc2VydENoaXBSZXBsYWNpbmdSYW5nZShuYW1lLCB0aGlzLnNlbGVjdGlvblJhbmdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnNlcnRDaGlwUmVwbGFjaW5nQ3VycmVudFdvcmQobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgLy8gLS0tLSBWYWx1ZSBlbWlzc2lvbiAvIHZhbGlkYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdHIgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIGlmIChzdHIgIT09IHRoaXMubGFzdEVtaXR0ZWQpIHtcbiAgICAgIHRoaXMubGFzdEVtaXR0ZWQgPSBzdHI7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoc3RyKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZShzdHIpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZShzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yID0gdGhpcy5maW5kVmFsaWRhdGlvbkVycm9yKHN0cik7XG4gICAgY29uc3QgdmFsaWQgPSBlcnJvciA9PT0gbnVsbDtcbiAgICBpZiAodGhpcy5sYXN0VmFsaWQgPT09IHZhbGlkICYmIHRoaXMuZXJyb3JNZXNzYWdlID09PSBlcnJvcikgcmV0dXJuO1xuICAgIHRoaXMubGFzdFZhbGlkID0gdmFsaWQ7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlLmVtaXQoeyB2YWxpZCwgZXJyb3IgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRWYWxpZGF0aW9uRXJyb3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYnJhY2VCb2R5ID0gL1xcJFxceyhbXn1dKilcXH0vZztcbiAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICBicmFjZUJvZHkubGFzdEluZGV4ID0gMDtcbiAgICB3aGlsZSAoKG0gPSBicmFjZUJvZHkuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYm9keSA9IG1bMV07XG4gICAgICBpZiAoYm9keSAhPT0gYm9keS50cmltKCkgfHwgIVZBUl9OQU1FX1JFR0VYLnRlc3QoYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIElOVkFMSURfVkFSX01FU1NBR0U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Db3VudCA9IChzdHIubWF0Y2goL1xcJFxcey9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IGNsb3NlZENvdW50ID0gKHN0ci5tYXRjaChicmFjZUJvZHkpIHx8IFtdKS5sZW5ndGg7XG4gICAgaWYgKG9wZW5Db3VudCA+IGNsb3NlZENvdW50KSByZXR1cm4gSU5WQUxJRF9WQVJfTUVTU0FHRTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIC0tLS0gU3VnZ2VzdGlvbiBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgcmVmcmVzaFN1Z2dlc3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsSW5mbyA9IHRoaXMuZ2V0U2VsZWN0ZWRJbmZvKCk7XG4gICAgaWYgKHNlbEluZm8pIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZUNhbmRpZGF0ZShzZWxJbmZvLnRleHQpO1xuICAgICAgdGhpcy5wZW5kaW5nV29yZCA9IG5vcm1hbGl6ZWQ7XG4gICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gc2VsSW5mby5yYW5nZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FuQWRkQXNWYXJpYWJsZSA9XG4gICAgICAgICEhbm9ybWFsaXplZCAmJiBWQVJfTkFNRV9SRUdFWC50ZXN0KG5vcm1hbGl6ZWQpICYmICF0aGlzLnJhbmdlQ3Jvc3Nlc0NoaXAoc2VsSW5mby5yYW5nZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgY29uc3Qgd29yZCA9IHRoaXMuZ2V0Q3VycmVudFdvcmQoKTtcbiAgICB0aGlzLnBlbmRpbmdXb3JkID0gd29yZDtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gISF3b3JkO1xuICAgIHRoaXMuY2FuQWRkQXNWYXJpYWJsZSA9ICEhd29yZCAmJiBWQVJfTkFNRV9SRUdFWC50ZXN0KHdvcmQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlU3VnZ2VzdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1N1Z2dlc3Rpb24gJiYgIXRoaXMucGVuZGluZ1dvcmQpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nV29yZCA9ICcnO1xuICAgIHRoaXMuY2FuQWRkQXNWYXJpYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDYW5kaWRhdGUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdCA9IHRleHQudHJpbSgpO1xuICAgIGlmICh0LnN0YXJ0c1dpdGgoJyR7JykgJiYgdC5lbmRzV2l0aCgnfScpKSB7XG4gICAgICB0ID0gdC5zbGljZSgyLCAtMSkudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIC8vIC0tLS0gRE9NIHNhbml0aXphdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgZmxhdHRlblN0cnVjdHVyZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHdyYXBwZXJzID0gQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnZGl2LCBwJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3Qgc3RyYXlJbmxpbmVzID0gQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnc3BhbicpKS5maWx0ZXIoXG4gICAgICAocykgPT4gIXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcWEtdmFyLWNoaXAnKSAmJiAhcy5jbG9zZXN0KCcuY3FhLXZhci1jaGlwJyksXG4gICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgZWwgb2YgWy4uLndyYXBwZXJzLCAuLi5zdHJheUlubGluZXNdKSB7XG4gICAgICBpZiAoZWwuY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpKSBjb250aW51ZTtcbiAgICAgIHdoaWxlIChlbC5maXJzdENoaWxkKSBlbC5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZWwuZmlyc3RDaGlsZCwgZWwpO1xuICAgICAgZWwucmVtb3ZlKCk7XG4gICAgfVxuICAgIGNvbnN0IGJycyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ2JyJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgZm9yIChjb25zdCBiciBvZiBicnMpIHtcbiAgICAgIGlmIChici5jbG9zZXN0KCcuY3FhLXZhci1jaGlwJykpIGNvbnRpbnVlO1xuICAgICAgYnIucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyksIGJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXplQ2hpcHMoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjaGlwcyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtdmFyLWNoaXAnKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBmb3IgKGNvbnN0IGNoaXAgb2YgY2hpcHMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSAoY2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFyJykgfHwgJycpLnRyaW0oKTtcbiAgICAgIGlmICghbmFtZSB8fCAhVkFSX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBjaGlwLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlwLnRleHRDb250ZW50IHx8ICcnKSwgY2hpcCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RydWN0dXJlQnJva2VuID1cbiAgICAgICAgY2hpcC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpICE9PSAnZmFsc2UnIHx8XG4gICAgICAgICFjaGlwLnF1ZXJ5U2VsZWN0b3IoJy5jcWEtdmFyLWNoaXBfX3JlbW92ZScpO1xuICAgICAgaWYgKHN0cnVjdHVyZUJyb2tlbikge1xuICAgICAgICBjaGlwLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZCh0aGlzLmJ1aWxkQ2hpcChuYW1lKSwgY2hpcCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSBzdHJheSByZW1vdmUgaWNvbnMgbGVmdCBmcm9tIHBhcnRpYWwgdW5kby9yZWRvIHN0YXRlcy5cbiAgICBjb25zdCBvcnBoYW5zID0gQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNxYS12YXItY2hpcF9fcmVtb3ZlJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgZm9yIChjb25zdCBvIG9mIG9ycGhhbnMpIHtcbiAgICAgIGlmICghby5jbG9zZXN0KCcuY3FhLXZhci1jaGlwJykpIG8ucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLSBDaGlwaWZpY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBhdXRvQ2hpcGlmeShmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjYXJldFJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGxhc3RDaGlwOiBOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IHRuIG9mIHRoaXMuY29sbGVjdERlc2NlbmRhbnRUZXh0Tm9kZXMoZWRpdG9yKSkge1xuICAgICAgaWYgKCF0bi5wYXJlbnROb2RlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHRleHQgPSB0bi5ub2RlVmFsdWUgfHwgJyc7XG4gICAgICBWQVJfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgICAgIGlmICghVkFSX1RPS0VOX1JFR0VYLnRlc3QodGV4dCkpIGNvbnRpbnVlO1xuICAgICAgVkFSX1RPS0VOX1JFR0VYLmxhc3RJbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID1cbiAgICAgICAgIWZvcmNlICYmIGNhcmV0UmFuZ2UgJiYgY2FyZXRSYW5nZS5jb2xsYXBzZWQgJiYgY2FyZXRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gdG5cbiAgICAgICAgICA/IGNhcmV0UmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICAgICAgICA6IC0xO1xuXG4gICAgICBjb25zdCBtYXRjaGVzOiBBcnJheTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAgIGxldCBtOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICAgICAgd2hpbGUgKChtID0gVkFSX1RPS0VOX1JFR0VYLmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbS5pbmRleDtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBtWzBdLmxlbmd0aDtcbiAgICAgICAgLy8gS2VlcCB0aGUgdG9rZW4gYXMgcGxhaW4gdGV4dCB3aGlsZSB0aGUgY2FyZXQgaXMgc3RyaWN0bHkgaW5zaWRlLlxuICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPiBzdGFydCAmJiBjYXJldE9mZnNldCA8IGVuZCkgY29udGludWU7XG4gICAgICAgIG1hdGNoZXMucHVzaCh7IHN0YXJ0LCBlbmQsIG5hbWU6IG1bMV0gfSk7XG4gICAgICB9XG4gICAgICBpZiAoIW1hdGNoZXMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGxldCBjdXJzb3IgPSAwO1xuICAgICAgZm9yIChjb25zdCBtdCBvZiBtYXRjaGVzKSB7XG4gICAgICAgIGlmIChtdC5zdGFydCA+IGN1cnNvcikge1xuICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShjdXJzb3IsIG10LnN0YXJ0KSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaXAgPSB0aGlzLmJ1aWxkQ2hpcChtdC5uYW1lKTtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjaGlwKTtcbiAgICAgICAgbGFzdENoaXAgPSBjaGlwO1xuICAgICAgICBjdXJzb3IgPSBtdC5lbmQ7XG4gICAgICB9XG4gICAgICBpZiAoY3Vyc29yIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKGN1cnNvcikpKTtcbiAgICAgIH1cbiAgICAgIHRuLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWcsIHRuKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkICYmIGxhc3RDaGlwKSB0aGlzLnBsYWNlQ2FyZXRBZnRlcihsYXN0Q2hpcCk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3REZXNjZW5kYW50VGV4dE5vZGVzKHJvb3Q6IEVsZW1lbnQpOiBUZXh0W10ge1xuICAgIGNvbnN0IG91dDogVGV4dFtdID0gW107XG4gICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyb290LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwge1xuICAgICAgYWNjZXB0Tm9kZTogKG5vZGUpID0+IHtcbiAgICAgICAgbGV0IHA6IE5vZGUgfCBudWxsID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB3aGlsZSAocCAmJiBwICE9PSByb290KSB7XG4gICAgICAgICAgaWYgKChwIGFzIEVsZW1lbnQpLmNsYXNzTGlzdD8uY29udGFpbnM/LignY3FhLXZhci1jaGlwJykpIHtcbiAgICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIHAgPSBwLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbGV0IG46IE5vZGUgfCBudWxsO1xuICAgIHdoaWxlICgobiA9IHdhbGtlci5uZXh0Tm9kZSgpKSkgb3V0LnB1c2gobiBhcyBUZXh0KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLy8gLS0tLSBSZW5kZXIgLyBzZXJpYWxpemUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSByZW5kZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgZWRpdG9yLmlubmVySFRNTCA9ICcnO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBWQVJfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICB3aGlsZSAoKG0gPSBWQVJfVE9LRU5fUkVHRVguZXhlYyh2YWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICBpZiAobS5pbmRleCA+IGxhc3RJbmRleCkge1xuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUuc2xpY2UobGFzdEluZGV4LCBtLmluZGV4KSkpO1xuICAgICAgfVxuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRoaXMuYnVpbGRDaGlwKG1bMV0pKTtcbiAgICAgIGxhc3RJbmRleCA9IG0uaW5kZXggKyBtWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGxhc3RJbmRleCA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlLnNsaWNlKGxhc3RJbmRleCkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgbGV0IG91dCA9ICcnO1xuICAgIGNvbnN0IHdhbGsgPSAobm9kZTogTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIG91dCArPSAobm9kZS5ub2RlVmFsdWUgfHwgJycpLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSByZXR1cm47XG4gICAgICBjb25zdCBlbCA9IG5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcWEtdmFyLWNoaXAnKSkge1xuICAgICAgICBjb25zdCBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXZhcicpIHx8ICcnO1xuICAgICAgICBpZiAobmFtZSkgb3V0ICs9ICckeycgKyBuYW1lICsgJ30nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZWwudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICBvdXQgKz0gJ1xcbic7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQmxvY2sgPSBlbC50YWdOYW1lID09PSAnRElWJyB8fCBlbC50YWdOYW1lID09PSAnUCc7XG4gICAgICBpZiAoaXNCbG9jayAmJiBvdXQubGVuZ3RoID4gMCAmJiAhb3V0LmVuZHNXaXRoKCdcXG4nKSkgb3V0ICs9ICdcXG4nO1xuICAgICAgZWwuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspO1xuICAgIH07XG4gICAgZWRpdG9yLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENoaXAobmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgY2hpcC5jbGFzc05hbWUgPSAnY3FhLXZhci1jaGlwJztcbiAgICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJyk7XG4gICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdmFyJywgbmFtZSk7XG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgbGFiZWwuY2xhc3NOYW1lID0gJ2NxYS12YXItY2hpcF9fbGFiZWwnO1xuICAgIGxhYmVsLnRleHRDb250ZW50ID0gJyR7JyArIG5hbWUgKyAnfSc7XG4gICAgY29uc3QgcmVtb3ZlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHJlbW92ZS5jbGFzc05hbWUgPSAnY3FhLXZhci1jaGlwX19yZW1vdmUnO1xuICAgIHJlbW92ZS50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgcmVtb3ZlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICAgIHJlbW92ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY2hpcC5yZW1vdmUoKTtcbiAgICAgIHRoaXMub25JbnB1dCgpO1xuICAgIH0pO1xuICAgIGNoaXAuYXBwZW5kQ2hpbGQobGFiZWwpO1xuICAgIGNoaXAuYXBwZW5kQ2hpbGQocmVtb3ZlKTtcbiAgICByZXR1cm4gY2hpcDtcbiAgfVxuXG4gIC8vIC0tLS0gU2VsZWN0aW9uIC8gY2FyZXQgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25SYW5nZSgpOiBSYW5nZSB8IG51bGwge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCBzZWwucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoIXRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkSW5mbygpOiB7IHRleHQ6IHN0cmluZzsgcmFuZ2U6IFJhbmdlIH0gfCBudWxsIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikgfHwgIWVkaXRvci5jb250YWlucyhyYW5nZS5lbmRDb250YWluZXIpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0ZXh0ID0gcmFuZ2UudG9TdHJpbmcoKTtcbiAgICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7IHRleHQsIHJhbmdlOiByYW5nZS5jbG9uZVJhbmdlKCkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VDcm9zc2VzQ2hpcChyYW5nZTogUmFuZ2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlLmNsb25lQ29udGVudHMoKTtcbiAgICByZXR1cm4gISFjb250ZW50cy5xdWVyeVNlbGVjdG9yPy4oJy5jcWEtdmFyLWNoaXAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Tm9kZUJlZm9yZUNhcmV0KCk6IE5vZGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS5jb2xsYXBzZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0IH0gPSByYW5nZTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBpZiAoc3RhcnRPZmZzZXQgPiAwKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBzdGFydENvbnRhaW5lci5wcmV2aW91c1NpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0IC0gMV0gfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFdvcmQoKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS5jb2xsYXBzZWQpIHJldHVybiAnJztcbiAgICBsZXQgbm9kZTogTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGxldCBvZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnN0IHByZXYgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBpZiAoIXByZXYgfHwgcHJldi5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHJldHVybiAnJztcbiAgICAgIG5vZGUgPSBwcmV2O1xuICAgICAgb2Zmc2V0ID0gKHByZXYubm9kZVZhbHVlIHx8ICcnKS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSAobm9kZSBhcyBUZXh0KS5ub2RlVmFsdWUgfHwgJyc7XG4gICAgY29uc3QgYnJhY2VPcGVuID0gdGV4dC5sYXN0SW5kZXhPZignJHsnLCBvZmZzZXQgLSAxKTtcbiAgICBpZiAoYnJhY2VPcGVuICE9PSAtMSkge1xuICAgICAgY29uc3QgY2xvc2VJZHggPSB0ZXh0LmluZGV4T2YoJ30nLCBicmFjZU9wZW4gKyAyKTtcbiAgICAgIGNvbnN0IHRva2VuQ2xvc2VkQmVmb3JlQ2FyZXQgPSBjbG9zZUlkeCAhPT0gLTEgJiYgY2xvc2VJZHggPCBvZmZzZXQ7XG4gICAgICBpZiAoIXRva2VuQ2xvc2VkQmVmb3JlQ2FyZXQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBicmFjZU9wZW4gKyAyO1xuICAgICAgICBjb25zdCBlbmQgPSBjbG9zZUlkeCA9PT0gLTEgPyB0ZXh0Lmxlbmd0aCA6IGNsb3NlSWR4O1xuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSB0ZXh0LnNsaWNlKDAsIG9mZnNldCkubWF0Y2goVkFSX1BBVEhfVEFJTF9SRUdFWCk7XG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcbiAgfVxuXG4gIC8vIC0tLS0gQ2hpcCBpbnNlcnRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaW5zZXJ0Q2hpcFJlcGxhY2luZ1JhbmdlKG5hbWU6IHN0cmluZywgcmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgY29uc3QgY2hpcCA9IHRoaXMuYnVpbGRDaGlwKG5hbWUpO1xuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShjaGlwKTtcbiAgICB0aGlzLnN0cmlwQnJhY2VzQXJvdW5kKGNoaXApO1xuICAgIHRoaXMucGxhY2VDYXJldEFmdGVyKGNoaXApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRDaGlwUmVwbGFjaW5nQ3VycmVudFdvcmQobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgY29uc3QgY2hpcCA9IHRoaXMuYnVpbGRDaGlwKG5hbWUpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpcCk7XG4gICAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG5vZGU6IE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBsZXQgb2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgLy8gQ2FyZXQgbWF5IHNpdCBvbiB0aGUgZWRpdG9yIGVsZW1lbnQgKGUuZy4gcmlnaHQgYWZ0ZXIgYSBwYXN0ZWQgdGV4dCBub2RlKS5cbiAgICAvLyBXYWxrIGludG8gdGhlIHByZXZpb3VzIHRleHQgbm9kZSBzbyB3ZSByZXBsYWNlIHRoZSB0cmFpbGluZyB3b3JkIGluc3RlYWRcbiAgICAvLyBvZiBqdXN0IGluc2VydGluZyB0aGUgY2hpcCBhbG9uZ3NpZGUgaXQuXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCBwcmV2ID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgaWYgKHByZXYgJiYgcHJldi5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgbm9kZSA9IHByZXY7XG4gICAgICAgIG9mZnNldCA9IChwcmV2Lm5vZGVWYWx1ZSB8fCAnJykubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShjaGlwKTtcbiAgICAgICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIoY2hpcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IG5vZGUubm9kZVZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGJlZm9yZSA9IHRleHQuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgICBjb25zdCBhZnRlciA9IHRleHQuc2xpY2Uob2Zmc2V0KTtcbiAgICBjb25zdCB3b3JkTWF0Y2ggPSBiZWZvcmUubWF0Y2goVkFSX1BBVEhfVEFJTF9SRUdFWCk7XG4gICAgbGV0IGJlZm9yZUtlcHQgPSB3b3JkTWF0Y2ggPyBiZWZvcmUuc2xpY2UoMCwgYmVmb3JlLmxlbmd0aCAtIHdvcmRNYXRjaFsxXS5sZW5ndGgpIDogYmVmb3JlO1xuICAgIGxldCBhZnRlcktlcHQgPSBhZnRlcjtcbiAgICBpZiAoYmVmb3JlS2VwdC5lbmRzV2l0aCgnJHsnKSAmJiBhZnRlcktlcHQuc3RhcnRzV2l0aCgnfScpKSB7XG4gICAgICBiZWZvcmVLZXB0ID0gYmVmb3JlS2VwdC5zbGljZSgwLCAtMik7XG4gICAgICBhZnRlcktlcHQgPSBhZnRlcktlcHQuc2xpY2UoMSk7XG4gICAgfSBlbHNlIGlmIChiZWZvcmVLZXB0LmVuZHNXaXRoKCckeycpKSB7XG4gICAgICBiZWZvcmVLZXB0ID0gYmVmb3JlS2VwdC5zbGljZSgwLCAtMik7XG4gICAgfVxuICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgaWYgKGJlZm9yZUtlcHQpIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYmVmb3JlS2VwdCkpO1xuICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2hpcCk7XG4gICAgaWYgKGFmdGVyS2VwdCkgZnJhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShhZnRlcktlcHQpKTtcbiAgICBub2RlLnBhcmVudE5vZGUhLnJlcGxhY2VDaGlsZChmcmFnLCBub2RlKTtcbiAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaXBCcmFjZXNBcm91bmQoY2hpcDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2ID0gY2hpcC5wcmV2aW91c1NpYmxpbmc7XG4gICAgY29uc3QgbmV4dCA9IGNoaXAubmV4dFNpYmxpbmc7XG4gICAgaWYgKHByZXYgJiYgcHJldi5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnN0IHQgPSBwcmV2Lm5vZGVWYWx1ZSB8fCAnJztcbiAgICAgIGlmICh0LmVuZHNXaXRoKCckeycpKSBwcmV2Lm5vZGVWYWx1ZSA9IHQuc2xpY2UoMCwgLTIpO1xuICAgIH1cbiAgICBpZiAobmV4dCAmJiBuZXh0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc3QgdCA9IG5leHQubm9kZVZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHQuc3RhcnRzV2l0aCgnfScpKSBuZXh0Lm5vZGVWYWx1ZSA9IHQuc2xpY2UoMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRQbGFpblRleHRBdENhcmV0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICAgICAgdGhpcy5wbGFjZUNhcmV0QXRFbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShub2RlKTtcbiAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGxhY2VDYXJldEFmdGVyKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihub2RlKTtcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGxhY2VDYXJldEF0RW5kKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkgcmV0dXJuO1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLW1peGVkLXZhci13cmFwcGVyXCI+XG4gIDxkaXZcbiAgICAjZWRpdG9yXG4gICAgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLWVkaXRvclwiXG4gICAgcm9sZT1cInRleHRib3hcIlxuICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgW2F0dHIuY29udGVudGVkaXRhYmxlXT1cIiFkaXNhYmxlZFwiXG4gICAgW2F0dHIuZGF0YS1wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yTWVzc2FnZSA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFtjbGFzcy5jcWEtbWl4ZWQtdmFyLWVkaXRvci0taW52YWxpZF09XCJlcnJvck1lc3NhZ2VcIlxuICAgIChpbnB1dCk9XCJvbklucHV0KClcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwib25FZGl0b3JGb2N1cygpXCJcbiAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgKGJsdXIpPVwib25FZGl0b3JCbHVyKClcIj5cbiAgPC9kaXY+XG4gIDxwICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9wPlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dTdWdnZXN0aW9uXCJcbiAgICBjbGFzcz1cImNxYS1taXhlZC12YXItc3VnZ2VzdFwiXG4gICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19pdGVtXCIgKGNsaWNrKT1cImFkZEFzVGV4dCgpXCI+XG4gICAgICBBZGQgYXMgVGV4dCA8c3BhbiAqbmdJZj1cInBlbmRpbmdXb3JkXCIgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RfX2hpbnRcIj5cInt7IHBlbmRpbmdXb3JkIH19XCI8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImNhbkFkZEFzVmFyaWFibGVcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19pdGVtIGNxYS1taXhlZC12YXItc3VnZ2VzdF9faXRlbS0tcHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwiYWRkQXNWYXJpYWJsZSgpXCI+XG4gICAgICBBZGQgYXMgbG9jYWwgdmFyaWFibGUgPHNwYW4gY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RfX2hpbnRcIj4ke3sgJ3snIH19e3sgcGVuZGluZ1dvcmQgfX17eyAnfScgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../custom-toggle/custom-toggle.component";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
/**
|
|
6
|
+
* Dual-mode card summarising the API mocking configuration of a test case.
|
|
7
|
+
*
|
|
8
|
+
* The card surfaces **one boolean choice** — `restoreMock` — as two mutually-exclusive rows
|
|
9
|
+
* labelled "Capture API responses" and "Renew API responses":
|
|
10
|
+
*
|
|
11
|
+
* restoreMock === true → Renew = ON, Capture = OFF
|
|
12
|
+
* restoreMock === false → Renew = OFF, Capture = ON
|
|
13
|
+
*
|
|
14
|
+
* In read-only mode both rows show a value text ("On"/"Off") derived from `restoreMock`.
|
|
15
|
+
* In edit mode both rows render a toggle; interacting with either one flips `restoreMock`
|
|
16
|
+
* and the card emits `restoreMockChange` so the parent can persist the new value.
|
|
17
|
+
*/
|
|
18
|
+
export class ApiMockingCardComponent {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.title = 'API Mocking';
|
|
21
|
+
this.statusLabel = 'Not configured';
|
|
22
|
+
this.captureLabel = 'Capture API responses';
|
|
23
|
+
this.renewLabel = 'Renew API responses';
|
|
24
|
+
/**
|
|
25
|
+
* Single source of truth for the card's dual-toggle state.
|
|
26
|
+
* Defaults to `false` → Capture is ON, Renew is OFF.
|
|
27
|
+
*/
|
|
28
|
+
this.restoreMock = false;
|
|
29
|
+
this.mockedApisCount = 0;
|
|
30
|
+
this.totalApisCount = 0;
|
|
31
|
+
this.progressPercent = 0;
|
|
32
|
+
this.configureButtonLabel = 'Configure';
|
|
33
|
+
this.editing = false;
|
|
34
|
+
/**
|
|
35
|
+
* Controls whether the "Mocked X of Y / progress bar / percent" block is shown.
|
|
36
|
+
* Hidden when the test case has no captured mock summary yet (and always hidden in
|
|
37
|
+
* edit mode regardless of this flag).
|
|
38
|
+
*/
|
|
39
|
+
this.showProgress = false;
|
|
40
|
+
this.configure = new EventEmitter();
|
|
41
|
+
/**
|
|
42
|
+
* Emitted whenever the effective `restoreMock` value changes (either row's toggle was
|
|
43
|
+
* interacted with in edit mode). Parent components should persist this value — e.g. under
|
|
44
|
+
* `testCase.mockApiSettings.restoreMock`.
|
|
45
|
+
*/
|
|
46
|
+
this.restoreMockChange = new EventEmitter();
|
|
47
|
+
}
|
|
48
|
+
// Derived per-row state (template binds these directly so the two rows stay in lock-step).
|
|
49
|
+
get renewEnabled() { return this.restoreMock; }
|
|
50
|
+
get captureEnabled() { return !this.restoreMock; }
|
|
51
|
+
get renewValueText() { return this.restoreMock ? 'On' : 'Off'; }
|
|
52
|
+
get captureValueText() { return this.restoreMock ? 'Off' : 'On'; }
|
|
53
|
+
get computedSummaryText() {
|
|
54
|
+
if (this.summaryText)
|
|
55
|
+
return this.summaryText;
|
|
56
|
+
return `${this.mockedApisCount} of ${this.totalApisCount} APIs set to mock`;
|
|
57
|
+
}
|
|
58
|
+
get computedPercentText() {
|
|
59
|
+
if (this.percentText)
|
|
60
|
+
return this.percentText;
|
|
61
|
+
return `${this.progressPercent}% of calls will use mock responses`;
|
|
62
|
+
}
|
|
63
|
+
get progressWidth() {
|
|
64
|
+
const clamped = Math.max(0, Math.min(100, Number(this.progressPercent) || 0));
|
|
65
|
+
return `${clamped}%`;
|
|
66
|
+
}
|
|
67
|
+
onConfigureClick() {
|
|
68
|
+
this.configure.emit();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* User interacted with the "Renew API responses" toggle in edit mode.
|
|
72
|
+
* Renew ON → restoreMock = true (Capture OFF).
|
|
73
|
+
* Renew OFF → restoreMock = false (Capture ON — mutual exclusivity).
|
|
74
|
+
*/
|
|
75
|
+
onRenewToggle(value) {
|
|
76
|
+
this.setRestoreMock(value);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* User interacted with the "Capture API responses" toggle in edit mode.
|
|
80
|
+
* Capture ON → restoreMock = false (Renew OFF).
|
|
81
|
+
* Capture OFF → restoreMock = true (Renew ON — mutual exclusivity).
|
|
82
|
+
*/
|
|
83
|
+
onCaptureToggle(value) {
|
|
84
|
+
this.setRestoreMock(!value);
|
|
85
|
+
}
|
|
86
|
+
setRestoreMock(next) {
|
|
87
|
+
if (this.restoreMock === next)
|
|
88
|
+
return;
|
|
89
|
+
this.restoreMock = next;
|
|
90
|
+
this.restoreMockChange.emit(next);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
ApiMockingCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ApiMockingCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
94
|
+
ApiMockingCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ApiMockingCardComponent, selector: "cqa-api-mocking-card", inputs: { title: "title", statusLabel: "statusLabel", captureLabel: "captureLabel", renewLabel: "renewLabel", restoreMock: "restoreMock", mockedApisCount: "mockedApisCount", totalApisCount: "totalApisCount", progressPercent: "progressPercent", summaryText: "summaryText", percentText: "percentText", configureButtonLabel: "configureButtonLabel", editing: "editing", showProgress: "showProgress" }, outputs: { configure: "configure", restoreMockChange: "restoreMockChange" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-amc-card\">\n <div class=\"cqa-amc-header\">\n <span class=\"cqa-amc-title\">{{ title }}</span>\n <span class=\"cqa-amc-status\" *ngIf=\"statusLabel\">{{ statusLabel }}</span>\n </div>\n\n <!-- Read-only rows -->\n <ng-container *ngIf=\"!editing\">\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n </div>\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n </div>\n </ng-container>\n\n <!-- Edit rows: toggles -->\n <ng-container *ngIf=\"editing\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"captureEnabled\"\n [ariaLabel]=\"captureLabel\"\n (checkedChange)=\"onCaptureToggle($event)\">\n </cqa-custom-toggle>\n </div>\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"renewEnabled\"\n [ariaLabel]=\"renewLabel\"\n (checkedChange)=\"onRenewToggle($event)\">\n </cqa-custom-toggle>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showProgress && !editing\">\n <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n <div class=\"cqa-amc-progress-track\">\n <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n </div>\n <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n </ng-container>\n\n <button\n *ngIf=\"!editing\"\n type=\"button\"\n class=\"cqa-amc-configure-btn\"\n (click)=\"onConfigureClick()\">\n {{ configureButtonLabel }}\n </button>\n</div>\n", components: [{ type: i1.CustomToggleComponent, selector: "cqa-custom-toggle", inputs: ["checked", "disabled", "ariaLabel"], outputs: ["checkedChange", "change"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ApiMockingCardComponent, decorators: [{
|
|
96
|
+
type: Component,
|
|
97
|
+
args: [{ selector: 'cqa-api-mocking-card', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-amc-card\">\n <div class=\"cqa-amc-header\">\n <span class=\"cqa-amc-title\">{{ title }}</span>\n <span class=\"cqa-amc-status\" *ngIf=\"statusLabel\">{{ statusLabel }}</span>\n </div>\n\n <!-- Read-only rows -->\n <ng-container *ngIf=\"!editing\">\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n </div>\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n </div>\n </ng-container>\n\n <!-- Edit rows: toggles -->\n <ng-container *ngIf=\"editing\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"captureEnabled\"\n [ariaLabel]=\"captureLabel\"\n (checkedChange)=\"onCaptureToggle($event)\">\n </cqa-custom-toggle>\n </div>\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"renewEnabled\"\n [ariaLabel]=\"renewLabel\"\n (checkedChange)=\"onRenewToggle($event)\">\n </cqa-custom-toggle>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showProgress && !editing\">\n <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n <div class=\"cqa-amc-progress-track\">\n <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n </div>\n <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n </ng-container>\n\n <button\n *ngIf=\"!editing\"\n type=\"button\"\n class=\"cqa-amc-configure-btn\"\n (click)=\"onConfigureClick()\">\n {{ configureButtonLabel }}\n </button>\n</div>\n", styles: [] }]
|
|
98
|
+
}], propDecorators: { title: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], statusLabel: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], captureLabel: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], renewLabel: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], restoreMock: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], mockedApisCount: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], totalApisCount: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], progressPercent: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], summaryText: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], percentText: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], configureButtonLabel: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], editing: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], showProgress: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], configure: [{
|
|
125
|
+
type: Output
|
|
126
|
+
}], restoreMockChange: [{
|
|
127
|
+
type: Output
|
|
128
|
+
}] } });
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1tb2NraW5nLWNhcmQvYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1tb2NraW5nLWNhcmQvYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBWWhHOzs7Ozs7Ozs7Ozs7R0FZRztBQVVILE1BQU0sT0FBTyx1QkFBdUI7SUFUcEM7UUFVVyxVQUFLLEdBQVcsYUFBYSxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsZ0JBQWdCLENBQUM7UUFFdkMsaUJBQVksR0FBVyx1QkFBdUIsQ0FBQztRQUMvQyxlQUFVLEdBQVcscUJBQXFCLENBQUM7UUFFcEQ7OztXQUdHO1FBQ00sZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0Isb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Isb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFLNUIseUJBQW9CLEdBQVcsV0FBVyxDQUFDO1FBQzNDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTdCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQy9DOzs7O1dBSUc7UUFDTyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0tBa0QzRDtJQWhEQywyRkFBMkY7SUFDM0YsSUFBSSxZQUFZLEtBQWMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4RCxJQUFJLGNBQWMsS0FBYyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxjQUFjLEtBQWEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEUsSUFBSSxnQkFBZ0IsS0FBYSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUUxRSxJQUFJLG1CQUFtQjtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxPQUFPLElBQUksQ0FBQyxjQUFjLG1CQUFtQixDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxvQ0FBb0MsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFhO1FBQ2xDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O29IQXJGVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qixna0JDbENwQyw4MERBc0RBOzJGRHBCYSx1QkFBdUI7a0JBVG5DLFNBQVM7K0JBQ0Usc0JBQXNCLFFBSzFCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxtQkFDYix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFPRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogTGVnYWN5IHRvZ2dsZS1jaGFuZ2UgcGF5bG9hZCBrZXB0IGZvciBiYWNrLWNvbXBhdCB3aXRoIGNvbnN1bWVycyB0aGF0IGhhdmVuJ3QgbWlncmF0ZWRcbiAqIHRvIGByZXN0b3JlTW9ja0NoYW5nZWAgeWV0LiBga2V5YCBpZGVudGlmaWVzIHdoaWNoIHJvdyB3YXMgdG9nZ2xlZDsgYHZhbHVlYCBpcyB0aGUgbmV3XG4gKiBjaGVja2VkIHN0YXRlIG9mIHRoYXQgcm93LiBOZXcgY29kZSBzaG91bGQgbGlzdGVuIHRvIGByZXN0b3JlTW9ja0NoYW5nZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlNb2NraW5nQ2FyZFRvZ2dsZUNoYW5nZSB7XG4gIGtleTogJ2NhcHR1cmVBcGlSZXNwb25zZXMnIHwgJ3JlbmV3QXBpUmVzcG9uc2VzJztcbiAgdmFsdWU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRHVhbC1tb2RlIGNhcmQgc3VtbWFyaXNpbmcgdGhlIEFQSSBtb2NraW5nIGNvbmZpZ3VyYXRpb24gb2YgYSB0ZXN0IGNhc2UuXG4gKlxuICogVGhlIGNhcmQgc3VyZmFjZXMgKipvbmUgYm9vbGVhbiBjaG9pY2UqKiDigJQgYHJlc3RvcmVNb2NrYCDigJQgYXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSByb3dzXG4gKiBsYWJlbGxlZCBcIkNhcHR1cmUgQVBJIHJlc3BvbnNlc1wiIGFuZCBcIlJlbmV3IEFQSSByZXNwb25zZXNcIjpcbiAqXG4gKiAgIHJlc3RvcmVNb2NrID09PSB0cnVlICAg4oaSICAgUmVuZXcgPSBPTiwgIENhcHR1cmUgPSBPRkZcbiAqICAgcmVzdG9yZU1vY2sgPT09IGZhbHNlICDihpIgICBSZW5ldyA9IE9GRiwgQ2FwdHVyZSA9IE9OXG4gKlxuICogSW4gcmVhZC1vbmx5IG1vZGUgYm90aCByb3dzIHNob3cgYSB2YWx1ZSB0ZXh0IChcIk9uXCIvXCJPZmZcIikgZGVyaXZlZCBmcm9tIGByZXN0b3JlTW9ja2AuXG4gKiBJbiBlZGl0IG1vZGUgYm90aCByb3dzIHJlbmRlciBhIHRvZ2dsZTsgaW50ZXJhY3Rpbmcgd2l0aCBlaXRoZXIgb25lIGZsaXBzIGByZXN0b3JlTW9ja2BcbiAqIGFuZCB0aGUgY2FyZCBlbWl0cyBgcmVzdG9yZU1vY2tDaGFuZ2VgIHNvIHRoZSBwYXJlbnQgY2FuIHBlcnNpc3QgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFwaS1tb2NraW5nLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIC8vIFN0eWxlcyBsaXZlIGluIHNyYy9saWIvc3R5bGVzL3RhaWx3aW5kLmNzcyAodGhlIGxpYiBzaGlwcyBhIHNpbmdsZSBjb21waWxlZCBzdHlsZXNoZWV0KTtcbiAgLy8gcGVyLWNvbXBvbmVudCAuc2NzcyBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGUgbmctcGFja2FnciBidWlsZCBmb3IgdGhpcyBsaWIuXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwaU1vY2tpbmdDYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdBUEkgTW9ja2luZyc7XG4gIEBJbnB1dCgpIHN0YXR1c0xhYmVsOiBzdHJpbmcgPSAnTm90IGNvbmZpZ3VyZWQnO1xuXG4gIEBJbnB1dCgpIGNhcHR1cmVMYWJlbDogc3RyaW5nID0gJ0NhcHR1cmUgQVBJIHJlc3BvbnNlcyc7XG4gIEBJbnB1dCgpIHJlbmV3TGFiZWw6IHN0cmluZyA9ICdSZW5ldyBBUEkgcmVzcG9uc2VzJztcblxuICAvKipcbiAgICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNhcmQncyBkdWFsLXRvZ2dsZSBzdGF0ZS5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYCDihpIgQ2FwdHVyZSBpcyBPTiwgUmVuZXcgaXMgT0ZGLlxuICAgKi9cbiAgQElucHV0KCkgcmVzdG9yZU1vY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBtb2NrZWRBcGlzQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHRvdGFsQXBpc0NvdW50OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwcm9ncmVzc1BlcmNlbnQ6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgc3VtbWFyeVRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBlcmNlbnRUZXh0Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGNvbmZpZ3VyZUJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnQ29uZmlndXJlJztcbiAgQElucHV0KCkgZWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBcIk1vY2tlZCBYIG9mIFkgLyBwcm9ncmVzcyBiYXIgLyBwZXJjZW50XCIgYmxvY2sgaXMgc2hvd24uXG4gICAqIEhpZGRlbiB3aGVuIHRoZSB0ZXN0IGNhc2UgaGFzIG5vIGNhcHR1cmVkIG1vY2sgc3VtbWFyeSB5ZXQgKGFuZCBhbHdheXMgaGlkZGVuIGluXG4gICAqIGVkaXQgbW9kZSByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZykuXG4gICAqL1xuICBASW5wdXQoKSBzaG93UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgY29uZmlndXJlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuZXZlciB0aGUgZWZmZWN0aXZlIGByZXN0b3JlTW9ja2AgdmFsdWUgY2hhbmdlcyAoZWl0aGVyIHJvdydzIHRvZ2dsZSB3YXNcbiAgICogaW50ZXJhY3RlZCB3aXRoIGluIGVkaXQgbW9kZSkuIFBhcmVudCBjb21wb25lbnRzIHNob3VsZCBwZXJzaXN0IHRoaXMgdmFsdWUg4oCUIGUuZy4gdW5kZXJcbiAgICogYHRlc3RDYXNlLm1vY2tBcGlTZXR0aW5ncy5yZXN0b3JlTW9ja2AuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVzdG9yZU1vY2tDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLy8gRGVyaXZlZCBwZXItcm93IHN0YXRlICh0ZW1wbGF0ZSBiaW5kcyB0aGVzZSBkaXJlY3RseSBzbyB0aGUgdHdvIHJvd3Mgc3RheSBpbiBsb2NrLXN0ZXApLlxuICBnZXQgcmVuZXdFbmFibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5yZXN0b3JlTW9jazsgfVxuICBnZXQgY2FwdHVyZUVuYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5yZXN0b3JlTW9jazsgfVxuICBnZXQgcmVuZXdWYWx1ZVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVzdG9yZU1vY2sgPyAnT24nIDogJ09mZic7IH1cbiAgZ2V0IGNhcHR1cmVWYWx1ZVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVzdG9yZU1vY2sgPyAnT2ZmJyA6ICdPbic7IH1cblxuICBnZXQgY29tcHV0ZWRTdW1tYXJ5VGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnN1bW1hcnlUZXh0KSByZXR1cm4gdGhpcy5zdW1tYXJ5VGV4dDtcbiAgICByZXR1cm4gYCR7dGhpcy5tb2NrZWRBcGlzQ291bnR9IG9mICR7dGhpcy50b3RhbEFwaXNDb3VudH0gQVBJcyBzZXQgdG8gbW9ja2A7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRQZXJjZW50VGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnBlcmNlbnRUZXh0KSByZXR1cm4gdGhpcy5wZXJjZW50VGV4dDtcbiAgICByZXR1cm4gYCR7dGhpcy5wcm9ncmVzc1BlcmNlbnR9JSBvZiBjYWxscyB3aWxsIHVzZSBtb2NrIHJlc3BvbnNlc2A7XG4gIH1cblxuICBnZXQgcHJvZ3Jlc3NXaWR0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE51bWJlcih0aGlzLnByb2dyZXNzUGVyY2VudCkgfHwgMCkpO1xuICAgIHJldHVybiBgJHtjbGFtcGVkfSVgO1xuICB9XG5cbiAgb25Db25maWd1cmVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZS5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlciBpbnRlcmFjdGVkIHdpdGggdGhlIFwiUmVuZXcgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZSBpbiBlZGl0IG1vZGUuXG4gICAqIFJlbmV3IE9OICDihpIgcmVzdG9yZU1vY2sgPSB0cnVlICAoQ2FwdHVyZSBPRkYpLlxuICAgKiBSZW5ldyBPRkYg4oaSIHJlc3RvcmVNb2NrID0gZmFsc2UgKENhcHR1cmUgT04g4oCUIG11dHVhbCBleGNsdXNpdml0eSkuXG4gICAqL1xuICBvblJlbmV3VG9nZ2xlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZXRSZXN0b3JlTW9jayh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlciBpbnRlcmFjdGVkIHdpdGggdGhlIFwiQ2FwdHVyZSBBUEkgcmVzcG9uc2VzXCIgdG9nZ2xlIGluIGVkaXQgbW9kZS5cbiAgICogQ2FwdHVyZSBPTiAg4oaSIHJlc3RvcmVNb2NrID0gZmFsc2UgKFJlbmV3IE9GRikuXG4gICAqIENhcHR1cmUgT0ZGIOKGkiByZXN0b3JlTW9jayA9IHRydWUgIChSZW5ldyBPTiDigJQgbXV0dWFsIGV4Y2x1c2l2aXR5KS5cbiAgICovXG4gIG9uQ2FwdHVyZVRvZ2dsZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2V0UmVzdG9yZU1vY2soIXZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzdG9yZU1vY2sobmV4dDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc3RvcmVNb2NrID09PSBuZXh0KSByZXR1cm47XG4gICAgdGhpcy5yZXN0b3JlTW9jayA9IG5leHQ7XG4gICAgdGhpcy5yZXN0b3JlTW9ja0NoYW5nZS5lbWl0KG5leHQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWFtYy1jYXJkXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtYW1jLWhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy10aXRsZVwiPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy1zdGF0dXNcIiAqbmdJZj1cInN0YXR1c0xhYmVsXCI+e3sgc3RhdHVzTGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVhZC1vbmx5IHJvd3MgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLWxhYmVsXCI+e3sgY2FwdHVyZUxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLXZhbHVlXCI+e3sgY2FwdHVyZVZhbHVlVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWFtYy1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy1sYWJlbFwiPnt7IHJlbmV3TGFiZWwgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbWMtdmFsdWVcIj57eyByZW5ld1ZhbHVlVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFZGl0IHJvd3M6IHRvZ2dsZXMgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtcm93IGNxYS1hbWMtcm93LS1lZGl0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbWMtbGFiZWxcIj57eyBjYXB0dXJlTGFiZWwgfX08L3NwYW4+XG4gICAgICA8Y3FhLWN1c3RvbS10b2dnbGVcbiAgICAgICAgW2NoZWNrZWRdPVwiY2FwdHVyZUVuYWJsZWRcIlxuICAgICAgICBbYXJpYUxhYmVsXT1cImNhcHR1cmVMYWJlbFwiXG4gICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2FwdHVyZVRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXJvdyBjcWEtYW1jLXJvdy0tZWRpdFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLWxhYmVsXCI+e3sgcmVuZXdMYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZVxuICAgICAgICBbY2hlY2tlZF09XCJyZW5ld0VuYWJsZWRcIlxuICAgICAgICBbYXJpYUxhYmVsXT1cInJlbmV3TGFiZWxcIlxuICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvblJlbmV3VG9nZ2xlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UHJvZ3Jlc3MgJiYgIWVkaXRpbmdcIj5cbiAgICA8cCBjbGFzcz1cImNxYS1hbWMtc3VtbWFyeVwiPnt7IGNvbXB1dGVkU3VtbWFyeVRleHQgfX08L3A+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtcHJvZ3Jlc3MtdHJhY2tcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXByb2dyZXNzLWZpbGxcIiBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3NXaWR0aFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiY3FhLWFtYy1wZXJjZW50XCI+e3sgY29tcHV0ZWRQZXJjZW50VGV4dCB9fTwvcD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiIWVkaXRpbmdcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiY3FhLWFtYy1jb25maWd1cmUtYnRuXCJcbiAgICAoY2xpY2spPVwib25Db25maWd1cmVDbGljaygpXCI+XG4gICAge3sgY29uZmlndXJlQnV0dG9uTGFiZWwgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|