@sunbird-cb/cbp-ai 0.1.73 → 0.1.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.mjs +25 -3
- package/esm2022/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.mjs +2 -2
- package/esm2022/lib/components/generate-course-recommendation/generate-course-recommendation.component.mjs +92 -34
- package/esm2022/lib/components/publish-request-form/publish-approve-request-form.component.mjs +14 -4
- package/esm2022/lib/components/reject-request-form/reject-request-form.component.mjs +10 -6
- package/esm2022/lib/components/review-request/review-request.component.mjs +2 -2
- package/esm2022/lib/components/role-mapping-generation/role-mapping-generation.component.mjs +29 -5
- package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +299 -45
- package/esm2022/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.mjs +5 -4
- package/esm2022/lib/modules/shared/services/shared.service.mjs +9 -2
- package/esm2022/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.mjs +31 -16
- package/esm2022/lib/modules/upload-document-page/upload-document-page.component.mjs +13 -7
- package/fesm2022/sunbird-cb-cbp-ai.mjs +545 -154
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.d.ts +3 -0
- package/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.d.ts.map +1 -1
- package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts +2 -0
- package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts.map +1 -1
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts +2 -0
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts.map +1 -1
- package/lib/components/reject-request-form/reject-request-form.component.d.ts +1 -0
- package/lib/components/reject-request-form/reject-request-form.component.d.ts.map +1 -1
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts +2 -0
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts.map +1 -1
- package/lib/components/suggest-more-courses/suggest-more-courses.component.d.ts +34 -3
- package/lib/components/suggest-more-courses/suggest-more-courses.component.d.ts.map +1 -1
- package/lib/components/update-designation-hierarchy/update-designation-hierarchy.component.d.ts.map +1 -1
- package/lib/modules/shared/services/shared.service.d.ts +1 -0
- package/lib/modules/shared/services/shared.service.d.ts.map +1 -1
- package/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.d.ts +1 -0
- package/lib/modules/upload-document-page/upload-dialog/upload-dialog.component.d.ts.map +1 -1
- package/lib/modules/upload-document-page/upload-document-page.component.d.ts +4 -1
- package/lib/modules/upload-document-page/upload-document-page.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.75.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.73.tgz +0 -0
|
@@ -163,7 +163,8 @@ export class UpdateDesignationHierarchyComponent {
|
|
|
163
163
|
name: r.designation_name,
|
|
164
164
|
sort_order: r.sort_order || index + 1,
|
|
165
165
|
searchFilter: '',
|
|
166
|
-
filteredNumbers: [...this.numbers]
|
|
166
|
+
filteredNumbers: [...this.numbers],
|
|
167
|
+
wing_division_section: r.wing_division_section
|
|
167
168
|
}));
|
|
168
169
|
this.loading = false;
|
|
169
170
|
this.numbers = Array.from({ length: this.designations.length }, (_, i) => i + 1);
|
|
@@ -222,14 +223,14 @@ export class UpdateDesignationHierarchyComponent {
|
|
|
222
223
|
return item.id;
|
|
223
224
|
}
|
|
224
225
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UpdateDesignationHierarchyComponent, deps: [{ token: i1.HttpClient }, { token: i2.SharedService }, { token: i3.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UpdateDesignationHierarchyComponent, selector: "app-update-designation-hierarchy", outputs: { closeDrawer: "closeDrawer", submitted: "submitted" }, ngImport: i0, template: "<div class=\"overlay\" *ngIf=\"isOpen\" (click)=\"cancel()\"></div>\n\n<div class=\"drawer\" [class.open]=\"isOpen\">\n\n <!-- HEADER -->\n <div class=\"drawer-header\">\n <h4>Update Designation Hierarchy</h4>\n <button class=\"close-btn\" (click)=\"cancel()\">\u2715</button>\n </div>\n\n <!-- BODY -->\n <div class=\"drawer-body\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n\n <div class=\"designation-item\" *ngFor=\"let item of designations; trackBy: trackById; let i = index\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n\n <div class=\"designation-name\">{{ item.name }}</div>\n\n <!-- Custom Select -->\n <div class=\"custom-select\">\n <div class=\"selected-value\" (click)=\"toggleDropdown(item, $event)\">\n {{ item.sort_order }}\n <span class=\"chevron\" [class.open]=\"openDropdownId === item.id\"><mat-icon>arrow_drop_down</mat-icon></span>\n </div>\n\n <div class=\"dropdown\" [id]=\"'dropdown-' + item.id\" *ngIf=\"openDropdownId === item.id\"\n (click)=\"$event.stopPropagation()\">\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"item.searchFilter\"\n (ngModelChange)=\"filterNumbers(item)\" class=\"search-box\">\n\n <div class=\"option\" *ngFor=\"let num of item.filteredNumbers\"\n (click)=\"selectNumber(item, num, $event)\">\n {{ num }}\n </div>\n </div>\n\n </div>\n\n </div>\n\n\n\n\n\n </div>\n\n <!-- FOOTER -->\n <div class=\"drawer-footer\">\n <button class=\"btn cancel\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn submit\" (click)=\"submit()\">Submit</button>\n </div>\n\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".overlay{position:fixed;inset:0;background:#0006;z-index:999}.drawer{position:fixed;top:0;right:-420px;width:600px;height:100vh;background:#fff;box-shadow:-2px 0 12px #00000026;transition:right .3s ease;z-index:1000;display:flex;flex-direction:column}.drawer.open{right:0}.drawer-header{position:sticky;top:0;padding:16px;background:#fff;border-bottom:1px solid #eee;display:flex;justify-content:space-between;align-items:center;z-index:10}.close-btn{border:none;background:transparent;font-size:18px;cursor:pointer}.drawer-body{flex:1;overflow-y:auto;padding:16px}.designation-item{display:flex;align-items:center;gap:12px;padding:12px;margin-bottom:10px;border:1px solid #eee;border-radius:8px;background:#fafafa}.drag-handle{cursor:move}.designation-name{flex:1}.drawer-footer{position:sticky;bottom:0;background:#fff;padding:16px;border-top:1px solid #eee;display:flex;justify-content:space-between}.btn{padding:8px 18px;border-radius:6px;border:none;cursor:pointer}.cancel{background:#f1f1f1}.submit{background:#1b4ca1;color:#fff}.designation-item select{padding:6px 10px;border:1px solid #ccc;border-radius:8px;background-color:#fff;font-size:14px;outline:none;cursor:pointer;transition:border-color .2s,box-shadow .2s}.designation-item select:focus{border-color:#1b4ca1;box-shadow:0 0 3px #007bff80}.custom-select{position:relative;width:120px;border:1px solid #ccc;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.selected-value{padding:6px 10px;display:flex;justify-content:space-between;align-items:center}.chevron{transition:transform .2s ease}.chevron.open{transform:rotate(180deg)}.dropdown{position:absolute;top:100%;left:0;width:100%;max-height:180px;overflow-y:auto;border:1px solid #ccc;background:#fff;z-index:1000;box-shadow:0 2px 6px #0003}.dropdown .search-box{width:90%;margin:6px auto;padding:4px 6px;display:block;border:1px solid #aaa;border-radius:4px}.option{padding:6px 10px;cursor:pointer}.option:hover{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
226
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UpdateDesignationHierarchyComponent, selector: "app-update-designation-hierarchy", outputs: { closeDrawer: "closeDrawer", submitted: "submitted" }, ngImport: i0, template: "<div class=\"overlay\" *ngIf=\"isOpen\" (click)=\"cancel()\"></div>\n\n<div class=\"drawer\" [class.open]=\"isOpen\">\n\n <!-- HEADER -->\n <div class=\"drawer-header\">\n <h4>Update Designation Hierarchy</h4>\n <button class=\"close-btn\" (click)=\"cancel()\">\u2715</button>\n </div>\n\n <!-- BODY -->\n <div class=\"drawer-body\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n\n <div class=\"designation-item\" *ngFor=\"let item of designations; trackBy: trackById; let i = index\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n\n <div class=\"designation-name\">\n <span style=\"color:#000\">{{ item.name }}</span><br/>\n <span class=\"wing-division-font\">Wing/Division - <span *ngIf=\"item.wing_division_section\">{{ item.wing_division_section }}</span>\n <span class=\"wing-division-font\" *ngIf=\"!item.wing_division_section\">N/A</span></span>\n </div>\n\n\n <!-- Custom Select -->\n <div class=\"custom-select\">\n <div class=\"selected-value\" (click)=\"toggleDropdown(item, $event)\">\n {{ item.sort_order }}\n <span class=\"chevron\" [class.open]=\"openDropdownId === item.id\"><mat-icon>arrow_drop_down</mat-icon></span>\n </div>\n\n <div class=\"dropdown\" [id]=\"'dropdown-' + item.id\" *ngIf=\"openDropdownId === item.id\"\n (click)=\"$event.stopPropagation()\">\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"item.searchFilter\"\n (ngModelChange)=\"filterNumbers(item)\" class=\"search-box\">\n\n <div class=\"option\" *ngFor=\"let num of item.filteredNumbers\"\n (click)=\"selectNumber(item, num, $event)\">\n {{ num }}\n </div>\n </div>\n\n </div>\n\n </div>\n\n\n\n\n\n </div>\n\n <!-- FOOTER -->\n <div class=\"drawer-footer\">\n <button class=\"btn cancel\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn submit\" (click)=\"submit()\">Submit</button>\n </div>\n\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".overlay{position:fixed;inset:0;background:#0006;z-index:999}.drawer{position:fixed;top:0;right:-420px;width:600px;height:100vh;background:#fff;box-shadow:-2px 0 12px #00000026;transition:right .3s ease;z-index:1000;display:flex;flex-direction:column}.drawer.open{right:0}.drawer-header{position:sticky;top:0;padding:16px;background:#fff;border-bottom:1px solid #eee;display:flex;justify-content:space-between;align-items:center;z-index:10}.close-btn{border:none;background:transparent;font-size:18px;cursor:pointer}.drawer-body{flex:1;overflow-y:auto;padding:16px}.designation-item{display:flex;align-items:center;gap:12px;padding:12px;margin-bottom:10px;border:1px solid #eee;border-radius:8px;background:#fafafa}.drag-handle{cursor:move}.designation-name{flex:1}.drawer-footer{position:sticky;bottom:0;background:#fff;padding:16px;border-top:1px solid #eee;display:flex;justify-content:space-between}.btn{padding:8px 18px;border-radius:6px;border:none;cursor:pointer}.cancel{background:#f1f1f1}.submit{background:#1b4ca1;color:#fff}.designation-item select{padding:6px 10px;border:1px solid #ccc;border-radius:8px;background-color:#fff;font-size:14px;outline:none;cursor:pointer;transition:border-color .2s,box-shadow .2s}.designation-item select:focus{border-color:#1b4ca1;box-shadow:0 0 3px #007bff80}.custom-select{position:relative;width:120px;border:1px solid #ccc;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.selected-value{padding:6px 10px;display:flex;justify-content:space-between;align-items:center}.chevron{transition:transform .2s ease}.chevron.open{transform:rotate(180deg)}.dropdown{position:absolute;top:100%;left:0;width:100%;max-height:180px;overflow-y:auto;border:1px solid #ccc;background:#fff;z-index:1000;box-shadow:0 2px 6px #0003}.dropdown .search-box{width:90%;margin:6px auto;padding:4px 6px;display:block;border:1px solid #aaa;border-radius:4px}.option{padding:6px 10px;cursor:pointer}.option:hover{background:#f1f1f1}.wing-division-font{font-size:14px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
226
227
|
}
|
|
227
228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UpdateDesignationHierarchyComponent, decorators: [{
|
|
228
229
|
type: Component,
|
|
229
|
-
args: [{ selector: 'app-update-designation-hierarchy', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overlay\" *ngIf=\"isOpen\" (click)=\"cancel()\"></div>\n\n<div class=\"drawer\" [class.open]=\"isOpen\">\n\n <!-- HEADER -->\n <div class=\"drawer-header\">\n <h4>Update Designation Hierarchy</h4>\n <button class=\"close-btn\" (click)=\"cancel()\">\u2715</button>\n </div>\n\n <!-- BODY -->\n <div class=\"drawer-body\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n\n <div class=\"designation-item\" *ngFor=\"let item of designations; trackBy: trackById; let i = index\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n\n <div class=\"designation-name\">{{ item.name }}</div>\n\n <!-- Custom Select -->\n <div class=\"custom-select\">\n <div class=\"selected-value\" (click)=\"toggleDropdown(item, $event)\">\n {{ item.sort_order }}\n <span class=\"chevron\" [class.open]=\"openDropdownId === item.id\"><mat-icon>arrow_drop_down</mat-icon></span>\n </div>\n\n <div class=\"dropdown\" [id]=\"'dropdown-' + item.id\" *ngIf=\"openDropdownId === item.id\"\n (click)=\"$event.stopPropagation()\">\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"item.searchFilter\"\n (ngModelChange)=\"filterNumbers(item)\" class=\"search-box\">\n\n <div class=\"option\" *ngFor=\"let num of item.filteredNumbers\"\n (click)=\"selectNumber(item, num, $event)\">\n {{ num }}\n </div>\n </div>\n\n </div>\n\n </div>\n\n\n\n\n\n </div>\n\n <!-- FOOTER -->\n <div class=\"drawer-footer\">\n <button class=\"btn cancel\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn submit\" (click)=\"submit()\">Submit</button>\n </div>\n\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".overlay{position:fixed;inset:0;background:#0006;z-index:999}.drawer{position:fixed;top:0;right:-420px;width:600px;height:100vh;background:#fff;box-shadow:-2px 0 12px #00000026;transition:right .3s ease;z-index:1000;display:flex;flex-direction:column}.drawer.open{right:0}.drawer-header{position:sticky;top:0;padding:16px;background:#fff;border-bottom:1px solid #eee;display:flex;justify-content:space-between;align-items:center;z-index:10}.close-btn{border:none;background:transparent;font-size:18px;cursor:pointer}.drawer-body{flex:1;overflow-y:auto;padding:16px}.designation-item{display:flex;align-items:center;gap:12px;padding:12px;margin-bottom:10px;border:1px solid #eee;border-radius:8px;background:#fafafa}.drag-handle{cursor:move}.designation-name{flex:1}.drawer-footer{position:sticky;bottom:0;background:#fff;padding:16px;border-top:1px solid #eee;display:flex;justify-content:space-between}.btn{padding:8px 18px;border-radius:6px;border:none;cursor:pointer}.cancel{background:#f1f1f1}.submit{background:#1b4ca1;color:#fff}.designation-item select{padding:6px 10px;border:1px solid #ccc;border-radius:8px;background-color:#fff;font-size:14px;outline:none;cursor:pointer;transition:border-color .2s,box-shadow .2s}.designation-item select:focus{border-color:#1b4ca1;box-shadow:0 0 3px #007bff80}.custom-select{position:relative;width:120px;border:1px solid #ccc;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.selected-value{padding:6px 10px;display:flex;justify-content:space-between;align-items:center}.chevron{transition:transform .2s ease}.chevron.open{transform:rotate(180deg)}.dropdown{position:absolute;top:100%;left:0;width:100%;max-height:180px;overflow-y:auto;border:1px solid #ccc;background:#fff;z-index:1000;box-shadow:0 2px 6px #0003}.dropdown .search-box{width:90%;margin:6px auto;padding:4px 6px;display:block;border:1px solid #aaa;border-radius:4px}.option{padding:6px 10px;cursor:pointer}.option:hover{background:#f1f1f1}\n"] }]
|
|
230
|
+
args: [{ selector: 'app-update-designation-hierarchy', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overlay\" *ngIf=\"isOpen\" (click)=\"cancel()\"></div>\n\n<div class=\"drawer\" [class.open]=\"isOpen\">\n\n <!-- HEADER -->\n <div class=\"drawer-header\">\n <h4>Update Designation Hierarchy</h4>\n <button class=\"close-btn\" (click)=\"cancel()\">\u2715</button>\n </div>\n\n <!-- BODY -->\n <div class=\"drawer-body\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n\n <div class=\"designation-item\" *ngFor=\"let item of designations; trackBy: trackById; let i = index\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n\n <div class=\"designation-name\">\n <span style=\"color:#000\">{{ item.name }}</span><br/>\n <span class=\"wing-division-font\">Wing/Division - <span *ngIf=\"item.wing_division_section\">{{ item.wing_division_section }}</span>\n <span class=\"wing-division-font\" *ngIf=\"!item.wing_division_section\">N/A</span></span>\n </div>\n\n\n <!-- Custom Select -->\n <div class=\"custom-select\">\n <div class=\"selected-value\" (click)=\"toggleDropdown(item, $event)\">\n {{ item.sort_order }}\n <span class=\"chevron\" [class.open]=\"openDropdownId === item.id\"><mat-icon>arrow_drop_down</mat-icon></span>\n </div>\n\n <div class=\"dropdown\" [id]=\"'dropdown-' + item.id\" *ngIf=\"openDropdownId === item.id\"\n (click)=\"$event.stopPropagation()\">\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"item.searchFilter\"\n (ngModelChange)=\"filterNumbers(item)\" class=\"search-box\">\n\n <div class=\"option\" *ngFor=\"let num of item.filteredNumbers\"\n (click)=\"selectNumber(item, num, $event)\">\n {{ num }}\n </div>\n </div>\n\n </div>\n\n </div>\n\n\n\n\n\n </div>\n\n <!-- FOOTER -->\n <div class=\"drawer-footer\">\n <button class=\"btn cancel\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn submit\" (click)=\"submit()\">Submit</button>\n </div>\n\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".overlay{position:fixed;inset:0;background:#0006;z-index:999}.drawer{position:fixed;top:0;right:-420px;width:600px;height:100vh;background:#fff;box-shadow:-2px 0 12px #00000026;transition:right .3s ease;z-index:1000;display:flex;flex-direction:column}.drawer.open{right:0}.drawer-header{position:sticky;top:0;padding:16px;background:#fff;border-bottom:1px solid #eee;display:flex;justify-content:space-between;align-items:center;z-index:10}.close-btn{border:none;background:transparent;font-size:18px;cursor:pointer}.drawer-body{flex:1;overflow-y:auto;padding:16px}.designation-item{display:flex;align-items:center;gap:12px;padding:12px;margin-bottom:10px;border:1px solid #eee;border-radius:8px;background:#fafafa}.drag-handle{cursor:move}.designation-name{flex:1}.drawer-footer{position:sticky;bottom:0;background:#fff;padding:16px;border-top:1px solid #eee;display:flex;justify-content:space-between}.btn{padding:8px 18px;border-radius:6px;border:none;cursor:pointer}.cancel{background:#f1f1f1}.submit{background:#1b4ca1;color:#fff}.designation-item select{padding:6px 10px;border:1px solid #ccc;border-radius:8px;background-color:#fff;font-size:14px;outline:none;cursor:pointer;transition:border-color .2s,box-shadow .2s}.designation-item select:focus{border-color:#1b4ca1;box-shadow:0 0 3px #007bff80}.custom-select{position:relative;width:120px;border:1px solid #ccc;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.selected-value{padding:6px 10px;display:flex;justify-content:space-between;align-items:center}.chevron{transition:transform .2s ease}.chevron.open{transform:rotate(180deg)}.dropdown{position:absolute;top:100%;left:0;width:100%;max-height:180px;overflow-y:auto;border:1px solid #ccc;background:#fff;z-index:1000;box-shadow:0 2px 6px #0003}.dropdown .search-box{width:90%;margin:6px auto;padding:4px 6px;display:block;border:1px solid #aaa;border-radius:4px}.option{padding:6px 10px;cursor:pointer}.option:hover{background:#f1f1f1}.wing-division-font{font-size:14px}\n"] }]
|
|
230
231
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.SharedService }, { type: i3.MatSnackBar }]; }, propDecorators: { closeDrawer: [{
|
|
231
232
|
type: Output
|
|
232
233
|
}], submitted: [{
|
|
233
234
|
type: Output
|
|
234
235
|
}] } });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWRlc2lnbmF0aW9uLWhpZXJhcmNoeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy91cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5L3VwZGF0ZS1kZXNpZ25hdGlvbi1oaWVyYXJjaHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdXBkYXRlLWRlc2lnbmF0aW9uLWhpZXJhcmNoeS91cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLE1BQU0sRUFFTix1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7O0FBaUJ0RSxNQUFNLE9BQU8sbUNBQW1DO0lBYTlDLFlBQW9CLElBQWdCLEVBQVMsYUFBNEIsRUFBVSxRQUFxQjtRQUFwRixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBWnhHLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBR2QsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFFekIsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUNMLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU5QyxZQUFPLEdBQWEsRUFBRSxDQUFDO0lBRXNGLENBQUM7SUFFOUcsUUFBUTtRQUdOLElBQUksQ0FB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RkRqQ08sbUNBQW1DO2tCQU4vQyxTQUFTOytCQUNFLGtDQUFrQyxtQkFHM0IsdUJBQXVCLENBQUMsTUFBTTt1SkFVckMsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE9uSW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXNpZ25hdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc29ydF9vcmRlcjogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXBkYXRlLWRlc2lnbmF0aW9uLWhpZXJhcmNoeScsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBkYXRlLWRlc2lnbmF0aW9uLWhpZXJhcmNoeS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVcGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG9wZW5Ecm9wZG93bklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaXNPcGVuID0gdHJ1ZTtcbiAgc3RhdGVfY2VudGVyX2lkITogc3RyaW5nO1xuICBkZXBhcnRtZW50X2lkITogc3RyaW5nO1xuICBkZXNpZ25hdGlvbnM6IGFueVtdID0gW107XG4gIHJvbGVfbWFwcGluZ19nZW5lcmF0aW9uOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBPdXRwdXQoKSBjbG9zZURyYXdlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIG51bWJlcnM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSwgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuXG4gICAgdGhpcy5yZWZyZXNoUm9sZU1hcHBpbmdEYXRhKClcblxuXG5cbiAgICBjb25zb2xlLmxvZygndGhpcy5kZXNpZ25hdGlvbnMtLScsIHRoaXMuZGVzaWduYXRpb25zKVxuXG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxEZXNpZ25hdGlvbltdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRlc2lnbmF0aW9ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcblxuICAgIC8vIFVwZGF0ZSBzb3J0X29yZGVyIGJhc2VkIG9uIHRoZSBuZXcgYXJyYXkgaW5kZXhcbiAgICB0aGlzLmRlc2lnbmF0aW9ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zb3J0X29yZGVyID0gaW5kZXggKyAxO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gb25PcmRlckNoYW5nZShpdGVtOiBhbnkpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZE9yZGVyID0gaXRlbS5zb3J0X29yZGVyO1xuICAvLyAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZGVzaWduYXRpb25zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IGl0ZW0uaWQpO1xuXG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvbnMuc3BsaWNlKHNlbGVjdGVkT3JkZXIgLSAxLCAwLCBpdGVtKTtcblxuICAvLyAgIHRoaXMuZGVzaWduYXRpb25zLmZvckVhY2goKGQsIGluZGV4KSA9PiBkLnNvcnRfb3JkZXIgPSBpbmRleCArIDEpO1xuICAvLyB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTb3J0T3JkZXJCeUluZGV4KCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLnNvcnRfb3JkZXIgPSBpbmRleCArIDE7XG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBkZXNpZ25hdGlvbnM6IHRoaXMuZGVzaWduYXRpb25zLm1hcChkID0+ICh7XG4gICAgICAgIGlkOiBkLmlkLFxuICAgICAgICBzb3J0X29yZGVyOiBkLnNvcnRfb3JkZXJcbiAgICAgIH0pKVxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuZGVwYXJ0bWVudF9pZCA9PT0gJ3N0cmluZycgJiYgdGhpcy5kZXBhcnRtZW50X2lkKSB7XG4gICAgICBwYXlsb2FkWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLmRlcGFydG1lbnRfaWRcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgICBwYXlsb2FkWydzdGF0ZV9jZW50ZXJfaWQnXSA9IHRoaXMuc3RhdGVfY2VudGVyX2lkXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ3BheWxvYWQtLScsIHBheWxvYWQpXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIC8vIEV4YW1wbGUgQVBJIGNhbGxcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UudXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHkocGF5bG9hZClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UudXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHlTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQuZW1pdChwYXlsb2FkKTtcbiAgICAgICAgdGhpcy5jbG9zZURyYXdlci5lbWl0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeShwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeVN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHBheWxvYWQpO1xuICAgICAgICB0aGlzLmNsb3NlRHJhd2VyLmVtaXQoKTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdEZXNpZ25hdGlvbiBIaWVyYXJjaHkgU2F2ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfSk7XG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICAvLyBIYW5kbGUgNDA5IENvbmZsaWN0IGhlcmVcbiAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlXG4gICAgdGhpcy5jbG9zZURyYXdlci5lbWl0KCk7XG4gIH1cblxuICByZWZyZXNoUm9sZU1hcHBpbmdEYXRhKCkge1xuICAgIGNvbnNvbGUubG9nKCdSZWZyZXNoaW5nIHJvbGUgbWFwcGluZyBkYXRhLi4uJyk7XG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmogJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeSAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IG1pbmlzdHJ5VHlwZSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuc2JPcmdUeXBlO1xuICAgICAgY29uc3QgbWluaXN0cnlJZCA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcjtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKG1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cykge1xuICAgICAgICAgIGNvbnN0IGRlcGFydG1lbnRJZCA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHM7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQobWluaXN0cnlJZCwgZGVwYXJ0bWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0YXRlIHJvbGUgbWFwcGluZyBkYXRhIHJlZnJlc2hlZDonLCByZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlZnJlc2hpbmcgc3RhdGUgcm9sZSBtYXBwaW5nIGRhdGE6JywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXIobWluaXN0cnlJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDZW50ZXIgcm9sZSBtYXBwaW5nIGRhdGEgcmVmcmVzaGVkOicsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVmcmVzaGluZyBjZW50ZXIgcm9sZSBtYXBwaW5nIGRhdGE6JywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAobWluaXN0cnlUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgIGNvbnN0IGRlcGFydG1lbnRJZCA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHM7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJBbmREZXBhcnRtZW50KG1pbmlzdHJ5SWQsIGRlcGFydG1lbnRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdGF0ZSByb2xlIG1hcHBpbmcgZGF0YSByZWZyZXNoZWQ6JywgcmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVmcmVzaGluZyBzdGF0ZSByb2xlIG1hcHBpbmcgZGF0YTonLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNicFBsYW5GaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpcbiAgICBjb25zb2xlLmxvZygnY2JwUGxhbkZpbmFsT2JqLS0nLCBjYnBQbGFuRmluYWxPYmopXG4gICAgaWYgKGNicFBsYW5GaW5hbE9iaj8uZGVwYXJ0bWVudHMpIHtcbiAgICAgIHRoaXMuZGVwYXJ0bWVudF9pZCA9IGNicFBsYW5GaW5hbE9iaj8uZGVwYXJ0bWVudHNcbiAgICB9XG4gICAgaWYgKGNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnkgJiYgY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeS5pZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLnN0YXRlX2NlbnRlcl9pZCA9IGNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnkuaWRlbnRpZmllclxuICAgIH1cblxuICAgIHRoaXMucm9sZV9tYXBwaW5nX2dlbmVyYXRpb24gPSBjYnBQbGFuRmluYWxPYmo/LnJvbGVfbWFwcGluZ19nZW5lcmF0aW9uIHx8ICdbXSc7XG4gICAgLy8gTWFwIHJvbGVfbWFwcGluZ19nZW5lcmF0aW9uIHRvIGludGVybmFsIGRlc2lnbmF0aW9ucyBhcnJheVxuICAgIHRoaXMubnVtYmVycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMucm9sZV9tYXBwaW5nX2dlbmVyYXRpb24ubGVuZ3RoIH0sIChfLCBpKSA9PiBpICsgMSk7XG4gICAgdGhpcy5kZXNpZ25hdGlvbnMgPSB0aGlzLnJvbGVfbWFwcGluZ19nZW5lcmF0aW9uLm1hcCgocjogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgaWQ6IHIuaWQsXG4gICAgICBuYW1lOiByLmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICBzb3J0X29yZGVyOiByLnNvcnRfb3JkZXIgfHwgaW5kZXggKyAxLFxuICAgICAgc2VhcmNoRmlsdGVyOiAnJywgICAgICAgICAgICAgIC8vIFNlYXJjaCBpbnB1dCB2YWx1ZVxuICAgICAgZmlsdGVyZWROdW1iZXJzOiBbLi4udGhpcy5udW1iZXJzXSAvLyBOdW1iZXJzIHRvIGRpc3BsYXkgaW4gc2VsZWN0XG4gICAgfSkpO1xuXG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgIHRoaXMubnVtYmVycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuZGVzaWduYXRpb25zLmxlbmd0aCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIC8vIFNvcnQgYnkgc29ydF9vcmRlclxuICAgIHRoaXMuZGVzaWduYXRpb25zLnNvcnQoKGEsIGIpID0+IGEuc29ydF9vcmRlciAtIGIuc29ydF9vcmRlcik7XG4gICAgdGhpcy51cGRhdGVTb3J0T3JkZXJCeUluZGV4KCk7XG4gIH1cblxudG9nZ2xlRHJvcGRvd24oaXRlbTogYW55LCBldmVudDogRXZlbnQpIHtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHRoaXMub3BlbkRyb3Bkb3duSWQgPSB0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkID8gbnVsbCA6IGl0ZW0uaWQ7XG5cbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3QgZHJvcGRvd25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcm9wZG93bi0nICsgaXRlbS5pZCk7XG4gICAgaWYgKCFkcm9wZG93bkVsKSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gZHJvcGRvd25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAvLyBJZiBkcm9wZG93biBib3R0b20gZXhjZWVkcyB2aWV3cG9ydCwgb3BlbiB1cHdhcmRcbiAgICBpZiAocmVjdC5ib3R0b20gPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgIGRyb3Bkb3duRWwuc3R5bGUudG9wID0gYC0ke3JlY3QuaGVpZ2h0fXB4YDsgIC8vIG9wZW4gYWJvdmVcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcGRvd25FbC5zdHlsZS50b3AgPSBgMTAwJWA7ICAvLyBvcGVuIGJlbG93XG4gICAgfVxuICB9KTtcbn1cblxuXG4vLyBTZWxlY3QgbnVtYmVyIGZyb20gZHJvcGRvd25cbnNlbGVjdE51bWJlcihpdGVtOiBhbnksIG51bTogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIElNUE9SVEFOVDogcHJldmVudHMgcGFyZW50IHRvZ2dsZVxuXG4gIC8vIFNldCB0aGUgc2VsZWN0ZWQgdmFsdWVcbiAgaXRlbS5zb3J0X29yZGVyID0gbnVtO1xuXG4gIC8vIENsb3NlIGRyb3Bkb3duXG4gIHRoaXMub3BlbkRyb3Bkb3duSWQgPSBudWxsO1xuXG4gIC8vIFJlc2V0IHNlYXJjaFxuICBpdGVtLnNlYXJjaEZpbHRlciA9ICcnO1xuICBpdGVtLmZpbHRlcmVkTnVtYmVycyA9IFsuLi50aGlzLm51bWJlcnNdO1xuXG4gIC8vIFJlb3JkZXIgYXJyYXlcbiAgdGhpcy5vbk9yZGVyQ2hhbmdlKGl0ZW0pO1xufVxuXG5maWx0ZXJOdW1iZXJzKGl0ZW06IGFueSkge1xuICBpZiAoIWl0ZW0uc2VhcmNoRmlsdGVyKSB7XG4gICAgaXRlbS5maWx0ZXJlZE51bWJlcnMgPSBbLi4udGhpcy5udW1iZXJzXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGl0ZW0uc2VhcmNoRmlsdGVyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpdGVtLmZpbHRlcmVkTnVtYmVycyA9IHRoaXMubnVtYmVycy5maWx0ZXIobnVtID0+XG4gICAgICBudW0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKVxuICAgICk7XG4gIH1cbn1cblxub25PcmRlckNoYW5nZShpdGVtOiBhbnkpIHtcbiAgY29uc3Qgc2VsZWN0ZWRPcmRlciA9IGl0ZW0uc29ydF9vcmRlcjtcbiAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5kZXNpZ25hdGlvbnMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gaXRlbS5pZCk7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gIHRoaXMuZGVzaWduYXRpb25zLnNwbGljZShzZWxlY3RlZE9yZGVyIC0gMSwgMCwgaXRlbSk7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbnMuZm9yRWFjaCgoZCwgaW5kZXgpID0+IChkLnNvcnRfb3JkZXIgPSBpbmRleCArIDEpKTtcbn1cblxudHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICByZXR1cm4gaXRlbS5pZDtcbn1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaXNPcGVuXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkcmF3ZXJcIiBbY2xhc3Mub3Blbl09XCJpc09wZW5cIj5cblxuICAgIDwhLS0gSEVBREVSIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItaGVhZGVyXCI+XG4gICAgICAgIDxoND5VcGRhdGUgRGVzaWduYXRpb24gSGllcmFyY2h5PC9oND5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPuKclTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCT0RZIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItYm9keVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmF0aW9uLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkZXNpZ25hdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiIGNka0RyYWc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVcIiBjZGtEcmFnSGFuZGxlPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmF0aW9uLW5hbWVcIj57eyBpdGVtLm5hbWUgfX08L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDdXN0b20gU2VsZWN0IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtdmFsdWVcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oaXRlbSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNvcnRfb3JkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uXCIgW2NsYXNzLm9wZW5dPVwib3BlbkRyb3Bkb3duSWQgPT09IGl0ZW0uaWRcIj48bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiBbaWRdPVwiJ2Ryb3Bkb3duLScgKyBpdGVtLmlkXCIgKm5nSWY9XCJvcGVuRHJvcGRvd25JZCA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBbKG5nTW9kZWwpXT1cIml0ZW0uc2VhcmNoRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlck51bWJlcnMoaXRlbSlcIiBjbGFzcz1cInNlYXJjaC1ib3hcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IG51bSBvZiBpdGVtLmZpbHRlcmVkTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TnVtYmVyKGl0ZW0sIG51bSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbnVtIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuXG5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZPT1RFUiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWZvb3RlclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGNhbmNlbFwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXQoKVwiPlN1Ym1pdDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWRlc2lnbmF0aW9uLWhpZXJhcmNoeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy91cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5L3VwZGF0ZS1kZXNpZ25hdGlvbi1oaWVyYXJjaHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdXBkYXRlLWRlc2lnbmF0aW9uLWhpZXJhcmNoeS91cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLE1BQU0sRUFFTix1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7O0FBaUJ0RSxNQUFNLE9BQU8sbUNBQW1DO0lBYTlDLFlBQW9CLElBQWdCLEVBQVMsYUFBNEIsRUFBVSxRQUFxQjtRQUFwRixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBWnhHLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBR2QsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFFekIsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUNMLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU5QyxZQUFPLEdBQWEsRUFBRSxDQUFDO0lBRXNGLENBQUM7SUFFOUcsUUFBUTtRQUdOLElBQUksQ0FB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QUFtQyx5SUN6QmhELHk0RUErRE07OzRGRHRDTyxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0Usa0NBQWtDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNO3VKQVVyQyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2lnbmF0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzb3J0X29yZGVyOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC11cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwZGF0ZS1kZXNpZ25hdGlvbi1oaWVyYXJjaHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGRhdGUtZGVzaWduYXRpb24taGllcmFyY2h5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgb3BlbkRyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpc09wZW4gPSB0cnVlO1xuICBzdGF0ZV9jZW50ZXJfaWQhOiBzdHJpbmc7XG4gIGRlcGFydG1lbnRfaWQhOiBzdHJpbmc7XG4gIGRlc2lnbmF0aW9uczogYW55W10gPSBbXTtcbiAgcm9sZV9tYXBwaW5nX2dlbmVyYXRpb246IGFueVxuICBsb2FkaW5nID0gZmFsc2VcbiAgQE91dHB1dCgpIGNsb3NlRHJhd2VyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgbnVtYmVyczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLCBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG5cbiAgICB0aGlzLnJlZnJlc2hSb2xlTWFwcGluZ0RhdGEoKVxuXG5cblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9ucy0tJywgdGhpcy5kZXNpZ25hdGlvbnMpXG5cbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPERlc2lnbmF0aW9uW10+KSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZGVzaWduYXRpb25zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuXG4gICAgLy8gVXBkYXRlIHNvcnRfb3JkZXIgYmFzZWQgb24gdGhlIG5ldyBhcnJheSBpbmRleFxuICAgIHRoaXMuZGVzaWduYXRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLnNvcnRfb3JkZXIgPSBpbmRleCArIDE7XG4gICAgfSk7XG4gIH1cblxuICAvLyBvbk9yZGVyQ2hhbmdlKGl0ZW06IGFueSkge1xuICAvLyAgIGNvbnN0IHNlbGVjdGVkT3JkZXIgPSBpdGVtLnNvcnRfb3JkZXI7XG4gIC8vICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5kZXNpZ25hdGlvbnMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gaXRlbS5pZCk7XG5cbiAgLy8gICB0aGlzLmRlc2lnbmF0aW9ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgLy8gICB0aGlzLmRlc2lnbmF0aW9ucy5zcGxpY2Uoc2VsZWN0ZWRPcmRlciAtIDEsIDAsIGl0ZW0pO1xuXG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvbnMuZm9yRWFjaCgoZCwgaW5kZXgpID0+IGQuc29ydF9vcmRlciA9IGluZGV4ICsgMSk7XG4gIC8vIH1cblxuICBwcml2YXRlIHVwZGF0ZVNvcnRPcmRlckJ5SW5kZXgoKSB7XG4gICAgdGhpcy5kZXNpZ25hdGlvbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uc29ydF9vcmRlciA9IGluZGV4ICsgMTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIGRlc2lnbmF0aW9uczogdGhpcy5kZXNpZ25hdGlvbnMubWFwKGQgPT4gKHtcbiAgICAgICAgaWQ6IGQuaWQsXG4gICAgICAgIHNvcnRfb3JkZXI6IGQuc29ydF9vcmRlclxuICAgICAgfSkpXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5kZXBhcnRtZW50X2lkID09PSAnc3RyaW5nJyAmJiB0aGlzLmRlcGFydG1lbnRfaWQpIHtcbiAgICAgIHBheWxvYWRbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuZGVwYXJ0bWVudF9pZFxuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICAgIHBheWxvYWRbJ3N0YXRlX2NlbnRlcl9pZCddID0gdGhpcy5zdGF0ZV9jZW50ZXJfaWRcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygncGF5bG9hZC0tJywgcGF5bG9hZClcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgLy8gRXhhbXBsZSBBUEkgY2FsbFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeShwYXlsb2FkKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeVN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHBheWxvYWQpO1xuICAgICAgICB0aGlzLmNsb3NlRHJhd2VyLmVtaXQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5KHBheWxvYWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5U3ViamVjdC5uZXh0KHRydWUpXG4gICAgICAgIHRoaXMuc3VibWl0dGVkLmVtaXQocGF5bG9hZCk7XG4gICAgICAgIHRoaXMuY2xvc2VEcmF3ZXIuZW1pdCgpO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0Rlc2lnbmF0aW9uIEhpZXJhcmNoeSBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2VcbiAgICB0aGlzLmNsb3NlRHJhd2VyLmVtaXQoKTtcbiAgfVxuXG4gIHJlZnJlc2hSb2xlTWFwcGluZ0RhdGEoKSB7XG4gICAgY29uc29sZS5sb2coJ1JlZnJlc2hpbmcgcm9sZSBtYXBwaW5nIGRhdGEuLi4nKTtcbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaiAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5ICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgbWluaXN0cnlUeXBlID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5zYk9yZ1R5cGU7XG4gICAgICBjb25zdCBtaW5pc3RyeUlkID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyO1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAobWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzKSB7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0bWVudElkID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudChtaW5pc3RyeUlkLCBkZXBhcnRtZW50SWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhdGUgcm9sZSBtYXBwaW5nIGRhdGEgcmVmcmVzaGVkOicsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVmcmVzaGluZyBzdGF0ZSByb2xlIG1hcHBpbmcgZGF0YTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlcihtaW5pc3RyeUlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NlbnRlciByb2xlIG1hcHBpbmcgZGF0YSByZWZyZXNoZWQ6JywgcmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIGNlbnRlciByb2xlIG1hcHBpbmcgZGF0YTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChtaW5pc3RyeVR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudElkID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQobWluaXN0cnlJZCwgZGVwYXJ0bWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0YXRlIHJvbGUgbWFwcGluZyBkYXRhIHJlZnJlc2hlZDonLCByZXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIHN0YXRlIHJvbGUgbWFwcGluZyBkYXRhOicsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgY2JwUGxhbkZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialxuICAgIGNvbnNvbGUubG9nKCdjYnBQbGFuRmluYWxPYmotLScsIGNicFBsYW5GaW5hbE9iailcbiAgICBpZiAoY2JwUGxhbkZpbmFsT2JqPy5kZXBhcnRtZW50cykge1xuICAgICAgdGhpcy5kZXBhcnRtZW50X2lkID0gY2JwUGxhbkZpbmFsT2JqPy5kZXBhcnRtZW50c1xuICAgIH1cbiAgICBpZiAoY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeSAmJiBjYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5LmlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMuc3RhdGVfY2VudGVyX2lkID0gY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeS5pZGVudGlmaWVyXG4gICAgfVxuXG4gICAgdGhpcy5yb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiA9IGNicFBsYW5GaW5hbE9iaj8ucm9sZV9tYXBwaW5nX2dlbmVyYXRpb24gfHwgJ1tdJztcbiAgICAvLyBNYXAgcm9sZV9tYXBwaW5nX2dlbmVyYXRpb24gdG8gaW50ZXJuYWwgZGVzaWduYXRpb25zIGFycmF5XG4gICAgdGhpcy5udW1iZXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5yb2xlX21hcHBpbmdfZ2VuZXJhdGlvbi5sZW5ndGggfSwgKF8sIGkpID0+IGkgKyAxKTtcbiAgICB0aGlzLmRlc2lnbmF0aW9ucyA9IHRoaXMucm9sZV9tYXBwaW5nX2dlbmVyYXRpb24ubWFwKChyOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICBpZDogci5pZCxcbiAgICAgIG5hbWU6IHIuZGVzaWduYXRpb25fbmFtZSxcbiAgICAgIHNvcnRfb3JkZXI6IHIuc29ydF9vcmRlciB8fCBpbmRleCArIDEsXG4gICAgICBzZWFyY2hGaWx0ZXI6ICcnLCAgICAgICAgICAgICAgLy8gU2VhcmNoIGlucHV0IHZhbHVlXG4gICAgICBmaWx0ZXJlZE51bWJlcnM6IFsuLi50aGlzLm51bWJlcnNdLCAvLyBOdW1iZXJzIHRvIGRpc3BsYXkgaW4gc2VsZWN0XG4gICAgICB3aW5nX2RpdmlzaW9uX3NlY3Rpb246IHIud2luZ19kaXZpc2lvbl9zZWN0aW9uXG4gICAgfSkpO1xuXG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgIHRoaXMubnVtYmVycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuZGVzaWduYXRpb25zLmxlbmd0aCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIC8vIFNvcnQgYnkgc29ydF9vcmRlclxuICAgIHRoaXMuZGVzaWduYXRpb25zLnNvcnQoKGEsIGIpID0+IGEuc29ydF9vcmRlciAtIGIuc29ydF9vcmRlcik7XG4gICAgdGhpcy51cGRhdGVTb3J0T3JkZXJCeUluZGV4KCk7XG4gIH1cblxudG9nZ2xlRHJvcGRvd24oaXRlbTogYW55LCBldmVudDogRXZlbnQpIHtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHRoaXMub3BlbkRyb3Bkb3duSWQgPSB0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkID8gbnVsbCA6IGl0ZW0uaWQ7XG5cbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3QgZHJvcGRvd25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcm9wZG93bi0nICsgaXRlbS5pZCk7XG4gICAgaWYgKCFkcm9wZG93bkVsKSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gZHJvcGRvd25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAvLyBJZiBkcm9wZG93biBib3R0b20gZXhjZWVkcyB2aWV3cG9ydCwgb3BlbiB1cHdhcmRcbiAgICBpZiAocmVjdC5ib3R0b20gPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgIGRyb3Bkb3duRWwuc3R5bGUudG9wID0gYC0ke3JlY3QuaGVpZ2h0fXB4YDsgIC8vIG9wZW4gYWJvdmVcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcGRvd25FbC5zdHlsZS50b3AgPSBgMTAwJWA7ICAvLyBvcGVuIGJlbG93XG4gICAgfVxuICB9KTtcbn1cblxuXG4vLyBTZWxlY3QgbnVtYmVyIGZyb20gZHJvcGRvd25cbnNlbGVjdE51bWJlcihpdGVtOiBhbnksIG51bTogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIElNUE9SVEFOVDogcHJldmVudHMgcGFyZW50IHRvZ2dsZVxuXG4gIC8vIFNldCB0aGUgc2VsZWN0ZWQgdmFsdWVcbiAgaXRlbS5zb3J0X29yZGVyID0gbnVtO1xuXG4gIC8vIENsb3NlIGRyb3Bkb3duXG4gIHRoaXMub3BlbkRyb3Bkb3duSWQgPSBudWxsO1xuXG4gIC8vIFJlc2V0IHNlYXJjaFxuICBpdGVtLnNlYXJjaEZpbHRlciA9ICcnO1xuICBpdGVtLmZpbHRlcmVkTnVtYmVycyA9IFsuLi50aGlzLm51bWJlcnNdO1xuXG4gIC8vIFJlb3JkZXIgYXJyYXlcbiAgdGhpcy5vbk9yZGVyQ2hhbmdlKGl0ZW0pO1xufVxuXG5maWx0ZXJOdW1iZXJzKGl0ZW06IGFueSkge1xuICBpZiAoIWl0ZW0uc2VhcmNoRmlsdGVyKSB7XG4gICAgaXRlbS5maWx0ZXJlZE51bWJlcnMgPSBbLi4udGhpcy5udW1iZXJzXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGl0ZW0uc2VhcmNoRmlsdGVyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpdGVtLmZpbHRlcmVkTnVtYmVycyA9IHRoaXMubnVtYmVycy5maWx0ZXIobnVtID0+XG4gICAgICBudW0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKVxuICAgICk7XG4gIH1cbn1cblxub25PcmRlckNoYW5nZShpdGVtOiBhbnkpIHtcbiAgY29uc3Qgc2VsZWN0ZWRPcmRlciA9IGl0ZW0uc29ydF9vcmRlcjtcbiAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5kZXNpZ25hdGlvbnMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gaXRlbS5pZCk7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gIHRoaXMuZGVzaWduYXRpb25zLnNwbGljZShzZWxlY3RlZE9yZGVyIC0gMSwgMCwgaXRlbSk7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbnMuZm9yRWFjaCgoZCwgaW5kZXgpID0+IChkLnNvcnRfb3JkZXIgPSBpbmRleCArIDEpKTtcbn1cblxudHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICByZXR1cm4gaXRlbS5pZDtcbn1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaXNPcGVuXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkcmF3ZXJcIiBbY2xhc3Mub3Blbl09XCJpc09wZW5cIj5cblxuICAgIDwhLS0gSEVBREVSIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItaGVhZGVyXCI+XG4gICAgICAgIDxoND5VcGRhdGUgRGVzaWduYXRpb24gSGllcmFyY2h5PC9oND5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPuKclTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCT0RZIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItYm9keVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmF0aW9uLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkZXNpZ25hdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiIGNka0RyYWc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVcIiBjZGtEcmFnSGFuZGxlPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmF0aW9uLW5hbWVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiMwMDBcIj57eyBpdGVtLm5hbWUgfX08L3NwYW4+PGJyLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndpbmctZGl2aXNpb24tZm9udFwiPldpbmcvRGl2aXNpb24gLSA8c3BhbiAqbmdJZj1cIml0ZW0ud2luZ19kaXZpc2lvbl9zZWN0aW9uXCI+e3sgaXRlbS53aW5nX2RpdmlzaW9uX3NlY3Rpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3aW5nLWRpdmlzaW9uLWZvbnRcIiAqbmdJZj1cIiFpdGVtLndpbmdfZGl2aXNpb25fc2VjdGlvblwiPk4vQTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8IS0tIEN1c3RvbSBTZWxlY3QgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC12YWx1ZVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpdGVtLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc29ydF9vcmRlciB9fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb25cIiBbY2xhc3Mub3Blbl09XCJvcGVuRHJvcGRvd25JZCA9PT0gaXRlbS5pZFwiPjxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiIFtpZF09XCInZHJvcGRvd24tJyArIGl0ZW0uaWRcIiAqbmdJZj1cIm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIFsobmdNb2RlbCldPVwiaXRlbS5zZWFyY2hGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyTnVtYmVycyhpdGVtKVwiIGNsYXNzPVwic2VhcmNoLWJveFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25cIiAqbmdGb3I9XCJsZXQgbnVtIG9mIGl0ZW0uZmlsdGVyZWROdW1iZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3ROdW1iZXIoaXRlbSwgbnVtLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBudW0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG5cblxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRk9PVEVSIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItZm9vdGVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gY2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gc3VibWl0XCIgKGNsaWNrKT1cInN1Ym1pdCgpXCI+U3VibWl0PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj4iXX0=
|