commons-assessment 12.0.13 → 12.0.14
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/bundles/commons-assessment.umd.js +60 -84
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +1 -1
- package/esm2015/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.js +1 -1
- package/esm2015/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.js +6 -8
- package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +2 -2
- package/esm2015/lib/modules/assessment-taker/assessment-taker.module.js +1 -4
- package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/services/response-builder.service.js +40 -19
- package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +5 -3
- package/esm2015/lib/shared/interfaces/assessment.interface.js +1 -1
- package/fesm2015/commons-assessment.js +62 -85
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-taker/assessment-taker.module.d.ts +9 -10
- package/lib/shared/components/skill-allocation/skill-allocation.component.d.ts +1 -1
- package/lib/shared/interfaces/assessment.interface.d.ts +2 -1
- package/package.json +1 -1
- package/src/lib/assets/json/labelConfig.json +3 -3
- package/src/lib/assets/json/question-builder-rules.json +8 -16
- package/src/lib/assets/json/questionTypes.json +4 -4
- package/src/lib/assets/theme/styles.scss +6 -0
- package/esm2015/lib/modules/assessment-taker/components/question-type-number/question-type-number.component.js +0 -47
- package/lib/modules/assessment-taker/components/question-type-number/question-type-number.component.d.ts +0 -13
|
@@ -421,12 +421,10 @@ export class AssessmentBuilderComponent {
|
|
|
421
421
|
checkMaxVal(event, control) {
|
|
422
422
|
var _a;
|
|
423
423
|
const totalMarks = Number((_a = this.questionsFormGroup.get('totalMarks')) === null || _a === void 0 ? void 0 : _a.value) || 0;
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
control === null || control === void 0 ? void 0 : control.setValue(totalMarks, { emitEvent: false });
|
|
429
|
-
}
|
|
424
|
+
let val = Number(event.target.value);
|
|
425
|
+
if (val > totalMarks) {
|
|
426
|
+
event.target.value = totalMarks;
|
|
427
|
+
control === null || control === void 0 ? void 0 : control.setValue(totalMarks, { emitEvent: false });
|
|
430
428
|
}
|
|
431
429
|
}
|
|
432
430
|
imageErrorHandler(event, filePath) {
|
|
@@ -599,7 +597,7 @@ export class AssessmentBuilderComponent {
|
|
|
599
597
|
}
|
|
600
598
|
}
|
|
601
599
|
AssessmentBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentBuilderComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AssessmentBuilderService }, { token: i3.AssessmentMakerService }, { token: i4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
602
|
-
AssessmentBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentBuilderComponent, selector: "lib-app-assessment-builder", viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex vh-100 position-relative overflow-hidden\">\r\n <div *ngIf=\"questionStack.length > 0 || isChild\"\r\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\r\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\r\n </p>\r\n </div>\r\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\r\n <header\r\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\r\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\r\n </p>\r\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\r\n </button>\r\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\r\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n </header>\r\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\r\n [formGroup]=\"questionsFormGroup\">\r\n <div class=\"pb-4 col-12\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\r\n <mat-select formControlName=\"questionType\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\r\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes\"\r\n [value]=\"type?.code\">\r\n {{type?.label}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"pb-4 col-12\">\r\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\r\n <input formControlName=\"questionMedia\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'border-danger': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.errors && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.errors && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxFileSize\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.errors && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxNoOfFiles\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.errors && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"customRegex\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\r\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div class=\"row mx-0 col-12 pb-4\"\r\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.errors && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.errors && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\r\n <div formArrayName=\"options\">\r\n <ng-container *ngFor=\"let option of options.controls; let i = index\">\r\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\r\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\r\n\r\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\r\n [class.pt-md-3]=\"i == 0\">\r\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\r\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\r\n <input formControlName=\"optionLabel\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\r\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\r\n </div>\r\n <img class=\"cursor-pointer d-md-none\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n <mat-error\r\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\r\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\r\n class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\r\n </p>\r\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\r\n formControlName=\"weight\"\r\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showRemarks')\" class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\r\n </p>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\r\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\r\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button type=\"button\" (click)=\"addOption()\"\r\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_OPTION']}}\r\n </button>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\"\r\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <label\r\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\r\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\r\n </div>\r\n\r\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index\"\r\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\r\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\r\n <mat-select [value]=\"group.optionId\"\r\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\r\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index\">\r\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\r\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\r\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index\">\r\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <p class=\"mb-0 assessment-text-medium-14\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"deleteChildQuestionById(child.id, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\r\n </div>\r\n </div>\r\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\r\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\r\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\r\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_MORE']}}\r\n </button>\r\n </div>\r\n\r\n <button (click)=\"addEditChildQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 col-12 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CHILD_QUESTION']}}\r\n </button>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\">\r\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\r\n formControlName=\"isMandatory\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\r\n *ngIf=\"showField('isFilterEnabled')\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\r\n formControlName=\"isFilterEnabled\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\"\r\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\r\n <input formControlName=\"questionSubText\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'border-danger': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && (skillsList?.length ?? 0) > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\r\n <mat-select formControlName=\"skillCodes\" multiple\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\r\n panelClass=\"assessment-checkboxes\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList\"\r\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-bold-13{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-bold-16{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item{height:inherit}.form-container{max-height:calc(100dvh - 4rem)}.border-grey-ten-2{border:.12rem solid var(--assessment-grey-ten)}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.assessment-marks-input{width:4rem}header{z-index:1}.vertical-text{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);white-space:nowrap}@media (min-width: 768px){.hidden-label{visibility:hidden;line-height:0!important}}@media screen and (min-width: 768px){.border-md-0{border:0!important}}.primary-border{border:.064rem solid var(--assessment-primary-one)}.form-check-input:checked{background-color:var(--assessment-primary-one)!important;border-color:var(--assessment-primary-one)!important}.custom-margin{margin-top:1.3rem}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i5.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.TextEditorComponent, selector: "app-text-editor", inputs: ["height", "placeholder", "subject", "preText", "maxLength", "disabled", "showToolbar", "editorConfig"], outputs: ["inputChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
600
|
+
AssessmentBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentBuilderComponent, selector: "lib-app-assessment-builder", viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex vh-100 position-relative overflow-hidden\">\r\n <div *ngIf=\"questionStack.length > 0 || isChild\"\r\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\r\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\r\n </p>\r\n </div>\r\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\r\n <header\r\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\r\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\r\n </p>\r\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\r\n </button>\r\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\r\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n </header>\r\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\r\n [formGroup]=\"questionsFormGroup\">\r\n <div class=\"pb-4 col-12\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\r\n <mat-select formControlName=\"questionType\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\r\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes\"\r\n [value]=\"type?.code\">\r\n {{type?.label}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"pb-4 col-12\">\r\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\r\n <input formControlName=\"questionMedia\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'border-danger': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.errors && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.errors && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxFileSize\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.errors && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxNoOfFiles\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.errors && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"customRegex\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\r\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div class=\"row mx-0 col-12 pb-4\"\r\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.errors && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.errors && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\r\n <div formArrayName=\"options\">\r\n <ng-container *ngFor=\"let option of options.controls; let i = index\">\r\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\r\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\r\n\r\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\r\n [class.pt-md-3]=\"i == 0\">\r\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\r\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\r\n <input formControlName=\"optionLabel\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\r\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\r\n </div>\r\n <img class=\"cursor-pointer d-md-none\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n <mat-error\r\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\r\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\r\n class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\r\n </p>\r\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\r\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\r\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\r\n </p>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\r\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\r\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button type=\"button\" (click)=\"addOption()\"\r\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_OPTION']}}\r\n </button>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\"\r\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <label\r\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\r\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\r\n </div>\r\n\r\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index\"\r\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\r\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\r\n <mat-select [value]=\"group.optionId\"\r\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\r\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index\">\r\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\r\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\r\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index\">\r\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <p class=\"mb-0 assessment-text-medium-14\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"deleteChildQuestionById(child.id, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\r\n </div>\r\n </div>\r\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\r\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\r\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\r\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_MORE']}}\r\n </button>\r\n </div>\r\n\r\n <button (click)=\"addEditChildQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 col-12 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CHILD_QUESTION']}}\r\n </button>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\">\r\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\r\n formControlName=\"isMandatory\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\r\n *ngIf=\"showField('isFilterEnabled')\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\r\n formControlName=\"isFilterEnabled\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\"\r\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\r\n <input formControlName=\"questionSubText\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'border-danger': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\r\n <mat-select formControlName=\"skillCodes\" multiple\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\r\n panelClass=\"assessment-checkboxes\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList\"\r\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-bold-13{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-bold-16{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item{height:inherit}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.form-container{max-height:calc(100dvh - 4rem)}.border-grey-ten-2{border:.12rem solid var(--assessment-grey-ten)}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.assessment-marks-input{width:4rem}header{z-index:1}.vertical-text{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);white-space:nowrap}@media (min-width: 768px){.hidden-label{visibility:hidden;line-height:0!important}}@media screen and (min-width: 768px){.border-md-0{border:0!important}}.primary-border{border:.064rem solid var(--assessment-primary-one)}.form-check-input:checked{background-color:var(--assessment-primary-one)!important;border-color:var(--assessment-primary-one)!important}.custom-margin{margin-top:1.3rem}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i5.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.TextEditorComponent, selector: "app-text-editor", inputs: ["height", "placeholder", "subject", "preText", "maxLength", "disabled", "showToolbar", "editorConfig"], outputs: ["inputChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
603
601
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentBuilderComponent, decorators: [{
|
|
604
602
|
type: Component,
|
|
605
603
|
args: [{
|
|
@@ -614,4 +612,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
614
612
|
type: ViewChild,
|
|
615
613
|
args: ['scrollContainer']
|
|
616
614
|
}] } });
|
|
617
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL21vZHVsZXMvYXNzZXNzbWVudC1tYWtlci9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvYXNzZXNzbWVudC1idWlsZGVyL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUW5FLE1BQU0sT0FBTywwQkFBMEI7SUFxQm5DLFlBQ1ksV0FBd0IsRUFDeEIsd0JBQWtELEVBQ2xELHNCQUE4QyxFQUMvQyxTQUFtRCxFQUMxQixVQUFlO1FBSnZDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUMvQyxjQUFTLEdBQVQsU0FBUyxDQUEwQztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFLO1FBekJuRCxnQkFBVyxHQUE4QixFQUFFLENBQUM7UUFDNUMsZ0JBQVcsR0FBOEIs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RCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFO1lBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNyRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDVDtJQUNMLENBQUM7O3dIQXpuQlEsMEJBQTBCLHVKQTBCdkIsZUFBZTs0R0ExQmxCLDBCQUEwQixzTENoQnZDLHM0akNBMlpNOzRGRDNZTywwQkFBMEI7a0JBTnRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLHFDQUFxQztvQkFDbEQsU0FBUyxFQUFFLENBQUMscUNBQXFDLENBQUM7aUJBQ3JEOzswQkE0QlEsTUFBTTsyQkFBQyxlQUFlOzRDQW5CRyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUXVlc3Rpb25UeXBlLCBSZWZEYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXNzZXNzbWVudC1tYWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25QYXBlclNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlZXBDbG9uZSwgZ2VuZXJhdGVVdWlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItYXBwLWFzc2Vzc21lbnQtYnVpbGRlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBxdWVzdGlvblR5cGVzOiBRdWVzdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgcXVlc3Rpb25EZXRhaWxzOiBBc3Nlc3NtZW50UXVlc3Rpb24gfCBudWxsID0gbnVsbDtcclxuICAgIHJ1bGVzOiBhbnkgPSB7fTtcclxuICAgIHF1ZXN0aW9uU3RhY2s6IHsgcGFyZW50Rm9ybVZhbHVlOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGVkaXRpbmdRdWVzdGlvbkluZGV4PzogbnVtYmVyLCBhZGRpbmdUb0dyb3VwSWQ/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxDb250YWluZXInKSBzY3JvbGxDb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIGNoaWxkUXVlc3Rpb25Hcm91cHM6IHsgaWQ6IHN0cmluZywgb3B0aW9uSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwsIHF1ZXN0aW9uSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIH1bXSA9IFtdO1xyXG5cclxuICAgIHF1ZXN0aW9uc0Zvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICAgIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gICAgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLy8gcGFyZW50UXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGFzc2Vzc21lbnRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNraWxsc0xpc3Q6IFJlZkRhdGFbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlOiBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhc3Nlc3NtZW50TWFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBc3Nlc3NtZW50QnVpbGRlckNvbXBvbmVudD4sXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBhbnksXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGFiZWxDb25maWcgPSB0aGlzLmRpYWxvZ0RhdGE/LmxhYmVsQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VDb25maWcgPSB0aGlzLmRpYWxvZ0RhdGE/LmltYWdlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMucnVsZXMgPSB0aGlzLmRpYWxvZ0RhdGE/LnJ1bGVzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25UeXBlcyA9IHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25UeXBlcztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25CYW5rO1xyXG4gICAgICAgIHRoaXMuaXNDaGlsZCA9IHRoaXMuZGlhbG9nRGF0YT8uaXNDaGlsZDtcclxuICAgICAgICB0aGlzLnNraWxsc0xpc3QgPSB0aGlzLmRpYWxvZ0RhdGE/LnNraWxsc0xpc3QgfHwgW107XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLmRpYWxvZ0RhdGE/LmFzc2Vzc21lbnRJZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5xdWVzdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkRldGFpbHMgPSBkZWVwQ2xvbmUodGhpcy5kaWFsb2dEYXRhPy5xdWVzdGlvbkRldGFpbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHVwRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVDaGlsZFF1ZXN0aW9uTGlzdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NoaWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25EZXRhaWxzPy5kZWZhdWx0T3B0aW9uc0xpc3Q/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5mb3JFYWNoKGlkID0+IHVuaXF1ZUlkcy5hZGQoaWQpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odW5pcXVlSWRzKT8ubWFwKGlkID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYW5rW2lkXSA/IGRlZXBDbG9uZSh0aGlzLnF1ZXN0aW9uQmFua1tpZF0pIDogbnVsbDtcclxuICAgICAgICB9KT8uZmlsdGVyKEJvb2xlYW4pIGFzIEFzc2Vzc21lbnRRdWVzdGlvbltdO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRm9ybUdyb3VwKCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBxdWVzdGlvblN1YlRleHQ6IFsnJ10sXHJcbiAgICAgICAgICAgIGlzRmlsdGVyRW5hYmxlZDogW2ZhbHNlXSxcclxuICAgICAgICAgICAgaXNNYW5kYXRvcnk6IFtmYWxzZV0sXHJcbiAgICAgICAgICAgIC8vIHZpc2liaWxpdHk6IFt0cnVlXSxcclxuICAgICAgICAgICAgdG90YWxNYXJrczogW251bGxdLFxyXG4gICAgICAgICAgICBtaW5DaGFyYWN0ZXJDb3VudDogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhDaGFyYWN0ZXJDb3VudDogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZPcHRpb246IFtudWxsXSxcclxuICAgICAgICAgICAgbWluaW11bU51bWJlck9mT3B0aW9uOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heE5vT2ZGaWxlczogW251bGxdLFxyXG4gICAgICAgICAgICBjdXN0b21SZWdleDogWycnXSxcclxuICAgICAgICAgICAgaGludFRleHQ6IFsnJ10sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uTWVkaWE6IFsnJ10sXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uczogW1tdXSxcclxuICAgICAgICAgICAgc2tpbGxDb2RlczogW1tdXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKHRoaXMucXVlc3Rpb25EZXRhaWxzLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvcHVsYXRlRm9ybShxdWVzdGlvbkRldGFpbHM6IEFzc2Vzc21lbnRRdWVzdGlvbiwgYnVpbGRDaGlsZEdyb3VwczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvbkRldGFpbHMpIHJldHVybjtcclxuICAgICAgICBjb25zdCBjaGlsZFF1ZXN0aW9ucyA9IHF1ZXN0aW9uRGV0YWlscz8uY2hpbGRRdWVzdGlvbnMgfHwgdGhpcy5nZW5lcmF0ZUNoaWxkUXVlc3Rpb25MaXN0KCk7XHJcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZXRRdWVzdGlvbkRUTyh7IC4uLnF1ZXN0aW9uRGV0YWlscywgY2hpbGRRdWVzdGlvbnMgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucGF0Y2hWYWx1ZShmb3JtRGF0YSk7XHJcbiAgICAgICAgaWYgKGZvcm1EYXRhLm9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKGZvcm1EYXRhLnRvdGFsTWFya3MpIHx8IDA7XHJcbiAgICAgICAgICAgIGZvcm1EYXRhLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdEdyb3VwID0gdGhpcy5jcmVhdGVPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmICh0b3RhbE1hcmtzID4gMCAmJiBvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpICogdG90YWxNYXJrcykgLyAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3B0R3JvdXAucGF0Y2hWYWx1ZShvcHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0R3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJ1aWxkQ2hpbGRHcm91cHMpIHtcclxuICAgICAgICAgICAgdGhpcy5idWlsZENoaWxkUXVlc3Rpb25Hcm91cHMoY2hpbGRRdWVzdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHFUeXBlID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1ZhbHVlcyA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy52YWx1ZSB8fCBbXTtcclxuICAgICAgICBjb25zdCBzaG93V2VpZ2h0YWdlID0gdGhpcy5zaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpO1xyXG5cclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWxXZWlnaHRzID0gMDtcclxuICAgICAgICAgICAgbGV0IGhhc0ludmFsaWRXZWlnaHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnNWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQuaXNBY3RpdmUgPT09IGZhbHNlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHcgPSBOdW1iZXIob3B0LndlaWdodCkgfHwgMDtcclxuICAgICAgICAgICAgICAgIGlmICh3ID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0ludmFsaWRXZWlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdG90YWxXZWlnaHRzICs9IHc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNJbnZhbGlkV2VpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUbyBrZWVwIHdpdGhpbiBleGlzdGluZyBzdHlsZXMsIGVtaXR0aW5nIGRlZmF1bHQgZXJyb3Igd2l0aCBvdXIgc3BlY2lmaWMgbWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULk9QVElPTl9TQ09SRV9HUkVBVEVSX1RIQU5fVE9UQUxfTUFSS1MnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnICYmIHRvdGFsV2VpZ2h0cyA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TVU1fT0ZfT1BUSU9OX1NDT1JFU19HUkVBVEVSX1RIQU5fVE9UQUxfTUFSS1MnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBkZWVwQ2xvbmUodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICAgIGlmIChzaG93V2VpZ2h0YWdlICYmIHRvdGFsTWFya3MgPiAwICYmIGZvcm1WYWx1ZS5vcHRpb25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9ybVZhbHVlLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpIC8gdG90YWxNYXJrcykgKiAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBjaGlsZCBxdWVzdGlvbiBsb2dpY1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucXVlc3Rpb25TdGFja1t0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhdGU/LmVkaXRpbmdRdWVzdGlvbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGRcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlc3Rpb24gPSBzdGF0ZS5wYXJlbnRGb3JtVmFsdWUuY2hpbGRRdWVzdGlvbnNbc3RhdGUuZWRpdGluZ1F1ZXN0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgY2hpbGRRdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gYXdhaXQgdGhpcy51cGRhdGVRdWVzdGlvbihwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRGb3JtVmFsdWUuY2hpbGRRdWVzdGlvbnNbc3RhdGUuZWRpdGluZ1F1ZXN0aW9uSW5kZXhdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbi5pZF0gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgbmV3IGNoaWxkIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gYXdhaXQgdGhpcy5jcmVhdGVRdWVzdGlvbihwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZT8ucGFyZW50Rm9ybVZhbHVlPy5jaGlsZFF1ZXN0aW9ucz8ucHVzaChxdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbi5pZF0gPSBxdWVzdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maW5kKChnOiBhbnkpID0+IGcuaWQgPT09IHN0YXRlLmFkZGluZ1RvR3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncnApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycC5xdWVzdGlvbklkcz8ucHVzaChxdWVzdGlvbj8uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdycC5vcHRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IHN0YXRlLnBhcmVudEZvcm1WYWx1ZT8uZGVmYXVsdE9wdGlvbnNMaXN0Py5maW5kKChvOiBhbnkpID0+IChvLmlkIHx8IG8udXVpZCkgPT0gZ3JwLm9wdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5jaGlsZFF1ZXN0aW9uTGlzdCA9IG9wdC5jaGlsZFF1ZXN0aW9uTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmNoaWxkUXVlc3Rpb25MaXN0LnB1c2gocXVlc3Rpb24uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVVdWlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZHM6IFtxdWVzdGlvbj8uaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZS1wb3B1bGF0ZSBwYXJlbnQgZm9ybVxyXG4gICAgICAgICAgICB0aGlzLnJlc2V0QW5kUG9wdWxhdGUoc3RhdGU/LnBhcmVudEZvcm1WYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHF1ZXN0aW9uRFRPID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0UXVlc3Rpb25EVE8oZm9ybVZhbHVlLCB0aGlzLnF1ZXN0aW9uRGV0YWlscyk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgbG9jYWwgdGVtcGxhdGUgdHJlZSByZXByZXNlbnRhdGlvblxyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkRldGFpbHM/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uRFRPID0gYXdhaXQgdGhpcy51cGRhdGVRdWVzdGlvbihxdWVzdGlvbkRUTyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uRFRPPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbkRUTy5pZF0gPSBxdWVzdGlvbkRUT1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuUVVFU1RJT05fVVBEQVRFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZDogcXVlc3Rpb25EVE8gfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVPckVkaXRBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihxdWVzdGlvbkRUTyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUXVlc3Rpb24ocGF5bG9hZDogYW55KTogUHJvbWlzZTxBc3Nlc3NtZW50UXVlc3Rpb24+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlUXVlc3Rpb24ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHJlc29sdmUocmVzIGFzIEFzc2Vzc21lbnRRdWVzdGlvbiksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4gcmVqZWN0KGVycilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUXVlc3Rpb24ocGF5bG9hZDogYW55KTogUHJvbWlzZTxBc3Nlc3NtZW50UXVlc3Rpb24+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UucGF0Y2hRdWVzdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4gcmVzb2x2ZShyZXMgYXMgQXNzZXNzbWVudFF1ZXN0aW9uKSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiByZWplY3QoZXJyKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVPckVkaXRBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25QYXBlciA9IGRlZXBDbG9uZSh0aGlzLmRpYWxvZ0RhdGE/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSk7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvblF1ZXN0aW9uID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVTZWN0aW9uUXVlc3Rpb24ocXVlc3Rpb24pO1xyXG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dEYXRhPy5zZWN0aW9uRGV0YWlscykge1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0O1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0U2VxdWVuY2UgPSBsaXN0Py5sZW5ndGggPyBsaXN0W2xpc3QubGVuZ3RoIC0gMV0ub3JkZXJObyB8fCAwIDogMDtcclxuICAgICAgICAgICAgY29uc3QgbmV3U2VjdGlvbiA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZU5ld1NlY3Rpb24obGFzdFNlcXVlbmNlICsgMSk7XHJcblxyXG4gICAgICAgICAgICBuZXdTZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ucHVzaChzZWN0aW9uUXVlc3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5wdXNoKG5ld1NlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25SZWYgPSBxdWVzdGlvblBhcGVyPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZpbmQoKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSA9PiBzZWN0aW9uPy5pZCA9PSB0aGlzLmRpYWxvZ0RhdGE/LnNlY3Rpb25EZXRhaWxzPy5pZCk7XHJcbiAgICAgICAgICAgIHNlY3Rpb25SZWY/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5wdXNoKHNlY3Rpb25RdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBxdWVzdGlvblBhcGVyRFRPID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVRdWVzdGlvblBhcGVyRFRPKHF1ZXN0aW9uUGFwZXIsIHRoaXMucXVlc3Rpb25CYW5rKTtcclxuICAgICAgICBjb25zdCBhc3Nlc3NtZW50RFRPID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCBxdWVzdGlvblBhcGVyRFRPKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgYXNzZXNzbWVudDogYXNzZXNzbWVudERUTyxcclxuICAgICAgICAgICAgcXVlc3Rpb25QYXBlcjogcXVlc3Rpb25QYXBlckRUT1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXBpQ2FsbCA9IHRoaXMuYXNzZXNzbWVudElkXHJcbiAgICAgICAgICAgID8gdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZClcclxuICAgICAgICAgICAgOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZCk7XHJcblxyXG4gICAgICAgIGFwaUNhbGwuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXNzbWVudElkOiByZXM/LmFzc2Vzc21lbnQ/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI6IHJlcz8ucXVlc3Rpb25QYXBlcixcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbk1hcDogcmVzPy5xdWVzdGlvbk1hcFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogdGhpcy5hc3Nlc3NtZW50SWQgPyAnUEFUQ0gnIDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJ1bGVzIHx8IE9iamVjdC5rZXlzKHRoaXMucnVsZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgcVR5cGUgPSBmb3JtLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSdWxlcyA9IHRoaXMucnVsZXNbcVR5cGVdIHx8IHt9O1xyXG5cclxuICAgICAgICBjb25zdCBleGNsdWRlZENvbnRyb2xzID0gbmV3IFNldChbJ3F1ZXN0aW9uVHlwZScsICdxdWVzdGlvblRleHQnLCAnb3B0aW9ucycsICd2aXNpYmlsaXR5JywgJ2lzTWFuZGF0b3J5JywgJ3F1ZXN0aW9uU3ViVGV4dCcsICdza2lsbENvZGVzJ10pO1xyXG5cclxuICAgICAgICAvLyBIYW5kbGUgbm9ybWFsIGNvbnRyb2xzXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoW2tleSwgY29udHJvbF0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkQ29udHJvbHMuaGFzKGtleSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBjdXJyZW50UnVsZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChydWxlPy52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gcnVsZT8ucmVxdWlyZWQgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdxdWVzdGlvbk1lZGlhJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL14oaHR0cHM/OlxcL1xcLyk/KFtcXGRhLXpcXC4tXSspXFwuKFthLXpcXC5dezIsNn0pKFtcXC9cXHcgXFwuLV0qKSpcXC8/KFxcP1teXFxzXSopPyQvaSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMubGVuZ3RoID4gMCA/IHZhbGlkYXRvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGtleSA9PT0gJ2NoaWxkUXVlc3Rpb25zJyA/IFtdIDogbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBIYW5kbGUgb3B0aW9ucyBGb3JtQXJyYXlcclxuICAgICAgICBjb25zdCBvcHRpb25zQ29udHJvbCA9IGZvcm0uZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNSdWxlID0gY3VycmVudFJ1bGVzWydvcHRpb25zJ107XHJcblxyXG4gICAgICAgIGlmICghb3B0aW9uc1J1bGU/LnZpc2libGUpIHtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcHRpb25zVmFsaWRhdG9yID0gb3B0aW9uc1J1bGU/LnJlcXVpcmVkID8gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25zID0gKGNvbnRyb2wudmFsdWUgfHwgW10pLmZpbHRlcigob3B0OiBhbnkpID0+IG9wdC5pc0FjdGl2ZSAhPT0gZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlT3B0aW9ucy5sZW5ndGggPiAwID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgICAgICB9IDogbnVsbDtcclxuXHJcbiAgICAgICAgb3B0aW9uc0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhvcHRpb25zVmFsaWRhdG9yKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IG9wdGlvbnNSdWxlPy5zaG93V2VpZ2h0YWdlO1xyXG4gICAgICAgIGNvbnN0IHNob3dSZW1hcmtzID0gb3B0aW9uc1J1bGU/LnNob3dSZW1hcmtzO1xyXG5cclxuICAgICAgICBvcHRpb25zQ29udHJvbC5jb250cm9scy5mb3JFYWNoKG9wdEdyb3VwID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd2VpZ2h0Q3RybCA9IG9wdEdyb3VwLmdldCgnd2VpZ2h0Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbWFya3NDdHJsID0gb3B0R3JvdXAuZ2V0KCdyZW1hcmtzUmVxdWlyZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghc2hvd1dlaWdodGFnZSkgd2VpZ2h0Q3RybD8uc2V0VmFsdWUoMCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICBpZiAoIXNob3dSZW1hcmtzKSByZW1hcmtzQ3RybD8uc2V0VmFsdWUoZmFsc2UsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgICAgIHdlaWdodEN0cmw/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZW1hcmtzQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG9wdGlvbnNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgbmVzdGVkUHJvcD86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uVHlwZSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZTtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uVHlwZSB8fCAhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdIHx8ICF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV1bZmllbGROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXN0ZWRQcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXVtmaWVsZE5hbWVdW25lc3RlZFByb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gISF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV1bZmllbGROYW1lXT8udmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpOiBGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkT3B0aW9uKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKHRoaXMuY3JlYXRlT3B0aW9uKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZU9wdGlvbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5hdChpbmRleCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvbklkID0gcmVtb3ZlZE9wdGlvbi5nZXQoJ2lkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWRPcHRpb25VdWlkID0gcmVtb3ZlZE9wdGlvbi5nZXQoJ3V1aWQnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlSWQgPSByZW1vdmVkT3B0aW9uSWQgfHwgcmVtb3ZlZE9wdGlvblV1aWQ7XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVkT3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgcmVtb3ZlZE9wdGlvbi5nZXQoJ2lzQWN0aXZlJyk/LnNldFZhbHVlKGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnLm9wdGlvbklkID09PSB1bmlxdWVJZCkge1xyXG4gICAgICAgICAgICAgICAgZy5vcHRpb25JZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVPcHRpb24oKTogRm9ybUdyb3VwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIGlkOiBbMF0sXHJcbiAgICAgICAgICAgIHV1aWQ6IFtnZW5lcmF0ZVV1aWQoKV0sXHJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICB3ZWlnaHQ6IFswXSxcclxuICAgICAgICAgICAgcmVtYXJrc1JlcXVpcmVkOiBbZmFsc2VdLFxyXG4gICAgICAgICAgICBpc0FjdGl2ZTogW3RydWVdLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uTGlzdDogW1tdXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFsbG93T25seU51bWJlcnMoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrTWF4VmFsKGV2ZW50OiBhbnksIGNvbnRyb2w6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgIGlmICh0b3RhbE1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgdmFsID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPiB0b3RhbE1hcmtzKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0b3RhbE1hcmtzO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgICAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRWRpdENoaWxkUXVlc3Rpb24oY2hpbGRRdWVzdGlvbj86IEFzc2Vzc21lbnRRdWVzdGlvbiwgaW5kZXg/OiBudW1iZXIsIGdyb3VwSWQ/OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBTYXZlIGN1cnJlbnQgcGFyZW50IHN0YXRlXHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZGVlcENsb25lKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKGZvcm1WYWx1ZS50b3RhbE1hcmtzKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHNob3dXZWlnaHRhZ2UgPSB0aGlzLnNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93V2VpZ2h0YWdlJyk7XHJcblxyXG4gICAgICAgIGlmIChzaG93V2VpZ2h0YWdlICYmIHRvdGFsTWFya3MgPiAwICYmIGZvcm1WYWx1ZS5vcHRpb25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9ybVZhbHVlLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpIC8gdG90YWxNYXJrcykgKiAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRGF0YSA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgdGhpcy5xdWVzdGlvbkRldGFpbHMpO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgIHBhcmVudEZvcm1WYWx1ZTogeyAuLi5xdWVzdGlvbkRhdGEsIGNoaWxkUXVlc3Rpb25zOiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlIH0sXHJcbiAgICAgICAgICAgIGVkaXRpbmdRdWVzdGlvbkluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgYWRkaW5nVG9Hcm91cElkOiBncm91cElkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGZvcm0gZm9yIGNoaWxkXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucmVzZXQoe1xyXG4gICAgICAgICAgICBxdWVzdGlvblR5cGU6ICcnLFxyXG4gICAgICAgICAgICBxdWVzdGlvblRleHQ6ICcnLFxyXG4gICAgICAgICAgICBpc01hbmRhdG9yeTogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgICAgIHRvdGFsTWFya3M6IG51bGwsXHJcbiAgICAgICAgICAgIG1pbkNoYXJhY3RlckNvdW50OiBudWxsLFxyXG4gICAgICAgICAgICBtYXhDaGFyYWN0ZXJDb3VudDogbnVsbCxcclxuICAgICAgICAgICAgbWF4aW11bU51bWJlck9mT3B0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICBtaW5pbXVtTnVtYmVyT2ZPcHRpb246IG51bGwsXHJcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBudWxsLFxyXG4gICAgICAgICAgICBtYXhOb09mRmlsZXM6IG51bGwsXHJcbiAgICAgICAgICAgIGN1c3RvbVJlZ2V4OiAnJyxcclxuICAgICAgICAgICAgaGludFRleHQ6ICcnLFxyXG4gICAgICAgICAgICBxdWVzdGlvbk1lZGlhOiAnJyxcclxuICAgICAgICAgICAgY2hpbGRRdWVzdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICBza2lsbENvZGVzOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNDb250cm9sID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHdoaWxlIChvcHRpb25zQ29udHJvbC5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wucmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICBpZiAoY2hpbGRRdWVzdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9ybShjaGlsZFF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNoaWxkUXVlc3Rpb24oaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZGVsZXRlZENoaWxkID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZVtpbmRleF07XHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb250cm9scy5mb3JFYWNoKG9wdCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZExpc3QgPSBbLi4uKG9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdKV07XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdCA9IGNoaWxkTGlzdC5maWx0ZXIoKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+IGlkICE9PSBkZWxldGVkQ2hpbGQuaWQpO1xyXG4gICAgICAgICAgICBvcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy5zZXRWYWx1ZShjaGlsZExpc3QpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgICAgICBnLnF1ZXN0aW9uSWRzID0gZy5xdWVzdGlvbklkcy5maWx0ZXIocWlkID0+IHFpZCAhPT0gZGVsZXRlZENoaWxkLmlkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmlsdGVyKGcgPT4gZy5xdWVzdGlvbklkcy5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25JZChvcHQ6IGFueSk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG9wdC5nZXQoJ2lkJyk/LnZhbHVlID8gb3B0LmdldCgnaWQnKT8udmFsdWUgOiBvcHQuZ2V0KCd1dWlkJyk/LnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkUXVlc3Rpb25CeUlkKGlkOiBzdHJpbmcgfCBudW1iZXIpOiBBc3Nlc3NtZW50UXVlc3Rpb24gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlPy5maW5kKChxOiBBc3Nlc3NtZW50UXVlc3Rpb24pID0+IHEuaWQgPT09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZFF1ZXN0aW9uSW5kZXgoaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWU/LmZpbmRJbmRleCgocTogQXNzZXNzbWVudFF1ZXN0aW9uKSA9PiBxLmlkID09PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ2hpbGRRdWVzdGlvbkJ5SWQoaWQ6IG51bWJlciB8IHVuZGVmaW5lZCwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldENoaWxkUXVlc3Rpb25JbmRleChpZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDaGlsZFF1ZXN0aW9uKGluZGV4LCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhjaGlsZFF1ZXN0aW9uczogQXNzZXNzbWVudFF1ZXN0aW9uW10pIHtcclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMgPSBbXTtcclxuICAgICAgICBjb25zdCBwcm9jZXNzZWRRdWVzdGlvbklkcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZvckVhY2gob3B0ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0aGlzLmdldE9wdGlvbklkKG9wdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTGlzdCA9IG9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBvcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkczogWy4uLmNoaWxkTGlzdF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0LmZvckVhY2goKGlkOiBhbnkpID0+IHByb2Nlc3NlZFF1ZXN0aW9uSWRzLmFkZChpZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNoaWxkUXVlc3Rpb25zLmZvckVhY2goY3EgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3EuaWQgJiYgIXByb2Nlc3NlZFF1ZXN0aW9uSWRzLmhhcyhjcS5pZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVVdWlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZHM6IFtjcS5pZF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Hcm91cE9wdGlvbkNoYW5nZShncm91cElkOiBzdHJpbmcsIG5ld09wdGlvbklkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maW5kSW5kZXgoZyA9PiBnLmlkID09PSBncm91cElkKTtcclxuICAgICAgICBpZiAoZ3JvdXBJbmRleCA9PT0gLTEpIHJldHVybjtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwc1tncm91cEluZGV4XTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2xkT3B0aW9uSWQgPSBncm91cC5vcHRpb25JZDtcclxuXHJcbiAgICAgICAgaWYgKG9sZE9wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZE9wdCA9IHRoaXMub3B0aW9ucy5jb250cm9scy5maW5kKG9wdCA9PiB0aGlzLmdldE9wdGlvbklkKG9wdCkgPT09IG9sZE9wdGlvbklkKTtcclxuICAgICAgICAgICAgaWYgKG9sZE9wdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkTGlzdCA9IFsuLi4ob2xkT3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW10pXTtcclxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdCA9IGNoaWxkTGlzdC5maWx0ZXIoaWQgPT4gIWdyb3VwLnF1ZXN0aW9uSWRzLmluY2x1ZGVzKGlkIGFzIGFueSkpO1xyXG4gICAgICAgICAgICAgICAgb2xkT3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8uc2V0VmFsdWUoY2hpbGRMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdHcm91cCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maW5kKGcgPT4gZy5pZCAhPT0gZ3JvdXBJZCAmJiBnLm9wdGlvbklkID09PSBuZXdPcHRpb25JZCk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdGluZ0dyb3VwICYmIG5ld09wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGV4aXN0aW5nR3JvdXAucXVlc3Rpb25JZHMucHVzaCguLi5ncm91cC5xdWVzdGlvbklkcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5zcGxpY2UoZ3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXAub3B0aW9uSWQgPSBuZXdPcHRpb25JZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChuZXdPcHRpb25JZCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPcHQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmluZChvcHQgPT4gdGhpcy5nZXRPcHRpb25JZChvcHQpID09PSBuZXdPcHRpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChuZXdPcHQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZExpc3QgPSBbLi4uKG5ld09wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdKV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KFsuLi5jaGlsZExpc3QsIC4uLmdyb3VwLnF1ZXN0aW9uSWRzXSk7XHJcbiAgICAgICAgICAgICAgICBuZXdPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy5zZXRWYWx1ZShBcnJheS5mcm9tKHNldCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvQmFjaygpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0QW5kUG9wdWxhdGUoc3RhdGU/LnBhcmVudEZvcm1WYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRBbmRQb3B1bGF0ZShwYXJlbnRWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucmVzZXQoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRyb2wgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgd2hpbGUgKG9wdGlvbnNDb250cm9sLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5yZW1vdmVBdCgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKHBhcmVudFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lciAmJiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCB2aC0xMDAgcG9zaXRpb24tcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPiAwIHx8IGlzQ2hpbGRcIlxyXG4gICAgICAgIGNsYXNzPVwicC0zIHB4LTIgY29sLWF1dG8gYXNzZXNzbWVudC1iZy1wYWxldHRlLUM4REFGOSBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBkLW1kLWZsZXggZC1ub25lXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtLTAgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IHZlcnRpY2FsLXRleHRcIj5cclxuICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNISUxEX1FVRVNUSU9OJ119fVxyXG4gICAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGgtMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxoZWFkZXJcclxuICAgICAgICAgICAgY2xhc3M9XCJwLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwb3NpdGlvbi1zdGlja3kgdG9wLTAgY29sLTEyIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgPHAgKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBkLW1kLWlubGluZSBkLW5vbmVcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5JTlBVVF9GSUVMRF9TRVRUSU5HUyddfX1cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPiAwXCIgKGNsaWNrKT1cImdvQmFjaygpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gYm9yZGVyLTAgb3V0bGluZS0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTQgYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uR09fQkFDSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZ28tYmFjay5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuR09fQkFDSyddfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1tZC1lbmQganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTMgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYnRuLXByaW1hcnkgYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0wJzogaXNTdWJtaXR0aW5nfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0FWRV9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNTdWJtaXR0aW5nXCIgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZSBhc3Nlc3NtZW50LXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZC1tZC1ub25lXCIgKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgbWF0LWRpYWxvZy1jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9jbG9zZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgI3Njcm9sbENvbnRhaW5lciBjbGFzcz1cImNvbC0xMiBweS00IHB4LW1kLTQgcHgtMyBmbGV4LWdyb3ctMSBvdmVyZmxvdy15LWF1dG8gZm9ybS1jb250YWluZXJcIlxyXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cInF1ZXN0aW9uc0Zvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBjb2wtMTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVFlQRSddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25UeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5TRUxFQ1RfUVVFU1RJT05fVFlQRSddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtbWF0LXNlbGVjdCBjb2wtMTIgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXN0aW9uVHlwZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidHlwZT8uY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3R5cGU/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+UXVlc3Rpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGFwcC10ZXh0LWVkaXRvciBbcHJlVGV4dF09XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgncXVlc3Rpb25UZXh0Jyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVGV4dCcpPy5wYXRjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX1FVRVNUSU9OJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1jdXN0b20tYW5ndWxhci1lZGl0b3Itd2hpdGUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIic4cmVtJ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblRleHQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwb3NpdGlvbi1yZWxhdGl2ZSBtdC0zXCIgKm5nSWY9XCJzaG93RmllbGQoJ3F1ZXN0aW9uTWVkaWEnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvbk1lZGlhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfUVVFU1RJT05fTUVESUEnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydib3JkZXItZGFuZ2VyJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5oYXNFcnJvcigncGF0dGVybicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5JTlZBTElEX1VSTCddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGNvbC0xMiBwYi00XCIgKm5nSWY9XCJzaG93RmllbGQoJ21pbkNoYXJhY3RlckNvdW50JykgfHwgc2hvd0ZpZWxkKCdtYXhDaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5DaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NSU5fQ0hBUkFDVEVSX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5DaGFyYWN0ZXJDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVJTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcGUtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhDaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfQ0hBUkFDVEVSX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhDaGFyYWN0ZXJDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVJTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTAgY29sLTEyIHBiLTRcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4RmlsZVNpemUnKSB8fCBzaG93RmllbGQoJ21heE5vT2ZGaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhGaWxlU2l6ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfRklMRV9TSVpFJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhGaWxlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQiddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4Tm9PZkZpbGVzJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9OT19PRl9GSUxFUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4Tm9PZkZpbGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLk5PVF9TRVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUxFUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIiAqbmdJZj1cInNob3dGaWVsZCgnY3VzdG9tUmVnZXgnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNVU1RPTV9SRUdFWCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImN1c3RvbVJlZ2V4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfQ1VTVE9NX1JFR0VYJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2N1c3RvbVJlZ2V4Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiICpuZ0lmPVwic2hvd0ZpZWxkKCd0b3RhbE1hcmtzJykgJiYgIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRPVEFMX01BUktTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidG90YWxNYXJrc1wiIHBsYWNlaG9sZGVyPVwiMFwiIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BUktTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBjb2wtMTIgcGItNFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnbWluaW11bU51bWJlck9mT3B0aW9uJykgfHwgc2hvd0ZpZWxkKCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWluaW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1JTl9PUFRJT05fU0VMRUNUX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5pbXVtTnVtYmVyT2ZPcHRpb25cIiBwbGFjZWhvbGRlcj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1BUSU9OUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcGUtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX09QVElPTl9TRUxFQ1RfTElNSVQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heGltdW1OdW1iZXJPZk9wdGlvblwiIFtwbGFjZWhvbGRlcl09XCJvcHRpb25zLmxlbmd0aCB8fCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk9QVElPTlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMiBtdC1tZC0zXCIgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiICpuZ0lmPVwib3B0aW9uLmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHktbWQtMCBweS0zIGJvcmRlci1ib3R0b20gYm9yZGVyLW1kLTAgY29sLTEyIGQtZmxleCBmbGV4LXdyYXAgZmxleC1tZC1ub3dyYXAgYWxpZ24taXRlbXMtbWQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC1tZC00IGdhcC0zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQgZmxleC1tZC1ncm93LTEgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtbWQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnB0LW1kLTNdPVwiaSA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgcC0yIGJvcmRlci1ncmV5LXRlbi0yIG10LTFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvcHRpb25MYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfT1BUSU9OJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93LTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBib3JkZXItMCBvdXRsaW5lLTAgYmctdHJhbnNwYXJlbnQgaW5wdXQtZm9jdXMgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtbWQtbm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5DTE9TRSddXCIgKGNsaWNrKT1cInJlbW92ZU9wdGlvbihpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24uZ2V0KCdvcHRpb25MYWJlbCcpPy5pbnZhbGlkICYmIG9wdGlvbi5nZXQoJ29wdGlvbkxhYmVsJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIG10LTFcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dXZWlnaHRhZ2UnKSAmJiAhaXNDaGlsZCAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNpeCBtYi0yIG1iLW1kLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hpZGRlbi1sYWJlbCc6IGkgPiAwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuV0VJR0hUQUdFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIChpbnB1dCk9XCJjaGVja01heFZhbCgkZXZlbnQsIG9wdGlvbi5nZXQoJ3dlaWdodCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIndlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0yIHB5LW1kLTEgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgb3V0bGluZS0wIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtbWFya3MtaW5wdXQgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLldFSUdIVEFHRSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dSZW1hcmtzJylcIiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNpeCBtYi0yIG1iLW1kLTMgcGItbWQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGlkZGVuLWxhYmVsJzogaSA+IDB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BUktTJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZW1hcmtzUmVxdWlyZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW1hcmtzUmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1ibG9jayBwdC0zXCIgW2NsYXNzLmN1c3RvbS1tYXJnaW5dPVwiaSA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVPcHRpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRPcHRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYmctdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYm9yZGVyLTAgYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfT1BUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnY2hpbGRRdWVzdGlvbnMnKSAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwICYmICFpc0NoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hJTERfUVVFU1RJT05TJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBtYXRUb29sdGlwPVwie3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNISUxEX1FVRVNUSU9OU19JTkZPJ119fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcENsYXNzPVwiYXNzZXNzbWVudC10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uSU5GTyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2luZm8uc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgY2hpbGRRdWVzdGlvbkdyb3VwczsgbGV0IGdyb3VwSW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgcC0zIG15LTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdGhyZWUgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCIgKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQVNTSUdORURfT1BUSU9OJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJncm91cC5vcHRpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uR3JvdXBPcHRpb25DaGFuZ2UoZ3JvdXAuaWQsICRldmVudC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX09QVElPTl9UT19MSU5LJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZSBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PTkUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IG9wSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwib3B0LmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgW3ZhbHVlXT1cImdldE9wdGlvbklkKG9wdClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0LmdldCgnb3B0aW9uTGFiZWwnKT8udmFsdWUgfHwgKCdPcHRpb24gJyArIChvcEluZGV4ICsgMSkpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcXVlc3Rpb25JZCBvZiBncm91cC5xdWVzdGlvbklkczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q2hpbGRRdWVzdGlvbkJ5SWQocXVlc3Rpb25JZCkgYXMgY2hpbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTEgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUVVFU1RJT04nXX19IHt7aSArIDF9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkRFTEVURSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNoaWxkUXVlc3Rpb25CeUlkKGNoaWxkLmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9kZWxldGUuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiY2hpbGQ/LnF1ZXN0aW9uVGV4dD8uWzBdPy50ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRWRpdENoaWxkUXVlc3Rpb24oY2hpbGQsIGdldENoaWxkUXVlc3Rpb25JbmRleChjaGlsZC5pZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZSBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRFZGl0Q2hpbGRRdWVzdGlvbih1bmRlZmluZWQsIHVuZGVmaW5lZCwgZ3JvdXAuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGJvcmRlci0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYmctdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfTU9SRSddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZEVkaXRDaGlsZFF1ZXN0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMyBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIGNvbC0xMiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG10LTMgYm9yZGVyLUFEQzlGNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0NISUxEX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdoaW50VGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0hJTlQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGV4dC1lZGl0b3IgW3ByZVRleHRdPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ2hpbnRUZXh0Jyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ2hpbnRUZXh0Jyk/LnBhdGNoVmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfSElOVCddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtY3VzdG9tLWFuZ3VsYXItZWRpdG9yLXdoaXRlIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInOHJlbSdcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnaGludFRleHQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdoaW50VGV4dCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUVMRFNfU0VUVElOR1MnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQU5EQVRPUlknXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQU5EQVRPUllfREVTQyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIG5hbWU9XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc01hbmRhdG9yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2lzRmlsdGVyRW5hYmxlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklMVEVSX0VOQUJMRUQnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUxURVJfRU5BQkxFRF9ERVNDJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgbmFtZT1cImlzRmlsdGVyRW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc0ZpbHRlckVuYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2lzRmlsdGVyRW5hYmxlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2lzRmlsdGVyRW5hYmxlZCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUVVFU1RJT05fTkFNRSddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblN1YlRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5RVUVTVElPTl9OQU1FJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWRhbmdlcic6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY29sLTEyXCIgKm5nSWY9XCIhaXNDaGlsZCAmJiAoc2tpbGxzTGlzdD8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFQX1NLSUxMUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNraWxsQ29kZXNcIiBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5TRUxFQ1RfU0tJTExTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiYXNzZXNzbWVudC1jaGVja2JveGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgKm5nRm9yPVwibGV0IHNraWxsIG9mIHNraWxsc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNraWxsPy5jb2RlXCI+e3tza2lsbD8ubGFiZWxzPy5bMF0/LnRleHR9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
615
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL21vZHVsZXMvYXNzZXNzbWVudC1tYWtlci9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvYXNzZXNzbWVudC1idWlsZGVyL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUW5FLE1BQU0sT0FBTywwQkFBMEI7SUFxQm5DLFlBQ1ksV0FBd0IsRUFDeEIsd0JBQWtELEVBQ2xELHNCQUE4QyxFQUMvQyxTQUFtRCxFQUMxQixVQUFlO1FBSnZDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUMvQyxjQUFTLEdBQVQsU0FBUyxDQUEwQztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFLO1FBekJuRCxnQkFBVyxHQUE4QixFQUFFLENBQUM7UUFDNUMsZ0JBQVcsR0FBOEIs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QUNuQyxDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRTtZQUM1RCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7SUFDTCxDQUFDOzt3SEF2bkJRLDBCQUEwQix1SkEwQnZCLGVBQWU7NEdBMUJsQiwwQkFBMEIsc0xDaEJ2QyxnL2pDQTJaTTs0RkQzWU8sMEJBQTBCO2tCQU50QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFdBQVcsRUFBRSxxQ0FBcUM7b0JBQ2xELFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO2lCQUNyRDs7MEJBNEJRLE1BQU07MkJBQUMsZUFBZTs0Q0FuQkcsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZSwgUmVmRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL2Fzc2Vzc21lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcXVlc3Rpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudE1ha2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fzc2Vzc21lbnQtbWFrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uUGFwZXJTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcXVlc3Rpb24tcGFwZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXNzZXNzbWVudC1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGdlbmVyYXRlVXVpZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWFwcC1hc3Nlc3NtZW50LWJ1aWxkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRCdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGxhYmVsQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gICAgcXVlc3Rpb25UeXBlczogUXVlc3Rpb25UeXBlW10gPSBbXTtcclxuICAgIHF1ZXN0aW9uRGV0YWlsczogQXNzZXNzbWVudFF1ZXN0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgICBydWxlczogYW55ID0ge307XHJcbiAgICBxdWVzdGlvblN0YWNrOiB7IHBhcmVudEZvcm1WYWx1ZTogQXNzZXNzbWVudFF1ZXN0aW9uLCBlZGl0aW5nUXVlc3Rpb25JbmRleD86IG51bWJlciwgYWRkaW5nVG9Hcm91cElkPzogc3RyaW5nIH1bXSA9IFtdO1xyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJykgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBjaGlsZFF1ZXN0aW9uR3JvdXBzOiB7IGlkOiBzdHJpbmcsIG9wdGlvbklkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLCBxdWVzdGlvbklkczogKHN0cmluZyB8IG51bWJlcilbXSB9W10gPSBbXTtcclxuXHJcbiAgICBxdWVzdGlvbnNGb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgICBxdWVzdGlvbkJhbms6IFJlY29yZDxudW1iZXIsIEFzc2Vzc21lbnRRdWVzdGlvbj4gPSB7fTtcclxuICAgIGlzQ2hpbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8vIHBhcmVudFF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBhc3Nlc3NtZW50SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBza2lsbHNMaXN0OiBSZWZEYXRhW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRCdWlsZGVyU2VydmljZTogQXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXNzZXNzbWVudE1ha2VyU2VydmljZTogQXNzZXNzbWVudE1ha2VyU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQ+LFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGlhbG9nRGF0YTogYW55LFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxhYmVsQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5sYWJlbENvbmZpZztcclxuICAgICAgICB0aGlzLmltYWdlQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5pbWFnZUNvbmZpZztcclxuICAgICAgICB0aGlzLnJ1bGVzID0gdGhpcy5kaWFsb2dEYXRhPy5ydWxlcztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVHlwZXMgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uVHlwZXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uQmFuaztcclxuICAgICAgICB0aGlzLmlzQ2hpbGQgPSB0aGlzLmRpYWxvZ0RhdGE/LmlzQ2hpbGQ7XHJcbiAgICAgICAgdGhpcy5za2lsbHNMaXN0ID0gdGhpcy5kaWFsb2dEYXRhPy5za2lsbHNMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gdGhpcy5kaWFsb2dEYXRhPy5hc3Nlc3NtZW50SWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEucXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25EZXRhaWxzID0gZGVlcENsb25lKHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25EZXRhaWxzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR1cEZvcm1Hcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlQ2hpbGRRdWVzdGlvbkxpc3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUlkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uRGV0YWlscz8uZGVmYXVsdE9wdGlvbnNMaXN0Py5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdD8uZm9yRWFjaChpZCA9PiB1bmlxdWVJZHMuYWRkKGlkKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHVuaXF1ZUlkcyk/Lm1hcChpZCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFua1tpZF0gPyBkZWVwQ2xvbmUodGhpcy5xdWVzdGlvbkJhbmtbaWRdKSA6IG51bGw7XHJcbiAgICAgICAgfSk/LmZpbHRlcihCb29sZWFuKSBhcyBBc3Nlc3NtZW50UXVlc3Rpb25bXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cEZvcm1Hcm91cCgpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBxdWVzdGlvblR5cGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgcXVlc3Rpb25TdWJUZXh0OiBbJyddLFxyXG4gICAgICAgICAgICBpc0ZpbHRlckVuYWJsZWQ6IFtmYWxzZV0sXHJcbiAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBbZmFsc2VdLFxyXG4gICAgICAgICAgICAvLyB2aXNpYmlsaXR5OiBbdHJ1ZV0sXHJcbiAgICAgICAgICAgIHRvdGFsTWFya3M6IFtudWxsXSxcclxuICAgICAgICAgICAgbWluQ2hhcmFjdGVyQ291bnQ6IFtudWxsXSxcclxuICAgICAgICAgICAgbWF4Q2hhcmFjdGVyQ291bnQ6IFtudWxsXSxcclxuICAgICAgICAgICAgbWF4aW11bU51bWJlck9mT3B0aW9uOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1pbmltdW1OdW1iZXJPZk9wdGlvbjogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhOb09mRmlsZXM6IFtudWxsXSxcclxuICAgICAgICAgICAgY3VzdG9tUmVnZXg6IFsnJ10sXHJcbiAgICAgICAgICAgIGhpbnRUZXh0OiBbJyddLFxyXG4gICAgICAgICAgICBxdWVzdGlvbk1lZGlhOiBbJyddLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICAgICAgY2hpbGRRdWVzdGlvbnM6IFtbXV0sXHJcbiAgICAgICAgICAgIHNraWxsQ29kZXM6IFtbXV1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uRGV0YWlscykge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9ybSh0aGlzLnF1ZXN0aW9uRGV0YWlscywgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5idWlsZENoaWxkUXVlc3Rpb25Hcm91cHMoW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwb3B1bGF0ZUZvcm0ocXVlc3Rpb25EZXRhaWxzOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGJ1aWxkQ2hpbGRHcm91cHM6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghcXVlc3Rpb25EZXRhaWxzKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2hpbGRRdWVzdGlvbnMgPSBxdWVzdGlvbkRldGFpbHM/LmNoaWxkUXVlc3Rpb25zIHx8IHRoaXMuZ2VuZXJhdGVDaGlsZFF1ZXN0aW9uTGlzdCgpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2V0UXVlc3Rpb25EVE8oeyAuLi5xdWVzdGlvbkRldGFpbHMsIGNoaWxkUXVlc3Rpb25zIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnBhdGNoVmFsdWUoZm9ybURhdGEpO1xyXG4gICAgICAgIGlmIChmb3JtRGF0YS5vcHRpb25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcihmb3JtRGF0YS50b3RhbE1hcmtzKSB8fCAwO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5vcHRpb25zLmZvckVhY2goKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRHcm91cCA9IHRoaXMuY3JlYXRlT3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodG90YWxNYXJrcyA+IDAgJiYgb3B0LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdC53ZWlnaHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQud2VpZ2h0ID0gcGFyc2VGbG9hdCgoKE51bWJlcihvcHQud2VpZ2h0KSAqIHRvdGFsTWFya3MpIC8gMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wdEdyb3VwLnBhdGNoVmFsdWUob3B0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdEdyb3VwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChidWlsZENoaWxkR3JvdXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDaGlsZFF1ZXN0aW9uR3JvdXBzKGNoaWxkUXVlc3Rpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBjb25zdCBxVHlwZSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZXMgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKT8udmFsdWUgfHwgW107XHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IHRoaXMuc2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dXZWlnaHRhZ2UnKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3dXZWlnaHRhZ2UgJiYgdG90YWxNYXJrcyA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHRvdGFsV2VpZ2h0cyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBoYXNJbnZhbGlkV2VpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LmlzQWN0aXZlID09PSBmYWxzZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3ID0gTnVtYmVyKG9wdC53ZWlnaHQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodyA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNJbnZhbGlkV2VpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzSW52YWxpZFdlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVG8ga2VlcCB3aXRoaW4gZXhpc3Rpbmcgc3R5bGVzLCBlbWl0dGluZyBkZWZhdWx0IGVycm9yIHdpdGggb3VyIHNwZWNpZmljIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5PUFRJT05fU0NPUkVfR1JFQVRFUl9USEFOX1RPVEFMX01BUktTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyAmJiB0b3RhbFdlaWdodHMgPiB0b3RhbE1hcmtzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU1VNX09GX09QVElPTl9TQ09SRVNfR1JFQVRFUl9USEFOX1RPVEFMX01BUktTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZGVlcENsb25lKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCAmJiBmb3JtVmFsdWUub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZS5vcHRpb25zLmZvckVhY2goKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdC53ZWlnaHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQud2VpZ2h0ID0gcGFyc2VGbG9hdCgoKE51bWJlcihvcHQud2VpZ2h0KSAvIHRvdGFsTWFya3MpICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gY2hpbGQgcXVlc3Rpb24gbG9naWNcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnF1ZXN0aW9uU3RhY2tbdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlPy5lZGl0aW5nUXVlc3Rpb25JbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXN0aW9uID0gc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zW3N0YXRlLmVkaXRpbmdRdWVzdGlvbkluZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUsIGNoaWxkUXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IGF3YWl0IHRoaXMudXBkYXRlUXVlc3Rpb24ocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zW3N0YXRlLmVkaXRpbmdRdWVzdGlvbkluZGV4XSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbj8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIG5ldyBjaGlsZCBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IGF3YWl0IHRoaXMuY3JlYXRlUXVlc3Rpb24ocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU/LnBhcmVudEZvcm1WYWx1ZT8uY2hpbGRRdWVzdGlvbnM/LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbj8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZCgoZzogYW55KSA9PiBnLmlkID09PSBzdGF0ZS5hZGRpbmdUb0dyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnAucXVlc3Rpb25JZHM/LnB1c2gocXVlc3Rpb24/LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncnAub3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHQgPSBzdGF0ZS5wYXJlbnRGb3JtVmFsdWU/LmRlZmF1bHRPcHRpb25zTGlzdD8uZmluZCgobzogYW55KSA9PiAoby5pZCB8fCBvLnV1aWQpID09IGdycC5vcHRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2hpbGRRdWVzdGlvbkxpc3QgPSBvcHQuY2hpbGRRdWVzdGlvbkxpc3QgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5jaGlsZFF1ZXN0aW9uTGlzdC5wdXNoKHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbcXVlc3Rpb24/LmlkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmUtcG9wdWxhdGUgcGFyZW50IGZvcm1cclxuICAgICAgICAgICAgdGhpcy5yZXNldEFuZFBvcHVsYXRlKHN0YXRlPy5wYXJlbnRGb3JtVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbkRUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgdGhpcy5xdWVzdGlvbkRldGFpbHMpO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGxvY2FsIHRlbXBsYXRlIHRyZWUgcmVwcmVzZW50YXRpb25cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25EZXRhaWxzPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkRUTyA9IGF3YWl0IHRoaXMudXBkYXRlUXVlc3Rpb24ocXVlc3Rpb25EVE8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbkRUTz8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb25EVE8uaWRdID0gcXVlc3Rpb25EVE9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX1VQREFURURfU1VDQ0VTUyddLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBzdWNjZXNzOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQ6IHF1ZXN0aW9uRFRPIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlT3JFZGl0QXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocXVlc3Rpb25EVE8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQ6IGFueSk6IFByb21pc2U8QXNzZXNzbWVudFF1ZXN0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiByZXNvbHZlKHJlcyBhcyBBc3Nlc3NtZW50UXVlc3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlamVjdChlcnIpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVF1ZXN0aW9uKHBheWxvYWQ6IGFueSk6IFByb21pc2U8QXNzZXNzbWVudFF1ZXN0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoUXVlc3Rpb24ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHJlc29sdmUocmVzIGFzIEFzc2Vzc21lbnRRdWVzdGlvbiksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4gcmVqZWN0KGVycilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlT3JFZGl0QXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uUGFwZXIgPSBkZWVwQ2xvbmUodGhpcy5kaWFsb2dEYXRhPy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEpO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25RdWVzdGlvbiA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlU2VjdGlvblF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YT8uc2VjdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDtcclxuICAgICAgICAgICAgY29uc3QgbGFzdFNlcXVlbmNlID0gbGlzdD8ubGVuZ3RoID8gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdLm9yZGVyTm8gfHwgMCA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5jcmVhdGVOZXdTZWN0aW9uKGxhc3RTZXF1ZW5jZSArIDEpO1xyXG5cclxuICAgICAgICAgICAgbmV3U2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LnB1c2goc2VjdGlvblF1ZXN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ucHVzaChuZXdTZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uUmVmID0gcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5maW5kKChzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikgPT4gc2VjdGlvbj8uaWQgPT0gdGhpcy5kaWFsb2dEYXRhPy5zZWN0aW9uRGV0YWlscz8uaWQpO1xyXG4gICAgICAgICAgICBzZWN0aW9uUmVmPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ucHVzaChzZWN0aW9uUXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25QYXBlckRUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb25QYXBlckRUTyhxdWVzdGlvblBhcGVyLCB0aGlzLnF1ZXN0aW9uQmFuayk7XHJcbiAgICAgICAgY29uc3QgYXNzZXNzbWVudERUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlQXNzZXNzbWVudERUTyh0aGlzLmFzc2Vzc21lbnRJZCwgcXVlc3Rpb25QYXBlckRUTyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnQ6IGFzc2Vzc21lbnREVE8sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI6IHF1ZXN0aW9uUGFwZXJEVE9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaUNhbGwgPSB0aGlzLmFzc2Vzc21lbnRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZUFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpO1xyXG5cclxuICAgICAgICBhcGlDYWxsLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnRJZDogcmVzPy5hc3Nlc3NtZW50Py5pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblBhcGVyOiByZXM/LnF1ZXN0aW9uUGFwZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25NYXA6IHJlcz8ucXVlc3Rpb25NYXBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6IHRoaXMuYXNzZXNzbWVudElkID8gJ1BBVENIJyA6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUR5bmFtaWNWYWxpZGF0b3JzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5ydWxlcyB8fCBPYmplY3Qua2V5cyh0aGlzLnJ1bGVzKS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHFUeXBlID0gZm9ybS5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSB0aGlzLnJ1bGVzW3FUeXBlXSB8fCB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZXhjbHVkZWRDb250cm9scyA9IG5ldyBTZXQoWydxdWVzdGlvblR5cGUnLCAncXVlc3Rpb25UZXh0JywgJ29wdGlvbnMnLCAndmlzaWJpbGl0eScsICdpc01hbmRhdG9yeScsICdxdWVzdGlvblN1YlRleHQnLCAnc2tpbGxDb2RlcyddKTtcclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIG5vcm1hbCBjb250cm9sc1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChleGNsdWRlZENvbnRyb2xzLmhhcyhrZXkpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBydWxlID0gY3VycmVudFJ1bGVzW2tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAocnVsZT8udmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHJ1bGU/LnJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW107XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncXVlc3Rpb25NZWRpYScpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKGh0dHBzPzpcXC9cXC8pPyhbXFxkYS16XFwuLV0rKVxcLihbYS16XFwuXXsyLDZ9KShbXFwvXFx3IFxcLi1dKikqXFwvPyhcXD9bXlxcc10qKT8kL2kpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzLmxlbmd0aCA+IDAgPyB2YWxpZGF0b3JzIDogbnVsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShrZXkgPT09ICdjaGlsZFF1ZXN0aW9ucycgPyBbXSA6IG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIG9wdGlvbnMgRm9ybUFycmF5XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRyb2wgPSBmb3JtLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICBjb25zdCBvcHRpb25zUnVsZSA9IGN1cnJlbnRSdWxlc1snb3B0aW9ucyddO1xyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnNSdWxlPy52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5jbGVhcigpO1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1ZhbGlkYXRvciA9IG9wdGlvbnNSdWxlPy5yZXF1aXJlZCA/IChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9ucyA9IChjb250cm9sLnZhbHVlIHx8IFtdKS5maWx0ZXIoKG9wdDogYW55KSA9PiBvcHQuaXNBY3RpdmUgIT09IGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZU9wdGlvbnMubGVuZ3RoID4gMCA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgfSA6IG51bGw7XHJcblxyXG4gICAgICAgIG9wdGlvbnNDb250cm9sLnNldFZhbGlkYXRvcnMob3B0aW9uc1ZhbGlkYXRvcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHNob3dXZWlnaHRhZ2UgPSBvcHRpb25zUnVsZT8uc2hvd1dlaWdodGFnZTtcclxuICAgICAgICBjb25zdCBzaG93UmVtYXJrcyA9IG9wdGlvbnNSdWxlPy5zaG93UmVtYXJrcztcclxuXHJcbiAgICAgICAgb3B0aW9uc0NvbnRyb2wuY29udHJvbHMuZm9yRWFjaChvcHRHcm91cCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdlaWdodEN0cmwgPSBvcHRHcm91cC5nZXQoJ3dlaWdodCcpO1xyXG4gICAgICAgICAgICBjb25zdCByZW1hcmtzQ3RybCA9IG9wdEdyb3VwLmdldCgncmVtYXJrc1JlcXVpcmVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNob3dXZWlnaHRhZ2UpIHdlaWdodEN0cmw/LnNldFZhbHVlKDAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgaWYgKCFzaG93UmVtYXJrcykgcmVtYXJrc0N0cmw/LnNldFZhbHVlKGZhbHNlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgICAgICAgICB3ZWlnaHRDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgcmVtYXJrc0N0cmw/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBvcHRpb25zQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RmllbGQoZmllbGROYW1lOiBzdHJpbmcsIG5lc3RlZFByb3A/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBxdWVzdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdxdWVzdGlvblR5cGUnKT8udmFsdWU7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvblR5cGUgfHwgIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXSB8fCAhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdW2ZpZWxkTmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmVzdGVkUHJvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV1bZmllbGROYW1lXVtuZXN0ZWRQcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdW2ZpZWxkTmFtZV0/LnZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKTogRm9ybUFycmF5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZE9wdGlvbigpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaCh0aGlzLmNyZWF0ZU9wdGlvbigpKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVPcHRpb24oaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWRPcHRpb24gPSB0aGlzLm9wdGlvbnMuYXQoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWRPcHRpb25JZCA9IHJlbW92ZWRPcHRpb24uZ2V0KCdpZCcpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCByZW1vdmVkT3B0aW9uVXVpZCA9IHJlbW92ZWRPcHRpb24uZ2V0KCd1dWlkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUlkID0gcmVtb3ZlZE9wdGlvbklkIHx8IHJlbW92ZWRPcHRpb25VdWlkO1xyXG5cclxuICAgICAgICBpZiAocmVtb3ZlZE9wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZWRPcHRpb24uZ2V0KCdpc0FjdGl2ZScpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZy5vcHRpb25JZCA9PT0gdW5pcXVlSWQpIHtcclxuICAgICAgICAgICAgICAgIGcub3B0aW9uSWQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlT3B0aW9uKCk6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBpZDogWzBdLFxyXG4gICAgICAgICAgICB1dWlkOiBbZ2VuZXJhdGVVdWlkKCldLFxyXG4gICAgICAgICAgICBvcHRpb25MYWJlbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgd2VpZ2h0OiBbMF0sXHJcbiAgICAgICAgICAgIHJlbWFya3NSZXF1aXJlZDogW2ZhbHNlXSxcclxuICAgICAgICAgICAgaXNBY3RpdmU6IFt0cnVlXSxcclxuICAgICAgICAgICAgY2hpbGRRdWVzdGlvbkxpc3Q6IFtbXV1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxvd09ubHlOdW1iZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja01heFZhbChldmVudDogYW55LCBjb250cm9sOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBsZXQgdmFsID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbCA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdG90YWxNYXJrcztcclxuICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnNyYyA9IGZpbGVQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEVkaXRDaGlsZFF1ZXN0aW9uKGNoaWxkUXVlc3Rpb24/OiBBc3Nlc3NtZW50UXVlc3Rpb24sIGluZGV4PzogbnVtYmVyLCBncm91cElkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gU2F2ZSBjdXJyZW50IHBhcmVudCBzdGF0ZVxyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGRlZXBDbG9uZSh0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcihmb3JtVmFsdWUudG90YWxNYXJrcykgfHwgMDtcclxuICAgICAgICBjb25zdCBzaG93V2VpZ2h0YWdlID0gdGhpcy5zaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpO1xyXG5cclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCAmJiBmb3JtVmFsdWUub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZS5vcHRpb25zLmZvckVhY2goKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdC53ZWlnaHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQud2VpZ2h0ID0gcGFyc2VGbG9hdCgoKE51bWJlcihvcHQud2VpZ2h0KSAvIHRvdGFsTWFya3MpICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBxdWVzdGlvbkRhdGEgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUsIHRoaXMucXVlc3Rpb25EZXRhaWxzKTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICBwYXJlbnRGb3JtVmFsdWU6IHsgLi4ucXVlc3Rpb25EYXRhLCBjaGlsZFF1ZXN0aW9uczogdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZSB9LFxyXG4gICAgICAgICAgICBlZGl0aW5nUXVlc3Rpb25JbmRleDogaW5kZXgsXHJcbiAgICAgICAgICAgIGFkZGluZ1RvR3JvdXBJZDogZ3JvdXBJZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBmb3JtIGZvciBjaGlsZFxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnJlc2V0KHtcclxuICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnJyxcclxuICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnJyxcclxuICAgICAgICAgICAgaXNNYW5kYXRvcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAvLyB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgICB0b3RhbE1hcmtzOiBudWxsLFxyXG4gICAgICAgICAgICBtaW5DaGFyYWN0ZXJDb3VudDogbnVsbCxcclxuICAgICAgICAgICAgbWF4Q2hhcmFjdGVyQ291bnQ6IG51bGwsXHJcbiAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZk9wdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgbWluaW11bU51bWJlck9mT3B0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogbnVsbCxcclxuICAgICAgICAgICAgbWF4Tm9PZkZpbGVzOiBudWxsLFxyXG4gICAgICAgICAgICBjdXN0b21SZWdleDogJycsXHJcbiAgICAgICAgICAgIGhpbnRUZXh0OiAnJyxcclxuICAgICAgICAgICAgcXVlc3Rpb25NZWRpYTogJycsXHJcbiAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25zOiBbXSxcclxuICAgICAgICAgICAgc2tpbGxDb2RlczogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBvcHRpb25zQ29udHJvbCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB3aGlsZSAob3B0aW9uc0NvbnRyb2wubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLnJlbW92ZUF0KDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgaWYgKGNoaWxkUXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0oY2hpbGRRdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDaGlsZFF1ZXN0aW9uKGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDaGlsZCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWVbaW5kZXhdO1xyXG5cclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29udHJvbHMuZm9yRWFjaChvcHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY2hpbGRMaXN0ID0gWy4uLihvcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXSldO1xyXG4gICAgICAgICAgICBjaGlsZExpc3QgPSBjaGlsZExpc3QuZmlsdGVyKChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBpZCAhPT0gZGVsZXRlZENoaWxkLmlkKTtcclxuICAgICAgICAgICAgb3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8uc2V0VmFsdWUoY2hpbGRMaXN0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAgICAgZy5xdWVzdGlvbklkcyA9IGcucXVlc3Rpb25JZHMuZmlsdGVyKHFpZCA9PiBxaWQgIT09IGRlbGV0ZWRDaGlsZC5pZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbHRlcihnID0+IGcucXVlc3Rpb25JZHMubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9uSWQob3B0OiBhbnkpOiBzdHJpbmcgfCBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBvcHQuZ2V0KCdpZCcpPy52YWx1ZSA/IG9wdC5nZXQoJ2lkJyk/LnZhbHVlIDogb3B0LmdldCgndXVpZCcpPy52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZFF1ZXN0aW9uQnlJZChpZDogc3RyaW5nIHwgbnVtYmVyKTogQXNzZXNzbWVudFF1ZXN0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZT8uZmluZCgocTogQXNzZXNzbWVudFF1ZXN0aW9uKSA9PiBxLmlkID09PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRRdWVzdGlvbkluZGV4KGlkOiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlPy5maW5kSW5kZXgoKHE6IEFzc2Vzc21lbnRRdWVzdGlvbikgPT4gcS5pZCA9PT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNoaWxkUXVlc3Rpb25CeUlkKGlkOiBudW1iZXIgfCB1bmRlZmluZWQsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDaGlsZFF1ZXN0aW9uSW5kZXgoaWQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlQ2hpbGRRdWVzdGlvbihpbmRleCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBidWlsZENoaWxkUXVlc3Rpb25Hcm91cHMoY2hpbGRRdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzID0gW107XHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkUXVlc3Rpb25JZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb250cm9scy5mb3JFYWNoKG9wdCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5nZXRPcHRpb25JZChvcHQpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZExpc3QgPSBvcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZVV1aWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25JZDogb3B0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZHM6IFsuLi5jaGlsZExpc3RdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdC5mb3JFYWNoKChpZDogYW55KSA9PiBwcm9jZXNzZWRRdWVzdGlvbklkcy5hZGQoaWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGlsZFF1ZXN0aW9ucy5mb3JFYWNoKGNxID0+IHtcclxuICAgICAgICAgICAgaWYgKGNxLmlkICYmICFwcm9jZXNzZWRRdWVzdGlvbklkcy5oYXMoY3EuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbY3EuaWRdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uR3JvdXBPcHRpb25DaGFuZ2UoZ3JvdXBJZDogc3RyaW5nLCBuZXdPcHRpb25JZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZEluZGV4KGcgPT4gZy5pZCA9PT0gZ3JvdXBJZCk7XHJcbiAgICAgICAgaWYgKGdyb3VwSW5kZXggPT09IC0xKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHNbZ3JvdXBJbmRleF07XHJcblxyXG4gICAgICAgIGNvbnN0IG9sZE9wdGlvbklkID0gZ3JvdXAub3B0aW9uSWQ7XHJcblxyXG4gICAgICAgIGlmIChvbGRPcHRpb25JZCkge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRPcHQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmluZChvcHQgPT4gdGhpcy5nZXRPcHRpb25JZChvcHQpID09PSBvbGRPcHRpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChvbGRPcHQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZExpc3QgPSBbLi4uKG9sZE9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdKV07XHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3QgPSBjaGlsZExpc3QuZmlsdGVyKGlkID0+ICFncm91cC5xdWVzdGlvbklkcy5pbmNsdWRlcyhpZCBhcyBhbnkpKTtcclxuICAgICAgICAgICAgICAgIG9sZE9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnNldFZhbHVlKGNoaWxkTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZChnID0+IGcuaWQgIT09IGdyb3VwSWQgJiYgZy5vcHRpb25JZCA9PT0gbmV3T3B0aW9uSWQpO1xyXG5cclxuICAgICAgICBpZiAoZXhpc3RpbmdHcm91cCAmJiBuZXdPcHRpb25JZCkge1xyXG4gICAgICAgICAgICBleGlzdGluZ0dyb3VwLnF1ZXN0aW9uSWRzLnB1c2goLi4uZ3JvdXAucXVlc3Rpb25JZHMpO1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdyb3VwLm9wdGlvbklkID0gbmV3T3B0aW9uSWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3T3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3T3B0ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbmQob3B0ID0+IHRoaXMuZ2V0T3B0aW9uSWQob3B0KSA9PT0gbmV3T3B0aW9uSWQpO1xyXG4gICAgICAgICAgICBpZiAobmV3T3B0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRMaXN0ID0gWy4uLihuZXdPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXSldO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldChbLi4uY2hpbGRMaXN0LCAuLi5ncm91cC5xdWVzdGlvbklkc10pO1xyXG4gICAgICAgICAgICAgICAgbmV3T3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8uc2V0VmFsdWUoQXJyYXkuZnJvbShzZXQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnb0JhY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEFuZFBvcHVsYXRlKHN0YXRlPy5wYXJlbnRGb3JtVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0QW5kUG9wdWxhdGUocGFyZW50VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNDb250cm9sID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHdoaWxlIChvcHRpb25zQ29udHJvbC5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wucmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcHVsYXRlRm9ybShwYXJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1RvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXIgJiYgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggdmgtMTAwIHBvc2l0aW9uLXJlbGF0aXZlIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCB8fCBpc0NoaWxkXCJcclxuICAgICAgICBjbGFzcz1cInAtMyBweC0yIGNvbC1hdXRvIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1DOERBRjkgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgZC1tZC1mbGV4IGQtbm9uZVwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwibS0wIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCB2ZXJ0aWNhbC10ZXh0XCI+XHJcbiAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSElMRF9RVUVTVElPTiddfX1cclxuICAgICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBoLTEwMCBkLWZsZXggZmxleC1jb2x1bW4gcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICA8aGVhZGVyXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcG9zaXRpb24tc3RpY2t5IHRvcC0wIGNvbC0xMiBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgIDxwICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggZC1tZC1pbmxpbmUgZC1ub25lXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU5QVVRfRklFTERfU0VUVElOR1MnXX19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMFwiIChjbGljayk9XCJnb0JhY2soKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGJvcmRlci0wIG91dGxpbmUtMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE0IGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkdPX0JBQ0snXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2dvLWJhY2suc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkdPX0JBQ0snXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtbWQtZW5kIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5IGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J29wYWNpdHktMCc6IGlzU3VibWl0dGluZ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNBVkVfUVVFU1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzU3VibWl0dGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGUgYXNzZXNzbWVudC1zcGlubmVyLXdoaXRlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImQtbWQtbm9uZVwiICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiIG1hdC1kaWFsb2ctY2xvc2VcclxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5DTE9TRSddXCJcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICA8ZGl2ICNzY3JvbGxDb250YWluZXIgY2xhc3M9XCJjb2wtMTIgcHktNCBweC1tZC00IHB4LTMgZmxleC1ncm93LTEgb3ZlcmZsb3cteS1hdXRvIGZvcm0tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJxdWVzdGlvbnNGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gY29sLTEyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRZUEUnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInF1ZXN0aW9uVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX1FVRVNUSU9OX1RZUEUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LW1hdC1zZWxlY3QgY29sLTEyIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVzdGlvblR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInR5cGU/LmNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0eXBlPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlF1ZXN0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGV4dC1lZGl0b3IgW3ByZVRleHRdPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVGV4dCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdxdWVzdGlvblRleHQnKT8ucGF0Y2hWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9RVUVTVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtY3VzdG9tLWFuZ3VsYXItZWRpdG9yLXdoaXRlIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInOHJlbSdcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UZXh0Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcG9zaXRpb24tcmVsYXRpdmUgbXQtM1wiICpuZ0lmPVwic2hvd0ZpZWxkKCdxdWVzdGlvbk1lZGlhJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25NZWRpYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX1FVRVNUSU9OX01FRElBJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWRhbmdlcic6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuSU5WQUxJRF9VUkwnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBjb2wtMTIgcGItNFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5DaGFyYWN0ZXJDb3VudCcpIHx8IHNob3dGaWVsZCgnbWF4Q2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWluQ2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUlOX0NIQVJBQ1RFUl9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWluQ2hhcmFjdGVyQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hBUkFDVEVSUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4Q2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX0NIQVJBQ1RFUl9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4Q2hhcmFjdGVyQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hBUkFDVEVSUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGNvbC0xMiBwYi00XCIgKm5nSWY9XCJzaG93RmllbGQoJ21heEZpbGVTaXplJykgfHwgc2hvd0ZpZWxkKCdtYXhOb09mRmlsZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4RmlsZVNpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX0ZJTEVfU0laRSddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4RmlsZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUInXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwZS0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21heE5vT2ZGaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfTk9fT0ZfRklMRVMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heE5vT2ZGaWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklMRVMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCIgKm5nSWY9XCJzaG93RmllbGQoJ2N1c3RvbVJlZ2V4JylcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DVVNUT01fUkVHRVgnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21SZWdleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX0NVU1RPTV9SRUdFWCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY3VzdG9tUmVnZXgnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY3VzdG9tUmVnZXgnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIiAqbmdJZj1cInNob3dGaWVsZCgndG90YWxNYXJrcycpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UT1RBTF9NQVJLUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInRvdGFsTWFya3NcIiBwbGFjZWhvbGRlcj1cIjBcIiAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTAgY29sLTEyIHBiLTRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpIHx8IHNob3dGaWVsZCgnbWF4aW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwcy0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NSU5fT1BUSU9OX1NFTEVDVF9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWluaW11bU51bWJlck9mT3B0aW9uXCIgcGxhY2Vob2xkZXI9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk9QVElPTlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4aW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9PUFRJT05fU0VMRUNUX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhpbXVtTnVtYmVyT2ZPcHRpb25cIiBbcGxhY2Vob2xkZXJdPVwib3B0aW9ucy5sZW5ndGggfHwgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5PUFRJT05TJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTIgbXQtbWQtM1wiICpuZ0lmPVwic2hvd0ZpZWxkKCdvcHRpb25zJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIiAqbmdJZj1cIm9wdGlvbi5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB5LW1kLTAgcHktMyBib3JkZXItYm90dG9tIGJvcmRlci1tZC0wIGNvbC0xMiBkLWZsZXggZmxleC13cmFwIGZsZXgtbWQtbm93cmFwIGFsaWduLWl0ZW1zLW1kLXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtbWQtNCBnYXAtM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kIGZsZXgtbWQtZ3Jvdy0xIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LW1kLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wdC1tZC0zXT1cImkgPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIHAtMiBib3JkZXItZ3JleS10ZW4tMiBtdC0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3B0aW9uTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX09QVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYm9yZGVyLTAgb3V0bGluZS0wIGJnLXRyYW5zcGFyZW50IGlucHV0LWZvY3VzIHB5LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLW1kLW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiIChjbGljayk9XCJyZW1vdmVPcHRpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmdldCgnb3B0aW9uTGFiZWwnKT8uaW52YWxpZCAmJiBvcHRpb24uZ2V0KCdvcHRpb25MYWJlbCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBtdC0xXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93V2VpZ2h0YWdlJykgJiYgIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zaXggbWItMiBtYi1tZC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoaWRkZW4tbGFiZWwnOiBpID4gMH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLldFSUdIVEFHRSddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiAoaW5wdXQpPVwiY2hlY2tNYXhWYWwoJGV2ZW50LCBvcHRpb24uZ2V0KCd3ZWlnaHQnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3ZWlnaHRcIiAod2hlZWwpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMiBweS1tZC0xIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIG91dGxpbmUtMCBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LW1hcmtzLWlucHV0IGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5XRUlHSFRBR0UnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93UmVtYXJrcycpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNpeCBtYi0yIG1iLW1kLTMgcGItbWQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGlkZGVuLWxhYmVsJzogaSA+IDB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BUktTJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZW1hcmtzUmVxdWlyZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW1hcmtzUmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1ibG9jayBwdC0zXCIgW2NsYXNzLmN1c3RvbS1tYXJnaW5dPVwiaSA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVPcHRpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRPcHRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYmctdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYm9yZGVyLTAgYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfT1BUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnY2hpbGRRdWVzdGlvbnMnKSAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwICYmICFpc0NoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hJTERfUVVFU1RJT05TJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBtYXRUb29sdGlwPVwie3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNISUxEX1FVRVNUSU9OU19JTkZPJ119fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcENsYXNzPVwiYXNzZXNzbWVudC10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uSU5GTyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2luZm8uc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgY2hpbGRRdWVzdGlvbkdyb3VwczsgbGV0IGdyb3VwSW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgcC0zIG15LTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdGhyZWUgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCIgKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQVNTSUdORURfT1BUSU9OJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJncm91cC5vcHRpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uR3JvdXBPcHRpb25DaGFuZ2UoZ3JvdXAuaWQsICRldmVudC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX09QVElPTl9UT19MSU5LJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZSBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PTkUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IG9wSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwib3B0LmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgW3ZhbHVlXT1cImdldE9wdGlvbklkKG9wdClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0LmdldCgnb3B0aW9uTGFiZWwnKT8udmFsdWUgfHwgKCdPcHRpb24gJyArIChvcEluZGV4ICsgMSkpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcXVlc3Rpb25JZCBvZiBncm91cC5xdWVzdGlvbklkczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q2hpbGRRdWVzdGlvbkJ5SWQocXVlc3Rpb25JZCkgYXMgY2hpbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTEgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUVVFU1RJT04nXX19IHt7aSArIDF9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkRFTEVURSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNoaWxkUXVlc3Rpb25CeUlkKGNoaWxkLmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9kZWxldGUuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiY2hpbGQ/LnF1ZXN0aW9uVGV4dD8uWzBdPy50ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRWRpdENoaWxkUXVlc3Rpb24oY2hpbGQsIGdldENoaWxkUXVlc3Rpb25JbmRleChjaGlsZC5pZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZSBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRFZGl0Q2hpbGRRdWVzdGlvbih1bmRlZmluZWQsIHVuZGVmaW5lZCwgZ3JvdXAuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGJvcmRlci0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYmctdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfTU9SRSddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZEVkaXRDaGlsZFF1ZXN0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMyBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIGNvbC0xMiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG10LTMgYm9yZGVyLUFEQzlGNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0NISUxEX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdoaW50VGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0hJTlQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGV4dC1lZGl0b3IgW3ByZVRleHRdPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ2hpbnRUZXh0Jyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ2hpbnRUZXh0Jyk/LnBhdGNoVmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfSElOVCddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtY3VzdG9tLWFuZ3VsYXItZWRpdG9yLXdoaXRlIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInOHJlbSdcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnaGludFRleHQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdoaW50VGV4dCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUVMRFNfU0VUVElOR1MnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQU5EQVRPUlknXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQU5EQVRPUllfREVTQyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIG5hbWU9XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc01hbmRhdG9yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2lzRmlsdGVyRW5hYmxlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklMVEVSX0VOQUJMRUQnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUxURVJfRU5BQkxFRF9ERVNDJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgbmFtZT1cImlzRmlsdGVyRW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc0ZpbHRlckVuYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2lzRmlsdGVyRW5hYmxlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2lzRmlsdGVyRW5hYmxlZCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUVVFU1RJT05fTkFNRSddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblN1YlRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5RVUVTVElPTl9OQU1FJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWRhbmdlcic6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY29sLTEyXCIgKm5nSWY9XCIhaXNDaGlsZCAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwICYmIChza2lsbHNMaXN0Py5sZW5ndGggPz8gMCkgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVBfU0tJTExTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2tpbGxDb2Rlc1wiIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlNFTEVDVF9TS0lMTFMnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJhc3Nlc3NtZW50LWNoZWNrYm94ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LW1hdC1zZWxlY3QgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIiAqbmdGb3I9XCJsZXQgc2tpbGwgb2Ygc2tpbGxzTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2tpbGw/LmNvZGVcIj57e3NraWxsPy5sYWJlbHM/LlswXT8udGV4dH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|