@hmcts/ccd-case-ui-toolkit 7.1.45-ungrey-back-button-9-4 → 7.1.45-ungrey-back-button-r1
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/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +10 -6
- package/esm2022/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.mjs +64 -1
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +72 -5
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +2 -0
- package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
- package/package.json +1 -1
package/esm2022/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs
CHANGED
|
@@ -418,17 +418,21 @@ export class CaseEditSubmitComponent {
|
|
|
418
418
|
const priorFlags = this.caseFlagStateService.initialCaseFlags.data[field.id].details;
|
|
419
419
|
if (priorFlags) {
|
|
420
420
|
priorFlags.forEach((flag) => {
|
|
421
|
-
if (!field.formatted_value.details) {
|
|
422
|
-
}
|
|
423
421
|
if (!field._value.details.some((detail) => detail.id === flag.id)) {
|
|
424
422
|
field._value.details.push(flag);
|
|
425
423
|
}
|
|
426
424
|
});
|
|
427
425
|
if (field._value) {
|
|
428
426
|
field._value.details = field._value.details?.filter((detail) => detail.id !== null);
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
427
|
+
if (field.formatted_value?.groupId) {
|
|
428
|
+
field._value.groupId = field.formatted_value.groupId;
|
|
429
|
+
}
|
|
430
|
+
if (field.formatted_value?.visibility) {
|
|
431
|
+
field._value.visibility = field.formatted_value?.visibility;
|
|
432
|
+
}
|
|
433
|
+
if (field.formatted_value?.details) {
|
|
434
|
+
field.formatted_value.details = field._value?.details;
|
|
435
|
+
}
|
|
432
436
|
fieldData.details = fieldData.details.filter((detail) => detail.id !== null);
|
|
433
437
|
}
|
|
434
438
|
}
|
|
@@ -659,4 +663,4 @@ export class CaseEditSubmitComponent {
|
|
|
659
663
|
args: [{ selector: 'ccd-case-edit-submit', template: "<div>\n <!-- Event trigger name -->\n <h1 class=\"govuk-heading-l\">{{eventTrigger.name | rpxTranslate}}</h1>\n\n <!--Case ID or Title -->\n <div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n <ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: contextFields : editForm.controls['data']\"></ccd-markdown>\n </ng-template>\n <ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n </ng-template>\n\n <ccd-case-edit-generic-errors [error]=\"caseEdit.error\"></ccd-case-edit-generic-errors>\n\n <ccd-callback-errors [callbackErrorsSubject]=\"caseEdit.callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\"></ccd-callback-errors>\n\n <form class=\"check-your-answers\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <div *ngIf=\"!caseEdit.isEventCompletionChecksRequired\">\n <ng-container *ngIf=\"checkYourAnswerFieldsToDisplayExists()\">\n <h2 class=\"heading-h2\">{{pageTitle | rpxTranslate }}</h2>\n <span class=\"text-16\" *ngIf=\"!caseEdit.isCaseFlagSubmission\">{{'Check the information below carefully.' | rpxTranslate}}</span>\n\n <table class=\"form-table\" aria-describedby=\"check your answers table\">\n <tbody>\n <ng-container *ngFor=\"let page of wizard.pages\">\n <ng-container *ngIf=\"isShown(page)\">\n <ng-container *ngFor=\"let field of page\n | ccdPageFields: editForm\n | ccdReadFieldsFilter: false :undefined :true :allFieldsValues\n | ccdCYAPageLabelFilter\">\n <ng-container *ngIf=\"canShowFieldInCYA(field)\">\n <tr ccdLabelSubstitutor [caseField]=\"field\" [hidden]=\"field.hidden\"\n [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th *ngIf=\"!isLabel(field) && !caseEdit.isCaseFlagSubmission\" class=\"valign-top case-field-label\">\n <span class=\"text-16\">{{field.label | rpxTranslate}}</span>\n </th>\n <td class=\"form-cell case-field-content text-16\" [attr.colspan]=\"isLabel(field) ? '2' : '1'\">\n <ccd-field-read\n [formGroup]=\"editForm.controls['data']\" [topLevelFormGroup]=\"editForm.controls['data']\"\n [caseField]=\"summaryCaseField(field)\" [context]=\"paletteContext\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n <ng-container *ngIf=\"!caseEdit.isCaseFlagSubmission\">\n <td class=\"valign-top check-your-answers__change case-field-change\">\n <a *ngIf=\"isChangeAllowed(field)\" (click)=\"navigateToPage(page.id)\"\n href=\"javascript:void(0)\">\n <span class=\"text-16\" attr.aria-label=\"{{'Change' | rpxTranslate}} {{ field.label | rpxTranslate }}\">\n {{'Change' | rpxTranslate}}\n </span>\n </a>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"readOnlySummaryFieldsToDisplayExists()\">\n\n <table class=\"summary-fields\" aria-describedby=\"summary fields table\">\n <tbody>\n <ng-container *ngFor=\"let field of showSummaryFields\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th id=\"summary-field-label\">{{field.label}}</th>\n <td class=\"form-cell\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\"></ccd-field-read>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <td colspan=\"2\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"showEventNotes()\">\n <fieldset id=\"fieldset-event\" formGroupName=\"event\">\n <legend style=\"display: none;\"></legend>\n <div class=\"form-group\" [ngClass]=\"{'form-group-error': !!summary && !summary.valid && (summary.dirty || summary.touched)}\">\n <label for=\"field-trigger-summary\" class=\"form-label\">\n Event summary (optional)\n <span class=\"form-hint\">A few words describing the purpose of the event.</span>\n </label>\n <span class=\"error-message\" *ngIf=\"summary?.errors && (summary.dirty || summary.touched)\">\n {{summary.errors | ccdFirstError: eventSummaryLabel | rpxTranslate}}\n </span>\n <input type=\"text\" id=\"field-trigger-summary\" class=\"form-control bottom-30 width-50\"\n [ngClass]=\"{'govuk-input--error': summary?.errors && (summary.dirty || summary.touched)}\" formControlName=\"summary\" maxlength=\"1024\">\n </div>\n <div class=\"form-group\" [ngClass]=\"{'form-group-error': !!description && !description.valid && (description.dirty || description.touched)}\">\n <label for=\"field-trigger-description\" class=\"form-label\">Event description (optional)</label>\n <span class=\"error-message\" *ngIf=\"description?.errors && (description.dirty || description.touched)\">\n {{description.errors | ccdFirstError: eventDescriptionLabel | rpxTranslate}}\n </span>\n <textarea id=\"field-trigger-description\" class=\"form-control bottom-30 width-50\" formControlName=\"description\"\n [ngClass]=\"{'govuk-input--error': description?.errors && (description.dirty || description.touched)}\" maxlength=\"65536\"></textarea>\n </div>\n </fieldset>\n </ng-container>\n </div>\n <ccd-case-event-completion *ngIf=\"caseEdit.isEventCompletionChecksRequired\"\n [eventCompletionParams]=\"caseEdit.eventCompletionParams\"\n (eventCanBeCompleted)=\"onEventCanBeCompleted($event)\">\n </ccd-case-event-completion>\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!hasPrevious() || caseEdit.isSubmitting\" (click)=\"previous()\">\n {{'Previous' | rpxTranslate}}\n </button>\n <button type=\"submit\" [disabled]=\"isDisabled\" class=\"button\">\n {{triggerText | rpxTranslate}}\n </button>\n </div>\n <p class=\"cancel\">\n <a (click)=\"cancel()\" href=\"javascript:void(0)\" [class.disabled]=\"caseEdit.isSubmitting\">{{getCancelText() | rpxTranslate}}</a>\n </p>\n </form>\n</div>\n\n", styles: ["#fieldset-case-data{margin-bottom:30px}#fieldset-case-data th{width:1%;white-space:nowrap;vertical-align:top}.compound-field td{padding:0}#confirmation-header{width:630px;background-color:#17958b;border:solid 1px #979797;color:#fff;text-align:center}#confirmation-body{width:630px;background-color:#fff}.valign-top{vertical-align:top}.summary-fields{margin-bottom:30px}.summary-fields tbody tr th,.summary-fields tbody tr td{border-bottom:0px}a.disabled{pointer-events:none;cursor:default}.case-field-label{width:45%}.case-field-content{width:50%}.no-bottom-border{border-bottom:none}.case-field-change{width:5%}\n"] }]
|
|
660
664
|
}], () => [{ type: i1.CaseEditComponent }, { type: i2.FieldsUtils }, { type: i2.CaseFieldService }, { type: i3.ActivatedRoute }, { type: i2.OrderService }, { type: i2.ProfileNotifier }, { type: i2.MultipageComponentStateService }, { type: i2.FormValidatorsService }, { type: i4.CaseFlagStateService }, { type: i5.LinkedCasesService }], null); })();
|
|
661
665
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditSubmitComponent, { className: "CaseEditSubmitComponent", filePath: "lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.ts", lineNumber: 30 }); })();
|
|
662
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXN1Ym1pdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvY2FzZS1lZGl0LXN1Ym1pdC9jYXNlLWVkaXQtc3VibWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtc3VibWl0L2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJakQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osZUFBZSxFQUNoQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSx1QkFBdUIsRUFBeUIsTUFBTSxhQUFhLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7Ozs7Ozs7SUNoQjVGLHNCQUFpRTs7O0lB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MkZDO1lBR3RELEFBREYsK0JBQTJDLGtCQUN1RjtZQUFyQiwySUFBUyxjQUFVLEtBQUM7WUFDN0gsYUFDRjs7WUFBQSxpQkFBUztZQUNULG1DQUE2RDtZQUMzRCxhQUNGOztZQUNGLEFBREUsaUJBQVMsRUFDTDtZQUVKLEFBREYsOEJBQWtCLGFBQ3lFO1lBQXRGLHNJQUFTLFlBQVEsS0FBQztZQUFvRSxhQUFrQzs7WUFHakksQUFERSxBQURFLEFBRDZILGlCQUFJLEVBQzdILEVBQ0MsRUFDSDs7OztZQTFId0IsZUFBb0M7WUFBcEMsa0VBQW9DO1lBRzFELGVBQXNCO1lBQWlCLEFBQWpCLEFBQXRCLHlDQUFzQiwyQkFBaUIsd0JBQVk7WUFRM0IsZUFBd0I7WUFBeEIsMENBQXdCO1lBRWpDLGNBQXdEO1lBQXhELDBFQUF3RDtZQUc1QyxjQUFzQjtZQUF0Qix3Q0FBc0I7WUFDL0MsY0FBK0M7WUFBL0Msb0VBQStDO1lBeUZ6QixjQUE4QztZQUE5QyxtRUFBOEM7WUFLbEIsZUFBb0Q7WUFBcEQsMEVBQW9EO1lBQ3hHLGNBQ0Y7WUFERSxtRUFDRjtZQUNzQixlQUF1QjtZQUF2Qix5Q0FBdUI7WUFDM0MsY0FDRjtZQURFLHdFQUNGO1lBR2dELGVBQXdDO1lBQXhDLHFEQUF3QztZQUFDLGNBQWtDO1lBQWxDLGlFQUFrQzs7O2lGRDVGcEgsdUJBQXVCO2NBTG5DLFNBQVM7MkJBQ0Usc0JBQXNCOztrRkFJckIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhc2VFdmVudFRyaWdnZXIsIENhc2VGaWVsZCwgUHJvZmlsZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3dvcmstYWxsb2NhdGlvbi9UYXNrJztcbmltcG9ydCB7XG4gIENhc2VGaWVsZFNlcnZpY2UsXG4gIEZpZWxkc1V0aWxzLFxuICBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UsXG4gIEZvcm1WYWxpZGF0b3JzU2VydmljZSxcbiAgT3JkZXJTZXJ2aWNlLFxuICBQcm9maWxlTm90aWZpZXJcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tFcnJvcnNDb21wb25lbnQsIENhbGxiYWNrRXJyb3JzQ29udGV4dCB9IGZyb20gJy4uLy4uL2Vycm9yJztcbmltcG9ydCB7IFBhbGV0dGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBDYXNlRWRpdFBhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQtcGFnZS9jYXNlLWVkaXQtcGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUVkaXRDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaXphcmQsIFdpemFyZFBhZ2UgfSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUVkaXRTdWJtaXRUaXRsZXMgfSBmcm9tICcuL2Nhc2UtZWRpdC1zdWJtaXQtdGl0bGVzLmVudW0nO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wYWxldHRlL2xpbmtlZC1jYXNlcy9zZXJ2aWNlcy9saW5rZWQtY2FzZXMuc2VydmljZSc7XG5cbi8vIEBkeW5hbWljXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtY2FzZS1lZGl0LXN1Ym1pdCcsXG4gIHRlbXBsYXRlVXJsOiAnY2FzZS1lZGl0LXN1Ym1pdC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL2Nhc2UtZWRpdC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUVkaXRTdWJtaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXI7XG4gIHB1YmxpYyBlZGl0Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgdHJpZ2dlclRleHQ6IHN0cmluZztcbiAgcHVibGljIHdpemFyZDogV2l6YXJkO1xuICBwdWJsaWMgcHJvZmlsZTogUHJvZmlsZTtcbiAgcHVibGljIHNob3dTdW1tYXJ5RmllbGRzOiBDYXNlRmllbGRbXTtcbiAgcHVibGljIHBhbGV0dGVDb250ZXh0OiBQYWxldHRlQ29udGV4dCA9IFBhbGV0dGVDb250ZXh0LkNIRUNLX1lPVVJfQU5TV0VSO1xuICBwdWJsaWMgcHJvZmlsZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY29udGV4dEZpZWxkczogQ2FzZUZpZWxkW107XG4gIHB1YmxpYyB0YXNrOiBUYXNrO1xuICBwdWJsaWMgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBtZXRhZGF0YUZpZWxkc09iamVjdDogb2JqZWN0O1xuICBwdWJsaWMgYWxsRmllbGRzVmFsdWVzOiBhbnk7XG4gIHB1YmxpYyBzdW1tYXJ5OiBBYnN0cmFjdENvbnRyb2w7XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogQWJzdHJhY3RDb250cm9sO1xuICBwdWJsaWMgZXZlbnRTdW1tYXJ5TGFiZWw6IHN0cmluZyA9ICdFdmVudCBzdW1tYXJ5JztcbiAgcHVibGljIGV2ZW50RGVzY3JpcHRpb25MYWJlbDogc3RyaW5nID0gJ0V2ZW50IGRlc2NyaXB0aW9uJztcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNIT1dfU1VNTUFSWV9DT05URU5UX0NPTVBBUkVfRlVOQ1RJT04gPSAoYTogQ2FzZUZpZWxkLCBiOiBDYXNlRmllbGQpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGFDYXNlRmllbGQgPSBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiA9PT0gMCB8fCBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcbiAgICBjb25zdCBiQ2FzZUZpZWxkID0gYi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gPT09IDAgfHwgYi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb247XG5cbiAgICBpZiAoIWFDYXNlRmllbGQpIHtcbiAgICAgIHJldHVybiAhYkNhc2VGaWVsZCA/IDAgOiAxO1xuICAgIH1cblxuICAgIGlmICghYkNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gYS5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gLSBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcbiAgfTtcblxuICBwdWJsaWMgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gRVVJLTM0NTIuXG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGVkaXRGb3JtIGFzIGl0IGlzIHJlYWRvbmx5LlxuICAgIC8vIFRoaXMgd2FzIGNhdXNpbmcgaXNzdWVzIHdpdGggaGlkZGVuIGZpZWxkcyB0aGF0IGFyZW4ndCB3YW50ZWQgYnV0IGhhdmVcbiAgICAvLyBub3QgYmVlbiBkaXNhYmxlZC5cbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgfHwgdGhpcy5oYXNFcnJvcnM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FzZUVkaXQ6IENhc2VFZGl0Q29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmllbGRzVXRpbHM6IEZpZWxkc1V0aWxzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZpZWxkU2VydmljZTogQ2FzZUZpZWxkU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9yZGVyU2VydmljZTogT3JkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZmlsZU5vdGlmaWVyOiBQcm9maWxlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2U6IE11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1WYWxpZGF0b3JzU2VydmljZTogRm9ybVZhbGlkYXRvcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZsYWdTdGF0ZVNlcnZpY2U6IENhc2VGbGFnU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlua2VkQ2FzZXNTZXJ2aWNlOiBMaW5rZWRDYXNlc1NlcnZpY2UsXG4gICkge1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbiA9IHRoaXMucHJvZmlsZU5vdGlmaWVyLnByb2ZpbGUuc3Vic2NyaWJlKChfKSA9PiB0aGlzLnByb2ZpbGUgPSBfKTtcbiAgICB0aGlzLmV2ZW50VHJpZ2dlciA9IHRoaXMuY2FzZUVkaXQuZXZlbnRUcmlnZ2VyO1xuICAgIHRoaXMudHJpZ2dlclRleHQgPSB0aGlzLmV2ZW50VHJpZ2dlci5lbmRfYnV0dG9uX2xhYmVsIHx8IENhbGxiYWNrRXJyb3JzQ29tcG9uZW50LlRSSUdHRVJfVEVYVF9TVUJNSVQ7XG4gICAgdGhpcy5lZGl0Rm9ybSA9IHRoaXMuY2FzZUVkaXQuZm9ybTtcbiAgICB0aGlzLndpemFyZCA9IHRoaXMuY2FzZUVkaXQud2l6YXJkO1xuICAgIHRoaXMuc2hvd1N1bW1hcnlGaWVsZHMgPSB0aGlzLnNvcnRGaWVsZHNCeVNob3dTdW1tYXJ5Q29udGVudCh0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRleHRGaWVsZHMgPSB0aGlzLmdldENhc2VGaWVsZHMoKTtcbiAgICB0aGlzLm1ldGFkYXRhRmllbGRzT2JqZWN0ID0gdGhpcy5jYXNlRWRpdD8uY2FzZURldGFpbHM/Lm1ldGFkYXRhRmllbGRzPy5cbiAgICAgIHJlZHVjZSgobywga2V5KSA9PiBPYmplY3QuYXNzaWduKG8sIHsgW2tleS5pZF06IGtleS52YWx1ZSB9KSwge30pO1xuICAgIHRoaXMuYWxsRmllbGRzVmFsdWVzID0gT2JqZWN0LmFzc2lnbih0aGlzLm1ldGFkYXRhRmllbGRzT2JqZWN0ID8gdGhpcy5tZXRhZGF0YUZpZWxkc09iamVjdCA6IHt9LCB0aGlzLmVkaXRGb3JtLmdldFJhd1ZhbHVlKCkuZGF0YSk7XG4gICAgLy8gSW5kaWNhdGVzIGlmIHRoZSBzdWJtaXNzaW9uIGlzIGZvciBhIENhc2UgRmxhZywgYXMgb3Bwb3NlZCB0byBhIFwicmVndWxhclwiIGZvcm0gc3VibWlzc2lvbiwgYnkgdGhlIHByZXNlbmNlIG9mXG4gICAgLy8gYSBGbGFnTGF1bmNoZXIgZmllbGQgaW4gdGhlIGV2ZW50IHRyaWdnZXJcbiAgICB0aGlzLmNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uID1cbiAgICAgIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLnNvbWUoKGNhc2VGaWVsZCkgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSk7XG4gICAgdGhpcy5jYXNlRWRpdC5pc0xpbmtlZENhc2VzU3VibWlzc2lvbiA9XG4gICAgICB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5zb21lKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpO1xuICAgIHRoaXMucGFnZVRpdGxlID0gdGhpcy5nZXRQYWdlVGl0bGUoKTtcbiAgICBpZiAoIXRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuaW5pdGlhbENhc2VGbGFncyAmJiB0aGlzLmNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uICYmIE9iamVjdC5rZXlzKHRoaXMuY2FzZUVkaXQuZm9ybS52YWx1ZS5kYXRhKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuaW5pdGlhbENhc2VGbGFncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYXNlRWRpdC5mb3JtLnZhbHVlKSk7XG4gICAgfVxuICAgIHRoaXMuc3VtbWFyeSA9IHRoaXMuZm9ybVZhbGlkYXRvcnNTZXJ2aWNlLmFkZE1hcmtEb3duVmFsaWRhdG9ycyh0aGlzLmVkaXRGb3JtLCAnZXZlbnQuc3VtbWFyeScpO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLmZvcm1WYWxpZGF0b3JzU2VydmljZS5hZGRNYXJrRG93blZhbGlkYXRvcnModGhpcy5lZGl0Rm9ybSwgJ2V2ZW50LmRlc2NyaXB0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnByb2ZpbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1bW1hcnkudmFsaWQgJiYgdGhpcy5kZXNjcmlwdGlvbi52YWxpZCkge1xuICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UucmVzZXRMaW5rZWRDYXNlRGF0YSgpO1xuICAgICAgdGhpcy5jaGVja0V4aXN0aW5nRGF0YUluU3VibWlzc2lvbigpO1xuICAgICAgdGhpcy5jYXNlRWRpdC5zdWJtaXRGb3JtKHtcbiAgICAgICAgZXZlbnRUcmlnZ2VyOiB0aGlzLmV2ZW50VHJpZ2dlcixcbiAgICAgICAgZm9ybTogdGhpcy5lZGl0Rm9ybSxcbiAgICAgICAgc3VibWl0OiB0aGlzLmNhc2VFZGl0LnN1Ym1pdCxcbiAgICAgICAgY2FzZURldGFpbHM6IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5yZXNldEluaXRpYWxDYXNlRmxhZ3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25FdmVudENhbkJlQ29tcGxldGVkKGV2ZW50Q2FuQmVDb21wbGV0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0Lm9uRXZlbnRDYW5CZUNvbXBsZXRlZCh7XG4gICAgICBldmVudFRyaWdnZXI6IHRoaXMuZXZlbnRUcmlnZ2VyLFxuICAgICAgZXZlbnRDYW5CZUNvbXBsZXRlZCxcbiAgICAgIGNhc2VEZXRhaWxzOiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLFxuICAgICAgZm9ybTogdGhpcy5lZGl0Rm9ybSxcbiAgICAgIHN1Ym1pdDogdGhpcy5jYXNlRWRpdC5zdWJtaXRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0V4aXN0aW5nRGF0YUluU3VibWlzc2lvbigpIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbikge1xuICAgICAgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGREYXRhID0gdGhpcy5lZGl0Rm9ybS52YWx1ZS5kYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgaWYgKGZpZWxkRGF0YT8uZGV0YWlscykge1xuICAgICAgICAgIGNvbnN0IHByaW9yRmxhZ3MgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmluaXRpYWxDYXNlRmxhZ3MuZGF0YVtmaWVsZC5pZF0uZGV0YWlscztcbiAgICAgICAgICBpZiAocHJpb3JGbGFncykge1xuICAgICAgICAgICAgcHJpb3JGbGFncy5mb3JFYWNoKChmbGFnKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZmllbGQuZm9ybWF0dGVkX3ZhbHVlLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWZpZWxkLl92YWx1ZS5kZXRhaWxzLnNvbWUoKGRldGFpbCkgPT4gZGV0YWlsLmlkID09PSBmbGFnLmlkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLl92YWx1ZS5kZXRhaWxzLnB1c2goZmxhZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpZWxkLl92YWx1ZSkge1xuICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUuZGV0YWlscyA9IGZpZWxkLl92YWx1ZS5kZXRhaWxzPy5maWx0ZXIoKGRldGFpbDogeyBpZD86IHN0cmluZyB9KSA9PiBkZXRhaWwuaWQgIT09IG51bGwpO1xuICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUuZ3JvdXBJZCA9IGZpZWxkLmZvcm1hdHRlZF92YWx1ZS5ncm91cElkO1xuICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUudmlzaWJpbGl0eSA9IGZpZWxkLmZvcm1hdHRlZF92YWx1ZS52aXNpYmlsaXR5O1xuICAgICAgICAgICAgICBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUuZGV0YWlscyA9IGZpZWxkLl92YWx1ZS5kZXRhaWxzO1xuICAgICAgICAgICAgICBmaWVsZERhdGEuZGV0YWlscyA9IGZpZWxkRGF0YS5kZXRhaWxzLmZpbHRlcigoZGV0YWlsOiB7IGlkPzogc3RyaW5nIH0pID0+IGRldGFpbC5pZCAhPT0gbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2VUaXRsZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhc2VGbGFnRmllbGQgPSB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5maW5kKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKTtcbiAgICBpZiAoY2FzZUZsYWdGaWVsZCkge1xuICAgICAgY29uc3QgaXNDYXNlRmxhZ0V4dGVybmFsTW9kZSA9IGNhc2VGbGFnRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gJyNBUkdVTUVOVChVUERBVEUsRVhURVJOQUwpJyB8fFxuICAgICAgICBjYXNlRmxhZ0ZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09ICcjQVJHVU1FTlQoQ1JFQVRFLEVYVEVSTkFMKSc7XG4gICAgICByZXR1cm4gaXNDYXNlRmxhZ0V4dGVybmFsTW9kZVxuICAgICAgICA/IENhc2VFZGl0U3VibWl0VGl0bGVzLlJFVklFV19TVVBQT1JUX1JFUVVFU1RcbiAgICAgICAgOiBDYXNlRWRpdFN1Ym1pdFRpdGxlcy5SRVZJRVdfRkxBR19ERVRBSUxTO1xuICAgIH1cbiAgICByZXR1cm4gQ2FzZUVkaXRTdWJtaXRUaXRsZXMuQ0hFQ0tfWU9VUl9BTlNXRVJTO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0Py5lcnJvcj8uY2FsbGJhY2tFcnJvcnM/Lmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUGFnZShwYWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQubmF2aWdhdGVUb1BhZ2UocGFnZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc05vdGlmeShlcnJvckNvbnRleHQ6IENhbGxiYWNrRXJyb3JzQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQuaWdub3JlV2FybmluZyA9IGVycm9yQ29udGV4dC5pZ25vcmVXYXJuaW5nO1xuICAgIHRoaXMudHJpZ2dlclRleHQgPSBlcnJvckNvbnRleHQudHJpZ2dlclRleHQ7XG4gIH1cblxuICBwdWJsaWMgc3VtbWFyeUNhc2VGaWVsZChmaWVsZDogQ2FzZUZpZWxkKTogQ2FzZUZpZWxkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChudWxsID09PSB0aGlzLmVkaXRGb3JtLmdldCgnZGF0YScpLmdldChmaWVsZC5pZCkpIHtcbiAgICAgIC8vIElmIG5vdCBpbiBmb3JtLCByZXR1cm4gZmllbGQgaXRzZWxmXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgY29uc3QgY2xvbmVGaWVsZDogQ2FzZUZpZWxkID0gdGhpcy5maWVsZHNVdGlscy5jbG9uZUNhc2VGaWVsZChmaWVsZCk7XG4gICAgY2xvbmVGaWVsZC52YWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkYXRhJykuZ2V0KGZpZWxkLmlkKS52YWx1ZTtcblxuICAgIHJldHVybiBjbG9uZUZpZWxkO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5pc0xpbmtlZENhc2VzU3VibWlzc2lvbikge1xuICAgICAgdGhpcy5oYW5kbGVMaW5rZWRDYXNlc1N1Ym1pc3Npb24oKTtcbiAgICB9XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5yZXNldEluaXRpYWxDYXNlRmxhZ3MoKTtcbiAgICB0aGlzLmVtaXRDYW5jZWxFdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMaW5rZWRDYXNlc1N1Ym1pc3Npb24oKTogdm9pZCB7XG4gICAgY29uc3QgbGlua2VkQ2FzZXNUYWIgPSB0aGlzLmdldExpbmtlZENhc2VzVGFiKCk7XG4gICAgY29uc3QgaW5pdGlhbExpbmtzID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuaW5pdGlhbENhc2VMaW5rUmVmcztcblxuICAgIGlmIChsaW5rZWRDYXNlc1RhYiAmJiBsaW5rZWRDYXNlc1RhYi52YWx1ZS5sZW5ndGggIT09IGluaXRpYWxMaW5rcy5sZW5ndGgpIHtcbiAgICAgIGxpbmtlZENhc2VzVGFiLnZhbHVlID0gbGlua2VkQ2FzZXNUYWIudmFsdWUuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBpbml0aWFsTGlua3MuaW5jbHVkZXMoaXRlbS52YWx1ZS5DYXNlUmVmZXJlbmNlKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UucmVzZXRMaW5rZWRDYXNlRGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rZWRDYXNlc1RhYigpOiBDYXNlRmllbGQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy50YWJzLmZpbmQoKHRhYikgPT5cbiAgICAgIHRhYj8uZmllbGRzPy5zb21lKChmaWVsZCkgPT4gZmllbGQuaWQgPT09ICdjYXNlTGlua3MnKVxuICAgICk/LmZpZWxkcz8uWzBdID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDYW5jZWxFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuY2FuX3NhdmVfZHJhZnQpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoQ2FzZUVkaXRDb21wb25lbnQuT1JJR0lOX1FVRVJZX1BBUkFNKTtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IG9yaWdpbiA9PT0gJ3ZpZXdEcmFmdCcgPyBDYXNlRWRpdFBhZ2VDb21wb25lbnQuUkVTVU1FRF9GT1JNX0RJU0NBUkQgOiBDYXNlRWRpdFBhZ2VDb21wb25lbnQuTkVXX0ZPUk1fRElTQ0FSRDtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoeyBzdGF0dXMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNMYWJlbChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZpZWxkU2VydmljZS5pc0xhYmVsKGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NoYW5nZUFsbG93ZWQoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jYXNlRmllbGRTZXJ2aWNlLmlzUmVhZE9ubHkoZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGNoZWNrWW91ckFuc3dlckZpZWxkc1RvRGlzcGxheUV4aXN0cygpOiBib29sZWFuIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5zaG93X3N1bW1hcnkgfHwgdGhpcy5ldmVudFRyaWdnZXIuc2hvd19zdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgdGhpcy53aXphcmQucGFnZXMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHBhZ2UuY2FzZV9maWVsZHMgJiYgdGhpcy5pc1Nob3duKHBhZ2UpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBwYWdlLmNhc2VfZmllbGRzKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FuU2hvd0ZpZWxkSW5DWUEoZmllbGQpKSB7XG4gICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBmaWVsZCBuZWVkcyBzaG93aW5nXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3VuZCBubyBmaWVsZHMgdG8gc2hvdyBpbiBDWUEgc3VtbWFyeSBwYWdlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlYWRPbmx5U3VtbWFyeUZpZWxkc1RvRGlzcGxheUV4aXN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiA+PSAwKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RXZlbnROb3RlcygpOiBib29sZWFuIHtcbiAgICAvLyBEaXNwbGF5IGV2ZW50IG5vdGVzIHJlbGF0ZWQgY29udHJvbHMgb25seSBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgIC8vIDEuIHNob3dfZXZlbnRfbm90ZXMgZmxhZyBpcyBzZXQgdG8gdHJ1ZVxuICAgIC8vIDIuIHByb2ZpbGUgaXMgbm90IGEgc29saWNpdG9yXG4gICAgLy8gMy4gaXMgbm90IGEgY2FzZSBmbGFncyBqb3VybmV5LCBhcyBpdCB1c2VzIGEgY3VzdG9tIGNoZWNrIHlvdXIgYW5zd2VycyBjb21wb25lbnRcbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuc2hvd19ldmVudF9ub3Rlcykge1xuICAgICAgcmV0dXJuICF0aGlzLnByb2ZpbGU/LmlzU29saWNpdG9yKClcbiAgICAgICAgJiYgIXRoaXMuY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb247XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFzdFBhZ2VTaG93bigpOiBXaXphcmRQYWdlIHtcbiAgICBsZXQgbGFzdFBhZ2U6IFdpemFyZFBhZ2U7XG4gICAgdGhpcy53aXphcmQucmV2ZXJzZSgpLmZvckVhY2goKHBhZ2UpID0+IHtcbiAgICAgIGlmICghbGFzdFBhZ2UgJiYgdGhpcy5pc1Nob3duKHBhZ2UpKSB7XG4gICAgICAgIGxhc3RQYWdlID0gcGFnZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBub2luc3BlY3Rpb24gSlNVbnVzZWRBc3NpZ25tZW50XG4gICAgcmV0dXJuIGxhc3RQYWdlO1xuICB9XG5cbiAgcHVibGljIHByZXZpb3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uKSB7XG4gICAgICAvLyBpZiB3ZSBhcmUgaW4gdGhlIGNhc2VmbGFnIGpvdXJuZXkgd2UgbmVlZCB0byBzdG9yZSB0aGUgbGFzdCBwYWdlIGluZGV4IHNvIHRoYXQgdGhlIHByZXZpb3VzIGJ1dHRvbiBvbiBDWUEgd2lsbCB0YWtlIHRvIGNvcnJlY3QgcGFnZVxuICAgICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZSA9IHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UubGFzdFBhZ2VGaWVsZFN0YXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXNlRWRpdC5pc0xpbmtlZENhc2VzU3VibWlzc2lvbikge1xuICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FtZUZyb21GaW5hbFN0ZXAgPSB0cnVlO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmhhc1ByZXZpb3VzKCkpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb1BhZ2UodGhpcy5nZXRMYXN0UGFnZVNob3duKCkuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNQcmV2aW91cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldExhc3RQYWdlU2hvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3duKHBhZ2U6IFdpemFyZFBhZ2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkc1V0aWxzXG4gICAgICAubWVyZ2VDYXNlRmllbGRzQW5kRm9ybUZpZWxkcyh0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgdGhpcy5lZGl0Rm9ybS5jb250cm9scy5kYXRhLnZhbHVlKTtcbiAgICByZXR1cm4gcGFnZS5wYXJzZWRTaG93Q29uZGl0aW9uLm1hdGNoKGZpZWxkcyk7XG4gIH1cblxuICBwdWJsaWMgY2FuU2hvd0ZpZWxkSW5DWUEoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZC5zaG93X3N1bW1hcnlfY2hhbmdlX29wdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc29ydEZpZWxkc0J5U2hvd1N1bW1hcnlDb250ZW50KGZpZWxkczogQ2FzZUZpZWxkW10pOiBDYXNlRmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJTZXJ2aWNlXG4gICAgICAuc29ydChmaWVsZHMsIENhc2VFZGl0U3VibWl0Q29tcG9uZW50LlNIT1dfU1VNTUFSWV9DT05URU5UX0NPTVBBUkVfRlVOQ1RJT04pXG4gICAgICAuZmlsdGVyKChjZikgPT4gY2Yuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FzZUZpZWxkcygpOiBDYXNlRmllbGRbXSB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMpIHtcbiAgICAgIHJldHVybiBGaWVsZHNVdGlscy5nZXRDYXNlRmllbGRzKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdC5nZXRDYXNlSWQodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzICYmIHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuc3RhdGUgJiZcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuc3RhdGUudGl0bGVfZGlzcGxheSA/IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuc3RhdGUudGl0bGVfZGlzcGxheSA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYW5jZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmNhbl9zYXZlX2RyYWZ0KSB7XG4gICAgICByZXR1cm4gJ1JldHVybiB0byBjYXNlIGxpc3QnO1xuICAgIH1cbiAgICByZXR1cm4gJ0NhbmNlbCc7XG4gIH1cbn1cblxuIiwiPGRpdj5cbiAgPCEtLSBFdmVudCB0cmlnZ2VyIG5hbWUgLS0+XG4gIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPnt7ZXZlbnRUcmlnZ2VyLm5hbWUgfCBycHhUcmFuc2xhdGV9fTwvaDE+XG5cbiAgPCEtLUNhc2UgSUQgb3IgVGl0bGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJnZXRDYXNlVGl0bGUoKTsgdGhlbiB0aXRsZUJsb2NrOyBlbHNlIGlkQmxvY2tcIj48L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICN0aXRsZUJsb2NrPlxuICAgIDxjY2QtbWFya2Rvd24gW2NvbnRlbnRdPVwiZ2V0Q2FzZVRpdGxlKCkgfCBjY2RDYXNlVGl0bGU6IGNvbnRleHRGaWVsZHMgOiBlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCI+PC9jY2QtbWFya2Rvd24+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjaWRCbG9jaz5cbiAgICA8aDIgKm5nSWY9XCJnZXRDYXNlSWQoKVwiIGNsYXNzPVwiaGVhZGluZy1oMlwiPiN7eyBnZXRDYXNlSWQoKSB8IGNjZENhc2VSZWZlcmVuY2UgfX08L2gyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxjY2QtY2FzZS1lZGl0LWdlbmVyaWMtZXJyb3JzIFtlcnJvcl09XCJjYXNlRWRpdC5lcnJvclwiPjwvY2NkLWNhc2UtZWRpdC1nZW5lcmljLWVycm9ycz5cblxuICA8Y2NkLWNhbGxiYWNrLWVycm9ycyBbY2FsbGJhY2tFcnJvcnNTdWJqZWN0XT1cImNhc2VFZGl0LmNhbGxiYWNrRXJyb3JzU3ViamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNhbGxiYWNrRXJyb3JzQ29udGV4dCk9XCJjYWxsYmFja0Vycm9yc05vdGlmeSgkZXZlbnQpXCI+PC9jY2QtY2FsbGJhY2stZXJyb3JzPlxuXG4gIDxmb3JtIGNsYXNzPVwiY2hlY2steW91ci1hbnN3ZXJzXCIgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybVwiIChzdWJtaXQpPVwic3VibWl0KClcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWNhc2VFZGl0LmlzRXZlbnRDb21wbGV0aW9uQ2hlY2tzUmVxdWlyZWRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja1lvdXJBbnN3ZXJGaWVsZHNUb0Rpc3BsYXlFeGlzdHMoKVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+e3twYWdlVGl0bGUgfCBycHhUcmFuc2xhdGUgfX08L2gyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTZcIiAqbmdJZj1cIiFjYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvblwiPnt7J0NoZWNrIHRoZSBpbmZvcm1hdGlvbiBiZWxvdyBjYXJlZnVsbHkuJyB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPlxuXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImZvcm0tdGFibGVcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiY2hlY2sgeW91ciBhbnN3ZXJzIHRhYmxlXCI+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2Ygd2l6YXJkLnBhZ2VzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTaG93bihwYWdlKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBwYWdlXG4gICAgICAgICAgICAgIHwgY2NkUGFnZUZpZWxkczogZWRpdEZvcm1cbiAgICAgICAgICAgICAgfCBjY2RSZWFkRmllbGRzRmlsdGVyOiBmYWxzZSA6dW5kZWZpbmVkIDp0cnVlIDphbGxGaWVsZHNWYWx1ZXNcbiAgICAgICAgICAgICAgfCBjY2RDWUFQYWdlTGFiZWxGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuU2hvd0ZpZWxkSW5DWUEoZmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICA8dHIgY2NkTGFiZWxTdWJzdGl0dXRvciBbY2FzZUZpZWxkXT1cImZpZWxkXCIgW2hpZGRlbl09XCJmaWVsZC5oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWlzTGFiZWwoZmllbGQpICYmICFjYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvblwiIGNsYXNzPVwidmFsaWduLXRvcCBjYXNlLWZpZWxkLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LTE2XCI+e3tmaWVsZC5sYWJlbCB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmb3JtLWNlbGwgY2FzZS1maWVsZC1jb250ZW50IHRleHQtMTZcIiBbYXR0ci5jb2xzcGFuXT1cImlzTGFiZWwoZmllbGQpID8gJzInIDogJzEnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGNjZC1maWVsZC1yZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbdG9wTGV2ZWxGb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FzZUZpZWxkXT1cInN1bW1hcnlDYXNlRmllbGQoZmllbGQpXCIgW2NvbnRleHRdPVwicGFsZXR0ZUNvbnRleHRcIiBbY2FzZUZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+PC9jY2QtZmllbGQtcmVhZD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInZhbGlnbi10b3AgY2hlY2steW91ci1hbnN3ZXJzX19jaGFuZ2UgY2FzZS1maWVsZC1jaGFuZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiaXNDaGFuZ2VBbGxvd2VkKGZpZWxkKVwiIChjbGljayk9XCJuYXZpZ2F0ZVRvUGFnZShwYWdlLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LTE2XCIgYXR0ci5hcmlhLWxhYmVsPVwie3snQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZX19IHt7IGZpZWxkLmxhYmVsIHwgcnB4VHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWRPbmx5U3VtbWFyeUZpZWxkc1RvRGlzcGxheUV4aXN0cygpXCI+XG5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwic3VtbWFyeS1maWVsZHNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwic3VtbWFyeSBmaWVsZHMgdGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzaG93U3VtbWFyeUZpZWxkc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIiEoZmllbGQgfCBjY2RJc0NvbXBvdW5kKVwiPlxuICAgICAgICAgICAgICAgICAgPHRyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCIgY2NkTGFiZWxTdWJzdGl0dXRvciBbY2FzZUZpZWxkXT1cImZpZWxkXCIgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2NvbnRleHRGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGggaWQ9XCJzdW1tYXJ5LWZpZWxkLWxhYmVsXCI+e3tmaWVsZC5sYWJlbH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZm9ybS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGNjZC1maWVsZC1yZWFkIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjYXNlRmllbGRdPVwic3VtbWFyeUNhc2VGaWVsZChmaWVsZClcIj48L2NjZC1maWVsZC1yZWFkPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDx0ciAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIiBjbGFzcz1cImNvbXBvdW5kLWZpZWxkXCIgY2NkTGFiZWxTdWJzdGl0dXRvciBbY2FzZUZpZWxkXT1cImZpZWxkXCIgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2NvbnRleHRGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWQgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiIFtjYXNlRmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj48L2NjZC1maWVsZC1yZWFkPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dFdmVudE5vdGVzKClcIj5cbiAgICAgICAgPGZpZWxkc2V0IGlkPVwiZmllbGRzZXQtZXZlbnRcIiBmb3JtR3JvdXBOYW1lPVwiZXZlbnRcIj5cbiAgICAgICAgICA8bGVnZW5kIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6ICEhc3VtbWFyeSAmJiAhc3VtbWFyeS52YWxpZCAmJiAoc3VtbWFyeS5kaXJ0eSB8fCBzdW1tYXJ5LnRvdWNoZWQpfVwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpZWxkLXRyaWdnZXItc3VtbWFyeVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxuICAgICAgICAgICAgICBFdmVudCBzdW1tYXJ5IChvcHRpb25hbClcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIj5BIGZldyB3b3JkcyBkZXNjcmliaW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBldmVudC48L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJzdW1tYXJ5Py5lcnJvcnMgJiYgKHN1bW1hcnkuZGlydHkgfHwgc3VtbWFyeS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICB7e3N1bW1hcnkuZXJyb3JzIHwgY2NkRmlyc3RFcnJvcjogZXZlbnRTdW1tYXJ5TGFiZWwgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJmaWVsZC10cmlnZ2VyLXN1bW1hcnlcIiBjbGFzcz1cImZvcm0tY29udHJvbCBib3R0b20tMzAgd2lkdGgtNTBcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2dvdnVrLWlucHV0LS1lcnJvcic6IHN1bW1hcnk/LmVycm9ycyAmJiAoc3VtbWFyeS5kaXJ0eSB8fCBzdW1tYXJ5LnRvdWNoZWQpfVwiIGZvcm1Db250cm9sTmFtZT1cInN1bW1hcnlcIiBtYXhsZW5ndGg9XCIxMDI0XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiAhIWRlc2NyaXB0aW9uICYmICFkZXNjcmlwdGlvbi52YWxpZCAmJiAoZGVzY3JpcHRpb24uZGlydHkgfHwgZGVzY3JpcHRpb24udG91Y2hlZCl9XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmllbGQtdHJpZ2dlci1kZXNjcmlwdGlvblwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkV2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCk8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJkZXNjcmlwdGlvbj8uZXJyb3JzICYmIChkZXNjcmlwdGlvbi5kaXJ0eSB8fCBkZXNjcmlwdGlvbi50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICB7e2Rlc2NyaXB0aW9uLmVycm9ycyB8IGNjZEZpcnN0RXJyb3I6IGV2ZW50RGVzY3JpcHRpb25MYWJlbCB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmaWVsZC10cmlnZ2VyLWRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwIHdpZHRoLTUwXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2dvdnVrLWlucHV0LS1lcnJvcic6IGRlc2NyaXB0aW9uPy5lcnJvcnMgJiYgKGRlc2NyaXB0aW9uLmRpcnR5IHx8IGRlc2NyaXB0aW9uLnRvdWNoZWQpfVwiIG1heGxlbmd0aD1cIjY1NTM2XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxjY2QtY2FzZS1ldmVudC1jb21wbGV0aW9uICpuZ0lmPVwiY2FzZUVkaXQuaXNFdmVudENvbXBsZXRpb25DaGVja3NSZXF1aXJlZFwiXG4gICAgICBbZXZlbnRDb21wbGV0aW9uUGFyYW1zXT1cImNhc2VFZGl0LmV2ZW50Q29tcGxldGlvblBhcmFtc1wiXG4gICAgICAoZXZlbnRDYW5CZUNvbXBsZXRlZCk9XCJvbkV2ZW50Q2FuQmVDb21wbGV0ZWQoJGV2ZW50KVwiPlxuICAgIDwvY2NkLWNhc2UtZXZlbnQtY29tcGxldGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmb3JtLWdyb3VwLXJlbGF0ZWRcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLXNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWhhc1ByZXZpb3VzKCkgfHwgY2FzZUVkaXQuaXNTdWJtaXR0aW5nXCIgKGNsaWNrKT1cInByZXZpb3VzKClcIj5cbiAgICAgICAge3snUHJldmlvdXMnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBjbGFzcz1cImJ1dHRvblwiPlxuICAgICAgICB7e3RyaWdnZXJUZXh0IHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiY2FuY2VsXCI+XG4gICAgICA8YSAoY2xpY2spPVwiY2FuY2VsKClcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgW2NsYXNzLmRpc2FibGVkXT1cImNhc2VFZGl0LmlzU3VibWl0dGluZ1wiPnt7Z2V0Q2FuY2VsVGV4dCgpIHwgcnB4VHJhbnNsYXRlfX08L2E+XG4gICAgPC9wPlxuICA8L2Zvcm0+XG48L2Rpdj5cblxuIl19
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXN1Ym1pdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvY2FzZS1lZGl0LXN1Ym1pdC9jYXNlLWVkaXQtc3VibWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtc3VibWl0L2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJakQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osZUFBZSxFQUNoQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSx1QkFBdUIsRUFBeUIsTUFBTSxhQUFhLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7Ozs7Ozs7SUNoQjVGLHNCQUFpRTs7O0lB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c0Y7WUFFdEYsK0NBQzJFO1lBQXZELDhMQUF5QixnQ0FBNEIsS0FBQztZQUFDLGlCQUFzQjtZQUVqRyxnQ0FBNEU7WUFBcEIsMklBQVUsWUFBUSxLQUFDO1lBMEZ6RSxBQXpGQSwwRUFBdUQseUdBMkZDO1lBR3RELEFBREYsK0JBQTJDLGtCQUN1RjtZQUFyQiwySUFBUyxjQUFVLEtBQUM7WUFDN0gsYUFDRjs7WUFBQSxpQkFBUztZQUNULG1DQUE2RDtZQUMzRCxhQUNGOztZQUNGLEFBREUsaUJBQVMsRUFDTDtZQUVKLEFBREYsOEJBQWtCLGFBQ3lFO1lBQXRGLHNJQUFTLFlBQVEsS0FBQztZQUFvRSxhQUFrQzs7WUFHakksQUFERSxBQURFLEFBRDZILGlCQUFJLEVBQzdILEVBQ0MsRUFDSDs7OztZQTFId0IsZUFBb0M7WUFBcEMsa0VBQW9DO1lBRzFELGVBQXNCO1lBQWlCLEFBQWpCLEFBQXRCLHlDQUFzQiwyQkFBaUIsd0JBQVk7WUFRM0IsZUFBd0I7WUFBeEIsMENBQXdCO1lBRWpDLGNBQXdEO1lBQXhELDBFQUF3RDtZQUc1QyxjQUFzQjtZQUF0Qix3Q0FBc0I7WUFDL0MsY0FBK0M7WUFBL0Msb0VBQStDO1lBeUZ6QixjQUE4QztZQUE5QyxtRUFBOEM7WUFLbEIsZUFBb0Q7WUFBcEQsMEVBQW9EO1lBQ3hHLGNBQ0Y7WUFERSxtRUFDRjtZQUNzQixlQUF1QjtZQUF2Qix5Q0FBdUI7WUFDM0MsY0FDRjtZQURFLHdFQUNGO1lBR2dELGVBQXdDO1lBQXhDLHFEQUF3QztZQUFDLGNBQWtDO1lBQWxDLGlFQUFrQzs7O2lGRDVGcEgsdUJBQXVCO2NBTG5DLFNBQVM7MkJBQ0Usc0JBQXNCOztrRkFJckIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhc2VFdmVudFRyaWdnZXIsIENhc2VGaWVsZCwgUHJvZmlsZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3dvcmstYWxsb2NhdGlvbi9UYXNrJztcbmltcG9ydCB7XG4gIENhc2VGaWVsZFNlcnZpY2UsXG4gIEZpZWxkc1V0aWxzLFxuICBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UsXG4gIEZvcm1WYWxpZGF0b3JzU2VydmljZSxcbiAgT3JkZXJTZXJ2aWNlLFxuICBQcm9maWxlTm90aWZpZXJcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tFcnJvcnNDb21wb25lbnQsIENhbGxiYWNrRXJyb3JzQ29udGV4dCB9IGZyb20gJy4uLy4uL2Vycm9yJztcbmltcG9ydCB7IFBhbGV0dGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBDYXNlRWRpdFBhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQtcGFnZS9jYXNlLWVkaXQtcGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUVkaXRDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaXphcmQsIFdpemFyZFBhZ2UgfSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUVkaXRTdWJtaXRUaXRsZXMgfSBmcm9tICcuL2Nhc2UtZWRpdC1zdWJtaXQtdGl0bGVzLmVudW0nO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wYWxldHRlL2xpbmtlZC1jYXNlcy9zZXJ2aWNlcy9saW5rZWQtY2FzZXMuc2VydmljZSc7XG5cbi8vIEBkeW5hbWljXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtY2FzZS1lZGl0LXN1Ym1pdCcsXG4gIHRlbXBsYXRlVXJsOiAnY2FzZS1lZGl0LXN1Ym1pdC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL2Nhc2UtZWRpdC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUVkaXRTdWJtaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXI7XG4gIHB1YmxpYyBlZGl0Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgdHJpZ2dlclRleHQ6IHN0cmluZztcbiAgcHVibGljIHdpemFyZDogV2l6YXJkO1xuICBwdWJsaWMgcHJvZmlsZTogUHJvZmlsZTtcbiAgcHVibGljIHNob3dTdW1tYXJ5RmllbGRzOiBDYXNlRmllbGRbXTtcbiAgcHVibGljIHBhbGV0dGVDb250ZXh0OiBQYWxldHRlQ29udGV4dCA9IFBhbGV0dGVDb250ZXh0LkNIRUNLX1lPVVJfQU5TV0VSO1xuICBwdWJsaWMgcHJvZmlsZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY29udGV4dEZpZWxkczogQ2FzZUZpZWxkW107XG4gIHB1YmxpYyB0YXNrOiBUYXNrO1xuICBwdWJsaWMgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBtZXRhZGF0YUZpZWxkc09iamVjdDogb2JqZWN0O1xuICBwdWJsaWMgYWxsRmllbGRzVmFsdWVzOiBhbnk7XG4gIHB1YmxpYyBzdW1tYXJ5OiBBYnN0cmFjdENvbnRyb2w7XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogQWJzdHJhY3RDb250cm9sO1xuICBwdWJsaWMgZXZlbnRTdW1tYXJ5TGFiZWw6IHN0cmluZyA9ICdFdmVudCBzdW1tYXJ5JztcbiAgcHVibGljIGV2ZW50RGVzY3JpcHRpb25MYWJlbDogc3RyaW5nID0gJ0V2ZW50IGRlc2NyaXB0aW9uJztcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNIT1dfU1VNTUFSWV9DT05URU5UX0NPTVBBUkVfRlVOQ1RJT04gPSAoYTogQ2FzZUZpZWxkLCBiOiBDYXNlRmllbGQpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGFDYXNlRmllbGQgPSBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiA9PT0gMCB8fCBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcbiAgICBjb25zdCBiQ2FzZUZpZWxkID0gYi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gPT09IDAgfHwgYi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb247XG5cbiAgICBpZiAoIWFDYXNlRmllbGQpIHtcbiAgICAgIHJldHVybiAhYkNhc2VGaWVsZCA/IDAgOiAxO1xuICAgIH1cblxuICAgIGlmICghYkNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gYS5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gLSBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcbiAgfTtcblxuICBwdWJsaWMgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gRVVJLTM0NTIuXG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGVkaXRGb3JtIGFzIGl0IGlzIHJlYWRvbmx5LlxuICAgIC8vIFRoaXMgd2FzIGNhdXNpbmcgaXNzdWVzIHdpdGggaGlkZGVuIGZpZWxkcyB0aGF0IGFyZW4ndCB3YW50ZWQgYnV0IGhhdmVcbiAgICAvLyBub3QgYmVlbiBkaXNhYmxlZC5cbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgfHwgdGhpcy5oYXNFcnJvcnM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FzZUVkaXQ6IENhc2VFZGl0Q29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmllbGRzVXRpbHM6IEZpZWxkc1V0aWxzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZpZWxkU2VydmljZTogQ2FzZUZpZWxkU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9yZGVyU2VydmljZTogT3JkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZmlsZU5vdGlmaWVyOiBQcm9maWxlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2U6IE11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1WYWxpZGF0b3JzU2VydmljZTogRm9ybVZhbGlkYXRvcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZsYWdTdGF0ZVNlcnZpY2U6IENhc2VGbGFnU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlua2VkQ2FzZXNTZXJ2aWNlOiBMaW5rZWRDYXNlc1NlcnZpY2UsXG4gICkge1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbiA9IHRoaXMucHJvZmlsZU5vdGlmaWVyLnByb2ZpbGUuc3Vic2NyaWJlKChfKSA9PiB0aGlzLnByb2ZpbGUgPSBfKTtcbiAgICB0aGlzLmV2ZW50VHJpZ2dlciA9IHRoaXMuY2FzZUVkaXQuZXZlbnRUcmlnZ2VyO1xuICAgIHRoaXMudHJpZ2dlclRleHQgPSB0aGlzLmV2ZW50VHJpZ2dlci5lbmRfYnV0dG9uX2xhYmVsIHx8IENhbGxiYWNrRXJyb3JzQ29tcG9uZW50LlRSSUdHRVJfVEVYVF9TVUJNSVQ7XG4gICAgdGhpcy5lZGl0Rm9ybSA9IHRoaXMuY2FzZUVkaXQuZm9ybTtcbiAgICB0aGlzLndpemFyZCA9IHRoaXMuY2FzZUVkaXQud2l6YXJkO1xuICAgIHRoaXMuc2hvd1N1bW1hcnlGaWVsZHMgPSB0aGlzLnNvcnRGaWVsZHNCeVNob3dTdW1tYXJ5Q29udGVudCh0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRleHRGaWVsZHMgPSB0aGlzLmdldENhc2VGaWVsZHMoKTtcbiAgICB0aGlzLm1ldGFkYXRhRmllbGRzT2JqZWN0ID0gdGhpcy5jYXNlRWRpdD8uY2FzZURldGFpbHM/Lm1ldGFkYXRhRmllbGRzPy5cbiAgICAgIHJlZHVjZSgobywga2V5KSA9PiBPYmplY3QuYXNzaWduKG8sIHsgW2tleS5pZF06IGtleS52YWx1ZSB9KSwge30pO1xuICAgIHRoaXMuYWxsRmllbGRzVmFsdWVzID0gT2JqZWN0LmFzc2lnbih0aGlzLm1ldGFkYXRhRmllbGRzT2JqZWN0ID8gdGhpcy5tZXRhZGF0YUZpZWxkc09iamVjdCA6IHt9LCB0aGlzLmVkaXRGb3JtLmdldFJhd1ZhbHVlKCkuZGF0YSk7XG4gICAgLy8gSW5kaWNhdGVzIGlmIHRoZSBzdWJtaXNzaW9uIGlzIGZvciBhIENhc2UgRmxhZywgYXMgb3Bwb3NlZCB0byBhIFwicmVndWxhclwiIGZvcm0gc3VibWlzc2lvbiwgYnkgdGhlIHByZXNlbmNlIG9mXG4gICAgLy8gYSBGbGFnTGF1bmNoZXIgZmllbGQgaW4gdGhlIGV2ZW50IHRyaWdnZXJcbiAgICB0aGlzLmNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uID1cbiAgICAgIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLnNvbWUoKGNhc2VGaWVsZCkgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSk7XG4gICAgdGhpcy5jYXNlRWRpdC5pc0xpbmtlZENhc2VzU3VibWlzc2lvbiA9XG4gICAgICB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5zb21lKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpO1xuICAgIHRoaXMucGFnZVRpdGxlID0gdGhpcy5nZXRQYWdlVGl0bGUoKTtcbiAgICBpZiAoIXRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuaW5pdGlhbENhc2VGbGFncyAmJiB0aGlzLmNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uICYmIE9iamVjdC5rZXlzKHRoaXMuY2FzZUVkaXQuZm9ybS52YWx1ZS5kYXRhKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuaW5pdGlhbENhc2VGbGFncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYXNlRWRpdC5mb3JtLnZhbHVlKSk7XG4gICAgfVxuICAgIHRoaXMuc3VtbWFyeSA9IHRoaXMuZm9ybVZhbGlkYXRvcnNTZXJ2aWNlLmFkZE1hcmtEb3duVmFsaWRhdG9ycyh0aGlzLmVkaXRGb3JtLCAnZXZlbnQuc3VtbWFyeScpO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLmZvcm1WYWxpZGF0b3JzU2VydmljZS5hZGRNYXJrRG93blZhbGlkYXRvcnModGhpcy5lZGl0Rm9ybSwgJ2V2ZW50LmRlc2NyaXB0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnByb2ZpbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1bW1hcnkudmFsaWQgJiYgdGhpcy5kZXNjcmlwdGlvbi52YWxpZCkge1xuICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UucmVzZXRMaW5rZWRDYXNlRGF0YSgpO1xuICAgICAgdGhpcy5jaGVja0V4aXN0aW5nRGF0YUluU3VibWlzc2lvbigpO1xuICAgICAgdGhpcy5jYXNlRWRpdC5zdWJtaXRGb3JtKHtcbiAgICAgICAgZXZlbnRUcmlnZ2VyOiB0aGlzLmV2ZW50VHJpZ2dlcixcbiAgICAgICAgZm9ybTogdGhpcy5lZGl0Rm9ybSxcbiAgICAgICAgc3VibWl0OiB0aGlzLmNhc2VFZGl0LnN1Ym1pdCxcbiAgICAgICAgY2FzZURldGFpbHM6IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5yZXNldEluaXRpYWxDYXNlRmxhZ3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25FdmVudENhbkJlQ29tcGxldGVkKGV2ZW50Q2FuQmVDb21wbGV0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0Lm9uRXZlbnRDYW5CZUNvbXBsZXRlZCh7XG4gICAgICBldmVudFRyaWdnZXI6IHRoaXMuZXZlbnRUcmlnZ2VyLFxuICAgICAgZXZlbnRDYW5CZUNvbXBsZXRlZCxcbiAgICAgIGNhc2VEZXRhaWxzOiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLFxuICAgICAgZm9ybTogdGhpcy5lZGl0Rm9ybSxcbiAgICAgIHN1Ym1pdDogdGhpcy5jYXNlRWRpdC5zdWJtaXRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0V4aXN0aW5nRGF0YUluU3VibWlzc2lvbigpIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbikge1xuICAgICAgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGREYXRhID0gdGhpcy5lZGl0Rm9ybS52YWx1ZS5kYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgaWYgKGZpZWxkRGF0YT8uZGV0YWlscykge1xuICAgICAgICAgIGNvbnN0IHByaW9yRmxhZ3MgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmluaXRpYWxDYXNlRmxhZ3MuZGF0YVtmaWVsZC5pZF0uZGV0YWlscztcbiAgICAgICAgICBpZiAocHJpb3JGbGFncykge1xuICAgICAgICAgICAgcHJpb3JGbGFncy5mb3JFYWNoKChmbGFnKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZmllbGQuX3ZhbHVlLmRldGFpbHMuc29tZSgoZGV0YWlsKSA9PiBkZXRhaWwuaWQgPT09IGZsYWcuaWQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX3ZhbHVlLmRldGFpbHMucHVzaChmbGFnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmllbGQuX3ZhbHVlKSB7XG4gICAgICAgICAgICAgIGZpZWxkLl92YWx1ZS5kZXRhaWxzID0gZmllbGQuX3ZhbHVlLmRldGFpbHM/LmZpbHRlcigoZGV0YWlsOiB7IGlkPzogc3RyaW5nIH0pID0+IGRldGFpbC5pZCAhPT0gbnVsbCk7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXR0ZWRfdmFsdWU/Lmdyb3VwSWQpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUuZ3JvdXBJZCA9IGZpZWxkLmZvcm1hdHRlZF92YWx1ZS5ncm91cElkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXR0ZWRfdmFsdWU/LnZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUudmlzaWJpbGl0eSA9IGZpZWxkLmZvcm1hdHRlZF92YWx1ZT8udmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybWF0dGVkX3ZhbHVlLmRldGFpbHMgPSBmaWVsZC5fdmFsdWU/LmRldGFpbHM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmllbGREYXRhLmRldGFpbHMgPSBmaWVsZERhdGEuZGV0YWlscy5maWx0ZXIoKGRldGFpbDogeyBpZD86IHN0cmluZyB9KSA9PiBkZXRhaWwuaWQgIT09IG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWdlVGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYXNlRmxhZ0ZpZWxkID0gdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuZmluZChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSk7XG4gICAgaWYgKGNhc2VGbGFnRmllbGQpIHtcbiAgICAgIGNvbnN0IGlzQ2FzZUZsYWdFeHRlcm5hbE1vZGUgPSBjYXNlRmxhZ0ZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09ICcjQVJHVU1FTlQoVVBEQVRFLEVYVEVSTkFMKScgfHxcbiAgICAgICAgY2FzZUZsYWdGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSAnI0FSR1VNRU5UKENSRUFURSxFWFRFUk5BTCknO1xuICAgICAgcmV0dXJuIGlzQ2FzZUZsYWdFeHRlcm5hbE1vZGVcbiAgICAgICAgPyBDYXNlRWRpdFN1Ym1pdFRpdGxlcy5SRVZJRVdfU1VQUE9SVF9SRVFVRVNUXG4gICAgICAgIDogQ2FzZUVkaXRTdWJtaXRUaXRsZXMuUkVWSUVXX0ZMQUdfREVUQUlMUztcbiAgICB9XG4gICAgcmV0dXJuIENhc2VFZGl0U3VibWl0VGl0bGVzLkNIRUNLX1lPVVJfQU5TV0VSUztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdD8uZXJyb3I/LmNhbGxiYWNrRXJyb3JzPy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb1BhZ2UocGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0Lm5hdmlnYXRlVG9QYWdlKHBhZ2VJZCk7XG4gIH1cblxuICBwdWJsaWMgY2FsbGJhY2tFcnJvcnNOb3RpZnkoZXJyb3JDb250ZXh0OiBDYWxsYmFja0Vycm9yc0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0Lmlnbm9yZVdhcm5pbmcgPSBlcnJvckNvbnRleHQuaWdub3JlV2FybmluZztcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gZXJyb3JDb250ZXh0LnRyaWdnZXJUZXh0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcnlDYXNlRmllbGQoZmllbGQ6IENhc2VGaWVsZCk6IENhc2VGaWVsZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAobnVsbCA9PT0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RhdGEnKS5nZXQoZmllbGQuaWQpKSB7XG4gICAgICAvLyBJZiBub3QgaW4gZm9ybSwgcmV0dXJuIGZpZWxkIGl0c2VsZlxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lRmllbGQ6IENhc2VGaWVsZCA9IHRoaXMuZmllbGRzVXRpbHMuY2xvbmVDYXNlRmllbGQoZmllbGQpO1xuICAgIGNsb25lRmllbGQudmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGF0YScpLmdldChmaWVsZC5pZCkudmFsdWU7XG5cbiAgICByZXR1cm4gY2xvbmVGaWVsZDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuaXNMaW5rZWRDYXNlc1N1Ym1pc3Npb24pIHtcbiAgICAgIHRoaXMuaGFuZGxlTGlua2VkQ2FzZXNTdWJtaXNzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRJbml0aWFsQ2FzZUZsYWdzKCk7XG4gICAgdGhpcy5lbWl0Q2FuY2VsRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTGlua2VkQ2FzZXNTdWJtaXNzaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpbmtlZENhc2VzVGFiID0gdGhpcy5nZXRMaW5rZWRDYXNlc1RhYigpO1xuICAgIGNvbnN0IGluaXRpYWxMaW5rcyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmluaXRpYWxDYXNlTGlua1JlZnM7XG5cbiAgICBpZiAobGlua2VkQ2FzZXNUYWIgJiYgbGlua2VkQ2FzZXNUYWIudmFsdWUubGVuZ3RoICE9PSBpbml0aWFsTGlua3MubGVuZ3RoKSB7XG4gICAgICBsaW5rZWRDYXNlc1RhYi52YWx1ZSA9IGxpbmtlZENhc2VzVGFiLnZhbHVlLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgaW5pdGlhbExpbmtzLmluY2x1ZGVzKGl0ZW0udmFsdWUuQ2FzZVJlZmVyZW5jZSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLnJlc2V0TGlua2VkQ2FzZURhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGlua2VkQ2FzZXNUYWIoKTogQ2FzZUZpZWxkIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMudGFicy5maW5kKCh0YWIpID0+XG4gICAgICB0YWI/LmZpZWxkcz8uc29tZSgoZmllbGQpID0+IGZpZWxkLmlkID09PSAnY2FzZUxpbmtzJylcbiAgICApPy5maWVsZHM/LlswXSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2FuY2VsRXZlbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmNhbl9zYXZlX2RyYWZ0KSB7XG4gICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KENhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTSk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBvcmlnaW4gPT09ICd2aWV3RHJhZnQnID8gQ2FzZUVkaXRQYWdlQ29tcG9uZW50LlJFU1VNRURfRk9STV9ESVNDQVJEIDogQ2FzZUVkaXRQYWdlQ29tcG9uZW50Lk5FV19GT1JNX0RJU0NBUkQ7XG4gICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KHsgc3RhdHVzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzTGFiZWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhc2VGaWVsZFNlcnZpY2UuaXNMYWJlbChmaWVsZCk7XG4gIH1cblxuICBwdWJsaWMgaXNDaGFuZ2VBbGxvd2VkKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuY2FzZUZpZWxkU2VydmljZS5pc1JlYWRPbmx5KGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1lvdXJBbnN3ZXJGaWVsZHNUb0Rpc3BsYXlFeGlzdHMoKTogYm9vbGVhbiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuc2hvd19zdW1tYXJ5IHx8IHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMud2l6YXJkLnBhZ2VzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChwYWdlLmNhc2VfZmllbGRzICYmIHRoaXMuaXNTaG93bihwYWdlKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgcGFnZS5jYXNlX2ZpZWxkcykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmNhblNob3dGaWVsZEluQ1lBKGZpZWxkKSkge1xuICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZmllbGQgbmVlZHMgc2hvd2luZ1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm91bmQgbm8gZmllbGRzIHRvIHNob3cgaW4gQ1lBIHN1bW1hcnkgcGFnZVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWFkT25seVN1bW1hcnlGaWVsZHNUb0Rpc3BsYXlFeGlzdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gPj0gMCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0V2ZW50Tm90ZXMoKTogYm9vbGVhbiB7XG4gICAgLy8gRGlzcGxheSBldmVudCBub3RlcyByZWxhdGVkIGNvbnRyb2xzIG9ubHkgaWYgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXRcbiAgICAvLyAxLiBzaG93X2V2ZW50X25vdGVzIGZsYWcgaXMgc2V0IHRvIHRydWVcbiAgICAvLyAyLiBwcm9maWxlIGlzIG5vdCBhIHNvbGljaXRvclxuICAgIC8vIDMuIGlzIG5vdCBhIGNhc2UgZmxhZ3Mgam91cm5leSwgYXMgaXQgdXNlcyBhIGN1c3RvbSBjaGVjayB5b3VyIGFuc3dlcnMgY29tcG9uZW50XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfZXZlbnRfbm90ZXMpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9maWxlPy5pc1NvbGljaXRvcigpXG4gICAgICAgICYmICF0aGlzLmNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3RQYWdlU2hvd24oKTogV2l6YXJkUGFnZSB7XG4gICAgbGV0IGxhc3RQYWdlOiBXaXphcmRQYWdlO1xuICAgIHRoaXMud2l6YXJkLnJldmVyc2UoKS5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICBpZiAoIWxhc3RQYWdlICYmIHRoaXMuaXNTaG93bihwYWdlKSkge1xuICAgICAgICBsYXN0UGFnZSA9IHBhZ2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkQXNzaWdubWVudFxuICAgIHJldHVybiBsYXN0UGFnZTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbikge1xuICAgICAgLy8gaWYgd2UgYXJlIGluIHRoZSBjYXNlZmxhZyBqb3VybmV5IHdlIG5lZWQgdG8gc3RvcmUgdGhlIGxhc3QgcGFnZSBpbmRleCBzbyB0aGF0IHRoZSBwcmV2aW91cyBidXR0b24gb24gQ1lBIHdpbGwgdGFrZSB0byBjb3JyZWN0IHBhZ2VcbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmxhc3RQYWdlRmllbGRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuaXNMaW5rZWRDYXNlc1N1Ym1pc3Npb24pIHtcbiAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhbWVGcm9tRmluYWxTdGVwID0gdHJ1ZTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5oYXNQcmV2aW91cygpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9QYWdlKHRoaXMuZ2V0TGFzdFBhZ2VTaG93bigpLmlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzUHJldmlvdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRMYXN0UGFnZVNob3duKCk7XG4gIH1cblxuICBwdWJsaWMgaXNTaG93bihwYWdlOiBXaXphcmRQYWdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5maWVsZHNVdGlsc1xuICAgICAgLm1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHModGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMsIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YS52YWx1ZSk7XG4gICAgcmV0dXJuIHBhZ2UucGFyc2VkU2hvd0NvbmRpdGlvbi5tYXRjaChmaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIGNhblNob3dGaWVsZEluQ1lBKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuc2hvd19zdW1tYXJ5X2NoYW5nZV9vcHRpb247XG4gIH1cblxuICBwcml2YXRlIHNvcnRGaWVsZHNCeVNob3dTdW1tYXJ5Q29udGVudChmaWVsZHM6IENhc2VGaWVsZFtdKTogQ2FzZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLm9yZGVyU2VydmljZVxuICAgICAgLnNvcnQoZmllbGRzLCBDYXNlRWRpdFN1Ym1pdENvbXBvbmVudC5TSE9XX1NVTU1BUllfQ09OVEVOVF9DT01QQVJFX0ZVTkNUSU9OKVxuICAgICAgLmZpbHRlcigoY2YpID0+IGNmLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldENhc2VGaWVsZHMoKTogQ2FzZUZpZWxkW10ge1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzKSB7XG4gICAgICByZXR1cm4gRmllbGRzVXRpbHMuZ2V0Q2FzZUZpZWxkcyh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQuZ2V0Q2FzZUlkKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyAmJiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlICYmXG4gICAgICB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgPyB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgOiAnJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FuY2VsVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5jYW5fc2F2ZV9kcmFmdCkge1xuICAgICAgcmV0dXJuICdSZXR1cm4gdG8gY2FzZSBsaXN0JztcbiAgICB9XG4gICAgcmV0dXJuICdDYW5jZWwnO1xuICB9XG59XG5cbiIsIjxkaXY+XG4gIDwhLS0gRXZlbnQgdHJpZ2dlciBuYW1lIC0tPlxuICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj57e2V2ZW50VHJpZ2dlci5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L2gxPlxuXG4gIDwhLS1DYXNlIElEIG9yIFRpdGxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZ2V0Q2FzZVRpdGxlKCk7IHRoZW4gdGl0bGVCbG9jazsgZWxzZSBpZEJsb2NrXCI+PC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjdGl0bGVCbG9jaz5cbiAgICA8Y2NkLW1hcmtkb3duIFtjb250ZW50XT1cImdldENhc2VUaXRsZSgpIHwgY2NkQ2FzZVRpdGxlOiBjb250ZXh0RmllbGRzIDogZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiPjwvY2NkLW1hcmtkb3duPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2lkQmxvY2s+XG4gICAgPGgyICpuZ0lmPVwiZ2V0Q2FzZUlkKClcIiBjbGFzcz1cImhlYWRpbmctaDJcIj4je3sgZ2V0Q2FzZUlkKCkgfCBjY2RDYXNlUmVmZXJlbmNlIH19PC9oMj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8Y2NkLWNhc2UtZWRpdC1nZW5lcmljLWVycm9ycyBbZXJyb3JdPVwiY2FzZUVkaXQuZXJyb3JcIj48L2NjZC1jYXNlLWVkaXQtZ2VuZXJpYy1lcnJvcnM+XG5cbiAgPGNjZC1jYWxsYmFjay1lcnJvcnMgW2NhbGxiYWNrRXJyb3JzU3ViamVjdF09XCJjYXNlRWRpdC5jYWxsYmFja0Vycm9yc1N1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgIChjYWxsYmFja0Vycm9yc0NvbnRleHQpPVwiY2FsbGJhY2tFcnJvcnNOb3RpZnkoJGV2ZW50KVwiPjwvY2NkLWNhbGxiYWNrLWVycm9ycz5cblxuICA8Zm9ybSBjbGFzcz1cImNoZWNrLXlvdXItYW5zd2Vyc1wiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm1cIiAoc3VibWl0KT1cInN1Ym1pdCgpXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFjYXNlRWRpdC5pc0V2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tZb3VyQW5zd2VyRmllbGRzVG9EaXNwbGF5RXhpc3RzKClcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiPnt7cGFnZVRpdGxlIHwgcnB4VHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LTE2XCIgKm5nSWY9XCIhY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb25cIj57eydDaGVjayB0aGUgaW5mb3JtYXRpb24gYmVsb3cgY2FyZWZ1bGx5LicgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cblxuICAgICAgICA8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCIgYXJpYS1kZXNjcmliZWRieT1cImNoZWNrIHlvdXIgYW5zd2VycyB0YWJsZVwiPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIHdpemFyZC5wYWdlc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2hvd24ocGFnZSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcGFnZVxuICAgICAgICAgICAgICB8IGNjZFBhZ2VGaWVsZHM6IGVkaXRGb3JtXG4gICAgICAgICAgICAgIHwgY2NkUmVhZEZpZWxkc0ZpbHRlcjogZmFsc2UgOnVuZGVmaW5lZCA6dHJ1ZSA6YWxsRmllbGRzVmFsdWVzXG4gICAgICAgICAgICAgIHwgY2NkQ1lBUGFnZUxhYmVsRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblNob3dGaWVsZEluQ1lBKGZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgPHRyIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtoaWRkZW5dPVwiZmllbGQuaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY29udGV4dEZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc0xhYmVsKGZpZWxkKSAmJiAhY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb25cIiBjbGFzcz1cInZhbGlnbi10b3AgY2FzZS1maWVsZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xNlwiPnt7ZmllbGQubGFiZWwgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZm9ybS1jZWxsIGNhc2UtZmllbGQtY29udGVudCB0ZXh0LTE2XCIgW2F0dHIuY29sc3Bhbl09XCJpc0xhYmVsKGZpZWxkKSA/ICcyJyA6ICcxJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxjY2QtZmllbGQtcmVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW3RvcExldmVsRm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiIFtjb250ZXh0XT1cInBhbGV0dGVDb250ZXh0XCIgW2Nhc2VGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ2YWxpZ24tdG9wIGNoZWNrLXlvdXItYW5zd2Vyc19fY2hhbmdlIGNhc2UtZmllbGQtY2hhbmdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImlzQ2hhbmdlQWxsb3dlZChmaWVsZClcIiAoY2xpY2spPVwibmF2aWdhdGVUb1BhZ2UocGFnZS5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xNlwiIGF0dHIuYXJpYS1sYWJlbD1cInt7J0NoYW5nZScgfCBycHhUcmFuc2xhdGV9fSB7eyBmaWVsZC5sYWJlbCB8IHJweFRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NoYW5nZScgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWFkT25seVN1bW1hcnlGaWVsZHNUb0Rpc3BsYXlFeGlzdHMoKVwiPlxuXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInN1bW1hcnktZmllbGRzXCIgYXJpYS1kZXNjcmliZWRieT1cInN1bW1hcnkgZmllbGRzIHRhYmxlXCI+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2hvd1N1bW1hcnlGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIhKGZpZWxkIHwgY2NkSXNDb21wb3VuZClcIj5cbiAgICAgICAgICAgICAgICAgIDx0ciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGlkPVwic3VtbWFyeS1maWVsZC1sYWJlbFwiPnt7ZmllbGQubGFiZWx9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZvcm0tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxjY2QtZmllbGQtcmVhZCBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY2FzZUZpZWxkXT1cInN1bW1hcnlDYXNlRmllbGQoZmllbGQpXCI+PC9jY2QtZmllbGQtcmVhZD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8dHIgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCIgY2xhc3M9XCJjb21wb3VuZC1maWVsZFwiIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGNjZC1maWVsZC1yZWFkIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjYXNlRmllbGRdPVwic3VtbWFyeUNhc2VGaWVsZChmaWVsZClcIiBbY2FzZUZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+PC9jY2QtZmllbGQtcmVhZD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RXZlbnROb3RlcygpXCI+XG4gICAgICAgIDxmaWVsZHNldCBpZD1cImZpZWxkc2V0LWV2ZW50XCIgZm9ybUdyb3VwTmFtZT1cImV2ZW50XCI+XG4gICAgICAgICAgPGxlZ2VuZCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiAhIXN1bW1hcnkgJiYgIXN1bW1hcnkudmFsaWQgJiYgKHN1bW1hcnkuZGlydHkgfHwgc3VtbWFyeS50b3VjaGVkKX1cIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWVsZC10cmlnZ2VyLXN1bW1hcnlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cbiAgICAgICAgICAgICAgRXZlbnQgc3VtbWFyeSAob3B0aW9uYWwpXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+QSBmZXcgd29yZHMgZGVzY3JpYmluZyB0aGUgcHVycG9zZSBvZiB0aGUgZXZlbnQuPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwic3VtbWFyeT8uZXJyb3JzICYmIChzdW1tYXJ5LmRpcnR5IHx8IHN1bW1hcnkudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAge3tzdW1tYXJ5LmVycm9ycyB8IGNjZEZpcnN0RXJyb3I6IGV2ZW50U3VtbWFyeUxhYmVsIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZmllbGQtdHJpZ2dlci1zdW1tYXJ5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwIHdpZHRoLTUwXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydnb3Z1ay1pbnB1dC0tZXJyb3InOiBzdW1tYXJ5Py5lcnJvcnMgJiYgKHN1bW1hcnkuZGlydHkgfHwgc3VtbWFyeS50b3VjaGVkKX1cIiBmb3JtQ29udHJvbE5hbWU9XCJzdW1tYXJ5XCIgbWF4bGVuZ3RoPVwiMTAyNFwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogISFkZXNjcmlwdGlvbiAmJiAhZGVzY3JpcHRpb24udmFsaWQgJiYgKGRlc2NyaXB0aW9uLmRpcnR5IHx8IGRlc2NyaXB0aW9uLnRvdWNoZWQpfVwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpZWxkLXRyaWdnZXItZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiZGVzY3JpcHRpb24/LmVycm9ycyAmJiAoZGVzY3JpcHRpb24uZGlydHkgfHwgZGVzY3JpcHRpb24udG91Y2hlZClcIj5cbiAgICAgICAgICAgICAge3tkZXNjcmlwdGlvbi5lcnJvcnMgfCBjY2RGaXJzdEVycm9yOiBldmVudERlc2NyaXB0aW9uTGFiZWwgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwiZmllbGQtdHJpZ2dlci1kZXNjcmlwdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGJvdHRvbS0zMCB3aWR0aC01MFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydnb3Z1ay1pbnB1dC0tZXJyb3InOiBkZXNjcmlwdGlvbj8uZXJyb3JzICYmIChkZXNjcmlwdGlvbi5kaXJ0eSB8fCBkZXNjcmlwdGlvbi50b3VjaGVkKX1cIiBtYXhsZW5ndGg9XCI2NTUzNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8Y2NkLWNhc2UtZXZlbnQtY29tcGxldGlvbiAqbmdJZj1cImNhc2VFZGl0LmlzRXZlbnRDb21wbGV0aW9uQ2hlY2tzUmVxdWlyZWRcIlxuICAgICAgW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJjYXNlRWRpdC5ldmVudENvbXBsZXRpb25QYXJhbXNcIlxuICAgICAgKGV2ZW50Q2FuQmVDb21wbGV0ZWQpPVwib25FdmVudENhbkJlQ29tcGxldGVkKCRldmVudClcIj5cbiAgICA8L2NjZC1jYXNlLWV2ZW50LWNvbXBsZXRpb24+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1ncm91cC1yZWxhdGVkXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFoYXNQcmV2aW91cygpIHx8IGNhc2VFZGl0LmlzU3VibWl0dGluZ1wiIChjbGljayk9XCJwcmV2aW91cygpXCI+XG4gICAgICAgIHt7J1ByZXZpb3VzJyB8IHJweFRyYW5zbGF0ZX19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgY2xhc3M9XCJidXR0b25cIj5cbiAgICAgICAge3t0cmlnZ2VyVGV4dCB8IHJweFRyYW5zbGF0ZX19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8cCBjbGFzcz1cImNhbmNlbFwiPlxuICAgICAgPGEgKGNsaWNrKT1cImNhbmNlbCgpXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJjYXNlRWRpdC5pc1N1Ym1pdHRpbmdcIj57e2dldENhbmNlbFRleHQoKSB8IHJweFRyYW5zbGF0ZX19PC9hPlxuICAgIDwvcD5cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbiJdfQ==
|
|
@@ -97,7 +97,70 @@ export class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
onFlagSelectionChange(selectedFlag) {
|
|
100
|
+
// Update the form control value
|
|
100
101
|
this.formGroup.get(this.selectedControlName).setValue(selectedFlag);
|
|
102
|
+
const flagDisplayMap = new Map(this.flagsDisplayData.map((fd) => [this.getFlagID(fd), fd]));
|
|
103
|
+
this.updateFlagDetails(flagDisplayMap);
|
|
104
|
+
}
|
|
105
|
+
updateFlagDetails(flagDisplayMap) {
|
|
106
|
+
const updateDetails = (details, valueAccessor = (detail) => detail.value) => {
|
|
107
|
+
details.forEach((detail) => {
|
|
108
|
+
const matching = flagDisplayMap.get(detail.id);
|
|
109
|
+
if (matching) {
|
|
110
|
+
if (valueAccessor) {
|
|
111
|
+
valueAccessor(detail).status = matching.originalStatus;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
detail.status = matching.originalStatus;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
// Iterate over each flagData item and update the corresponding flag details
|
|
120
|
+
for (const flagData of this.flagsData) {
|
|
121
|
+
const { caseField, flags } = flagData;
|
|
122
|
+
if (caseField) {
|
|
123
|
+
this.updateCaseFieldDetails(caseField, updateDetails);
|
|
124
|
+
}
|
|
125
|
+
// If flags.details exists at the root of flagData, update directly (status is not nested under value)
|
|
126
|
+
if (flags?.details) {
|
|
127
|
+
updateDetails(flags.details, null);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
updateCaseFieldDetails(caseField, updateDetails) {
|
|
132
|
+
// For caseField._value.flags.details
|
|
133
|
+
if (caseField._value?.flags?.details) {
|
|
134
|
+
updateDetails(caseField._value.flags.details);
|
|
135
|
+
}
|
|
136
|
+
// For caseField.formatted_value.flags.details
|
|
137
|
+
if (caseField.formatted_value?.flags?.details) {
|
|
138
|
+
updateDetails(caseField.formatted_value.flags.details);
|
|
139
|
+
}
|
|
140
|
+
// If caseField._value is an array, check each element's nested flags.details
|
|
141
|
+
if (Array.isArray(caseField._value)) {
|
|
142
|
+
caseField._value.forEach((val) => {
|
|
143
|
+
if (val.value?.flags?.details) {
|
|
144
|
+
updateDetails(val.value.flags.details);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// If caseField.formatted_value is an array, check each element's nested flags.details
|
|
149
|
+
if (Array.isArray(caseField.formatted_value)) {
|
|
150
|
+
caseField.formatted_value.forEach((val) => {
|
|
151
|
+
if (val.value?.flags?.details) {
|
|
152
|
+
updateDetails(val.value.flags.details);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// For caseField.formatted_value.details (not nested under flags)
|
|
157
|
+
if (caseField.formatted_value?.details) {
|
|
158
|
+
updateDetails(caseField.formatted_value.details);
|
|
159
|
+
}
|
|
160
|
+
// For caseField._value.details (not nested under flags)
|
|
161
|
+
if (caseField._value?.details) {
|
|
162
|
+
updateDetails(caseField._value.details);
|
|
163
|
+
}
|
|
101
164
|
}
|
|
102
165
|
isSelected(flagDisplay) {
|
|
103
166
|
const selectedFlag = this.formGroup.get(this.selectedControlName)?.value;
|
|
@@ -277,4 +340,4 @@ export class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
|
277
340
|
type: Output
|
|
278
341
|
}] }); })();
|
|
279
342
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ManageCaseFlagsComponent, { className: "ManageCaseFlagsComponent", filePath: "lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.ts", lineNumber: 16 }); })();
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25KLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0lDR3ZELEFBRkYsOEJBQzZDLGNBQ1A7SUFBQSxZQUEyQjs7SUFBQSxpQkFBTztJQUFDLFlBQ3pFOztJQUFBLGlCQUFNOzs7SUFEZ0MsZUFBMkI7SUFBM0Isb0RBQTJCO0lBQVEsZUFDekU7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LEVBQ0U7WUFDVCx5RUFDNkM7WUFHN0MsOEJBQTRHO1lBQzFHLHlFQUF5RjtZQVMvRixBQURFLEFBREUsaUJBQU0sRUFDRyxFQUNQOzs7WUF0Qk0seUNBQXVCO1lBQ0wsY0FBMEQ7WUFBMUQsa0ZBQTBEO1lBSWhGLGVBQ0Y7WUFERSw4RUFDRjtZQUdDLGVBQXdDO1lBQXhDLDZEQUF3QztZQUllLGVBQXFCO1lBQXJCLDhDQUFxQjs7O2lGREV4RSx3QkFBd0I7Y0FOcEMsU0FBUzsyQkFDRSx1QkFBdUIsaUJBR2xCLGlCQUFpQixDQUFDLElBQUk7Z0JBR3JCLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxTQUFTO2tCQUF4QixLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNVLHVCQUF1QjtrQkFBdEMsS0FBSztZQUNXLG9CQUFvQjtrQkFBcEMsTUFBTTs7a0ZBTEksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDYXNlRmllbGQsIEVycm9yTWVzc2FnZSwgSm91cm5leSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlLCBGbGFnRGV0YWlsLCBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoLCBGbGFncywgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB9IGZyb20gJy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ0ZpZWxkU3RhdGUsIENhc2VGbGFnU3RhdHVzLCBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZSwgU2VsZWN0RmxhZ0Vycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Sm91cm5leUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtZmllbGQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtbWFuYWdlLWNhc2UtZmxhZ3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtY2FzZS1mbGFncy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Sm91cm5leUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgSm91cm5leSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBASW5wdXQoKSBwdWJsaWMgY2FzZVRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgcHVibGljIGNhc2VGbGFnU3RhdGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI8Q2FzZUZsYWdTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2VGbGFnU3RhdGU+KCk7XG5cbiAgcHVibGljIG1hbmFnZUNhc2VGbGFnVGl0bGU6IENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlO1xuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlW10gPSBbXTtcbiAgcHVibGljIG1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2U6IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UgPSBudWxsO1xuICBwdWJsaWMgZmxhZ3NEaXNwbGF5RGF0YTogRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgZmxhZ3M6IEZsYWdzO1xuICBwdWJsaWMgbm9GbGFnc0Vycm9yID0gZmFsc2U7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZENvbnRyb2xOYW1lID0gJ3NlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uJztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZEZsYWdTdGF0dXNlczogQ2FzZUZsYWdTdGF0dXNbXSA9IFtDYXNlRmxhZ1N0YXR1cy5JTkFDVElWRSwgQ2FzZUZsYWdTdGF0dXMuTk9UX0FQUFJPVkVEXTtcbiAgcHVibGljIGNhY2hlZENvbnRyb2xzOntcbiAgICBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7XG4gIH07XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWFuYWdlQ2FzZUZsYWdUaXRsZSA9IHRoaXMuc2V0TWFuYWdlQ2FzZUZsYWdUaXRsZSh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcbiAgICBsZXQgb3JpZ2luYWxTdGF0dXM6IHN0cmluZztcbiAgICBsZXQgb3JpZ2luYWxJZFRvRmxhZzogc3RyaW5nO1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBwcm9ncmVzc2VkIHRvIENZQSBhbmQgdGhlbiBuYXZpZ2F0ZWQgYXdheSwgdGhlIGZsYWcgdGhleSBzZWxlY3RlZCB3aWxsIGJlIHNldCBhcyBpbmFjdGl2ZSwgd2UgbmVlZCB0byByZXNldCB0aGlzXG4gICAgY29uc3QgbG9jYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSk7XG4gICAgaWYgKGxvY2F0aW9uQ29udHJvbCkge1xuICAgICAgb3JpZ2luYWxTdGF0dXMgPSBsb2NhdGlvbkNvbnRyb2w/LnZhbHVlPy5vcmlnaW5hbFN0YXR1cztcbiAgICAgIG9yaWdpbmFsSWRUb0ZsYWcgPSBsb2NhdGlvbkNvbnRyb2w/LnZhbHVlPy5mbGFnRGV0YWlsRGlzcGxheS5mbGFnRGV0YWlsLmlkO1xuICAgICAgdGhpcy5jYWNoZWRDb250cm9scyA9IGNsb25lRGVlcCh0aGlzLmZvcm1Hcm91cC5jb250cm9scyk7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgICAgaWYgKGNvbnRyb2xOYW1lICE9PSB0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5yZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTWFwIGZsYWdzIGluc3RhbmNlcyB0byBvYmplY3RzIGZvciBkaXNwbGF5LCBmaWx0ZXJpbmcgb3V0IGFueSB3aGVyZSB0aGUgb3JpZ2luYWwgc3RhdHVzIGlzIGVpdGhlciBcIkluYWN0aXZlXCIgb3JcbiAgICAvLyBcIk5vdCBhcHByb3ZlZFwiXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mbGFnc0RhdGEpIHtcbiAgICAgIHRoaXMuZmxhZ3NEaXNwbGF5RGF0YSA9IHRoaXMuZmxhZ3NEYXRhLnJlZHVjZSgoZGlzcGxheURhdGEsIGZsYWdzSW5zdGFuY2UpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGZsYWdzSW5zdGFuY2UuZmxhZ3MuZGV0YWlscyAmJiBmbGFnc0luc3RhbmNlLmZsYWdzLmRldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRpc3BsYXlEYXRhID0gW1xuICAgICAgICAgICAgLi4uZGlzcGxheURhdGEsXG4gICAgICAgICAgICAuLi5mbGFnc0luc3RhbmNlLmZsYWdzLmRldGFpbHMubWFwKChkZXRhaWwpID0+IHRoaXMubWFwRmxhZ0RldGFpbEZvckRpc3BsYXkoZGV0YWlsLCBmbGFnc0luc3RhbmNlLCBvcmlnaW5hbFN0YXR1cywgb3JpZ2luYWxJZFRvRmxhZykpXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlzcGxheURhdGE7XG4gICAgICB9LCBbXSkuZmlsdGVyKChmbGFnRm9yRGlzcGxheSkgPT4gIXRoaXMuZXhjbHVkZWRGbGFnU3RhdHVzZXMuaW5jbHVkZXMoZmxhZ0ZvckRpc3BsYXkub3JpZ2luYWxTdGF0dXMgYXMgQ2FzZUZsYWdTdGF0dXMpKTtcbiAgICB9XG4gICAgLy8gQWRkIGEgRm9ybUNvbnRyb2wgZm9yIHRoZSBzZWxlY3RlZCBjYXNlIGZsYWcgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGZsYWdzIGluc3RhbmNlIHJlbWFpbmluZyBhZnRlciBtYXBwaW5nXG4gICAgaWYgKHRoaXMuZmxhZ3NEaXNwbGF5RGF0YSAmJiB0aGlzLmZsYWdzRGlzcGxheURhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUsIG5ldyBGb3JtQ29udHJvbChudWxsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGZsYWdzIGRpc3BsYXkgZGF0YSBtZWFucyB0aGVyZSBhcmUgbm8gZmxhZ3MgdG8gc2VsZWN0IGZyb20uIFRoZSB1c2VyIGNhbm5vdCBwcm9jZWVkIHdpdGggYSBmbGFnIHVwZGF0ZS5cbiAgICAgIC8vIChXaWxsIG5lZWQgdG8gYmUgZXh0ZW5kZWQgdG8gY2hlY2sgZm9yIGNhc2UtbGV2ZWwgZmxhZ3MgaW4gZnV0dXJlKVxuICAgICAgdGhpcy5vbk5vRmxhZ3NFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmxhZ1NlbGVjdGlvbkNoYW5nZShzZWxlY3RlZEZsYWc6IEZvcm1Db250cm9sKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkuc2V0VmFsdWUoc2VsZWN0ZWRGbGFnKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQoZmxhZ0Rpc3BsYXk6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZEZsYWcgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKT8udmFsdWU7XG4gICAgcmV0dXJuIHNlbGVjdGVkRmxhZyAmJiB0aGlzLmdldEZsYWdJRChzZWxlY3RlZEZsYWcpID09PSB0aGlzLmdldEZsYWdJRChmbGFnRGlzcGxheSk7XG4gIH1cblxuICBnZXRGbGFnSUQoZmxhZzogRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCkge1xuICAgIHJldHVybiBmbGFnPy5mbGFnRGV0YWlsRGlzcGxheT8uZmxhZ0RldGFpbD8uaWQgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgbWFwRmxhZ0RldGFpbEZvckRpc3BsYXkoZmxhZ0RldGFpbDogRmxhZ0RldGFpbCwgZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCwgb3JpZ2luYWxTdGF0dXNGcm9tRkc6IHN0cmluZywgb3JpZ2luYWxQYXRoVG9GbGFnOiBzdHJpbmcpOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoIHtcbiAgICAvLyBSZXNldCB0aGUgZmxhZyBzdGF0dXMgd2l0aCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIHN0YXR1cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBuZ09uSW5pdCgpIG5lZWRzIHRvIGZpbHRlclxuICAgIC8vIG91dCBhbnkgXCJJbmFjdGl2ZVwiIG9yIFwiTm90IGFwcHJvdmVkXCIgZmxhZ3MgYmFzZWQgb24gdGhlaXIgc3RhdHVzICpiZWZvcmUqIG1vZGlmaWNhdGlvbi4gSWYgdGhlIHVzZXIgY2hhbmdlcyBhXG4gICAgLy8gZmxhZydzIHN0YXR1cyB0aGVuIGRlY2lkZXMgdG8gcmV0dXJuIHRvIHRoZSBzdGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leSwgdGhlIGZsYWcncyBzdGF0dXMgd291bGQgbm9cbiAgICAvLyBsb25nZXIgcmVmbGVjdCBpdHMgYWN0dWFsICpwZXJzaXN0ZWQqIHN0YXR1c1xuICAgIC8vIEFsc28gcmVzZXQgY29tbWVudHMgYW5kIGRlc2NyaXB0aW9uIGZpZWxkcyAoYm90aCBFbmdsaXNoIGFuZCBXZWxzaCkgd2l0aCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIGRhdGEsIHRvIGF2b2lkXG4gICAgLy8gdGhlIFVJIGNhY2hpbmcgYW55IGNoYW5nZXMgdGhhdCB0aGUgdXNlciBtaWdodCBub3Qgd2FudCBwZXJzaXN0ZWQsIGlmIHRoZXkgc3RhcnQgb3ZlciBhbmQgZG9uJ3QgaW50ZW5kIHRvIGFkZFxuICAgIC8vIHRyYW5zbGF0aW9ucyBzdWJzZXF1ZW50bHlcbiAgICBsZXQgb3JpZ2luYWxTdGF0dXM6IHN0cmluZztcbiAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZD8uZm9ybWF0dGVkX3ZhbHVlO1xuICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgLy8gQ2FzZUZpZWxkIGZvcm1hdHRlZF92YWx1ZSBmcm9tIHdoaWNoIHRvIGdldCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIGRhdGFcbiAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGZsYWdzSW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgIGlmIChwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWVbcGFydF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoKGRldGFpbCkgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgIGNvbnN0IHN0YXR1c1RvVXNlID0gdGhpcy5nZXRTdGF0dXNUb1VzZShmbGFnc0luc3RhbmNlLCBvcmlnaW5hbFBhdGhUb0ZsYWcsIG9yaWdpbmFsU3RhdHVzRnJvbUZHLCBvcmlnaW5hbEZsYWdEZXRhaWwpO1xuICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICBvcmlnaW5hbFN0YXR1cyA9IHN0YXR1c1RvVXNlO1xuICAgICAgICBmbGFnRGV0YWlsLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudDtcbiAgICAgICAgZmxhZ0RldGFpbC5mbGFnQ29tbWVudF9jeSA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ0NvbW1lbnRfY3k7XG4gICAgICAgIGZsYWdEZXRhaWwub3RoZXJEZXNjcmlwdGlvbiA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8ub3RoZXJEZXNjcmlwdGlvbjtcbiAgICAgICAgZmxhZ0RldGFpbC5vdGhlckRlc2NyaXB0aW9uX2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uX2N5O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmV0dXJuT2JqID0ge1xuICAgICAgZmxhZ0RldGFpbERpc3BsYXk6IHtcbiAgICAgICAgcGFydHlOYW1lOiBmbGFnc0luc3RhbmNlLmZsYWdzPy5wYXJ0eU5hbWUsXG4gICAgICAgIGZsYWdEZXRhaWwsXG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkSWQ6IGZsYWdzSW5zdGFuY2UuY2FzZUZpZWxkPy5pZCxcbiAgICAgICAgdmlzaWJpbGl0eTogZmxhZ3NJbnN0YW5jZS5mbGFncz8udmlzaWJpbGl0eVxuICAgICAgfSxcbiAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBmbGFnc0luc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwLFxuICAgICAgY2FzZUZpZWxkOiBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZCxcbiAgICAgIHJvbGVPbkNhc2U6IGZsYWdzSW5zdGFuY2UuZmxhZ3M/LnJvbGVPbkNhc2UsXG4gICAgICBvcmlnaW5hbFN0YXR1c1xuICAgIH07XG4gICAgaWYgKG9yaWdpbmFsUGF0aFRvRmxhZyA9PT0gZmxhZ0RldGFpbC5pZCkge1xuICAgICAgcmV0dXJuT2JqID0geyAuLi5yZXR1cm5PYmosIG9yaWdpbmFsU3RhdHVzIH07XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5PYmo7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdHVzVG9Vc2UoZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCwgb3JpZ2luYWxQYXRoVG9GbGFnOiBzdHJpbmcsIG9yaWdpbmFsU3RhdHVzRnJvbUZHOiBzdHJpbmcsIG9yaWdpbmFsRmxhZ0RldGFpbDogQ2FzZUZpZWxkKTogc3RyaW5ne1xuICAgIGxldCBzdGF0dXNUb1VzZSA9ICcnO1xuICAgIGlmIChvcmlnaW5hbEZsYWdEZXRhaWwuaWQgPT09IG9yaWdpbmFsUGF0aFRvRmxhZykge1xuICAgICAgaWYgKG9yaWdpbmFsU3RhdHVzRnJvbUZHKSB7XG4gICAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxTdGF0dXNGcm9tRkcgPT09IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uc3RhdHVzID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXMgOiBvcmlnaW5hbFN0YXR1c0Zyb21GRztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXNUb1VzZTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5leHQoKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZmxhZyBzZWxlY3Rpb25cbiAgICB0aGlzLnZhbGlkYXRlU2VsZWN0aW9uKCk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSwgZXJyb3IgbWVzc2FnZXMsIGFuZCBmbGFnIHNlbGVjdGlvbiB0byB0aGUgcGFyZW50XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlRW1pdHRlci5lbWl0KHtcbiAgICAgIGN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGU6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTLFxuICAgICAgZXJyb3JNZXNzYWdlczogdGhpcy5lcnJvck1lc3NhZ2VzLFxuICAgICAgc2VsZWN0ZWRGbGFnOiB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKS52YWx1ZVxuICAgICAgICA/IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGhcbiAgICAgICAgOiBudWxsXG4gICAgfSk7XG5cbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFuYWdlQ2FzZUZsYWdUaXRsZShkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogQ2FzZUZsYWdXaXphcmRTdGVwVGl0bGUge1xuICAgIHN3aXRjaCAoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpIHtcbiAgICAgIGNhc2UgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEU6XG4gICAgICBjYXNlIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMTpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk1BTkFHRV9DQVNFX0ZMQUdTO1xuICAgICAgY2FzZSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTDpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk1BTkFHRV9TVVBQT1JUO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk5PTkU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLm1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgIGlmICghdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkudmFsdWUpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMID9cbiAgICAgICAgU2VsZWN0RmxhZ0Vycm9yTWVzc2FnZS5NQU5BR0VfU1VQUE9SVF9GTEFHX05PVF9TRUxFQ1RFRCA6IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTUFOQUdFX0NBU0VfRkxBR1NfRkxBR19OT1RfU0VMRUNURUQ7XG4gICAgICB0aGlzLm1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yTWVzc2FnZSxcbiAgICAgICAgZmllbGRJZDogJ2NvbmRpdGlvbmFsLXJhZGlvcy1saXN0J1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbk5vRmxhZ3NFcnJvcigpOiB2b2lkIHtcbiAgICAvLyBTZXQgZXJyb3IgZmxhZyBvbiBjb21wb25lbnQgdG8gcmVtb3ZlIHRoZSBcIk5leHRcIiBidXR0b24gKHVzZXIgY2Fubm90IHByb2NlZWQgd2l0aCBmbGFnIGNyZWF0aW9uKVxuICAgIHRoaXMubm9GbGFnc0Vycm9yID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTk9fRkxBR1MsIGZpZWxkSWQ6ICdjb25kaXRpb25hbC1yYWRpb3MtbGlzdCcgfSk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHBhcmVudFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZUVtaXR0ZXIuZW1pdCh7XG4gICAgICBjdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyxcbiAgICAgIGVycm9yTWVzc2FnZXM6IHRoaXMuZXJyb3JNZXNzYWdlc1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5leHQoKSB7XG4gICAgdGhpcy5vbk5leHQoKTtcbiAgICBjb25zdCBjYWNoZWRDb250cm9sID0gdGhpcy5jYWNoZWRDb250cm9scz8uW3RoaXMuc2VsZWN0ZWRDb250cm9sTmFtZV07XG4gICAgaWYgKGNhY2hlZENvbnRyb2wgJiYgdGhpcy5nZXRGbGFnSUQoY2FjaGVkQ29udHJvbC52YWx1ZSkgPT09IHRoaXMuZ2V0RmxhZ0lEKHRoaXMuZm9ybUdyb3VwLnZhbHVlW3RoaXMuc2VsZWN0ZWRDb250cm9sTmFtZV0pKSB7XG4gICAgICB0aGlzLnJlYXBwbHlDYWNoZWRDb250cm9scygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdXBlci5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlYXBwbHlDYWNoZWRDb250cm9scygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYWNoZWRDb250cm9scykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5jYWNoZWRDb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5jb250YWlucyhjb250cm9sTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKGNvbnRyb2xOYW1lLCB0aGlzLmNhY2hlZENvbnRyb2xzW2NvbnRyb2xOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6IGVycm9yTWVzc2FnZXMubGVuZ3RoID4gMH1cIj5cbiAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJtYW5hZ2UtY2FzZS1mbGFnLWhlYWRpbmdcIj5cbiAgICAgIDxsZWdlbmQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9fbGVnZW5kIGdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLW1cIj5cbiAgICAgICAgPGgxIGlkPVwibWFuYWdlLWNhc2UtZmxhZy1oZWFkaW5nXCIgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZ1wiPlxuICAgICAgICAgIHt7bWFuYWdlQ2FzZUZsYWdUaXRsZSB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgIDwvaDE+XG4gICAgICA8L2xlZ2VuZD5cbiAgICAgIDxkaXYgaWQ9XCJtYW5hZ2UtY2FzZS1mbGFnLW5vdC1zZWxlY3RlZC1lcnJvci1tZXNzYWdlXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgKm5nSWY9XCJtYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+e3snRXJyb3I6JyB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPiB7e21hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWxcIiBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiIGlkPVwiY29uZGl0aW9uYWwtcmFkaW9zLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiICpuZ0Zvcj1cImxldCBmbGFnRGlzcGxheSBvZiBmbGFnc0Rpc3BsYXlEYXRhOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIlxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZmxhZ0Rpc3BsYXkpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25GbGFnU2VsZWN0aW9uQ2hhbmdlKGZsYWdEaXNwbGF5KVwiLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIiBbaW5uZXJIdG1sXT1cImZsYWdEaXNwbGF5IHwgbWFuYWdlQ2FzZUZsYWdzTGFiZWxEaXNwbGF5XCI+PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvbWFuYWdlLWNhc2UtZmxhZ3MvbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25KLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0lDR3ZELEFBRkYsOEJBQzZDLGNBQ1A7SUFBQSxZQUEyQjs7SUFBQSxpQkFBTztJQUFDLFlBQ3pFOztJQUFBLGlCQUFNOzs7SUFEZ0MsZUFBMkI7SUFBM0Isb0RBQTJCO0lBQVEsZUFDekU7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Q0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOzZQQTVSVSx3QkFBd0IsU0FBeEIsd0JBQXdCOzZEQUF4Qix3QkFBd0I7WUNmckMsZ0NBQXNDO1lBSTlCLEFBREYsQUFERixBQURGLDhCQUF5RixrQkFDVixnQkFDVixZQUNHO1lBQ2hFLFlBQ0Y7O1lBQ0YsQUFERSxpQkFBSyxFQUNFO1lBQ1QseUVBQzZDO1lBRzdDLDhCQUE0RztZQUMxRyx5RUFBeUY7WUFTL0YsQUFERSxBQURFLGlCQUFNLEVBQ0csRUFDUDs7O1lBdEJNLHlDQUF1QjtZQUNMLGNBQTBEO1lBQTFELGtGQUEwRDtZQUloRixlQUNGO1lBREUsOEVBQ0Y7WUFHQyxlQUF3QztZQUF4Qyw2REFBd0M7WUFJZSxlQUFxQjtZQUFyQiw4Q0FBcUI7OztpRkRFeEUsd0JBQXdCO2NBTnBDLFNBQVM7MkJBQ0UsdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJO2dCQUdyQixTQUFTO2tCQUF4QixLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSx1QkFBdUI7a0JBQXRDLEtBQUs7WUFDVyxvQkFBb0I7a0JBQXBDLE1BQU07O2tGQUxJLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UsIEpvdXJuZXkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ3MsIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlciwgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ1N0YXR1cywgQ2FzZUZsYWdXaXphcmRTdGVwVGl0bGUsIFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEpvdXJuZXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYXNlLWZpZWxkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLW1hbmFnZS1jYXNlLWZsYWdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hbmFnZS1jYXNlLWZsYWdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFuYWdlLWNhc2UtZmxhZ3MuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VDYXNlRmxhZ3NDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEpvdXJuZXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEpvdXJuZXkge1xuICBASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHB1YmxpYyBmbGFnc0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgQElucHV0KCkgcHVibGljIGNhc2VUaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZztcbiAgQE91dHB1dCgpIHB1YmxpYyBjYXNlRmxhZ1N0YXRlRW1pdHRlcjogRXZlbnRFbWl0dGVyPENhc2VGbGFnU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXNlRmxhZ1N0YXRlPigpO1xuXG4gIHB1YmxpYyBtYW5hZ2VDYXNlRmxhZ1RpdGxlOiBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBtYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlOiBTZWxlY3RGbGFnRXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgcHVibGljIGZsYWdzRGlzcGxheURhdGE6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgcHVibGljIGZsYWdzOiBGbGFncztcbiAgcHVibGljIG5vRmxhZ3NFcnJvciA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRDb250cm9sTmFtZSA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWRGbGFnU3RhdHVzZXM6IENhc2VGbGFnU3RhdHVzW10gPSBbQ2FzZUZsYWdTdGF0dXMuSU5BQ1RJVkUsIENhc2VGbGFnU3RhdHVzLk5PVF9BUFBST1ZFRF07XG4gIHB1YmxpYyBjYWNoZWRDb250cm9sczp7XG4gICAgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sO1xuICB9O1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hbmFnZUNhc2VGbGFnVGl0bGUgPSB0aGlzLnNldE1hbmFnZUNhc2VGbGFnVGl0bGUodGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlcik7XG4gICAgbGV0IG9yaWdpbmFsU3RhdHVzOiBzdHJpbmc7XG4gICAgbGV0IG9yaWdpbmFsSWRUb0ZsYWc6IHN0cmluZztcbiAgICAvLyBpZiB0aGUgdXNlciBoYXMgcHJvZ3Jlc3NlZCB0byBDWUEgYW5kIHRoZW4gbmF2aWdhdGVkIGF3YXksIHRoZSBmbGFnIHRoZXkgc2VsZWN0ZWQgd2lsbCBiZSBzZXQgYXMgaW5hY3RpdmUsIHdlIG5lZWQgdG8gcmVzZXQgdGhpc1xuICAgIGNvbnN0IGxvY2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpO1xuICAgIGlmIChsb2NhdGlvbkNvbnRyb2wpIHtcbiAgICAgIG9yaWdpbmFsU3RhdHVzID0gbG9jYXRpb25Db250cm9sPy52YWx1ZT8ub3JpZ2luYWxTdGF0dXM7XG4gICAgICBvcmlnaW5hbElkVG9GbGFnID0gbG9jYXRpb25Db250cm9sPy52YWx1ZT8uZmxhZ0RldGFpbERpc3BsYXkuZmxhZ0RldGFpbC5pZDtcbiAgICAgIHRoaXMuY2FjaGVkQ29udHJvbHMgPSBjbG9uZURlZXAodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2xOYW1lKSA9PiB7XG4gICAgICAgIGlmIChjb250cm9sTmFtZSAhPT0gdGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbChjb250cm9sTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1hcCBmbGFncyBpbnN0YW5jZXMgdG8gb2JqZWN0cyBmb3IgZGlzcGxheSwgZmlsdGVyaW5nIG91dCBhbnkgd2hlcmUgdGhlIG9yaWdpbmFsIHN0YXR1cyBpcyBlaXRoZXIgXCJJbmFjdGl2ZVwiIG9yXG4gICAgLy8gXCJOb3QgYXBwcm92ZWRcIlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZmxhZ3NEYXRhKSB7XG4gICAgICB0aGlzLmZsYWdzRGlzcGxheURhdGEgPSB0aGlzLmZsYWdzRGF0YS5yZWR1Y2UoKGRpc3BsYXlEYXRhLCBmbGFnc0luc3RhbmNlKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChmbGFnc0luc3RhbmNlLmZsYWdzLmRldGFpbHMgJiYgZmxhZ3NJbnN0YW5jZS5mbGFncy5kZXRhaWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkaXNwbGF5RGF0YSA9IFtcbiAgICAgICAgICAgIC4uLmRpc3BsYXlEYXRhLFxuICAgICAgICAgICAgLi4uZmxhZ3NJbnN0YW5jZS5mbGFncy5kZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiB0aGlzLm1hcEZsYWdEZXRhaWxGb3JEaXNwbGF5KGRldGFpbCwgZmxhZ3NJbnN0YW5jZSwgb3JpZ2luYWxTdGF0dXMsIG9yaWdpbmFsSWRUb0ZsYWcpKVxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpc3BsYXlEYXRhO1xuICAgICAgfSwgW10pLmZpbHRlcigoZmxhZ0ZvckRpc3BsYXkpID0+ICF0aGlzLmV4Y2x1ZGVkRmxhZ1N0YXR1c2VzLmluY2x1ZGVzKGZsYWdGb3JEaXNwbGF5Lm9yaWdpbmFsU3RhdHVzIGFzIENhc2VGbGFnU3RhdHVzKSk7XG4gICAgfVxuICAgIC8vIEFkZCBhIEZvcm1Db250cm9sIGZvciB0aGUgc2VsZWN0ZWQgY2FzZSBmbGFnIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmbGFncyBpbnN0YW5jZSByZW1haW5pbmcgYWZ0ZXIgbWFwcGluZ1xuICAgIGlmICh0aGlzLmZsYWdzRGlzcGxheURhdGEgJiYgdGhpcy5mbGFnc0Rpc3BsYXlEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2wodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lLCBuZXcgRm9ybUNvbnRyb2wobnVsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBmbGFncyBkaXNwbGF5IGRhdGEgbWVhbnMgdGhlcmUgYXJlIG5vIGZsYWdzIHRvIHNlbGVjdCBmcm9tLiBUaGUgdXNlciBjYW5ub3QgcHJvY2VlZCB3aXRoIGEgZmxhZyB1cGRhdGUuXG4gICAgICAvLyAoV2lsbCBuZWVkIHRvIGJlIGV4dGVuZGVkIHRvIGNoZWNrIGZvciBjYXNlLWxldmVsIGZsYWdzIGluIGZ1dHVyZSlcbiAgICAgIHRoaXMub25Ob0ZsYWdzRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBvbkZsYWdTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRGbGFnOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBjb250cm9sIHZhbHVlXG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkuc2V0VmFsdWUoc2VsZWN0ZWRGbGFnKTtcblxuICAgIGNvbnN0IGZsYWdEaXNwbGF5TWFwID0gbmV3IE1hcChcbiAgICAgIHRoaXMuZmxhZ3NEaXNwbGF5RGF0YS5tYXAoKGZkKSA9PiBbdGhpcy5nZXRGbGFnSUQoZmQpLCBmZF0pXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRmxhZ0RldGFpbHMoZmxhZ0Rpc3BsYXlNYXApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGbGFnRGV0YWlscyhmbGFnRGlzcGxheU1hcDogTWFwPHN0cmluZywgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aD4pOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVEZXRhaWxzID0gKFxuICAgICAgZGV0YWlsczogYW55W10sXG4gICAgICB2YWx1ZUFjY2Vzc29yOiAoKGRldGFpbDogYW55KSA9PiBhbnkpIHwgbnVsbCA9IChkZXRhaWwpID0+IGRldGFpbC52YWx1ZVxuICAgICkgPT4ge1xuICAgICAgZGV0YWlscy5mb3JFYWNoKChkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSBmbGFnRGlzcGxheU1hcC5nZXQoZGV0YWlsLmlkKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG4gICAgICAgICAgaWYgKHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgICAgIHZhbHVlQWNjZXNzb3IoZGV0YWlsKS5zdGF0dXMgPSBtYXRjaGluZy5vcmlnaW5hbFN0YXR1cztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGV0YWlsLnN0YXR1cyA9IG1hdGNoaW5nLm9yaWdpbmFsU3RhdHVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIGZsYWdEYXRhIGl0ZW0gYW5kIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBmbGFnIGRldGFpbHNcbiAgICBmb3IgKGNvbnN0IGZsYWdEYXRhIG9mIHRoaXMuZmxhZ3NEYXRhKSB7XG4gICAgICBjb25zdCB7IGNhc2VGaWVsZCwgZmxhZ3MgfSA9IGZsYWdEYXRhO1xuICAgICAgaWYgKGNhc2VGaWVsZCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhc2VGaWVsZERldGFpbHMoY2FzZUZpZWxkLCB1cGRhdGVEZXRhaWxzKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGZsYWdzLmRldGFpbHMgZXhpc3RzIGF0IHRoZSByb290IG9mIGZsYWdEYXRhLCB1cGRhdGUgZGlyZWN0bHkgKHN0YXR1cyBpcyBub3QgbmVzdGVkIHVuZGVyIHZhbHVlKVxuICAgICAgaWYgKGZsYWdzPy5kZXRhaWxzKSB7XG4gICAgICAgIHVwZGF0ZURldGFpbHMoZmxhZ3MuZGV0YWlscywgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYXNlRmllbGREZXRhaWxzKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCB1cGRhdGVEZXRhaWxzOiAoZGV0YWlsczogYW55W10sIHZhbHVlQWNjZXNzb3I/OiAoKGRldGFpbDogYW55KSA9PiBhbnkpIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIC8vIEZvciBjYXNlRmllbGQuX3ZhbHVlLmZsYWdzLmRldGFpbHNcbiAgICBpZiAoY2FzZUZpZWxkLl92YWx1ZT8uZmxhZ3M/LmRldGFpbHMpIHtcbiAgICAgIHVwZGF0ZURldGFpbHMoY2FzZUZpZWxkLl92YWx1ZS5mbGFncy5kZXRhaWxzKTtcbiAgICB9XG4gICAgLy8gRm9yIGNhc2VGaWVsZC5mb3JtYXR0ZWRfdmFsdWUuZmxhZ3MuZGV0YWlsc1xuICAgIGlmIChjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlPy5mbGFncz8uZGV0YWlscykge1xuICAgICAgdXBkYXRlRGV0YWlscyhjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlLmZsYWdzLmRldGFpbHMpO1xuICAgIH1cbiAgICAvLyBJZiBjYXNlRmllbGQuX3ZhbHVlIGlzIGFuIGFycmF5LCBjaGVjayBlYWNoIGVsZW1lbnQncyBuZXN0ZWQgZmxhZ3MuZGV0YWlsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNhc2VGaWVsZC5fdmFsdWUpKSB7XG4gICAgICBjYXNlRmllbGQuX3ZhbHVlLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICBpZiAodmFsLnZhbHVlPy5mbGFncz8uZGV0YWlscykge1xuICAgICAgICAgIHVwZGF0ZURldGFpbHModmFsLnZhbHVlLmZsYWdzLmRldGFpbHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gSWYgY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZSBpcyBhbiBhcnJheSwgY2hlY2sgZWFjaCBlbGVtZW50J3MgbmVzdGVkIGZsYWdzLmRldGFpbHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlKSkge1xuICAgICAgY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZS5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbC52YWx1ZT8uZmxhZ3M/LmRldGFpbHMpIHtcbiAgICAgICAgICB1cGRhdGVEZXRhaWxzKHZhbC52YWx1ZS5mbGFncy5kZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEZvciBjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlLmRldGFpbHMgKG5vdCBuZXN0ZWQgdW5kZXIgZmxhZ3MpXG4gICAgaWYgKGNhc2VGaWVsZC5mb3JtYXR0ZWRfdmFsdWU/LmRldGFpbHMpIHtcbiAgICAgIHVwZGF0ZURldGFpbHMoY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZS5kZXRhaWxzKTtcbiAgICB9XG4gICAgLy8gRm9yIGNhc2VGaWVsZC5fdmFsdWUuZGV0YWlscyAobm90IG5lc3RlZCB1bmRlciBmbGFncylcbiAgICBpZiAoY2FzZUZpZWxkLl92YWx1ZT8uZGV0YWlscykge1xuICAgICAgdXBkYXRlRGV0YWlscyhjYXNlRmllbGQuX3ZhbHVlLmRldGFpbHMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQoZmxhZ0Rpc3BsYXk6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZEZsYWcgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKT8udmFsdWU7XG4gICAgcmV0dXJuIHNlbGVjdGVkRmxhZyAmJiB0aGlzLmdldEZsYWdJRChzZWxlY3RlZEZsYWcpID09PSB0aGlzLmdldEZsYWdJRChmbGFnRGlzcGxheSk7XG4gIH1cblxuICBnZXRGbGFnSUQoZmxhZzogRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCkge1xuICAgIHJldHVybiBmbGFnPy5mbGFnRGV0YWlsRGlzcGxheT8uZmxhZ0RldGFpbD8uaWQgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgbWFwRmxhZ0RldGFpbEZvckRpc3BsYXkoZmxhZ0RldGFpbDogRmxhZ0RldGFpbCwgZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCwgb3JpZ2luYWxTdGF0dXNGcm9tRkc6IHN0cmluZywgb3JpZ2luYWxQYXRoVG9GbGFnOiBzdHJpbmcpOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoIHtcbiAgICAvLyBSZXNldCB0aGUgZmxhZyBzdGF0dXMgd2l0aCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIHN0YXR1cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBuZ09uSW5pdCgpIG5lZWRzIHRvIGZpbHRlclxuICAgIC8vIG91dCBhbnkgXCJJbmFjdGl2ZVwiIG9yIFwiTm90IGFwcHJvdmVkXCIgZmxhZ3MgYmFzZWQgb24gdGhlaXIgc3RhdHVzICpiZWZvcmUqIG1vZGlmaWNhdGlvbi4gSWYgdGhlIHVzZXIgY2hhbmdlcyBhXG4gICAgLy8gZmxhZydzIHN0YXR1cyB0aGVuIGRlY2lkZXMgdG8gcmV0dXJuIHRvIHRoZSBzdGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leSwgdGhlIGZsYWcncyBzdGF0dXMgd291bGQgbm9cbiAgICAvLyBsb25nZXIgcmVmbGVjdCBpdHMgYWN0dWFsICpwZXJzaXN0ZWQqIHN0YXR1c1xuICAgIC8vIEFsc28gcmVzZXQgY29tbWVudHMgYW5kIGRlc2NyaXB0aW9uIGZpZWxkcyAoYm90aCBFbmdsaXNoIGFuZCBXZWxzaCkgd2l0aCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIGRhdGEsIHRvIGF2b2lkXG4gICAgLy8gdGhlIFVJIGNhY2hpbmcgYW55IGNoYW5nZXMgdGhhdCB0aGUgdXNlciBtaWdodCBub3Qgd2FudCBwZXJzaXN0ZWQsIGlmIHRoZXkgc3RhcnQgb3ZlciBhbmQgZG9uJ3QgaW50ZW5kIHRvIGFkZFxuICAgIC8vIHRyYW5zbGF0aW9ucyBzdWJzZXF1ZW50bHlcbiAgICBsZXQgb3JpZ2luYWxTdGF0dXM6IHN0cmluZztcbiAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZD8uZm9ybWF0dGVkX3ZhbHVlO1xuICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgLy8gQ2FzZUZpZWxkIGZvcm1hdHRlZF92YWx1ZSBmcm9tIHdoaWNoIHRvIGdldCB0aGUgb3JpZ2luYWwgcGVyc2lzdGVkIGRhdGFcbiAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGZsYWdzSW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgIGlmIChwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWVbcGFydF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoKGRldGFpbCkgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgIGNvbnN0IHN0YXR1c1RvVXNlID0gdGhpcy5nZXRTdGF0dXNUb1VzZShmbGFnc0luc3RhbmNlLCBvcmlnaW5hbFBhdGhUb0ZsYWcsIG9yaWdpbmFsU3RhdHVzRnJvbUZHLCBvcmlnaW5hbEZsYWdEZXRhaWwpO1xuICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICBvcmlnaW5hbFN0YXR1cyA9IHN0YXR1c1RvVXNlO1xuICAgICAgICBmbGFnRGV0YWlsLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudDtcbiAgICAgICAgZmxhZ0RldGFpbC5mbGFnQ29tbWVudF9jeSA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ0NvbW1lbnRfY3k7XG4gICAgICAgIGZsYWdEZXRhaWwub3RoZXJEZXNjcmlwdGlvbiA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8ub3RoZXJEZXNjcmlwdGlvbjtcbiAgICAgICAgZmxhZ0RldGFpbC5vdGhlckRlc2NyaXB0aW9uX2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uX2N5O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmV0dXJuT2JqID0ge1xuICAgICAgZmxhZ0RldGFpbERpc3BsYXk6IHtcbiAgICAgICAgcGFydHlOYW1lOiBmbGFnc0luc3RhbmNlLmZsYWdzPy5wYXJ0eU5hbWUsXG4gICAgICAgIGZsYWdEZXRhaWwsXG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkSWQ6IGZsYWdzSW5zdGFuY2UuY2FzZUZpZWxkPy5pZCxcbiAgICAgICAgdmlzaWJpbGl0eTogZmxhZ3NJbnN0YW5jZS5mbGFncz8udmlzaWJpbGl0eVxuICAgICAgfSxcbiAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBmbGFnc0luc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwLFxuICAgICAgY2FzZUZpZWxkOiBmbGFnc0luc3RhbmNlLmNhc2VGaWVsZCxcbiAgICAgIHJvbGVPbkNhc2U6IGZsYWdzSW5zdGFuY2UuZmxhZ3M/LnJvbGVPbkNhc2UsXG4gICAgICBvcmlnaW5hbFN0YXR1c1xuICAgIH07XG4gICAgaWYgKG9yaWdpbmFsUGF0aFRvRmxhZyA9PT0gZmxhZ0RldGFpbC5pZCkge1xuICAgICAgcmV0dXJuT2JqID0geyAuLi5yZXR1cm5PYmosIG9yaWdpbmFsU3RhdHVzIH07XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5PYmo7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdHVzVG9Vc2UoZmxhZ3NJbnN0YW5jZTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCwgb3JpZ2luYWxQYXRoVG9GbGFnOiBzdHJpbmcsIG9yaWdpbmFsU3RhdHVzRnJvbUZHOiBzdHJpbmcsIG9yaWdpbmFsRmxhZ0RldGFpbDogQ2FzZUZpZWxkKTogc3RyaW5ne1xuICAgIGxldCBzdGF0dXNUb1VzZSA9ICcnO1xuICAgIGlmIChvcmlnaW5hbEZsYWdEZXRhaWwuaWQgPT09IG9yaWdpbmFsUGF0aFRvRmxhZykge1xuICAgICAgaWYgKG9yaWdpbmFsU3RhdHVzRnJvbUZHKSB7XG4gICAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxTdGF0dXNGcm9tRkcgPT09IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uc3RhdHVzID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXMgOiBvcmlnaW5hbFN0YXR1c0Zyb21GRztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1c1RvVXNlID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXNUb1VzZTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5leHQoKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZmxhZyBzZWxlY3Rpb25cbiAgICB0aGlzLnZhbGlkYXRlU2VsZWN0aW9uKCk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSwgZXJyb3IgbWVzc2FnZXMsIGFuZCBmbGFnIHNlbGVjdGlvbiB0byB0aGUgcGFyZW50XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlRW1pdHRlci5lbWl0KHtcbiAgICAgIGN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGU6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTLFxuICAgICAgZXJyb3JNZXNzYWdlczogdGhpcy5lcnJvck1lc3NhZ2VzLFxuICAgICAgc2VsZWN0ZWRGbGFnOiB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZENvbnRyb2xOYW1lKS52YWx1ZVxuICAgICAgICA/IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkQ29udHJvbE5hbWUpLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGhcbiAgICAgICAgOiBudWxsXG4gICAgfSk7XG5cbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFuYWdlQ2FzZUZsYWdUaXRsZShkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogQ2FzZUZsYWdXaXphcmRTdGVwVGl0bGUge1xuICAgIHN3aXRjaCAoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpIHtcbiAgICAgIGNhc2UgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEU6XG4gICAgICBjYXNlIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMTpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk1BTkFHRV9DQVNFX0ZMQUdTO1xuICAgICAgY2FzZSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTDpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk1BTkFHRV9TVVBQT1JUO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk5PTkU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLm1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgIGlmICghdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRDb250cm9sTmFtZSkudmFsdWUpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMID9cbiAgICAgICAgU2VsZWN0RmxhZ0Vycm9yTWVzc2FnZS5NQU5BR0VfU1VQUE9SVF9GTEFHX05PVF9TRUxFQ1RFRCA6IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTUFOQUdFX0NBU0VfRkxBR1NfRkxBR19OT1RfU0VMRUNURUQ7XG4gICAgICB0aGlzLm1hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yTWVzc2FnZSxcbiAgICAgICAgZmllbGRJZDogJ2NvbmRpdGlvbmFsLXJhZGlvcy1saXN0J1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbk5vRmxhZ3NFcnJvcigpOiB2b2lkIHtcbiAgICAvLyBTZXQgZXJyb3IgZmxhZyBvbiBjb21wb25lbnQgdG8gcmVtb3ZlIHRoZSBcIk5leHRcIiBidXR0b24gKHVzZXIgY2Fubm90IHByb2NlZWQgd2l0aCBmbGFnIGNyZWF0aW9uKVxuICAgIHRoaXMubm9GbGFnc0Vycm9yID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IFNlbGVjdEZsYWdFcnJvck1lc3NhZ2UuTk9fRkxBR1MsIGZpZWxkSWQ6ICdjb25kaXRpb25hbC1yYWRpb3MtbGlzdCcgfSk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHBhcmVudFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZUVtaXR0ZXIuZW1pdCh7XG4gICAgICBjdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyxcbiAgICAgIGVycm9yTWVzc2FnZXM6IHRoaXMuZXJyb3JNZXNzYWdlc1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5leHQoKSB7XG4gICAgdGhpcy5vbk5leHQoKTtcbiAgICBjb25zdCBjYWNoZWRDb250cm9sID0gdGhpcy5jYWNoZWRDb250cm9scz8uW3RoaXMuc2VsZWN0ZWRDb250cm9sTmFtZV07XG4gICAgaWYgKGNhY2hlZENvbnRyb2wgJiYgdGhpcy5nZXRGbGFnSUQoY2FjaGVkQ29udHJvbC52YWx1ZSkgPT09IHRoaXMuZ2V0RmxhZ0lEKHRoaXMuZm9ybUdyb3VwLnZhbHVlW3RoaXMuc2VsZWN0ZWRDb250cm9sTmFtZV0pKSB7XG4gICAgICB0aGlzLnJlYXBwbHlDYWNoZWRDb250cm9scygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdXBlci5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlYXBwbHlDYWNoZWRDb250cm9scygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYWNoZWRDb250cm9scykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5jYWNoZWRDb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5jb250YWlucyhjb250cm9sTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKGNvbnRyb2xOYW1lLCB0aGlzLmNhY2hlZENvbnRyb2xzW2NvbnRyb2xOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6IGVycm9yTWVzc2FnZXMubGVuZ3RoID4gMH1cIj5cbiAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJtYW5hZ2UtY2FzZS1mbGFnLWhlYWRpbmdcIj5cbiAgICAgIDxsZWdlbmQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9fbGVnZW5kIGdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLW1cIj5cbiAgICAgICAgPGgxIGlkPVwibWFuYWdlLWNhc2UtZmxhZy1oZWFkaW5nXCIgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZ1wiPlxuICAgICAgICAgIHt7bWFuYWdlQ2FzZUZsYWdUaXRsZSB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgIDwvaDE+XG4gICAgICA8L2xlZ2VuZD5cbiAgICAgIDxkaXYgaWQ9XCJtYW5hZ2UtY2FzZS1mbGFnLW5vdC1zZWxlY3RlZC1lcnJvci1tZXNzYWdlXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgKm5nSWY9XCJtYW5hZ2VDYXNlRmxhZ1NlbGVjdGVkRXJyb3JNZXNzYWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+e3snRXJyb3I6JyB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPiB7e21hbmFnZUNhc2VGbGFnU2VsZWN0ZWRFcnJvck1lc3NhZ2UgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zIGdvdnVrLXJhZGlvcy0tY29uZGl0aW9uYWxcIiBkYXRhLW1vZHVsZT1cImdvdnVrLXJhZGlvc1wiIGlkPVwiY29uZGl0aW9uYWwtcmFkaW9zLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiICpuZ0Zvcj1cImxldCBmbGFnRGlzcGxheSBvZiBmbGFnc0Rpc3BsYXlEYXRhOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIlxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZmxhZ0Rpc3BsYXkpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25GbGFnU2VsZWN0aW9uQ2hhbmdlKGZsYWdEaXNwbGF5KVwiLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwiZmxhZy1zZWxlY3Rpb24te3tpfX1cIiBbaW5uZXJIdG1sXT1cImZsYWdEaXNwbGF5IHwgbWFuYWdlQ2FzZUZsYWdzTGFiZWxEaXNwbGF5XCI+PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|
|
@@ -25173,7 +25173,70 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
|
25173
25173
|
}
|
|
25174
25174
|
}
|
|
25175
25175
|
onFlagSelectionChange(selectedFlag) {
|
|
25176
|
+
// Update the form control value
|
|
25176
25177
|
this.formGroup.get(this.selectedControlName).setValue(selectedFlag);
|
|
25178
|
+
const flagDisplayMap = new Map(this.flagsDisplayData.map((fd) => [this.getFlagID(fd), fd]));
|
|
25179
|
+
this.updateFlagDetails(flagDisplayMap);
|
|
25180
|
+
}
|
|
25181
|
+
updateFlagDetails(flagDisplayMap) {
|
|
25182
|
+
const updateDetails = (details, valueAccessor = (detail) => detail.value) => {
|
|
25183
|
+
details.forEach((detail) => {
|
|
25184
|
+
const matching = flagDisplayMap.get(detail.id);
|
|
25185
|
+
if (matching) {
|
|
25186
|
+
if (valueAccessor) {
|
|
25187
|
+
valueAccessor(detail).status = matching.originalStatus;
|
|
25188
|
+
}
|
|
25189
|
+
else {
|
|
25190
|
+
detail.status = matching.originalStatus;
|
|
25191
|
+
}
|
|
25192
|
+
}
|
|
25193
|
+
});
|
|
25194
|
+
};
|
|
25195
|
+
// Iterate over each flagData item and update the corresponding flag details
|
|
25196
|
+
for (const flagData of this.flagsData) {
|
|
25197
|
+
const { caseField, flags } = flagData;
|
|
25198
|
+
if (caseField) {
|
|
25199
|
+
this.updateCaseFieldDetails(caseField, updateDetails);
|
|
25200
|
+
}
|
|
25201
|
+
// If flags.details exists at the root of flagData, update directly (status is not nested under value)
|
|
25202
|
+
if (flags?.details) {
|
|
25203
|
+
updateDetails(flags.details, null);
|
|
25204
|
+
}
|
|
25205
|
+
}
|
|
25206
|
+
}
|
|
25207
|
+
updateCaseFieldDetails(caseField, updateDetails) {
|
|
25208
|
+
// For caseField._value.flags.details
|
|
25209
|
+
if (caseField._value?.flags?.details) {
|
|
25210
|
+
updateDetails(caseField._value.flags.details);
|
|
25211
|
+
}
|
|
25212
|
+
// For caseField.formatted_value.flags.details
|
|
25213
|
+
if (caseField.formatted_value?.flags?.details) {
|
|
25214
|
+
updateDetails(caseField.formatted_value.flags.details);
|
|
25215
|
+
}
|
|
25216
|
+
// If caseField._value is an array, check each element's nested flags.details
|
|
25217
|
+
if (Array.isArray(caseField._value)) {
|
|
25218
|
+
caseField._value.forEach((val) => {
|
|
25219
|
+
if (val.value?.flags?.details) {
|
|
25220
|
+
updateDetails(val.value.flags.details);
|
|
25221
|
+
}
|
|
25222
|
+
});
|
|
25223
|
+
}
|
|
25224
|
+
// If caseField.formatted_value is an array, check each element's nested flags.details
|
|
25225
|
+
if (Array.isArray(caseField.formatted_value)) {
|
|
25226
|
+
caseField.formatted_value.forEach((val) => {
|
|
25227
|
+
if (val.value?.flags?.details) {
|
|
25228
|
+
updateDetails(val.value.flags.details);
|
|
25229
|
+
}
|
|
25230
|
+
});
|
|
25231
|
+
}
|
|
25232
|
+
// For caseField.formatted_value.details (not nested under flags)
|
|
25233
|
+
if (caseField.formatted_value?.details) {
|
|
25234
|
+
updateDetails(caseField.formatted_value.details);
|
|
25235
|
+
}
|
|
25236
|
+
// For caseField._value.details (not nested under flags)
|
|
25237
|
+
if (caseField._value?.details) {
|
|
25238
|
+
updateDetails(caseField._value.details);
|
|
25239
|
+
}
|
|
25177
25240
|
}
|
|
25178
25241
|
isSelected(flagDisplay) {
|
|
25179
25242
|
const selectedFlag = this.formGroup.get(this.selectedControlName)?.value;
|
|
@@ -30811,17 +30874,21 @@ class CaseEditSubmitComponent {
|
|
|
30811
30874
|
const priorFlags = this.caseFlagStateService.initialCaseFlags.data[field.id].details;
|
|
30812
30875
|
if (priorFlags) {
|
|
30813
30876
|
priorFlags.forEach((flag) => {
|
|
30814
|
-
if (!field.formatted_value.details) {
|
|
30815
|
-
}
|
|
30816
30877
|
if (!field._value.details.some((detail) => detail.id === flag.id)) {
|
|
30817
30878
|
field._value.details.push(flag);
|
|
30818
30879
|
}
|
|
30819
30880
|
});
|
|
30820
30881
|
if (field._value) {
|
|
30821
30882
|
field._value.details = field._value.details?.filter((detail) => detail.id !== null);
|
|
30822
|
-
|
|
30823
|
-
|
|
30824
|
-
|
|
30883
|
+
if (field.formatted_value?.groupId) {
|
|
30884
|
+
field._value.groupId = field.formatted_value.groupId;
|
|
30885
|
+
}
|
|
30886
|
+
if (field.formatted_value?.visibility) {
|
|
30887
|
+
field._value.visibility = field.formatted_value?.visibility;
|
|
30888
|
+
}
|
|
30889
|
+
if (field.formatted_value?.details) {
|
|
30890
|
+
field.formatted_value.details = field._value?.details;
|
|
30891
|
+
}
|
|
30825
30892
|
fieldData.details = fieldData.details.filter((detail) => detail.id !== null);
|
|
30826
30893
|
}
|
|
30827
30894
|
}
|