@c80/ui 1.0.18 → 1.0.19
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.
|
@@ -77,10 +77,10 @@ export class C80ModalComponent {
|
|
|
77
77
|
return this.config().noText || 'No';
|
|
78
78
|
}
|
|
79
79
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C80ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
80
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: C80ModalComponent, isStandalone: true, selector: "c80-modal", ngImport: i0, template: "<!-- Modal Backdrop -->\r\n@if (isOpen()) {\r\n<div class=\"modal-backdrop\" [class.show]=\"isVisible()\" tabindex=\"-1\" (click)=\"onBackdropClick($event)\"
|
|
80
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: C80ModalComponent, isStandalone: true, selector: "c80-modal", ngImport: i0, template: "<!-- Modal Backdrop -->\r\n@if (isOpen()) {\r\n<div class=\"modal-backdrop\" [class.show]=\"isVisible()\" tabindex=\"-1\" (click)=\"onBackdropClick($event)\" (keydown.escape)=\"closeModal()\">\r\n\r\n <!-- Modal Container -->\r\n <dialog class=\"modal-container\" [class.show]=\"isVisible()\" [attr.aria-labelledby]=\"'modal-title'\" [open]=\"isVisible()\">\r\n\r\n <!-- Modal Header -->\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-title\">{{ config().title }}</h4>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"closeModal()\">\r\n x\r\n </button>\r\n </div>\r\n\r\n <!-- Modal Body -->\r\n <div class=\"modal-body\">\r\n <p class=\"modal-message\">{{ config().message }}</p>\r\n </div>\r\n\r\n <!-- Modal Footer -->\r\n <div class=\"modal-footer\">\r\n\r\n <!-- Info Modal - Solo OK -->\r\n @if (showOkButton()) {\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onConfirm()\">\r\n OK\r\n </button>\r\n }\r\n\r\n <!-- Yes/No Modal -->\r\n @if (showYesNoButtons()) {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"onNo()\">\r\n {{ getNoText() }}\r\n </button>\r\n <button type=\"button\" class=\"btn\" [class]=\"getPrimaryButtonClass()\" (click)=\"onYes()\">\r\n {{ getYesText() }}\r\n </button>\r\n }\r\n\r\n <!-- Confirm Modal -->\r\n @if (showConfirmButtons()) {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"onCancel()\">\r\n {{ getCancelText() }}\r\n </button>\r\n <button type=\"button\" class=\"btn\" [class]=\"getPrimaryButtonClass()\" (click)=\"onConfirm()\">\r\n {{ getConfirmText() }}\r\n </button>\r\n }\r\n\r\n </div>\r\n </dialog>\r\n</div>\r\n}", styles: [".modal-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1050;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease-in-out;outline:none}.modal-backdrop.show{opacity:1}.modal-container{background:#fff;border-radius:8px;box-shadow:0 4px 20px #00000026;border:none;max-width:400px;width:90%;max-height:90vh;overflow:hidden;transform:scale(.9) translateY(-10px);transition:all .15s ease-out;position:relative;padding:0}.modal-container.show{transform:scale(1) translateY(0)}.modal-container::backdrop{background:transparent}.modal-header{display:flex;align-items:center;gap:8px;padding:16px 20px 12px;border-bottom:1px solid #e5e7eb;background:#f8f9fa}.modal-header .modal-title{flex:1;margin:0;font-size:16px;font-weight:600;color:#1f2937;line-height:1.3}.modal-header .btn-close{background:none;border:none;padding:4px;border-radius:4px;cursor:pointer;color:#6b7280;transition:all .15s ease;display:flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:18px;font-weight:700}.modal-header .btn-close:hover{background-color:#ef44441a;color:#ef4444}.modal-body{padding:16px 20px}.modal-body .modal-message{margin:0;font-size:14px;line-height:1.5;color:#374151;white-space:pre-line}.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;background:#f8f9fa;border-top:1px solid #e5e7eb}.modal-footer .btn{border-radius:4px;font-weight:500;padding:6px 16px;font-size:13px;border:1px solid transparent;transition:all .15s ease;min-width:70px}.modal-footer .btn.btn-primary{background:#3b82f6;border-color:#3b82f6;color:#fff}.modal-footer .btn.btn-primary:hover{background:#2563eb;border-color:#2563eb}.modal-footer .btn.btn-warning{background:#f59e0b;border-color:#f59e0b;color:#fff}.modal-footer .btn.btn-warning:hover{background:#d97706;border-color:#d97706}.modal-footer .btn.btn-danger{background:#ef4444;border-color:#ef4444;color:#fff}.modal-footer .btn.btn-danger:hover{background:#dc2626;border-color:#dc2626}.modal-footer .btn.btn-info{background:#06b6d4;border-color:#06b6d4;color:#fff}.modal-footer .btn.btn-info:hover{background:#0891b2;border-color:#0891b2}.modal-footer .btn.btn-outline-secondary{background:#fff;border-color:#d1d5db;color:#6b7280}.modal-footer .btn.btn-outline-secondary:hover{background:#f9fafb;border-color:#9ca3af;color:#374151}@media (max-width: 768px){.modal-container{width:95%;margin:10px}.modal-header{padding:12px 16px 8px}.modal-header .modal-title{font-size:15px}.modal-body{padding:12px 16px}.modal-body .modal-message{font-size:13px}.modal-footer{padding:8px 16px 12px;flex-direction:column}.modal-footer .btn{width:100%;margin:0;padding:8px 16px}}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.8) translateY(-20px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalFadeOut{0%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.8) translateY(-20px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
81
81
|
}
|
|
82
82
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C80ModalComponent, decorators: [{
|
|
83
83
|
type: Component,
|
|
84
|
-
args: [{ selector: 'c80-modal', standalone: true, imports: [CommonModule], template: "<!-- Modal Backdrop -->\r\n@if (isOpen()) {\r\n<div class=\"modal-backdrop\" [class.show]=\"isVisible()\" tabindex=\"-1\" (click)=\"onBackdropClick($event)\"
|
|
84
|
+
args: [{ selector: 'c80-modal', standalone: true, imports: [CommonModule], template: "<!-- Modal Backdrop -->\r\n@if (isOpen()) {\r\n<div class=\"modal-backdrop\" [class.show]=\"isVisible()\" tabindex=\"-1\" (click)=\"onBackdropClick($event)\" (keydown.escape)=\"closeModal()\">\r\n\r\n <!-- Modal Container -->\r\n <dialog class=\"modal-container\" [class.show]=\"isVisible()\" [attr.aria-labelledby]=\"'modal-title'\" [open]=\"isVisible()\">\r\n\r\n <!-- Modal Header -->\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-title\">{{ config().title }}</h4>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"closeModal()\">\r\n x\r\n </button>\r\n </div>\r\n\r\n <!-- Modal Body -->\r\n <div class=\"modal-body\">\r\n <p class=\"modal-message\">{{ config().message }}</p>\r\n </div>\r\n\r\n <!-- Modal Footer -->\r\n <div class=\"modal-footer\">\r\n\r\n <!-- Info Modal - Solo OK -->\r\n @if (showOkButton()) {\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onConfirm()\">\r\n OK\r\n </button>\r\n }\r\n\r\n <!-- Yes/No Modal -->\r\n @if (showYesNoButtons()) {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"onNo()\">\r\n {{ getNoText() }}\r\n </button>\r\n <button type=\"button\" class=\"btn\" [class]=\"getPrimaryButtonClass()\" (click)=\"onYes()\">\r\n {{ getYesText() }}\r\n </button>\r\n }\r\n\r\n <!-- Confirm Modal -->\r\n @if (showConfirmButtons()) {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"onCancel()\">\r\n {{ getCancelText() }}\r\n </button>\r\n <button type=\"button\" class=\"btn\" [class]=\"getPrimaryButtonClass()\" (click)=\"onConfirm()\">\r\n {{ getConfirmText() }}\r\n </button>\r\n }\r\n\r\n </div>\r\n </dialog>\r\n</div>\r\n}", styles: [".modal-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1050;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease-in-out;outline:none}.modal-backdrop.show{opacity:1}.modal-container{background:#fff;border-radius:8px;box-shadow:0 4px 20px #00000026;border:none;max-width:400px;width:90%;max-height:90vh;overflow:hidden;transform:scale(.9) translateY(-10px);transition:all .15s ease-out;position:relative;padding:0}.modal-container.show{transform:scale(1) translateY(0)}.modal-container::backdrop{background:transparent}.modal-header{display:flex;align-items:center;gap:8px;padding:16px 20px 12px;border-bottom:1px solid #e5e7eb;background:#f8f9fa}.modal-header .modal-title{flex:1;margin:0;font-size:16px;font-weight:600;color:#1f2937;line-height:1.3}.modal-header .btn-close{background:none;border:none;padding:4px;border-radius:4px;cursor:pointer;color:#6b7280;transition:all .15s ease;display:flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:18px;font-weight:700}.modal-header .btn-close:hover{background-color:#ef44441a;color:#ef4444}.modal-body{padding:16px 20px}.modal-body .modal-message{margin:0;font-size:14px;line-height:1.5;color:#374151;white-space:pre-line}.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;background:#f8f9fa;border-top:1px solid #e5e7eb}.modal-footer .btn{border-radius:4px;font-weight:500;padding:6px 16px;font-size:13px;border:1px solid transparent;transition:all .15s ease;min-width:70px}.modal-footer .btn.btn-primary{background:#3b82f6;border-color:#3b82f6;color:#fff}.modal-footer .btn.btn-primary:hover{background:#2563eb;border-color:#2563eb}.modal-footer .btn.btn-warning{background:#f59e0b;border-color:#f59e0b;color:#fff}.modal-footer .btn.btn-warning:hover{background:#d97706;border-color:#d97706}.modal-footer .btn.btn-danger{background:#ef4444;border-color:#ef4444;color:#fff}.modal-footer .btn.btn-danger:hover{background:#dc2626;border-color:#dc2626}.modal-footer .btn.btn-info{background:#06b6d4;border-color:#06b6d4;color:#fff}.modal-footer .btn.btn-info:hover{background:#0891b2;border-color:#0891b2}.modal-footer .btn.btn-outline-secondary{background:#fff;border-color:#d1d5db;color:#6b7280}.modal-footer .btn.btn-outline-secondary:hover{background:#f9fafb;border-color:#9ca3af;color:#374151}@media (max-width: 768px){.modal-container{width:95%;margin:10px}.modal-header{padding:12px 16px 8px}.modal-header .modal-title{font-size:15px}.modal-body{padding:12px 16px}.modal-body .modal-message{font-size:13px}.modal-footer{padding:8px 16px 12px;flex-direction:column}.modal-footer .btn{width:100%;margin:0;padding:8px 16px}}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.8) translateY(-20px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalFadeOut{0%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.8) translateY(-20px)}}\n"] }]
|
|
85
85
|
}], ctorParameters: () => [] });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBNEIvQyxNQUFNLE9BQU8saUJBQWlCO0lBQ1gsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU1QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDN0MsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuRDtRQUNFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUNsQixpREFBaUQ7Z0JBQ2pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDckMsaUJBQWlCLENBQ0gsQ0FBQztvQkFDakIsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDYixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25CLENBQUM7Z0JBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWTtRQUMxQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsUUFBUSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssT0FBTztnQkFDVixPQUFPLFlBQVksQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssT0FBTztnQkFDVixPQUFPLGFBQWEsQ0FBQztZQUN2QjtnQkFDRSxPQUFPLFVBQVUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7SUFDdEUsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztJQUN0QyxDQUFDO3dHQTNGVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixxRUM5QjlCLHExREF1REMsNGdHRDdCVyxZQUFZOzs0RkFJWCxpQkFBaUI7a0JBUjdCLFNBQVM7K0JBRUUsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4vbW9kYWwuc2VydmljZSc7XHJcblxyXG5leHBvcnQgdHlwZSBNb2RhbFR5cGUgPSAnaW5mbycgfCAnY29uZmlybScgfCAneWVzTm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb25maWcge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHR5cGU/OiBNb2RhbFR5cGU7XHJcbiAgY29uZmlybVRleHQ/OiBzdHJpbmc7XHJcbiAgY2FuY2VsVGV4dD86IHN0cmluZztcclxuICB5ZXNUZXh0Pzogc3RyaW5nO1xyXG4gIG5vVGV4dD86IHN0cmluZztcclxuICBzaG93Q2FuY2VsPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNb2RhbFJlc3VsdCB7XHJcbiAgYWN0aW9uOiAnY29uZmlybScgfCAnY2FuY2VsJyB8ICd5ZXMnIHwgJ25vJztcclxuICBjb25maXJtZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdjODAtbW9kYWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQzgwTW9kYWxDb21wb25lbnQge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XHJcblxyXG4gIHJlYWRvbmx5IGlzT3BlbiA9IHRoaXMubW9kYWxTZXJ2aWNlLm1vZGFsU3RhdGUuaXNPcGVuO1xyXG4gIHJlYWRvbmx5IGNvbmZpZyA9IHRoaXMubW9kYWxTZXJ2aWNlLm1vZGFsU3RhdGUuY29uZmlnO1xyXG4gIHJlYWRvbmx5IGlzVmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNPcGVuKCkpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XHJcbiAgICAgICAgLy8gQXV0by1mb2N1cyBtb2RhbCB3aGVuIG9wZW5lZCBmb3IgYWNjZXNzaWJpbGl0eVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAnLm1vZGFsLWJhY2tkcm9wJ1xyXG4gICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmIChiYWNrZHJvcCkge1xyXG4gICAgICAgICAgICBiYWNrZHJvcC5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Db25maXJtKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuaGFuZGxlUmVzdWx0KHsgYWN0aW9uOiAnY29uZmlybScsIGNvbmZpcm1lZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuaGFuZGxlUmVzdWx0KHsgYWN0aW9uOiAnY2FuY2VsJywgY29uZmlybWVkOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIG9uWWVzKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuaGFuZGxlUmVzdWx0KHsgYWN0aW9uOiAneWVzJywgY29uZmlybWVkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgb25ObygpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmhhbmRsZVJlc3VsdCh7IGFjdGlvbjogJ25vJywgY29uZmlybWVkOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlTW9kYWwoKSB7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5jbG9zZU1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJpbWFyeUJ1dHRvbkNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IHRoaXMuY29uZmlnKCk7XHJcbiAgICBzd2l0Y2ggKGNvbmZpZ1ZhbHVlLnR5cGUpIHtcclxuICAgICAgY2FzZSAnd2FybmluZyc6XHJcbiAgICAgICAgcmV0dXJuICdidG4td2FybmluZyc7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICByZXR1cm4gJ2J0bi1kYW5nZXInO1xyXG4gICAgICBjYXNlICdjb25maXJtJzpcclxuICAgICAgY2FzZSAneWVzTm8nOlxyXG4gICAgICAgIHJldHVybiAnYnRuLXByaW1hcnknO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnYnRuLWluZm8nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1llc05vQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnR5cGUgPT09ICd5ZXNObyc7XHJcbiAgfVxyXG5cclxuICBzaG93Q29uZmlybUJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWcoKS50eXBlO1xyXG4gICAgcmV0dXJuIHR5cGUgPT09ICdjb25maXJtJyB8fCB0eXBlID09PSAnd2FybmluZycgfHwgdHlwZSA9PT0gJ2Vycm9yJztcclxuICB9XHJcblxyXG4gIHNob3dPa0J1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnR5cGUgPT09ICdpbmZvJztcclxuICB9XHJcblxyXG4gIGdldENvbmZpcm1UZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcoKS5jb25maXJtVGV4dCB8fCAnQ29uZmlybWFyJztcclxuICB9XHJcblxyXG4gIGdldENhbmNlbFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLmNhbmNlbFRleHQgfHwgJ0NhbmNlbGFyJztcclxuICB9XHJcblxyXG4gIGdldFllc1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnllc1RleHQgfHwgJ1PDrSc7XHJcbiAgfVxyXG5cclxuICBnZXROb1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLm5vVGV4dCB8fCAnTm8nO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIE1vZGFsIEJhY2tkcm9wIC0tPlxyXG5AaWYgKGlzT3BlbigpKSB7XHJcbjxkaXYgY2xhc3M9XCJtb2RhbC1iYWNrZHJvcFwiIFtjbGFzcy5zaG93XT1cImlzVmlzaWJsZSgpXCIgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soJGV2ZW50KVwiXHJcbiAgKGtleWRvd24uZXNjYXBlKT1cImNsb3NlTW9kYWwoKVwiPlxyXG5cclxuICA8IS0tIE1vZGFsIENvbnRhaW5lciAtLT5cclxuICA8ZGlhbG9nIGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCIgW2NsYXNzLnNob3ddPVwiaXNWaXNpYmxlKClcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ21vZGFsLXRpdGxlJ1wiXHJcbiAgICBbb3Blbl09XCJpc1Zpc2libGUoKVwiPlxyXG5cclxuICAgIDwhLS0gTW9kYWwgSGVhZGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwibW9kYWwtdGl0bGVcIj57eyBjb25maWcoKS50aXRsZSB9fTwvaDQ+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPlxyXG4gICAgICAgIMOXXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBNb2RhbCBCb2R5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgPHAgY2xhc3M9XCJtb2RhbC1tZXNzYWdlXCI+e3sgY29uZmlnKCkubWVzc2FnZSB9fTwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gTW9kYWwgRm9vdGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG5cclxuICAgICAgPCEtLSBJbmZvIE1vZGFsIC0gU29sbyBPSyAtLT5cclxuICAgICAgQGlmIChzaG93T2tCdXR0b24oKSkge1xyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiPlxyXG4gICAgICAgIE9LXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIFllcy9ObyBNb2RhbCAtLT5cclxuICAgICAgQGlmIChzaG93WWVzTm9CdXR0b25zKCkpIHtcclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm9uTm8oKVwiPlxyXG4gICAgICAgIHt7IGdldE5vVGV4dCgpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIFtjbGFzc109XCJnZXRQcmltYXJ5QnV0dG9uQ2xhc3MoKVwiIChjbGljayk9XCJvblllcygpXCI+XHJcbiAgICAgICAge3sgZ2V0WWVzVGV4dCgpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIENvbmZpcm0gTW9kYWwgLS0+XHJcbiAgICAgIEBpZiAoc2hvd0NvbmZpcm1CdXR0b25zKCkpIHtcclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cclxuICAgICAgICB7eyBnZXRDYW5jZWxUZXh0KCkgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuXCIgW2NsYXNzXT1cImdldFByaW1hcnlCdXR0b25DbGFzcygpXCIgKGNsaWNrKT1cIm9uQ29uZmlybSgpXCI+XHJcbiAgICAgICAge3sgZ2V0Q29uZmlybVRleHQoKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGlhbG9nPlxyXG48L2Rpdj5cclxufSJdfQ==
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBNEIvQyxNQUFNLE9BQU8saUJBQWlCO0lBQ1gsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU1QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDN0MsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuRDtRQUNFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUNsQixpREFBaUQ7Z0JBQ2pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDckMsaUJBQWlCLENBQ0gsQ0FBQztvQkFDakIsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDYixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25CLENBQUM7Z0JBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWTtRQUMxQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsUUFBUSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssT0FBTztnQkFDVixPQUFPLFlBQVksQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssT0FBTztnQkFDVixPQUFPLGFBQWEsQ0FBQztZQUN2QjtnQkFDRSxPQUFPLFVBQVUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7SUFDdEUsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztJQUN0QyxDQUFDO3dHQTNGVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixxRUM5QjlCLG8wREFxREMsNGdHRDNCVyxZQUFZOzs0RkFJWCxpQkFBaUI7a0JBUjdCLFNBQVM7K0JBRUUsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4vbW9kYWwuc2VydmljZSc7XHJcblxyXG5leHBvcnQgdHlwZSBNb2RhbFR5cGUgPSAnaW5mbycgfCAnY29uZmlybScgfCAneWVzTm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb25maWcge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHR5cGU/OiBNb2RhbFR5cGU7XHJcbiAgY29uZmlybVRleHQ/OiBzdHJpbmc7XHJcbiAgY2FuY2VsVGV4dD86IHN0cmluZztcclxuICB5ZXNUZXh0Pzogc3RyaW5nO1xyXG4gIG5vVGV4dD86IHN0cmluZztcclxuICBzaG93Q2FuY2VsPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNb2RhbFJlc3VsdCB7XHJcbiAgYWN0aW9uOiAnY29uZmlybScgfCAnY2FuY2VsJyB8ICd5ZXMnIHwgJ25vJztcclxuICBjb25maXJtZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdjODAtbW9kYWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQzgwTW9kYWxDb21wb25lbnQge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XHJcblxyXG4gIHJlYWRvbmx5IGlzT3BlbiA9IHRoaXMubW9kYWxTZXJ2aWNlLm1vZGFsU3RhdGUuaXNPcGVuO1xyXG4gIHJlYWRvbmx5IGNvbmZpZyA9IHRoaXMubW9kYWxTZXJ2aWNlLm1vZGFsU3RhdGUuY29uZmlnO1xyXG4gIHJlYWRvbmx5IGlzVmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNPcGVuKCkpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XHJcbiAgICAgICAgLy8gQXV0by1mb2N1cyBtb2RhbCB3aGVuIG9wZW5lZCBmb3IgYWNjZXNzaWJpbGl0eVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAnLm1vZGFsLWJhY2tkcm9wJ1xyXG4gICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmIChiYWNrZHJvcCkge1xyXG4gICAgICAgICAgICBiYWNrZHJvcC5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Db25maXJtKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuaGFuZGxlUmVzdWx0KHsgYWN0aW9uOiAnY29uZmlybScsIGNvbmZpcm1lZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuaGFuZGxlUmVzdWx0KHsgYWN0aW9uOiAnY2FuY2VsJywgY29uZmlybWVkOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIG9uWWVzKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuaGFuZGxlUmVzdWx0KHsgYWN0aW9uOiAneWVzJywgY29uZmlybWVkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgb25ObygpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmhhbmRsZVJlc3VsdCh7IGFjdGlvbjogJ25vJywgY29uZmlybWVkOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlTW9kYWwoKSB7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5jbG9zZU1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJpbWFyeUJ1dHRvbkNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IHRoaXMuY29uZmlnKCk7XHJcbiAgICBzd2l0Y2ggKGNvbmZpZ1ZhbHVlLnR5cGUpIHtcclxuICAgICAgY2FzZSAnd2FybmluZyc6XHJcbiAgICAgICAgcmV0dXJuICdidG4td2FybmluZyc7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICByZXR1cm4gJ2J0bi1kYW5nZXInO1xyXG4gICAgICBjYXNlICdjb25maXJtJzpcclxuICAgICAgY2FzZSAneWVzTm8nOlxyXG4gICAgICAgIHJldHVybiAnYnRuLXByaW1hcnknO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnYnRuLWluZm8nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1llc05vQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnR5cGUgPT09ICd5ZXNObyc7XHJcbiAgfVxyXG5cclxuICBzaG93Q29uZmlybUJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWcoKS50eXBlO1xyXG4gICAgcmV0dXJuIHR5cGUgPT09ICdjb25maXJtJyB8fCB0eXBlID09PSAnd2FybmluZycgfHwgdHlwZSA9PT0gJ2Vycm9yJztcclxuICB9XHJcblxyXG4gIHNob3dPa0J1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnR5cGUgPT09ICdpbmZvJztcclxuICB9XHJcblxyXG4gIGdldENvbmZpcm1UZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcoKS5jb25maXJtVGV4dCB8fCAnQ29uZmlybWFyJztcclxuICB9XHJcblxyXG4gIGdldENhbmNlbFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLmNhbmNlbFRleHQgfHwgJ0NhbmNlbGFyJztcclxuICB9XHJcblxyXG4gIGdldFllc1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLnllc1RleHQgfHwgJ1PDrSc7XHJcbiAgfVxyXG5cclxuICBnZXROb1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZygpLm5vVGV4dCB8fCAnTm8nO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIE1vZGFsIEJhY2tkcm9wIC0tPlxyXG5AaWYgKGlzT3BlbigpKSB7XHJcbjxkaXYgY2xhc3M9XCJtb2RhbC1iYWNrZHJvcFwiIFtjbGFzcy5zaG93XT1cImlzVmlzaWJsZSgpXCIgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soJGV2ZW50KVwiIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZU1vZGFsKClcIj5cclxuXHJcbiAgPCEtLSBNb2RhbCBDb250YWluZXIgLS0+XHJcbiAgPGRpYWxvZyBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiIFtjbGFzcy5zaG93XT1cImlzVmlzaWJsZSgpXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIidtb2RhbC10aXRsZSdcIiBbb3Blbl09XCJpc1Zpc2libGUoKVwiPlxyXG5cclxuICAgIDwhLS0gTW9kYWwgSGVhZGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwibW9kYWwtdGl0bGVcIj57eyBjb25maWcoKS50aXRsZSB9fTwvaDQ+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPlxyXG4gICAgICAgIHhcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE1vZGFsIEJvZHkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICA8cCBjbGFzcz1cIm1vZGFsLW1lc3NhZ2VcIj57eyBjb25maWcoKS5tZXNzYWdlIH19PC9wPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBNb2RhbCBGb290ZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcblxyXG4gICAgICA8IS0tIEluZm8gTW9kYWwgLSBTb2xvIE9LIC0tPlxyXG4gICAgICBAaWYgKHNob3dPa0J1dHRvbigpKSB7XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ29uZmlybSgpXCI+XHJcbiAgICAgICAgT0tcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gWWVzL05vIE1vZGFsIC0tPlxyXG4gICAgICBAaWYgKHNob3dZZXNOb0J1dHRvbnMoKSkge1xyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiAoY2xpY2spPVwib25ObygpXCI+XHJcbiAgICAgICAge3sgZ2V0Tm9UZXh0KCkgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuXCIgW2NsYXNzXT1cImdldFByaW1hcnlCdXR0b25DbGFzcygpXCIgKGNsaWNrKT1cIm9uWWVzKClcIj5cclxuICAgICAgICB7eyBnZXRZZXNUZXh0KCkgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ29uZmlybSBNb2RhbCAtLT5cclxuICAgICAgQGlmIChzaG93Q29uZmlybUJ1dHRvbnMoKSkge1xyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxyXG4gICAgICAgIHt7IGdldENhbmNlbFRleHQoKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG5cIiBbY2xhc3NdPVwiZ2V0UHJpbWFyeUJ1dHRvbkNsYXNzKClcIiAoY2xpY2spPVwib25Db25maXJtKClcIj5cclxuICAgICAgICB7eyBnZXRDb25maXJtVGV4dCgpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaWFsb2c+XHJcbjwvZGl2PlxyXG59Il19
|
|
@@ -526,11 +526,11 @@ export class C80TableComponent {
|
|
|
526
526
|
}
|
|
527
527
|
}
|
|
528
528
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C80TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
529
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: C80TableComponent, isStandalone: true, selector: "c80-table", inputs: { data$: "data$", columns: "columns", size: "size", multiple: "multiple", noConfirm: ["noConfirm", "noConfirm", (value) => value === '' || value === true || value === 'true'] }, outputs: { createAction: "createAction", updateAction: "updateAction", deleteAction: "deleteAction", cancelAction: "cancelAction", viewAction: "viewAction", getRowButtonAction: "getRowButtonAction", moveUpAction: "moveUpAction", moveDownAction: "moveDownAction", errorEvent: "errorEvent", selectable: "selectable" }, ngImport: i0, template: "<div class=\"table-responsive\" [style.max-height]=\"getTableMaxHeight()\"\n [style.overflow-y]=\"size > 0 ? 'auto' : 'visible'\">\n <table class=\"table table-bordered table-hover align-middle\">\n <thead class=\"thead table-light sticky-header\">\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <th class=\"text-center selection-column\">\n @if (multiple) {\n <input type=\"checkbox\" [checked]=\"selectAllChecked()\" [indeterminate]=\"selectAllIndeterminate()\"\n (change)=\"toggleSelectAll()\" aria-label=\"Seleccionar todo\" />\n }\n </th>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <th class=\"text-center boolean-column\">{{ col.label }}</th>\n }\n @else {\n <th>{{ col.label }}</th>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <th class=\"table-actions-header\">\n <div class=\"actions-wrapper\">\n <span>Actions</span>\n @if (hasCreateActionListener()) {\n <c80-icon button icon=\"add\" [disabled]=\"creating()\" title=\"Agregar\" [size]=\".6\"\n (iconClick)=\"startCreate()\"></c80-icon>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data(); track trackById(i, row); let i = $index) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <input type=\"checkbox\" [checked]=\"isItemSelected(row)\" (change)=\"toggleItemSelection(row)\"\n [attr.aria-label]=\"'Seleccionar fila ' + (i + 1)\" />\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center boolean-column\">\n @if (editing() === row['id'] && !col.readOnly) {\n <input type=\"checkbox\" [checked]=\"!!editRow()?.[col.accessor]\"\n (change)=\"onEditInput($event, col.accessor, col)\" [attr.aria-label]=\"col.label\" />\n }\n @else {\n @if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n <br />\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n <br />\n }\n }\n </td>\n }\n @else {\n <td>\n @if (editing() === row['id'] && !col.readOnly) {\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"editRow()?.[col.accessor] ?? ''\"\n (change)=\"onEditInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\"\n [type]=\"col.type === 'number' ? 'number' : col.type === 'password' ? 'password' : 'text'\"\n [value]=\"editRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\"\n (input)=\"onEditInput($event, col.accessor, col)\" />\n }\n }\n @else {\n @if (col.type === 'password') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">******</span>\n }\n @else if (col.type === 'enum') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{\n getEnumDisplayValue(getCellValue(row, col.accessor), col)\n }}</span>\n }\n @else if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n }\n @else {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{ getDisplayValue(getCellValue(row,\n col.accessor)) }}</span>\n }\n }\n </td>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n @if (editing() === row['id']) {\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveEdit(row)\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelEdit()\"\n [size]=\".7\"></c80-icon>\n }\n @else {\n @if (hasUpdateActionListener()) {\n <c80-icon button icon=\"edit\" title=\"Editar\" (iconClick)=\"onEdit(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasCancelActionListener()) {\n <c80-icon button icon=\"cancel_circle\" color=\"secondary\" title=\"Cancelar\" (iconClick)=\"onCancel(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasViewActionListener()) {\n <c80-icon button icon=\"view\" color=\"primary\" title=\"Ver\" (iconClick)=\"onView(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasGetRowButtonListener()) {\n <c80-icon button icon=\"get\" color=\"success\" title=\"Obtener\" (iconClick)=\"onGetRowButton(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasMoveUpActionListener()) {\n <c80-icon button icon=\"arrow_up\" color=\"secondary\" title=\"Mover arriba\" (iconClick)=\"onMoveUp(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasMoveDownActionListener()) {\n <c80-icon button icon=\"arrow_down\" color=\"secondary\" title=\"Mover abajo\" (iconClick)=\"onMoveDown(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasDeleteActionListener()) {\n <c80-icon button icon=\"delete\" color=\"warn\" title=\"Borrar\" (iconClick)=\"onDelete(row)\"\n [size]=\".7\"></c80-icon>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (creating() && hasCreateActionListener()) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <!-- Empty cell for alignment -->\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center\">\n <input type=\"checkbox\" [checked]=\"!!newRow()?.[col.accessor]\" (change)=\"onInput($event, col.accessor, col)\"\n [attr.aria-label]=\"col.label\" />\n </td>\n } @else {\n <td>\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"newRow()?.[col.accessor] ?? ''\"\n (change)=\"onInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\" [type]=\"col.type === 'number' ? 'number' : 'text'\"\n [value]=\"newRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\"\n (input)=\"onInput($event, col.accessor, col)\" />\n }\n </td>\n }\n }\n }\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveCreate()\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelCreate()\"\n [size]=\".7\"></c80-icon>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (data().length === 0) {\n <div class=\"text-center text-muted py-3 small\">\n No hay datos para mostrar.\n </div>\n }\n</div>\n\n<c80-modal></c80-modal>", styles: ["@charset \"UTF-8\";input[type=checkbox]{width:1.3rem!important;height:1.3rem!important;accent-color:rgba(226,0,0,.7647058824);background:#fff;margin:0 .25rem;vertical-align:middle;cursor:pointer}.table-responsive{width:100%;overflow-x:auto}.table-responsive .table{min-width:0px;margin-bottom:.5rem}.table-responsive .table .sticky-header{position:sticky;top:0;z-index:10;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .table-actions-header{display:table-cell;vertical-align:middle;padding:.2rem .6rem!important;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .actions-wrapper{display:flex;align-items:center;justify-content:center;gap:.5rem;height:100%}.table-responsive .table .sticky-header th{max-height:31px!important;vertical-align:middle!important;padding:.2rem .6rem!important;font-size:small!important;background-color:#f8f9fa!important;border-bottom:2px solid #dee2e6}.table-responsive .table tbody td{height:35px!important;min-height:35px!important;max-height:35px!important;vertical-align:middle!important;padding:.2rem .8rem!important;font-size:small}.table-responsive .table tbody tr{height:35px!important;min-height:35px!important;max-height:35px!important;cursor:pointer}.table-responsive .table tbody tr:hover{background-color:#f5f5f5}.table-responsive .table tbody input{border:1px solid rgba(34,0,255,.37);height:100%!important;font-size:smaller!important}.table-responsive .table thead th.boolean-column,.table-responsive .table tbody td.boolean-column,.table-responsive .table thead th.selection-column,.table-responsive .table tbody td.selection-column,.table-responsive .table thead th.table-actions-header,.table-responsive .table tbody td.table-actions-header{width:1%;white-space:nowrap}.table-responsive .table .actions-cell{white-space:nowrap;padding:0!important}.table-responsive .table .actions-container{display:flex;flex-direction:row;justify-content:center;align-items:center;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: C80IconComponent, selector: "c80-icon", inputs: ["icon", "color", "customColor", "disabled", "size", "button", "type"], outputs: ["iconClick"] }, { kind: "component", type: C80ModalComponent, selector: "c80-modal" }] });
|
|
529
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: C80TableComponent, isStandalone: true, selector: "c80-table", inputs: { data$: "data$", columns: "columns", size: "size", multiple: "multiple", noConfirm: ["noConfirm", "noConfirm", (value) => value === '' || value === true || value === 'true'] }, outputs: { createAction: "createAction", updateAction: "updateAction", deleteAction: "deleteAction", cancelAction: "cancelAction", viewAction: "viewAction", getRowButtonAction: "getRowButtonAction", moveUpAction: "moveUpAction", moveDownAction: "moveDownAction", errorEvent: "errorEvent", selectable: "selectable" }, ngImport: i0, template: "<div class=\"table-responsive\" [style.max-height]=\"getTableMaxHeight()\" [style.overflow-y]=\"size > 0 ? 'auto' : 'visible'\">\n <table class=\"table table-bordered table-hover align-middle\">\n <thead class=\"thead table-light sticky-header\">\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <th class=\"text-center selection-column\">\n @if (multiple) {\n <input type=\"checkbox\" [checked]=\"selectAllChecked()\" [indeterminate]=\"selectAllIndeterminate()\" (change)=\"toggleSelectAll()\" aria-label=\"Seleccionar todo\" />\n }\n </th>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <th class=\"text-center boolean-column\">{{ col.label }}</th>\n }\n @else if (col.type === 'number') {\n <th class=\"text-center number-column\">{{ col.label }}</th>\n }\n @else {\n <th>{{ col.label }}</th>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <th class=\"table-actions-header\">\n <div class=\"actions-wrapper\">\n <span>Actions</span>\n @if (hasCreateActionListener()) {\n <c80-icon button icon=\"add\" [disabled]=\"creating()\" title=\"Agregar\" [size]=\".6\" (iconClick)=\"startCreate()\"></c80-icon>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data(); track trackById(i, row); let i = $index) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <input type=\"checkbox\" [checked]=\"isItemSelected(row)\" (change)=\"toggleItemSelection(row)\" [attr.aria-label]=\"'Seleccionar fila ' + (i + 1)\" />\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center boolean-column\">\n @if (editing() === row['id'] && !col.readOnly) {\n <input type=\"checkbox\" [checked]=\"!!editRow()?.[col.accessor]\" (change)=\"onEditInput($event, col.accessor, col)\" [attr.aria-label]=\"col.label\" />\n }\n @else {\n @if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n <br />\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n <br />\n }\n }\n </td>\n }\n @else if (col.type === 'number') {\n <td class=\"text-center number-column\">\n @if (editing() === row['id'] && !col.readOnly) {\n <input class=\"form-control form-control-sm\" type=\"number\" [value]=\"editRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onEditInput($event, col.accessor, col)\" />\n }\n @else {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{ getDisplayValue(getCellValue(row,\n col.accessor)) }}</span>\n }\n </td>\n }\n @else {\n <td>\n @if (editing() === row['id'] && !col.readOnly) {\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"editRow()?.[col.accessor] ?? ''\" (change)=\"onEditInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\" [type]=\"col.type === 'password' ? 'password' : 'text'\" [value]=\"editRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onEditInput($event, col.accessor, col)\" />\n }\n }\n @else {\n @if (col.type === 'password') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">******</span>\n }\n @else if (col.type === 'enum') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{\n getEnumDisplayValue(getCellValue(row, col.accessor), col)\n }}</span>\n }\n @else if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n }\n @else {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{ getDisplayValue(getCellValue(row,\n col.accessor)) }}</span>\n }\n }\n </td>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n @if (editing() === row['id']) {\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveEdit(row)\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelEdit()\" [size]=\".7\"></c80-icon>\n }\n @else {\n @if (hasUpdateActionListener()) {\n <c80-icon button icon=\"edit\" title=\"Editar\" (iconClick)=\"onEdit(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasCancelActionListener()) {\n <c80-icon button icon=\"cancel_circle\" color=\"secondary\" title=\"Cancelar\" (iconClick)=\"onCancel(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasViewActionListener()) {\n <c80-icon button icon=\"view\" color=\"primary\" title=\"Ver\" (iconClick)=\"onView(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasGetRowButtonListener()) {\n <c80-icon button icon=\"get\" color=\"success\" title=\"Obtener\" (iconClick)=\"onGetRowButton(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasMoveUpActionListener()) {\n <c80-icon button icon=\"arrow_up\" color=\"secondary\" title=\"Mover arriba\" (iconClick)=\"onMoveUp(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasMoveDownActionListener()) {\n <c80-icon button icon=\"arrow_down\" color=\"secondary\" title=\"Mover abajo\" (iconClick)=\"onMoveDown(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasDeleteActionListener()) {\n <c80-icon button icon=\"delete\" color=\"warn\" title=\"Borrar\" (iconClick)=\"onDelete(row)\" [size]=\".7\"></c80-icon>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (creating() && hasCreateActionListener()) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <!-- Empty cell for alignment -->\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center\">\n <input type=\"checkbox\" [checked]=\"!!newRow()?.[col.accessor]\" (change)=\"onInput($event, col.accessor, col)\" [attr.aria-label]=\"col.label\" />\n </td>\n } @else if (col.type === 'number') {\n <td class=\"text-center number-column\">\n <input class=\"form-control form-control-sm\" type=\"number\" [value]=\"newRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onInput($event, col.accessor, col)\" />\n </td>\n } @else {\n <td>\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"newRow()?.[col.accessor] ?? ''\" (change)=\"onInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\" type=\"text\" [value]=\"newRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onInput($event, col.accessor, col)\" />\n }\n </td>\n }\n }\n }\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveCreate()\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelCreate()\" [size]=\".7\"></c80-icon>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (data().length === 0) {\n <div class=\"text-center text-muted py-3 small\">\n No hay datos para mostrar.\n </div>\n }\n</div>\n\n<c80-modal></c80-modal>", styles: ["@charset \"UTF-8\";input[type=checkbox]{width:1.3rem!important;height:1.3rem!important;accent-color:rgba(226,0,0,.7647058824);background:#fff;margin:0 .25rem;vertical-align:middle;cursor:pointer}.table-responsive{width:100%;overflow-x:auto}.table-responsive .table{min-width:0px;margin-bottom:.5rem}.table-responsive .table .sticky-header{position:sticky;top:0;z-index:10;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .table-actions-header{display:table-cell;vertical-align:middle;padding:.2rem .6rem!important;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .actions-wrapper{display:flex;align-items:center;justify-content:center;gap:.5rem;height:100%}.table-responsive .table .sticky-header th{max-height:31px!important;vertical-align:middle!important;padding:.2rem .6rem!important;font-size:small!important;background-color:#f8f9fa!important;border-bottom:2px solid #dee2e6}.table-responsive .table tbody td{height:35px!important;min-height:35px!important;max-height:35px!important;vertical-align:middle!important;padding:.2rem .8rem!important;font-size:small}.table-responsive .table tbody tr{height:35px!important;min-height:35px!important;max-height:35px!important;cursor:pointer}.table-responsive .table tbody tr:hover{background-color:#f5f5f5}.table-responsive .table tbody input{border:1px solid rgba(34,0,255,.37);height:100%!important;font-size:smaller!important}.table-responsive .table thead th.boolean-column,.table-responsive .table tbody td.boolean-column,.table-responsive .table thead th.selection-column,.table-responsive .table tbody td.selection-column,.table-responsive .table thead th.table-actions-header,.table-responsive .table tbody td.table-actions-header{width:1%;white-space:nowrap}.table-responsive .table thead th.number-column,.table-responsive .table tbody td.number-column{width:1%;white-space:nowrap;text-align:center}.table-responsive .table thead th.number-column input[type=number],.table-responsive .table tbody td.number-column input[type=number]{min-width:120px!important;width:120px!important;text-align:center}.table-responsive .table .actions-cell{white-space:nowrap;padding:0!important}.table-responsive .table .actions-container{display:flex;flex-direction:row;justify-content:center;align-items:center;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: C80IconComponent, selector: "c80-icon", inputs: ["icon", "color", "customColor", "disabled", "size", "button", "type"], outputs: ["iconClick"] }, { kind: "component", type: C80ModalComponent, selector: "c80-modal" }] });
|
|
530
530
|
}
|
|
531
531
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C80TableComponent, decorators: [{
|
|
532
532
|
type: Component,
|
|
533
|
-
args: [{ selector: 'c80-table', standalone: true, imports: [C80IconComponent, C80ModalComponent], template: "<div class=\"table-responsive\" [style.max-height]=\"getTableMaxHeight()\"\n [style.overflow-y]=\"size > 0 ? 'auto' : 'visible'\">\n <table class=\"table table-bordered table-hover align-middle\">\n <thead class=\"thead table-light sticky-header\">\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <th class=\"text-center selection-column\">\n @if (multiple) {\n <input type=\"checkbox\" [checked]=\"selectAllChecked()\" [indeterminate]=\"selectAllIndeterminate()\"\n (change)=\"toggleSelectAll()\" aria-label=\"Seleccionar todo\" />\n }\n </th>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <th class=\"text-center boolean-column\">{{ col.label }}</th>\n }\n @else {\n <th>{{ col.label }}</th>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <th class=\"table-actions-header\">\n <div class=\"actions-wrapper\">\n <span>Actions</span>\n @if (hasCreateActionListener()) {\n <c80-icon button icon=\"add\" [disabled]=\"creating()\" title=\"Agregar\" [size]=\".6\"\n (iconClick)=\"startCreate()\"></c80-icon>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data(); track trackById(i, row); let i = $index) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <input type=\"checkbox\" [checked]=\"isItemSelected(row)\" (change)=\"toggleItemSelection(row)\"\n [attr.aria-label]=\"'Seleccionar fila ' + (i + 1)\" />\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center boolean-column\">\n @if (editing() === row['id'] && !col.readOnly) {\n <input type=\"checkbox\" [checked]=\"!!editRow()?.[col.accessor]\"\n (change)=\"onEditInput($event, col.accessor, col)\" [attr.aria-label]=\"col.label\" />\n }\n @else {\n @if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n <br />\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n <br />\n }\n }\n </td>\n }\n @else {\n <td>\n @if (editing() === row['id'] && !col.readOnly) {\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"editRow()?.[col.accessor] ?? ''\"\n (change)=\"onEditInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\"\n [type]=\"col.type === 'number' ? 'number' : col.type === 'password' ? 'password' : 'text'\"\n [value]=\"editRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\"\n (input)=\"onEditInput($event, col.accessor, col)\" />\n }\n }\n @else {\n @if (col.type === 'password') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">******</span>\n }\n @else if (col.type === 'enum') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{\n getEnumDisplayValue(getCellValue(row, col.accessor), col)\n }}</span>\n }\n @else if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n }\n @else {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{ getDisplayValue(getCellValue(row,\n col.accessor)) }}</span>\n }\n }\n </td>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n @if (editing() === row['id']) {\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveEdit(row)\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelEdit()\"\n [size]=\".7\"></c80-icon>\n }\n @else {\n @if (hasUpdateActionListener()) {\n <c80-icon button icon=\"edit\" title=\"Editar\" (iconClick)=\"onEdit(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasCancelActionListener()) {\n <c80-icon button icon=\"cancel_circle\" color=\"secondary\" title=\"Cancelar\" (iconClick)=\"onCancel(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasViewActionListener()) {\n <c80-icon button icon=\"view\" color=\"primary\" title=\"Ver\" (iconClick)=\"onView(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasGetRowButtonListener()) {\n <c80-icon button icon=\"get\" color=\"success\" title=\"Obtener\" (iconClick)=\"onGetRowButton(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasMoveUpActionListener()) {\n <c80-icon button icon=\"arrow_up\" color=\"secondary\" title=\"Mover arriba\" (iconClick)=\"onMoveUp(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasMoveDownActionListener()) {\n <c80-icon button icon=\"arrow_down\" color=\"secondary\" title=\"Mover abajo\" (iconClick)=\"onMoveDown(row)\"\n [size]=\".7\"></c80-icon>\n }\n @if (hasDeleteActionListener()) {\n <c80-icon button icon=\"delete\" color=\"warn\" title=\"Borrar\" (iconClick)=\"onDelete(row)\"\n [size]=\".7\"></c80-icon>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (creating() && hasCreateActionListener()) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <!-- Empty cell for alignment -->\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center\">\n <input type=\"checkbox\" [checked]=\"!!newRow()?.[col.accessor]\" (change)=\"onInput($event, col.accessor, col)\"\n [attr.aria-label]=\"col.label\" />\n </td>\n } @else {\n <td>\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"newRow()?.[col.accessor] ?? ''\"\n (change)=\"onInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\" [type]=\"col.type === 'number' ? 'number' : 'text'\"\n [value]=\"newRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\"\n (input)=\"onInput($event, col.accessor, col)\" />\n }\n </td>\n }\n }\n }\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveCreate()\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelCreate()\"\n [size]=\".7\"></c80-icon>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (data().length === 0) {\n <div class=\"text-center text-muted py-3 small\">\n No hay datos para mostrar.\n </div>\n }\n</div>\n\n<c80-modal></c80-modal>", styles: ["@charset \"UTF-8\";input[type=checkbox]{width:1.3rem!important;height:1.3rem!important;accent-color:rgba(226,0,0,.7647058824);background:#fff;margin:0 .25rem;vertical-align:middle;cursor:pointer}.table-responsive{width:100%;overflow-x:auto}.table-responsive .table{min-width:0px;margin-bottom:.5rem}.table-responsive .table .sticky-header{position:sticky;top:0;z-index:10;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .table-actions-header{display:table-cell;vertical-align:middle;padding:.2rem .6rem!important;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .actions-wrapper{display:flex;align-items:center;justify-content:center;gap:.5rem;height:100%}.table-responsive .table .sticky-header th{max-height:31px!important;vertical-align:middle!important;padding:.2rem .6rem!important;font-size:small!important;background-color:#f8f9fa!important;border-bottom:2px solid #dee2e6}.table-responsive .table tbody td{height:35px!important;min-height:35px!important;max-height:35px!important;vertical-align:middle!important;padding:.2rem .8rem!important;font-size:small}.table-responsive .table tbody tr{height:35px!important;min-height:35px!important;max-height:35px!important;cursor:pointer}.table-responsive .table tbody tr:hover{background-color:#f5f5f5}.table-responsive .table tbody input{border:1px solid rgba(34,0,255,.37);height:100%!important;font-size:smaller!important}.table-responsive .table thead th.boolean-column,.table-responsive .table tbody td.boolean-column,.table-responsive .table thead th.selection-column,.table-responsive .table tbody td.selection-column,.table-responsive .table thead th.table-actions-header,.table-responsive .table tbody td.table-actions-header{width:1%;white-space:nowrap}.table-responsive .table .actions-cell{white-space:nowrap;padding:0!important}.table-responsive .table .actions-container{display:flex;flex-direction:row;justify-content:center;align-items:center;width:100%;height:100%}\n"] }]
|
|
533
|
+
args: [{ selector: 'c80-table', standalone: true, imports: [C80IconComponent, C80ModalComponent], template: "<div class=\"table-responsive\" [style.max-height]=\"getTableMaxHeight()\" [style.overflow-y]=\"size > 0 ? 'auto' : 'visible'\">\n <table class=\"table table-bordered table-hover align-middle\">\n <thead class=\"thead table-light sticky-header\">\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <th class=\"text-center selection-column\">\n @if (multiple) {\n <input type=\"checkbox\" [checked]=\"selectAllChecked()\" [indeterminate]=\"selectAllIndeterminate()\" (change)=\"toggleSelectAll()\" aria-label=\"Seleccionar todo\" />\n }\n </th>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <th class=\"text-center boolean-column\">{{ col.label }}</th>\n }\n @else if (col.type === 'number') {\n <th class=\"text-center number-column\">{{ col.label }}</th>\n }\n @else {\n <th>{{ col.label }}</th>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <th class=\"table-actions-header\">\n <div class=\"actions-wrapper\">\n <span>Actions</span>\n @if (hasCreateActionListener()) {\n <c80-icon button icon=\"add\" [disabled]=\"creating()\" title=\"Agregar\" [size]=\".6\" (iconClick)=\"startCreate()\"></c80-icon>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data(); track trackById(i, row); let i = $index) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <input type=\"checkbox\" [checked]=\"isItemSelected(row)\" (change)=\"toggleItemSelection(row)\" [attr.aria-label]=\"'Seleccionar fila ' + (i + 1)\" />\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center boolean-column\">\n @if (editing() === row['id'] && !col.readOnly) {\n <input type=\"checkbox\" [checked]=\"!!editRow()?.[col.accessor]\" (change)=\"onEditInput($event, col.accessor, col)\" [attr.aria-label]=\"col.label\" />\n }\n @else {\n @if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n <br />\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n <br />\n }\n }\n </td>\n }\n @else if (col.type === 'number') {\n <td class=\"text-center number-column\">\n @if (editing() === row['id'] && !col.readOnly) {\n <input class=\"form-control form-control-sm\" type=\"number\" [value]=\"editRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onEditInput($event, col.accessor, col)\" />\n }\n @else {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{ getDisplayValue(getCellValue(row,\n col.accessor)) }}</span>\n }\n </td>\n }\n @else {\n <td>\n @if (editing() === row['id'] && !col.readOnly) {\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"editRow()?.[col.accessor] ?? ''\" (change)=\"onEditInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\" [type]=\"col.type === 'password' ? 'password' : 'text'\" [value]=\"editRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onEditInput($event, col.accessor, col)\" />\n }\n }\n @else {\n @if (col.type === 'password') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">******</span>\n }\n @else if (col.type === 'enum') {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{\n getEnumDisplayValue(getCellValue(row, col.accessor), col)\n }}</span>\n }\n @else if (getCellValue(row, col.accessor) === true) {\n <c80-icon icon=\"check\" [size]=\".7\"></c80-icon>\n }\n @else if (getCellValue(row, col.accessor) === false) {\n <c80-icon icon=\"cancel\" [size]=\".7\"></c80-icon>\n }\n @else {\n <span [style.color]=\"getCellColor(getCellValue(row, col.accessor), col)\">{{ getDisplayValue(getCellValue(row,\n col.accessor)) }}</span>\n }\n }\n </td>\n }\n }\n }\n @if (hasCreateActionListener() || hasUpdateActionListener() || hasDeleteActionListener() ||\n hasCancelActionListener() || hasViewActionListener() || hasGetRowButtonListener() ||\n hasMoveUpActionListener() || hasMoveDownActionListener()) {\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n @if (editing() === row['id']) {\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveEdit(row)\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelEdit()\" [size]=\".7\"></c80-icon>\n }\n @else {\n @if (hasUpdateActionListener()) {\n <c80-icon button icon=\"edit\" title=\"Editar\" (iconClick)=\"onEdit(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasCancelActionListener()) {\n <c80-icon button icon=\"cancel_circle\" color=\"secondary\" title=\"Cancelar\" (iconClick)=\"onCancel(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasViewActionListener()) {\n <c80-icon button icon=\"view\" color=\"primary\" title=\"Ver\" (iconClick)=\"onView(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasGetRowButtonListener()) {\n <c80-icon button icon=\"get\" color=\"success\" title=\"Obtener\" (iconClick)=\"onGetRowButton(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasMoveUpActionListener()) {\n <c80-icon button icon=\"arrow_up\" color=\"secondary\" title=\"Mover arriba\" (iconClick)=\"onMoveUp(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasMoveDownActionListener()) {\n <c80-icon button icon=\"arrow_down\" color=\"secondary\" title=\"Mover abajo\" (iconClick)=\"onMoveDown(row)\" [size]=\".7\"></c80-icon>\n }\n @if (hasDeleteActionListener()) {\n <c80-icon button icon=\"delete\" color=\"warn\" title=\"Borrar\" (iconClick)=\"onDelete(row)\" [size]=\".7\"></c80-icon>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (creating() && hasCreateActionListener()) {\n <tr>\n @if (hasSelectableListener() && data().length !== 0) {\n <td class=\"text-center selection-column\">\n <!-- Empty cell for alignment -->\n </td>\n }\n @for (col of columns; track col) {\n @if (col.visible !== false) {\n @if (col.type === 'boolean') {\n <td class=\"text-center\">\n <input type=\"checkbox\" [checked]=\"!!newRow()?.[col.accessor]\" (change)=\"onInput($event, col.accessor, col)\" [attr.aria-label]=\"col.label\" />\n </td>\n } @else if (col.type === 'number') {\n <td class=\"text-center number-column\">\n <input class=\"form-control form-control-sm\" type=\"number\" [value]=\"newRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onInput($event, col.accessor, col)\" />\n </td>\n } @else {\n <td>\n @if (col.type === 'enum') {\n <select class=\"form-control form-control-sm\" [value]=\"newRow()?.[col.accessor] ?? ''\" (change)=\"onInput($event, col.accessor, col)\">\n <option value=\"\">{{ col.label }}</option>\n @for (option of getEnumOptions(col); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @else {\n <input class=\"form-control form-control-sm\" type=\"text\" [value]=\"newRow()?.[col.accessor] ?? ''\" [placeholder]=\"col.label\" (input)=\"onInput($event, col.accessor, col)\" />\n }\n </td>\n }\n }\n }\n <td class=\"text-center actions-cell\">\n <div class=\"actions-container\">\n <c80-icon button icon=\"check\" title=\"Guardar\" (iconClick)=\"saveCreate()\" [size]=\".7\"></c80-icon>\n <c80-icon button icon=\"cancel\" color=\"warn\" title=\"Cancelar\" (iconClick)=\"cancelCreate()\" [size]=\".7\"></c80-icon>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (data().length === 0) {\n <div class=\"text-center text-muted py-3 small\">\n No hay datos para mostrar.\n </div>\n }\n</div>\n\n<c80-modal></c80-modal>", styles: ["@charset \"UTF-8\";input[type=checkbox]{width:1.3rem!important;height:1.3rem!important;accent-color:rgba(226,0,0,.7647058824);background:#fff;margin:0 .25rem;vertical-align:middle;cursor:pointer}.table-responsive{width:100%;overflow-x:auto}.table-responsive .table{min-width:0px;margin-bottom:.5rem}.table-responsive .table .sticky-header{position:sticky;top:0;z-index:10;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .table-actions-header{display:table-cell;vertical-align:middle;padding:.2rem .6rem!important;background-color:#f8f9fa!important}.table-responsive .table .sticky-header .actions-wrapper{display:flex;align-items:center;justify-content:center;gap:.5rem;height:100%}.table-responsive .table .sticky-header th{max-height:31px!important;vertical-align:middle!important;padding:.2rem .6rem!important;font-size:small!important;background-color:#f8f9fa!important;border-bottom:2px solid #dee2e6}.table-responsive .table tbody td{height:35px!important;min-height:35px!important;max-height:35px!important;vertical-align:middle!important;padding:.2rem .8rem!important;font-size:small}.table-responsive .table tbody tr{height:35px!important;min-height:35px!important;max-height:35px!important;cursor:pointer}.table-responsive .table tbody tr:hover{background-color:#f5f5f5}.table-responsive .table tbody input{border:1px solid rgba(34,0,255,.37);height:100%!important;font-size:smaller!important}.table-responsive .table thead th.boolean-column,.table-responsive .table tbody td.boolean-column,.table-responsive .table thead th.selection-column,.table-responsive .table tbody td.selection-column,.table-responsive .table thead th.table-actions-header,.table-responsive .table tbody td.table-actions-header{width:1%;white-space:nowrap}.table-responsive .table thead th.number-column,.table-responsive .table tbody td.number-column{width:1%;white-space:nowrap;text-align:center}.table-responsive .table thead th.number-column input[type=number],.table-responsive .table tbody td.number-column input[type=number]{min-width:120px!important;width:120px!important;text-align:center}.table-responsive .table .actions-cell{white-space:nowrap;padding:0!important}.table-responsive .table .actions-container{display:flex;flex-direction:row;justify-content:center;align-items:center;width:100%;height:100%}\n"] }]
|
|
534
534
|
}], propDecorators: { data$: [{
|
|
535
535
|
type: Input
|
|
536
536
|
}], columns: [{
|
|
@@ -563,4 +563,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
563
563
|
}], selectable: [{
|
|
564
564
|
type: Output
|
|
565
565
|
}] } });
|
|
566
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUF1QjNELE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxZQUFZLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRCxLQUFLLENBQW1CO0lBQ3hCLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7SUFDdkUsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLHlDQUF5QztJQUVuRSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsZ0RBQWdEO0lBQ3pELFlBQVksR0FBRyxJQUFJLFlBQVksRUFBeUQsQ0FBQztJQUN6RixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXFFLENBQUM7SUFDckcsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFnRCxDQUFDO0lBQ2hGLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNoRixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztJQUNuQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO0lBQzNDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNoRixjQUFjLEdBQUcsSUFB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QUFLLEtBQUssTUFBTSxFQUFFO2dCQUUzRixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQzgwSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzgwTW9kYWxDb21wb25lbnQsIE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBDODBUYWJsZUNvbERlZiB7XG4gIGFjY2Vzc29yOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZpc2libGU/OiBib29sZWFuOyAvLyBTaSBubyBzZSBlc3BlY2lmaWNhLCBzZSBhc3VtZSB0cnVlXG4gIHR5cGU/OiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ3Bhc3N3b3JkJyB8ICdlbnVtJzsgLy8gVGlwbyBkZSBkYXRvIHBhcmEgbGEgY29sdW1uYVxuICBvcmRlcj86ICdBU0MnIHwgJ0RFU0MnOyAvLyBPcmRlbmFtaWVudG8gZGUgbGEgY29sdW1uYVxuICByZWFkT25seT86IGJvb2xlYW47IC8vIFNpIG5vIHNlIGVzcGVjaWZpY2EsIHNlIGFzdW1lIGZhbHNlXG4gIGVudW0/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+OyAvLyBPcGNpb25lcyBkZWwgZW51bSBwYXJhIHR5cGUgJ2VudW0nXG4gIGNvbG9yPzogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgc3RyaW5nPjsgLy8gQ29sb3JlcyBDU1MgYmFzYWRvcyBlbiBlbCB2YWxvciBkZSBsYSBjZWxkYVxufVxuXG5leHBvcnQgdHlwZSBJRCA9IG51bWJlciB8IHN0cmluZztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYzgwLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0M4MEljb25Db21wb25lbnQsIEM4ME1vZGFsQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQzgwVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBASW5wdXQoKSBkYXRhJCE6IE9ic2VydmFibGU8VFtdPjtcbiAgQElucHV0KCkgY29sdW1uczogQzgwVGFibGVDb2xEZWZbXSA9IFtdO1xuICBASW5wdXQoKSBzaXplID0gMDsgLy8gVGFtYcOxbyBkZSBsYSB0YWJsYSAoMCA9IHNpbiBsw61taXRlLCA+IDAgYXBsaWNhIG1heC1oZWlnaHQpXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gdHJ1ZTsgLy8gUGVybWl0ZSBzZWxlY2Npw7NuIG3Dumx0aXBsZSBwb3IgZGVmZWN0b1xuICBASW5wdXQoeyB0cmFuc2Zvcm06ICh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScgfSlcbiAgbm9Db25maXJtID0gZmFsc2U7IC8vIFNpIGVzIHRydWUsIG5vIG11ZXN0cmEgY29uZmlybWFjaW9uZXMgbW9kYWxlc1xuICBAT3V0cHV0KCkgY3JlYXRlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJvdzogUGFydGlhbDxUPjsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogSUQ7IGNoYW5nZXM6IFBhcnRpYWw8VD47IGRvbmU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7IH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHZpZXdBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBnZXRSb3dCdXR0b25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlVXBBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgbW92ZURvd25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuXG4gIEBPdXRwdXQoKSBlcnJvckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IHNpZ25hbDxUW10+KFtdKTtcbiAgcmVhZG9ubHkga2V5cyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICBjcmVhdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIG5ld1JvdyA9IHNpZ25hbDxQYXJ0aWFsPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGVkaXRpbmcgPSBzaWduYWw8SUQgfCBudWxsPihudWxsKTsgLy8gaWQgb2Ygcm93IGJlaW5nIGVkaXRlZFxuICByZWFkb25seSBlZGl0Um93ID0gc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IHNpZ25hbDxTZXQ8SUQ+PihuZXcgU2V0KCkpO1xuICByZWFkb25seSBzZWxlY3RBbGxDaGVja2VkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gRmxhZ3MgdG8gY2hlY2sgaWYgZXZlbnRzIGhhdmUgbGlzdGVuZXJzXG4gIHJlYWRvbmx5IGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVmlld0FjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzR2V0Um93QnV0dG9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc01vdmVEb3duQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNTZWxlY3RhYmxlTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgZGF0YVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiAoZXJyIGFzIGFueSk/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGNhcmdhciBkYXRvcyc7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgb3V0cHV0cyBoYXZlIGxpc3RlbmVyc1xuICAgIHRoaXMuaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuY3JlYXRlQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1VwZGF0ZUFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLnVwZGF0ZUFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNEZWxldGVBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5kZWxldGVBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuY2FuY2VsQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy52aWV3QWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc0dldFJvd0J1dHRvbkxpc3RlbmVyLnNldCh0aGlzLmdldFJvd0J1dHRvbkFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5tb3ZlVXBBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5tb3ZlRG93bkFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNTZWxlY3RhYmxlTGlzdGVuZXIuc2V0KHRoaXMuc2VsZWN0YWJsZS5vYnNlcnZlZCk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YSQpIHJldHVybjtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLmRhdGEkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoaXRlbXMpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseVNvcnRpbmcoaXRlbXMpO1xuICAgICAgICB0aGlzLmRhdGEuc2V0KGl0ZW1zKTtcbiAgICAgICAgLy8gU29sbyBtb3N0cmFyIGxhcyBjb2x1bW5hcyB2aXNpYmxlc1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgKGNvbCkgPT4gY29sPy52aXNpYmxlICE9PSBmYWxzZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleXMuc2V0KHZpc2libGVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuYWNjZXNzb3IpKTtcbiAgICAgICAgLy8gUmVzZXQgc2VsZWN0aW9uIHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PlxuICAgICAgICB0aGlzLmVycm9yRXZlbnQuZW1pdCh0aGlzLmdldEVycm9yTWVzc2FnZShlcnIpKSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGF0YVN1Yj8udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIENsb3NlIGFueSBvcGVuIG1vZGFsIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZywgY29sPzogQzgwVGFibGVDb2xEZWYpIHtcbiAgICBpZiAoY29sPy50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgICB0aGlzLnVwZGF0ZU5ld1JvdyhrZXksIGNoZWNrZWQpO1xuICAgIH0gZWxzZSBpZiAoY29sPy50eXBlID09PSAnZW51bScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZU5ld1JvdyhrZXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTmV3Um93KGtleSwgdGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZShyb3c6IFQpIHtcbiAgICBjb25zdCBpZCA9IHJvd1snaWQnXSBhcyBJRDtcblxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5ub0NvbmZpcm0pIHtcbiAgICAgIGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICdDb25maXJtYXIgZWxpbWluYWNpw7NuJyxcbiAgICAgICAgJ8K/RXN0w6Egc2VndXJvIGRlIHF1ZSBkZXNlYSBlbGltaW5hciBlc3RlIGVsZW1lbnRvPyBFc3RhIGFjY2nDs24gbm8gc2UgcHVlZGUgZGVzaGFjZXIuJyxcbiAgICAgICAgJ0VsaW1pbmFyJyxcbiAgICAgICAgJ0NhbmNlbGFyJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICB0aGlzLmRlbGV0ZUFjdGlvbi5lbWl0KHtcbiAgICAgICAgaWQsXG4gICAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25DYW5jZWwocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG5cbiAgICBsZXQgY29uZmlybWVkID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMubm9Db25maXJtKSB7XG4gICAgICBjb25maXJtZWQgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKFxuICAgICAgICAnQ29uZmlybWFyIGNhbmNlbGFjacOzbicsXG4gICAgICAgICfCv0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgY2FuY2VsYXIgZXN0ZSBlbGVtZW50bz8nLFxuICAgICAgICAnQ2FuY2VsYXIgZWxlbWVudG8nLFxuICAgICAgICAnTm8gY2FuY2VsYXInXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIHRoaXMuY2FuY2VsQWN0aW9uLmVtaXQoe1xuICAgICAgICBpZCxcbiAgICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGFydENyZWF0ZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nLnNldCh0cnVlKTtcbiAgICAvLyBJbmljaWFsaXphIG5ld1JvdyBjb24gdG9kb3MgbG9zIGFjY2Vzc29ycyBkZSBjb2x1bW5hcyB2aXNpYmxlcyAoaW5jbHV5ZW5kbyByZWFkT25seSBwYXJhIGNyZWFjacOzbilcbiAgICBjb25zdCByb3c6IFBhcnRpYWw8VD4gPSB7fTtcbiAgICB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKVxuICAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wuYWNjZXNzb3JdID0gJyc7XG4gICAgICB9KTtcbiAgICB0aGlzLm5ld1Jvdy5zZXQocm93KTtcbiAgfVxuXG4gIGNhbmNlbENyZWF0ZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5uZXdSb3cuc2V0KG51bGwpO1xuICB9XG5cbiAgdXBkYXRlTmV3Um93KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLm5ld1JvdygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuICAgIHRoaXMubmV3Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHNhdmVDcmVhdGUoKSB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5uZXdSb3coKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xuXG4gICAgLy8gVmFsaWRhciBjYW1wb3MgcmVxdWVyaWRvcyBhbnRlcyBkZSBjcmVhclxuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IGNvbnZlcnRlZCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZSgoYWNjLCBjb2wpID0+IHtcbiAgICAgIGFjY1tjb2wuYWNjZXNzb3JdID0gdGhpcy5jb252ZXJ0Q2VsbFZhbHVlKHJvd1tjb2wuYWNjZXNzb3JdLCBjb2wpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgYXMgUGFydGlhbDxUPjtcblxuICAgIHRoaXMuY3JlYXRlQWN0aW9uLmVtaXQoe1xuICAgICAgcm93OiBjb252ZXJ0ZWQsXG4gICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsQ3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBjZWxsIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiB0eXBlIG9yIHNhbXBsZSBkYXRhLlxuICAgKiBIYW5kbGVzIHN0cmluZ2lmaWNhdGlvbiBvZiBvYmplY3RzIGZvciBzdHJpbmcgY29sdW1ucy5cbiAgICovXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgb3Igc2FtcGxlIGRhdGEuXG4gICAqIERlbGVnYXRlcyB0byB0eXBlLXNwZWNpZmljIGhlbHBlcnMgZm9yIGNsYXJpdHkgYW5kIG1haW50YWluYWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgY29udmVydENlbGxWYWx1ZSh2YWx1ZTogdW5rbm93biwgY29sOiBDODBUYWJsZUNvbERlZik6IHVua25vd24ge1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnRvTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoY29sLnR5cGUgPT09ICdzdHJpbmcnIHx8IGNvbC50eXBlID09PSAncGFzc3dvcmQnKVxuICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvLyBGYWxsYmFjazogdXNlIHNhbXBsZSBkYXRhIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IHNhbXBsZSA9IHRoaXMuZGF0YSgpWzBdO1xuICAgIGlmIChzYW1wbGUpIHtcbiAgICAgIGNvbnN0IHNhbXBsZVZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUoc2FtcGxlLCBjb2wuYWNjZXNzb3IpO1xuICAgICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICAgICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdGhpcy50b1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHZhbHVlIHRvIGJvb2xlYW4gdXNpbmcgYmVzdCBwcmFjdGljZXMuICovXG4gIHByaXZhdGUgdG9Cb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fCB2YWx1ZS50cmltKCkgPT09ICcxJztcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbHVlID09PSAxO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0cyB2YWx1ZSB0byBudW1iZXIgdXNpbmcgYmVzdCBwcmFjdGljZXMuICovXG4gIHByaXZhdGUgdG9OdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpID09PSAnJyA/IHVuZGVmaW5lZCA6IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWUgPyAxIDogMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHZhbHVlIHRvIHN0cmluZyB1c2luZyBiZXN0IHByYWN0aWNlcywgYWx3YXlzIHN0cmluZ2lmaWVzIG9iamVjdHMuICovXG4gIHByaXZhdGUgdG9TdHJpbmdWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgZnVuY3Rpb25zLCBzeW1ib2xzLCB1bmRlZmluZWQsIGV0Yy4sIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvbkVkaXQocm93OiBUKSB7XG4gICAgdGhpcy5lZGl0aW5nLnNldChyb3dbJ2lkJ10gYXMgSUQpO1xuICAgIGNvbnN0IGVkaXQ6IFBhcnRpYWw8VD4gPSB7fTtcbiAgICB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnZpc2libGUgIT09IGZhbHNlICYmICFjb2wucmVhZE9ubHkpXG4gICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpO1xuICAgICAgICAoZWRpdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbY29sLmFjY2Vzc29yXSA9IHZhbHVlO1xuICAgICAgfSk7XG4gICAgdGhpcy5lZGl0Um93LnNldChlZGl0KTtcbiAgfVxuXG4gIGNhbmNlbEVkaXQoKSB7XG4gICAgdGhpcy5lZGl0aW5nLnNldChudWxsKTtcbiAgICB0aGlzLmVkaXRSb3cuc2V0KG51bGwpO1xuICB9XG5cbiAgb25FZGl0SW5wdXQoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZywgY29sPzogQzgwVGFibGVDb2xEZWYpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5lZGl0Um93KCk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gICAgaWYgKGNvbD8udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgICAgdGhpcy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiBjaGVja2VkIH0pO1xuICAgIH0gZWxzZSBpZiAoY29sPy50eXBlID09PSAnZW51bScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgICB0aGlzLmVkaXRSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IHZhbHVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiB0YXJnZXQudmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZUVkaXQocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ107XG4gICAgaWYgKCh0eXBlb2YgaWQgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBpZCAhPT0gJ251bWJlcicpIHx8ICF0aGlzLmVkaXRSb3coKSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sKSA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UgJiYgIWNvbC5yZWFkT25seVxuICAgICk7XG4gICAgY29uc3QgY29udmVydGVkID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKChhY2MsIGNvbCkgPT4ge1xuICAgICAgYWNjW2NvbC5hY2Nlc3Nvcl0gPSB0aGlzLmNvbnZlcnRDZWxsVmFsdWUoXG4gICAgICAgIHRoaXMuZWRpdFJvdygpIVtjb2wuYWNjZXNzb3JdLFxuICAgICAgICBjb2xcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSBhcyBQYXJ0aWFsPFQ+O1xuXG4gICAgdGhpcy51cGRhdGVBY3Rpb24uZW1pdCh7XG4gICAgICBpZCxcbiAgICAgIGNoYW5nZXM6IGNvbnZlcnRlZCxcbiAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gYXZvaWQgRE9NIHJlLWNyZWF0aW9uIChORzA5NTYgd2FybmluZykuXG4gICAqL1xuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgcm93OiBUKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICByb3cgJiYgdHlwZW9mIHJvdyA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiByb3dcbiAgICAgICAgPyAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsnaWQnXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInID8gaWQgOiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgdmlldyBldmVudCB3aXRoIHRoZSBlbnRpcmUgcm93IGRhdGFcbiAgICovXG4gIG9uVmlldyhyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdBY3Rpb24uZW1pdChyb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBnZXRSb3dCdXR0b25BY3Rpb24gZXZlbnQgd2l0aCB0aGUgZW50aXJlIHJvdyBkYXRhXG4gICAqL1xuICBvbkdldFJvd0J1dHRvbihyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmdldFJvd0J1dHRvbkFjdGlvbi5lbWl0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIG1vdmVVcEFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWRcbiAgICovXG4gIGFzeW5jIG9uTW92ZVVwKHJvdzogVCkge1xuICAgIGNvbnN0IGlkID0gcm93WydpZCddIGFzIElEO1xuICAgIHRoaXMubW92ZVVwQWN0aW9uLmVtaXQoe1xuICAgICAgaWQsXG4gICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBtb3ZlRG93bkFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWRcbiAgICovXG4gIGFzeW5jIG9uTW92ZURvd24ocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG4gICAgdGhpcy5tb3ZlRG93bkFjdGlvbi5lbWl0KHtcbiAgICAgIGlkLFxuICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24gKGUuZy4sICd0YXNrLm5hbWUnKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgYWNjZXNzb3I6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBhY2Nlc3Nvci5zcGxpdCgnLicpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudCAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgPyBjdXJyZW50W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfSwgb2JqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBjZWxsIHVzaW5nIHRoZSBhY2Nlc3Nvciwgc3VwcG9ydGluZyBkb3Qgbm90YXRpb24gZm9yIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAqL1xuICBnZXRDZWxsVmFsdWUocm93OiBULCBhY2Nlc3Nvcjogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKGFjY2Vzc29yLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgYWNjZXNzb3IpO1xuICAgIH1cbiAgICByZXR1cm4gKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbYWNjZXNzb3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGEgY2VsbCwgc2hvd2luZyAnLScgZm9yIGZhbHN5IHZhbHVlcyBleGNlcHQgMCwgZmFsc2UsIGFuZCBlbXB0eSBvYmplY3RzL2FycmF5c1xuICAgKi9cbiAgZ2V0RGlzcGxheVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAvLyBJZiB2YWx1ZSBpcyAwLCBzaG93IGl0XG4gICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICAvLyBJZiB2YWx1ZSBpcyBmYWxzZSwgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYm9vbGVhbiBsb2dpYyBpbiB0ZW1wbGF0ZSwgbm90IGhlcmVcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJ2ZhbHNlJztcbiAgICB9XG4gICAgLy8gSGFuZGxlIG9iamVjdHMgYW5kIGFycmF5cyAoaW5jbHVkaW5nIGVtcHR5IG9uZXMpXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB2YWx1ZSBpcyBvdGhlciBmYWxzeSB2YWx1ZXMgKG51bGwsIHVuZGVmaW5lZCwgJycpLCBzaG93ICctJ1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBvdGhlciB0eXBlcyBleHBsaWNpdGx5XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgICApIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICAvLyBGb3IgYW55IG90aGVyIHR5cGUgKGZ1bmN0aW9uLCBzeW1ib2wsIGV0Yy4pLCByZXR1cm4gYSBzYWZlIGZhbGxiYWNrXG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkaXNwbGF5IHRleHQgZm9yIGFuIGVudW0gdmFsdWVcbiAgICovXG4gIGdldEVudW1EaXNwbGF5VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogQzgwVGFibGVDb2xEZWYpOiBzdHJpbmcge1xuICAgIGlmICghY29sLmVudW0gfHwgKHZhbHVlICE9PSAwICYmICF2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGNvbC5lbnVtW3ZhbHVlIGFzIHN0cmluZyB8IG51bWJlcl07XG4gICAgcmV0dXJuIChcbiAgICAgIGRpc3BsYXlWYWx1ZSB8fFxuICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgICAgICA/IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgOiAnLScpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlbnVtIG9wdGlvbnMgYXMgYW4gYXJyYXkgZm9yIHNlbGVjdCBkcm9wZG93bnNcbiAgICovXG4gIGdldEVudW1PcHRpb25zKFxuICAgIGNvbDogQzgwVGFibGVDb2xEZWZcbiAgKTogeyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXSB7XG4gICAgaWYgKCFjb2wuZW51bSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjb2wuZW51bSkubWFwKChbdmFsdWUsIGxhYmVsXSkgPT4gKHtcbiAgICAgIHZhbHVlOiBpc05hTihOdW1iZXIodmFsdWUpKSA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKSxcbiAgICAgIGxhYmVsLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDU1MgY29sb3IgZm9yIGEgY2VsbCB2YWx1ZSBiYXNlZCBvbiB0aGUgY29sdW1uJ3MgY29sb3IgY29uZmlndXJhdGlvblxuICAgKi9cbiAgZ2V0Q2VsbENvbG9yKHZhbHVlOiB1bmtub3duLCBjb2w6IEM4MFRhYmxlQ29sRGVmKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbC5jb2xvciB8fCAodmFsdWUgIT09IDAgJiYgIXZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbC5jb2xvclt2YWx1ZSBhcyBzdHJpbmcgfCBudW1iZXJdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGEgZWwgbWF4LWhlaWdodCBkZSBsYSB0YWJsYSBiYXNhZG8gZW4gZWwgdGFtYcOxb1xuICAgKiBTaSBzaXplIGVzIDAsIHJldG9ybmEgdW5kZWZpbmVkIChzaW4gbMOtbWl0ZSBkZSBhbHR1cmEpXG4gICAqL1xuICBnZXRUYWJsZU1heEhlaWdodCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnNpemUgPD0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gU2luIGzDrW1pdGUgZGUgYWx0dXJhXG4gICAgfVxuICAgIC8vIEFsdHVyYSBiYXNlIGRlIDQwMHB4ICogc2l6ZVxuICAgIGNvbnN0IGJhc2VIZWlnaHQgPSA0MDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChiYXNlSGVpZ2h0ICogdGhpcy5zaXplKTtcbiAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gbWV0aG9kc1xuICAgKi9cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChuZXcgU2V0KCkpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgY29uc3QgYWxsSXRlbXMgPSB0aGlzLmRhdGEoKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLnNpemUgPT09IGFsbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRGVzZWxlY3QgYWxsXG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlbGVjdCBhbGxcbiAgICAgIGNvbnN0IGFsbElkcyA9IG5ldyBTZXQoYWxsSXRlbXMubWFwKGl0ZW0gPT4gaXRlbVsnaWQnXSBhcyBJRCkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChhbGxJZHMpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSBpdGVtWydpZCddIGFzIElEO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtcygpKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgLy8gU2VsZWNjacOzbiBzaW1wbGU6IHNvbG8gcGVybWl0aXIgdW4gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAgIC8vIERlc2VsZWNjaW9uYXIgZWwgZWxlbWVudG8gYWN0dWFsXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNlbGVjY2lvbmFyIHNvbG8gZXN0ZSBlbGVtZW50b1xuICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgLy8gU2VsZWNjacOzbiBtw7psdGlwbGU6IGRlc2VsZWNjaW9uYXIgZWxlbWVudG8gZXhpc3RlbnRlXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlbGVjY2nDs24gbcO6bHRpcGxlOiBhZ3JlZ2FyIG51ZXZvIGVsZW1lbnRvXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmFkZChpZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChjdXJyZW50U2VsZWN0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXRlKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH0gaXNJdGVtU2VsZWN0ZWQoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBJRDtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkuaGFzKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpLnNpemU7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMuZGF0YSgpLmxlbmd0aDtcblxuICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gdG90YWxDb3VudCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVja2VkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YSgpLmZpbHRlcihpdGVtID0+XG4gICAgICBzZWxlY3RlZElkcy5oYXMoaXRlbVsnaWQnXSBhcyBJRClcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0YWJsZS5lbWl0KHNlbGVjdGVkSXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNvcnRpbmcoaXRlbXM6IFRbXSk6IHZvaWQge1xuICAgIGNvbnN0IG9yZGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wub3JkZXIpO1xuICAgIGlmIChvcmRlcmVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBvcmRlcmVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgaXRlbXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGEsIGNvbC5hY2Nlc3NvcikgYXMgc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHZhbHVlQiA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGIsIGNvbC5hY2Nlc3NvcikgYXMgc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgICAgICAgaWYgKGNvbC5vcmRlciA9PT0gJ0FTQycpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZUEgPiB2YWx1ZUIpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA+IHZhbHVlQikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIiBbc3R5bGUubWF4LWhlaWdodF09XCJnZXRUYWJsZU1heEhlaWdodCgpXCJcbiAgW3N0eWxlLm92ZXJmbG93LXldPVwic2l6ZSA+IDAgPyAnYXV0bycgOiAndmlzaWJsZSdcIj5cbiAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgYWxpZ24tbWlkZGxlXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwidGhlYWQgdGFibGUtbGlnaHQgc3RpY2t5LWhlYWRlclwiPlxuICAgICAgPHRyPlxuICAgICAgICBAaWYgKGhhc1NlbGVjdGFibGVMaXN0ZW5lcigpICYmIGRhdGEoKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXIgc2VsZWN0aW9uLWNvbHVtblwiPlxuICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIiBhcmlhLWxhYmVsPVwiU2VsZWNjaW9uYXIgdG9kb1wiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBjb2wpIHtcbiAgICAgICAgQGlmIChjb2wudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgQGlmIChjb2wudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyIGJvb2xlYW4tY29sdW1uXCI+e3sgY29sLmxhYmVsIH19PC90aD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgIDx0aD57eyBjb2wubGFiZWwgfX08L3RoPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpIHx8XG4gICAgICAgIGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkgfHwgaGFzR2V0Um93QnV0dG9uTGlzdGVuZXIoKSB8fFxuICAgICAgICBoYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc01vdmVEb3duQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICA8dGggY2xhc3M9XCJ0YWJsZS1hY3Rpb25zLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzcGFuPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImFkZFwiIFtkaXNhYmxlZF09XCJjcmVhdGluZygpXCIgdGl0bGU9XCJBZ3JlZ2FyXCIgW3NpemVdPVwiLjZcIlxuICAgICAgICAgICAgICAoaWNvbkNsaWNrKT1cInN0YXJ0Q3JlYXRlKClcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgICAgQGZvciAocm93IG9mIGRhdGEoKTsgdHJhY2sgdHJhY2tCeUlkKGksIHJvdyk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoaGFzU2VsZWN0YWJsZUxpc3RlbmVyKCkgJiYgZGF0YSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzZWxlY3Rpb24tY29sdW1uXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzSXRlbVNlbGVjdGVkKHJvdylcIiAoY2hhbmdlKT1cInRvZ2dsZUl0ZW1TZWxlY3Rpb24ocm93KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlY2Npb25hciBmaWxhICcgKyAoaSArIDEpXCIgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgY29sKSB7XG4gICAgICAgIEBpZiAoY29sLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBib29sZWFuLWNvbHVtblwiPlxuICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10gJiYgIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCIhIWVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl1cIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkVkaXRJbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sLmxhYmVsXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIEBpZiAoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIDxjODAtaWNvbiBpY29uPVwiY2hlY2tcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmIChnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpID09PSBmYWxzZSkge1xuICAgICAgICAgIDxjODAtaWNvbiBpY29uPVwiY2FuY2VsXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICA8dGQ+XG4gICAgICAgICAgQGlmIChlZGl0aW5nKCkgPT09IHJvd1snaWQnXSAmJiAhY29sLnJlYWRPbmx5KSB7XG4gICAgICAgICAgQGlmIChjb2wudHlwZSA9PT0gJ2VudW0nKSB7XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbdmFsdWVdPVwiZWRpdFJvdygpPy5bY29sLmFjY2Vzc29yXSA/PyAnJ1wiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgY29sLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RW51bU9wdGlvbnMoY29sKTsgdHJhY2sgb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgW3R5cGVdPVwiY29sLnR5cGUgPT09ICdudW1iZXInID8gJ251bWJlcicgOiBjb2wudHlwZSA9PT0gJ3Bhc3N3b3JkJyA/ICdwYXNzd29yZCcgOiAndGV4dCdcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiBbcGxhY2Vob2xkZXJdPVwiY29sLmxhYmVsXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvbkVkaXRJbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgQGlmIChjb2wudHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJnZXRDZWxsQ29sb3IoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVwiPioqKioqKjwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2UgaWYgKGNvbC50eXBlID09PSAnZW51bScpIHtcbiAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiZ2V0Q2VsbENvbG9yKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcIj57e1xuICAgICAgICAgICAgZ2V0RW51bURpc3BsYXlWYWx1ZShnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpLCBjb2wpXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2UgaWYgKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvcikgPT09IHRydWUpIHtcbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNoZWNrXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSBpZiAoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNhbmNlbFwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJnZXRDZWxsQ29sb3IoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVwiPnt7IGdldERpc3BsYXlWYWx1ZShnZXRDZWxsVmFsdWUocm93LFxuICAgICAgICAgICAgY29sLmFjY2Vzc29yKSkgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChoYXNDcmVhdGVBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc1VwZGF0ZUFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzRGVsZXRlQWN0aW9uTGlzdGVuZXIoKSB8fFxuICAgICAgICBoYXNDYW5jZWxBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc1ZpZXdBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkgfHxcbiAgICAgICAgaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICBAaWYgKGVkaXRpbmcoKSA9PT0gcm93WydpZCddKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJjaGVja1wiIHRpdGxlPVwiR3VhcmRhclwiIChpY29uQ2xpY2spPVwic2F2ZUVkaXQocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNhbmNlbFwiIGNvbG9yPVwid2FyblwiIHRpdGxlPVwiQ2FuY2VsYXJcIiAoaWNvbkNsaWNrKT1cImNhbmNlbEVkaXQoKVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiZWRpdFwiIHRpdGxlPVwiRWRpdGFyXCIgKGljb25DbGljayk9XCJvbkVkaXQocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiY2FuY2VsX2NpcmNsZVwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgdGl0bGU9XCJDYW5jZWxhclwiIChpY29uQ2xpY2spPVwib25DYW5jZWwocm93KVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cInZpZXdcIiBjb2xvcj1cInByaW1hcnlcIiB0aXRsZT1cIlZlclwiIChpY29uQ2xpY2spPVwib25WaWV3KHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImdldFwiIGNvbG9yPVwic3VjY2Vzc1wiIHRpdGxlPVwiT2J0ZW5lclwiIChpY29uQ2xpY2spPVwib25HZXRSb3dCdXR0b24ocm93KVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiYXJyb3dfdXBcIiBjb2xvcj1cInNlY29uZGFyeVwiIHRpdGxlPVwiTW92ZXIgYXJyaWJhXCIgKGljb25DbGljayk9XCJvbk1vdmVVcChyb3cpXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImFycm93X2Rvd25cIiBjb2xvcj1cInNlY29uZGFyeVwiIHRpdGxlPVwiTW92ZXIgYWJham9cIiAoaWNvbkNsaWNrKT1cIm9uTW92ZURvd24ocm93KVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzRGVsZXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiZGVsZXRlXCIgY29sb3I9XCJ3YXJuXCIgdGl0bGU9XCJCb3JyYXJcIiAoaWNvbkNsaWNrKT1cIm9uRGVsZXRlKHJvdylcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgICBAaWYgKGNyZWF0aW5nKCkgJiYgaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgPHRyPlxuICAgICAgICBAaWYgKGhhc1NlbGVjdGFibGVMaXN0ZW5lcigpICYmIGRhdGEoKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgc2VsZWN0aW9uLWNvbHVtblwiPlxuICAgICAgICAgIDwhLS0gRW1wdHkgY2VsbCBmb3IgYWxpZ25tZW50IC0tPlxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBjb2wpIHtcbiAgICAgICAgQGlmIChjb2wudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgQGlmIChjb2wudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIiEhbmV3Um93KCk/Lltjb2wuYWNjZXNzb3JdXCIgKGNoYW5nZSk9XCJvbklucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sLmxhYmVsXCIgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnZW51bScpIHtcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFt2YWx1ZV09XCJuZXdSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbklucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgY29sLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RW51bU9wdGlvbnMoY29sKTsgdHJhY2sgb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbdHlwZV09XCJjb2wudHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibmV3Um93KCk/Lltjb2wuYWNjZXNzb3JdID8/ICcnXCIgW3BsYWNlaG9sZGVyXT1cImNvbC5sYWJlbFwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBhY3Rpb25zLWNlbGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNoZWNrXCIgdGl0bGU9XCJHdWFyZGFyXCIgKGljb25DbGljayk9XCJzYXZlQ3JlYXRlKClcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJjYW5jZWxcIiBjb2xvcj1cIndhcm5cIiB0aXRsZT1cIkNhbmNlbGFyXCIgKGljb25DbGljayk9XCJjYW5jZWxDcmVhdGUoKVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbiAgQGlmIChkYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIHB5LTMgc21hbGxcIj5cbiAgICBObyBoYXkgZGF0b3MgcGFyYSBtb3N0cmFyLlxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxjODAtbW9kYWw+PC9jODAtbW9kYWw+Il19
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUF1QjNELE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxZQUFZLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRCxLQUFLLENBQW1CO0lBQ3hCLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7SUFDdkUsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLHlDQUF5QztJQUVuRSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsZ0RBQWdEO0lBQ3pELFlBQVksR0FBRyxJQUFJLFlBQVksRUFBeUQsQ0FBQztJQUN6RixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXFFLENBQUM7SUFDckcsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFnRCxDQUFDO0lBQ2hGLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNoRixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztJQUNuQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO0lBQzNDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNoRixjQUFjLEdBQUcsSUFB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QUFLLEtBQUssTUFBTSxFQUFFO2dCQUUzRixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQzgwSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzgwTW9kYWxDb21wb25lbnQsIE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBDODBUYWJsZUNvbERlZiB7XG4gIGFjY2Vzc29yOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZpc2libGU/OiBib29sZWFuOyAvLyBTaSBubyBzZSBlc3BlY2lmaWNhLCBzZSBhc3VtZSB0cnVlXG4gIHR5cGU/OiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ3Bhc3N3b3JkJyB8ICdlbnVtJzsgLy8gVGlwbyBkZSBkYXRvIHBhcmEgbGEgY29sdW1uYVxuICBvcmRlcj86ICdBU0MnIHwgJ0RFU0MnOyAvLyBPcmRlbmFtaWVudG8gZGUgbGEgY29sdW1uYVxuICByZWFkT25seT86IGJvb2xlYW47IC8vIFNpIG5vIHNlIGVzcGVjaWZpY2EsIHNlIGFzdW1lIGZhbHNlXG4gIGVudW0/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+OyAvLyBPcGNpb25lcyBkZWwgZW51bSBwYXJhIHR5cGUgJ2VudW0nXG4gIGNvbG9yPzogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgc3RyaW5nPjsgLy8gQ29sb3JlcyBDU1MgYmFzYWRvcyBlbiBlbCB2YWxvciBkZSBsYSBjZWxkYVxufVxuXG5leHBvcnQgdHlwZSBJRCA9IG51bWJlciB8IHN0cmluZztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYzgwLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0M4MEljb25Db21wb25lbnQsIEM4ME1vZGFsQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQzgwVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBASW5wdXQoKSBkYXRhJCE6IE9ic2VydmFibGU8VFtdPjtcbiAgQElucHV0KCkgY29sdW1uczogQzgwVGFibGVDb2xEZWZbXSA9IFtdO1xuICBASW5wdXQoKSBzaXplID0gMDsgLy8gVGFtYcOxbyBkZSBsYSB0YWJsYSAoMCA9IHNpbiBsw61taXRlLCA+IDAgYXBsaWNhIG1heC1oZWlnaHQpXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gdHJ1ZTsgLy8gUGVybWl0ZSBzZWxlY2Npw7NuIG3Dumx0aXBsZSBwb3IgZGVmZWN0b1xuICBASW5wdXQoeyB0cmFuc2Zvcm06ICh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScgfSlcbiAgbm9Db25maXJtID0gZmFsc2U7IC8vIFNpIGVzIHRydWUsIG5vIG11ZXN0cmEgY29uZmlybWFjaW9uZXMgbW9kYWxlc1xuICBAT3V0cHV0KCkgY3JlYXRlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJvdzogUGFydGlhbDxUPjsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogSUQ7IGNoYW5nZXM6IFBhcnRpYWw8VD47IGRvbmU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7IH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHZpZXdBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBnZXRSb3dCdXR0b25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlVXBBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgbW92ZURvd25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuXG4gIEBPdXRwdXQoKSBlcnJvckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IHNpZ25hbDxUW10+KFtdKTtcbiAgcmVhZG9ubHkga2V5cyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICBjcmVhdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIG5ld1JvdyA9IHNpZ25hbDxQYXJ0aWFsPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGVkaXRpbmcgPSBzaWduYWw8SUQgfCBudWxsPihudWxsKTsgLy8gaWQgb2Ygcm93IGJlaW5nIGVkaXRlZFxuICByZWFkb25seSBlZGl0Um93ID0gc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IHNpZ25hbDxTZXQ8SUQ+PihuZXcgU2V0KCkpO1xuICByZWFkb25seSBzZWxlY3RBbGxDaGVja2VkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gRmxhZ3MgdG8gY2hlY2sgaWYgZXZlbnRzIGhhdmUgbGlzdGVuZXJzXG4gIHJlYWRvbmx5IGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVmlld0FjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzR2V0Um93QnV0dG9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc01vdmVEb3duQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNTZWxlY3RhYmxlTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgZGF0YVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiAoZXJyIGFzIGFueSk/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGNhcmdhciBkYXRvcyc7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgb3V0cHV0cyBoYXZlIGxpc3RlbmVyc1xuICAgIHRoaXMuaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuY3JlYXRlQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1VwZGF0ZUFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLnVwZGF0ZUFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNEZWxldGVBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5kZWxldGVBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuY2FuY2VsQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy52aWV3QWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc0dldFJvd0J1dHRvbkxpc3RlbmVyLnNldCh0aGlzLmdldFJvd0J1dHRvbkFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5tb3ZlVXBBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5tb3ZlRG93bkFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNTZWxlY3RhYmxlTGlzdGVuZXIuc2V0KHRoaXMuc2VsZWN0YWJsZS5vYnNlcnZlZCk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YSQpIHJldHVybjtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLmRhdGEkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoaXRlbXMpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseVNvcnRpbmcoaXRlbXMpO1xuICAgICAgICB0aGlzLmRhdGEuc2V0KGl0ZW1zKTtcbiAgICAgICAgLy8gU29sbyBtb3N0cmFyIGxhcyBjb2x1bW5hcyB2aXNpYmxlc1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgKGNvbCkgPT4gY29sPy52aXNpYmxlICE9PSBmYWxzZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleXMuc2V0KHZpc2libGVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuYWNjZXNzb3IpKTtcbiAgICAgICAgLy8gUmVzZXQgc2VsZWN0aW9uIHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PlxuICAgICAgICB0aGlzLmVycm9yRXZlbnQuZW1pdCh0aGlzLmdldEVycm9yTWVzc2FnZShlcnIpKSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGF0YVN1Yj8udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIENsb3NlIGFueSBvcGVuIG1vZGFsIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZywgY29sPzogQzgwVGFibGVDb2xEZWYpIHtcbiAgICBpZiAoY29sPy50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgICB0aGlzLnVwZGF0ZU5ld1JvdyhrZXksIGNoZWNrZWQpO1xuICAgIH0gZWxzZSBpZiAoY29sPy50eXBlID09PSAnZW51bScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZU5ld1JvdyhrZXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTmV3Um93KGtleSwgdGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZShyb3c6IFQpIHtcbiAgICBjb25zdCBpZCA9IHJvd1snaWQnXSBhcyBJRDtcblxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5ub0NvbmZpcm0pIHtcbiAgICAgIGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICdDb25maXJtYXIgZWxpbWluYWNpw7NuJyxcbiAgICAgICAgJ8K/RXN0w6Egc2VndXJvIGRlIHF1ZSBkZXNlYSBlbGltaW5hciBlc3RlIGVsZW1lbnRvPyBFc3RhIGFjY2nDs24gbm8gc2UgcHVlZGUgZGVzaGFjZXIuJyxcbiAgICAgICAgJ0VsaW1pbmFyJyxcbiAgICAgICAgJ0NhbmNlbGFyJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICB0aGlzLmRlbGV0ZUFjdGlvbi5lbWl0KHtcbiAgICAgICAgaWQsXG4gICAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25DYW5jZWwocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG5cbiAgICBsZXQgY29uZmlybWVkID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMubm9Db25maXJtKSB7XG4gICAgICBjb25maXJtZWQgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKFxuICAgICAgICAnQ29uZmlybWFyIGNhbmNlbGFjacOzbicsXG4gICAgICAgICfCv0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgY2FuY2VsYXIgZXN0ZSBlbGVtZW50bz8nLFxuICAgICAgICAnQ2FuY2VsYXIgZWxlbWVudG8nLFxuICAgICAgICAnTm8gY2FuY2VsYXInXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIHRoaXMuY2FuY2VsQWN0aW9uLmVtaXQoe1xuICAgICAgICBpZCxcbiAgICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGFydENyZWF0ZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nLnNldCh0cnVlKTtcbiAgICAvLyBJbmljaWFsaXphIG5ld1JvdyBjb24gdG9kb3MgbG9zIGFjY2Vzc29ycyBkZSBjb2x1bW5hcyB2aXNpYmxlcyAoaW5jbHV5ZW5kbyByZWFkT25seSBwYXJhIGNyZWFjacOzbilcbiAgICBjb25zdCByb3c6IFBhcnRpYWw8VD4gPSB7fTtcbiAgICB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKVxuICAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wuYWNjZXNzb3JdID0gJyc7XG4gICAgICB9KTtcbiAgICB0aGlzLm5ld1Jvdy5zZXQocm93KTtcbiAgfVxuXG4gIGNhbmNlbENyZWF0ZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5uZXdSb3cuc2V0KG51bGwpO1xuICB9XG5cbiAgdXBkYXRlTmV3Um93KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLm5ld1JvdygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuICAgIHRoaXMubmV3Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHNhdmVDcmVhdGUoKSB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5uZXdSb3coKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xuXG4gICAgLy8gVmFsaWRhciBjYW1wb3MgcmVxdWVyaWRvcyBhbnRlcyBkZSBjcmVhclxuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IGNvbnZlcnRlZCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZSgoYWNjLCBjb2wpID0+IHtcbiAgICAgIGFjY1tjb2wuYWNjZXNzb3JdID0gdGhpcy5jb252ZXJ0Q2VsbFZhbHVlKHJvd1tjb2wuYWNjZXNzb3JdLCBjb2wpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgYXMgUGFydGlhbDxUPjtcblxuICAgIHRoaXMuY3JlYXRlQWN0aW9uLmVtaXQoe1xuICAgICAgcm93OiBjb252ZXJ0ZWQsXG4gICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsQ3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBjZWxsIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiB0eXBlIG9yIHNhbXBsZSBkYXRhLlxuICAgKiBIYW5kbGVzIHN0cmluZ2lmaWNhdGlvbiBvZiBvYmplY3RzIGZvciBzdHJpbmcgY29sdW1ucy5cbiAgICovXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgb3Igc2FtcGxlIGRhdGEuXG4gICAqIERlbGVnYXRlcyB0byB0eXBlLXNwZWNpZmljIGhlbHBlcnMgZm9yIGNsYXJpdHkgYW5kIG1haW50YWluYWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgY29udmVydENlbGxWYWx1ZSh2YWx1ZTogdW5rbm93biwgY29sOiBDODBUYWJsZUNvbERlZik6IHVua25vd24ge1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnRvTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoY29sLnR5cGUgPT09ICdzdHJpbmcnIHx8IGNvbC50eXBlID09PSAncGFzc3dvcmQnKVxuICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvLyBGYWxsYmFjazogdXNlIHNhbXBsZSBkYXRhIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IHNhbXBsZSA9IHRoaXMuZGF0YSgpWzBdO1xuICAgIGlmIChzYW1wbGUpIHtcbiAgICAgIGNvbnN0IHNhbXBsZVZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUoc2FtcGxlLCBjb2wuYWNjZXNzb3IpO1xuICAgICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICAgICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdGhpcy50b1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHZhbHVlIHRvIGJvb2xlYW4gdXNpbmcgYmVzdCBwcmFjdGljZXMuICovXG4gIHByaXZhdGUgdG9Cb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fCB2YWx1ZS50cmltKCkgPT09ICcxJztcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbHVlID09PSAxO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0cyB2YWx1ZSB0byBudW1iZXIgdXNpbmcgYmVzdCBwcmFjdGljZXMuICovXG4gIHByaXZhdGUgdG9OdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpID09PSAnJyA/IHVuZGVmaW5lZCA6IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWUgPyAxIDogMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHZhbHVlIHRvIHN0cmluZyB1c2luZyBiZXN0IHByYWN0aWNlcywgYWx3YXlzIHN0cmluZ2lmaWVzIG9iamVjdHMuICovXG4gIHByaXZhdGUgdG9TdHJpbmdWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgZnVuY3Rpb25zLCBzeW1ib2xzLCB1bmRlZmluZWQsIGV0Yy4sIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvbkVkaXQocm93OiBUKSB7XG4gICAgdGhpcy5lZGl0aW5nLnNldChyb3dbJ2lkJ10gYXMgSUQpO1xuICAgIGNvbnN0IGVkaXQ6IFBhcnRpYWw8VD4gPSB7fTtcbiAgICB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnZpc2libGUgIT09IGZhbHNlICYmICFjb2wucmVhZE9ubHkpXG4gICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpO1xuICAgICAgICAoZWRpdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbY29sLmFjY2Vzc29yXSA9IHZhbHVlO1xuICAgICAgfSk7XG4gICAgdGhpcy5lZGl0Um93LnNldChlZGl0KTtcbiAgfVxuXG4gIGNhbmNlbEVkaXQoKSB7XG4gICAgdGhpcy5lZGl0aW5nLnNldChudWxsKTtcbiAgICB0aGlzLmVkaXRSb3cuc2V0KG51bGwpO1xuICB9XG5cbiAgb25FZGl0SW5wdXQoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZywgY29sPzogQzgwVGFibGVDb2xEZWYpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5lZGl0Um93KCk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gICAgaWYgKGNvbD8udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgICAgdGhpcy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiBjaGVja2VkIH0pO1xuICAgIH0gZWxzZSBpZiAoY29sPy50eXBlID09PSAnZW51bScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgICB0aGlzLmVkaXRSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IHZhbHVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiB0YXJnZXQudmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZUVkaXQocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ107XG4gICAgaWYgKCh0eXBlb2YgaWQgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBpZCAhPT0gJ251bWJlcicpIHx8ICF0aGlzLmVkaXRSb3coKSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sKSA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UgJiYgIWNvbC5yZWFkT25seVxuICAgICk7XG4gICAgY29uc3QgY29udmVydGVkID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKChhY2MsIGNvbCkgPT4ge1xuICAgICAgYWNjW2NvbC5hY2Nlc3Nvcl0gPSB0aGlzLmNvbnZlcnRDZWxsVmFsdWUoXG4gICAgICAgIHRoaXMuZWRpdFJvdygpIVtjb2wuYWNjZXNzb3JdLFxuICAgICAgICBjb2xcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSBhcyBQYXJ0aWFsPFQ+O1xuXG4gICAgdGhpcy51cGRhdGVBY3Rpb24uZW1pdCh7XG4gICAgICBpZCxcbiAgICAgIGNoYW5nZXM6IGNvbnZlcnRlZCxcbiAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gYXZvaWQgRE9NIHJlLWNyZWF0aW9uIChORzA5NTYgd2FybmluZykuXG4gICAqL1xuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgcm93OiBUKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICByb3cgJiYgdHlwZW9mIHJvdyA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiByb3dcbiAgICAgICAgPyAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsnaWQnXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInID8gaWQgOiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgdmlldyBldmVudCB3aXRoIHRoZSBlbnRpcmUgcm93IGRhdGFcbiAgICovXG4gIG9uVmlldyhyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdBY3Rpb24uZW1pdChyb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBnZXRSb3dCdXR0b25BY3Rpb24gZXZlbnQgd2l0aCB0aGUgZW50aXJlIHJvdyBkYXRhXG4gICAqL1xuICBvbkdldFJvd0J1dHRvbihyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmdldFJvd0J1dHRvbkFjdGlvbi5lbWl0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIG1vdmVVcEFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWRcbiAgICovXG4gIGFzeW5jIG9uTW92ZVVwKHJvdzogVCkge1xuICAgIGNvbnN0IGlkID0gcm93WydpZCddIGFzIElEO1xuICAgIHRoaXMubW92ZVVwQWN0aW9uLmVtaXQoe1xuICAgICAgaWQsXG4gICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBtb3ZlRG93bkFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWRcbiAgICovXG4gIGFzeW5jIG9uTW92ZURvd24ocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG4gICAgdGhpcy5tb3ZlRG93bkFjdGlvbi5lbWl0KHtcbiAgICAgIGlkLFxuICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24gKGUuZy4sICd0YXNrLm5hbWUnKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgYWNjZXNzb3I6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBhY2Nlc3Nvci5zcGxpdCgnLicpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudCAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgPyBjdXJyZW50W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfSwgb2JqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBjZWxsIHVzaW5nIHRoZSBhY2Nlc3Nvciwgc3VwcG9ydGluZyBkb3Qgbm90YXRpb24gZm9yIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAqL1xuICBnZXRDZWxsVmFsdWUocm93OiBULCBhY2Nlc3Nvcjogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKGFjY2Vzc29yLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgYWNjZXNzb3IpO1xuICAgIH1cbiAgICByZXR1cm4gKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbYWNjZXNzb3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGEgY2VsbCwgc2hvd2luZyAnLScgZm9yIGZhbHN5IHZhbHVlcyBleGNlcHQgMCwgZmFsc2UsIGFuZCBlbXB0eSBvYmplY3RzL2FycmF5c1xuICAgKi9cbiAgZ2V0RGlzcGxheVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAvLyBJZiB2YWx1ZSBpcyAwLCBzaG93IGl0XG4gICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICAvLyBJZiB2YWx1ZSBpcyBmYWxzZSwgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYm9vbGVhbiBsb2dpYyBpbiB0ZW1wbGF0ZSwgbm90IGhlcmVcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJ2ZhbHNlJztcbiAgICB9XG4gICAgLy8gSGFuZGxlIG9iamVjdHMgYW5kIGFycmF5cyAoaW5jbHVkaW5nIGVtcHR5IG9uZXMpXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB2YWx1ZSBpcyBvdGhlciBmYWxzeSB2YWx1ZXMgKG51bGwsIHVuZGVmaW5lZCwgJycpLCBzaG93ICctJ1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBvdGhlciB0eXBlcyBleHBsaWNpdGx5XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgICApIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICAvLyBGb3IgYW55IG90aGVyIHR5cGUgKGZ1bmN0aW9uLCBzeW1ib2wsIGV0Yy4pLCByZXR1cm4gYSBzYWZlIGZhbGxiYWNrXG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkaXNwbGF5IHRleHQgZm9yIGFuIGVudW0gdmFsdWVcbiAgICovXG4gIGdldEVudW1EaXNwbGF5VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogQzgwVGFibGVDb2xEZWYpOiBzdHJpbmcge1xuICAgIGlmICghY29sLmVudW0gfHwgKHZhbHVlICE9PSAwICYmICF2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGNvbC5lbnVtW3ZhbHVlIGFzIHN0cmluZyB8IG51bWJlcl07XG4gICAgcmV0dXJuIChcbiAgICAgIGRpc3BsYXlWYWx1ZSB8fFxuICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgICAgICA/IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgOiAnLScpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlbnVtIG9wdGlvbnMgYXMgYW4gYXJyYXkgZm9yIHNlbGVjdCBkcm9wZG93bnNcbiAgICovXG4gIGdldEVudW1PcHRpb25zKFxuICAgIGNvbDogQzgwVGFibGVDb2xEZWZcbiAgKTogeyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXSB7XG4gICAgaWYgKCFjb2wuZW51bSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjb2wuZW51bSkubWFwKChbdmFsdWUsIGxhYmVsXSkgPT4gKHtcbiAgICAgIHZhbHVlOiBpc05hTihOdW1iZXIodmFsdWUpKSA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKSxcbiAgICAgIGxhYmVsLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDU1MgY29sb3IgZm9yIGEgY2VsbCB2YWx1ZSBiYXNlZCBvbiB0aGUgY29sdW1uJ3MgY29sb3IgY29uZmlndXJhdGlvblxuICAgKi9cbiAgZ2V0Q2VsbENvbG9yKHZhbHVlOiB1bmtub3duLCBjb2w6IEM4MFRhYmxlQ29sRGVmKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbC5jb2xvciB8fCAodmFsdWUgIT09IDAgJiYgIXZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbC5jb2xvclt2YWx1ZSBhcyBzdHJpbmcgfCBudW1iZXJdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGEgZWwgbWF4LWhlaWdodCBkZSBsYSB0YWJsYSBiYXNhZG8gZW4gZWwgdGFtYcOxb1xuICAgKiBTaSBzaXplIGVzIDAsIHJldG9ybmEgdW5kZWZpbmVkIChzaW4gbMOtbWl0ZSBkZSBhbHR1cmEpXG4gICAqL1xuICBnZXRUYWJsZU1heEhlaWdodCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnNpemUgPD0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gU2luIGzDrW1pdGUgZGUgYWx0dXJhXG4gICAgfVxuICAgIC8vIEFsdHVyYSBiYXNlIGRlIDQwMHB4ICogc2l6ZVxuICAgIGNvbnN0IGJhc2VIZWlnaHQgPSA0MDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChiYXNlSGVpZ2h0ICogdGhpcy5zaXplKTtcbiAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gbWV0aG9kc1xuICAgKi9cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChuZXcgU2V0KCkpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgY29uc3QgYWxsSXRlbXMgPSB0aGlzLmRhdGEoKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLnNpemUgPT09IGFsbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRGVzZWxlY3QgYWxsXG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlbGVjdCBhbGxcbiAgICAgIGNvbnN0IGFsbElkcyA9IG5ldyBTZXQoYWxsSXRlbXMubWFwKGl0ZW0gPT4gaXRlbVsnaWQnXSBhcyBJRCkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChhbGxJZHMpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSBpdGVtWydpZCddIGFzIElEO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtcygpKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgLy8gU2VsZWNjacOzbiBzaW1wbGU6IHNvbG8gcGVybWl0aXIgdW4gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAgIC8vIERlc2VsZWNjaW9uYXIgZWwgZWxlbWVudG8gYWN0dWFsXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNlbGVjY2lvbmFyIHNvbG8gZXN0ZSBlbGVtZW50b1xuICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgLy8gU2VsZWNjacOzbiBtw7psdGlwbGU6IGRlc2VsZWNjaW9uYXIgZWxlbWVudG8gZXhpc3RlbnRlXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlbGVjY2nDs24gbcO6bHRpcGxlOiBhZ3JlZ2FyIG51ZXZvIGVsZW1lbnRvXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmFkZChpZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChjdXJyZW50U2VsZWN0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXRlKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH0gaXNJdGVtU2VsZWN0ZWQoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBJRDtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkuaGFzKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpLnNpemU7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMuZGF0YSgpLmxlbmd0aDtcblxuICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gdG90YWxDb3VudCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVja2VkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YSgpLmZpbHRlcihpdGVtID0+XG4gICAgICBzZWxlY3RlZElkcy5oYXMoaXRlbVsnaWQnXSBhcyBJRClcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0YWJsZS5lbWl0KHNlbGVjdGVkSXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNvcnRpbmcoaXRlbXM6IFRbXSk6IHZvaWQge1xuICAgIGNvbnN0IG9yZGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wub3JkZXIpO1xuICAgIGlmIChvcmRlcmVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBvcmRlcmVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgaXRlbXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGEsIGNvbC5hY2Nlc3NvcikgYXMgc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHZhbHVlQiA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGIsIGNvbC5hY2Nlc3NvcikgYXMgc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgICAgICAgaWYgKGNvbC5vcmRlciA9PT0gJ0FTQycpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZUEgPiB2YWx1ZUIpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA+IHZhbHVlQikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIiBbc3R5bGUubWF4LWhlaWdodF09XCJnZXRUYWJsZU1heEhlaWdodCgpXCIgW3N0eWxlLm92ZXJmbG93LXldPVwic2l6ZSA+IDAgPyAnYXV0bycgOiAndmlzaWJsZSdcIj5cbiAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgYWxpZ24tbWlkZGxlXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwidGhlYWQgdGFibGUtbGlnaHQgc3RpY2t5LWhlYWRlclwiPlxuICAgICAgPHRyPlxuICAgICAgICBAaWYgKGhhc1NlbGVjdGFibGVMaXN0ZW5lcigpICYmIGRhdGEoKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXIgc2VsZWN0aW9uLWNvbHVtblwiPlxuICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSgpXCIgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiIGFyaWEtbGFiZWw9XCJTZWxlY2Npb25hciB0b2RvXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrIGNvbCkge1xuICAgICAgICBAaWYgKGNvbC52aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXIgYm9vbGVhbi1jb2x1bW5cIj57eyBjb2wubGFiZWwgfX08L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmIChjb2wudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXIgbnVtYmVyLWNvbHVtblwiPnt7IGNvbC5sYWJlbCB9fTwvdGg+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICA8dGg+e3sgY29sLmxhYmVsIH19PC90aD5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChoYXNDcmVhdGVBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc1VwZGF0ZUFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzRGVsZXRlQWN0aW9uTGlzdGVuZXIoKSB8fFxuICAgICAgICBoYXNDYW5jZWxBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc1ZpZXdBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkgfHxcbiAgICAgICAgaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgPHRoIGNsYXNzPVwidGFibGUtYWN0aW9ucy1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c3Bhbj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgQGlmIChoYXNDcmVhdGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJhZGRcIiBbZGlzYWJsZWRdPVwiY3JlYXRpbmcoKVwiIHRpdGxlPVwiQWdyZWdhclwiIFtzaXplXT1cIi42XCIgKGljb25DbGljayk9XCJzdGFydENyZWF0ZSgpXCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIEBmb3IgKHJvdyBvZiBkYXRhKCk7IHRyYWNrIHRyYWNrQnlJZChpLCByb3cpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgPHRyPlxuICAgICAgICBAaWYgKGhhc1NlbGVjdGFibGVMaXN0ZW5lcigpICYmIGRhdGEoKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgc2VsZWN0aW9uLWNvbHVtblwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc0l0ZW1TZWxlY3RlZChyb3cpXCIgKGNoYW5nZSk9XCJ0b2dnbGVJdGVtU2VsZWN0aW9uKHJvdylcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlY2Npb25hciBmaWxhICcgKyAoaSArIDEpXCIgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgY29sKSB7XG4gICAgICAgIEBpZiAoY29sLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBib29sZWFuLWNvbHVtblwiPlxuICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10gJiYgIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCIhIWVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl1cIiAoY2hhbmdlKT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2wubGFiZWxcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgQGlmIChnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpID09PSB0cnVlKSB7XG4gICAgICAgICAgPGM4MC1pY29uIGljb249XCJjaGVja1wiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2UgaWYgKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgPGM4MC1pY29uIGljb249XCJjYW5jZWxcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAoY29sLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIG51bWJlci1jb2x1bW5cIj5cbiAgICAgICAgICBAaWYgKGVkaXRpbmcoKSA9PT0gcm93WydpZCddICYmICFjb2wucmVhZE9ubHkpIHtcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgdHlwZT1cIm51bWJlclwiIFt2YWx1ZV09XCJlZGl0Um93KCk/Lltjb2wuYWNjZXNzb3JdID8/ICcnXCIgW3BsYWNlaG9sZGVyXT1cImNvbC5sYWJlbFwiIChpbnB1dCk9XCJvbkVkaXRJbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiZ2V0Q2VsbENvbG9yKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcIj57eyBnZXREaXNwbGF5VmFsdWUoZ2V0Q2VsbFZhbHVlKHJvdyxcbiAgICAgICAgICAgIGNvbC5hY2Nlc3NvcikpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICBAaWYgKGVkaXRpbmcoKSA9PT0gcm93WydpZCddICYmICFjb2wucmVhZE9ubHkpIHtcbiAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnZW51bScpIHtcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFt2YWx1ZV09XCJlZGl0Um93KCk/Lltjb2wuYWNjZXNzb3JdID8/ICcnXCIgKGNoYW5nZSk9XCJvbkVkaXRJbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPnt7IGNvbC5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIGdldEVudW1PcHRpb25zKGNvbCk7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgW3R5cGVdPVwiY29sLnR5cGUgPT09ICdwYXNzd29yZCcgPyAncGFzc3dvcmQnIDogJ3RleHQnXCIgW3ZhbHVlXT1cImVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiBbcGxhY2Vob2xkZXJdPVwiY29sLmxhYmVsXCIgKGlucHV0KT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgICAgPHNwYW4gW3N0eWxlLmNvbG9yXT1cImdldENlbGxDb2xvcihnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpLCBjb2wpXCI+KioqKioqPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSBpZiAoY29sLnR5cGUgPT09ICdlbnVtJykge1xuICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJnZXRDZWxsQ29sb3IoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVwiPnt7XG4gICAgICAgICAgICBnZXRFbnVtRGlzcGxheVZhbHVlKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSBpZiAoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIDxjODAtaWNvbiBpY29uPVwiY2hlY2tcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmIChnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpID09PSBmYWxzZSkge1xuICAgICAgICAgIDxjODAtaWNvbiBpY29uPVwiY2FuY2VsXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPHNwYW4gW3N0eWxlLmNvbG9yXT1cImdldENlbGxDb2xvcihnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpLCBjb2wpXCI+e3sgZ2V0RGlzcGxheVZhbHVlKGdldENlbGxWYWx1ZShyb3csXG4gICAgICAgICAgICBjb2wuYWNjZXNzb3IpKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpIHx8XG4gICAgICAgIGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkgfHwgaGFzR2V0Um93QnV0dG9uTGlzdGVuZXIoKSB8fFxuICAgICAgICBoYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc01vdmVEb3duQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBhY3Rpb25zLWNlbGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10pIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNoZWNrXCIgdGl0bGU9XCJHdWFyZGFyXCIgKGljb25DbGljayk9XCJzYXZlRWRpdChyb3cpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiY2FuY2VsXCIgY29sb3I9XCJ3YXJuXCIgdGl0bGU9XCJDYW5jZWxhclwiIChpY29uQ2xpY2spPVwiY2FuY2VsRWRpdCgpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChoYXNVcGRhdGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJlZGl0XCIgdGl0bGU9XCJFZGl0YXJcIiAoaWNvbkNsaWNrKT1cIm9uRWRpdChyb3cpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNDYW5jZWxBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJjYW5jZWxfY2lyY2xlXCIgY29sb3I9XCJzZWNvbmRhcnlcIiB0aXRsZT1cIkNhbmNlbGFyXCIgKGljb25DbGljayk9XCJvbkNhbmNlbChyb3cpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNWaWV3QWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwidmlld1wiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwiVmVyXCIgKGljb25DbGljayk9XCJvblZpZXcocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzR2V0Um93QnV0dG9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiZ2V0XCIgY29sb3I9XCJzdWNjZXNzXCIgdGl0bGU9XCJPYnRlbmVyXCIgKGljb25DbGljayk9XCJvbkdldFJvd0J1dHRvbihyb3cpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNNb3ZlVXBBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJhcnJvd191cFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgdGl0bGU9XCJNb3ZlciBhcnJpYmFcIiAoaWNvbkNsaWNrKT1cIm9uTW92ZVVwKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc01vdmVEb3duQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiYXJyb3dfZG93blwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgdGl0bGU9XCJNb3ZlciBhYmFqb1wiIChpY29uQ2xpY2spPVwib25Nb3ZlRG93bihyb3cpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJkZWxldGVcIiBjb2xvcj1cIndhcm5cIiB0aXRsZT1cIkJvcnJhclwiIChpY29uQ2xpY2spPVwib25EZWxldGUocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY3JlYXRpbmcoKSAmJiBoYXNDcmVhdGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoaGFzU2VsZWN0YWJsZUxpc3RlbmVyKCkgJiYgZGF0YSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzZWxlY3Rpb24tY29sdW1uXCI+XG4gICAgICAgICAgPCEtLSBFbXB0eSBjZWxsIGZvciBhbGlnbm1lbnQgLS0+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrIGNvbCkge1xuICAgICAgICBAaWYgKGNvbC52aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiISFuZXdSb3coKT8uW2NvbC5hY2Nlc3Nvcl1cIiAoY2hhbmdlKT1cIm9uSW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbC5sYWJlbFwiIC8+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH0gQGVsc2UgaWYgKGNvbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBudW1iZXItY29sdW1uXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwibmV3Um93KCk/Lltjb2wuYWNjZXNzb3JdID8/ICcnXCIgW3BsYWNlaG9sZGVyXT1cImNvbC5sYWJlbFwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnZW51bScpIHtcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFt2YWx1ZV09XCJuZXdSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiAoY2hhbmdlKT1cIm9uSW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyBjb2wubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBnZXRFbnVtT3B0aW9ucyhjb2wpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cIm5ld1JvdygpPy5bY29sLmFjY2Vzc29yXSA/PyAnJ1wiIFtwbGFjZWhvbGRlcl09XCJjb2wubGFiZWxcIiAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBhY3Rpb25zLWNlbGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNoZWNrXCIgdGl0bGU9XCJHdWFyZGFyXCIgKGljb25DbGljayk9XCJzYXZlQ3JlYXRlKClcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJjYW5jZWxcIiBjb2xvcj1cIndhcm5cIiB0aXRsZT1cIkNhbmNlbGFyXCIgKGljb25DbGljayk9XCJjYW5jZWxDcmVhdGUoKVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbiAgQGlmIChkYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIHB5LTMgc21hbGxcIj5cbiAgICBObyBoYXkgZGF0b3MgcGFyYSBtb3N0cmFyLlxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxjODAtbW9kYWw+PC9jODAtbW9kYWw+Il19
|