tango-app-ui-analyse-trax 3.3.1-alpha-task.65 → 3.3.1-alpha-task.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/action-centre/action-centre.component.mjs +146 -118
- package/esm2022/lib/components/add-task/add-task.component.mjs +417 -28
- package/esm2022/lib/components/add-task/create-task.data.mjs +306 -0
- package/esm2022/lib/components/add-task/create-task.interface.mjs +2 -0
- package/esm2022/lib/components/create-task/create-task.component.mjs +5 -5
- package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +3 -1
- package/esm2022/lib/components/gallery/gallery.component.mjs +410 -52
- package/esm2022/lib/components/task-logs/task-logs.component.mjs +61 -0
- package/esm2022/lib/services/trax.service.mjs +27 -3
- package/esm2022/lib/tango-analyse-trax-routing.module.mjs +1 -1
- package/esm2022/lib/tango-analyse-trax.module.mjs +5 -2
- package/fesm2022/tango-app-ui-analyse-trax.mjs +1577 -416
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
- package/lib/components/action-centre/action-centre.component.d.ts +3 -3
- package/lib/components/add-task/add-task.component.d.ts +57 -10
- package/lib/components/add-task/create-task.data.d.ts +244 -0
- package/lib/components/add-task/create-task.interface.d.ts +147 -0
- package/lib/components/flags/flags.component.d.ts +2 -2
- package/lib/components/flags-info/flags-info.component.d.ts +3 -3
- package/lib/components/gallery/gallery.component.d.ts +16 -3
- package/lib/components/orders/orders.component.d.ts +1 -1
- package/lib/components/reports/reports.component.d.ts +2 -2
- package/lib/components/task-configure/task-configure.component.d.ts +1 -1
- package/lib/components/task-logs/task-logs.component.d.ts +40 -0
- package/lib/services/trax.service.d.ts +7 -0
- package/lib/tango-analyse-trax.module.d.ts +9 -8
- package/package.json +1 -1
|
@@ -137,7 +137,7 @@ export class CreateTaskComponent {
|
|
|
137
137
|
answers: this.fb.array([])
|
|
138
138
|
});
|
|
139
139
|
if (question.answerType === 'descriptive' || question.answerType === 'multipleImage') {
|
|
140
|
-
questionFormData.addControl('descriptivetype', new FormControl(question?.descriptivetype ?? 'text'
|
|
140
|
+
questionFormData.addControl('descriptivetype', new FormControl(question?.descriptivetype ?? 'text'));
|
|
141
141
|
}
|
|
142
142
|
if (insertIndex !== undefined) {
|
|
143
143
|
this.taskForm.get('sections')
|
|
@@ -199,7 +199,7 @@ export class CreateTaskComponent {
|
|
|
199
199
|
const file = event.target.files[0];
|
|
200
200
|
formData.append('file', file, file.name);
|
|
201
201
|
formData.append('clientId', this.headerData?.client);
|
|
202
|
-
this.traxService.
|
|
202
|
+
this.traxService.imageupload(formData).pipe(takeUntil(this.destroy$)).subscribe({
|
|
203
203
|
next: (res) => {
|
|
204
204
|
if (res.data.imgUrl) {
|
|
205
205
|
if (answerIndex === undefined) {
|
|
@@ -358,10 +358,10 @@ export class CreateTaskComponent {
|
|
|
358
358
|
});
|
|
359
359
|
}
|
|
360
360
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateTaskComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TraxService }, { token: i3.GlobalStateService }, { token: i4.ToastService }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i3.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
|
|
361
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateTaskComponent, selector: "lib-create-task", ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"c-card d-flex justify-content-between\">\r\n <div>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\" placeholder=\"Enter Checklist Name\" class=\"plain-input checklist-name mb-5\">\r\n <input [formControl]=\"taskForm.controls.checklistDescription\" type=\"text\" placeholder=\"Enter Checklist Description\" class=\"plain-input checklist-desc\">\r\n </div>\r\n <div class=\"d-flex align-items-center\" >\r\n <button (click)=\"onSubmit('configure')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-primary me-5\" >Configure</button>\r\n <button (click)=\"onSubmit('save')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-outline\" >Save as Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <div (click)=\"selectQuestion(i, j, question)\"\r\n [ngClass]=\"question?.get('qno')?.value === selectedQuestion?.get('qno')?.value ? 'question-badge-selected' : ''\"\r\n class=\"question-badge\">\r\n {{question?.get('qname')?.value ?question?.get('qname')?.value : 'Question ' + question?.get('qno')?.value }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-9\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <div class=\"question-name\">\r\n Question {{j + 1}}\r\n </div>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"text\"\r\n [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"number\"\r\n [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div class=\"check-desc\">Trigger an action for each response\r\n to validate it</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div style=\"white-space: nowrap;\" class=\"check-desc\">\r\n Trigger an action for each\r\n response\r\n to validate it</div>\r\n </div>\r\n <div>\r\n <svg (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end mb-5\">\r\n <svg (click)=\"onQuestionClone(i, j, question)\" class=\"me-8 cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Duplicate\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3385_10578)\">\r\n <path\r\n d=\"M4.16663 12.4993H3.33329C2.89127 12.4993 2.46734 12.3238 2.15478 12.0112C1.84222 11.6986 1.66663 11.2747 1.66663 10.8327V3.33268C1.66663 2.89065 1.84222 2.46673 2.15478 2.15417C2.46734 1.84161 2.89127 1.66602 3.33329 1.66602H10.8333C11.2753 1.66602 11.6992 1.84161 12.0118 2.15417C12.3244 2.46673 12.5 2.89065 12.5 3.33268V4.16602M9.16663 7.49935H16.6666C17.5871 7.49935 18.3333 8.24554 18.3333 9.16602V16.666C18.3333 17.5865 17.5871 18.3327 16.6666 18.3327H9.16663C8.24615 18.3327 7.49996 17.5865 7.49996 16.666V9.16602C7.49996 8.24554 8.24615 7.49935 9.16663 7.49935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3385_10578\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"(getQuestions(i)?.controls?.length ?? 0) > 1\" (click)=\"onQuestionDelete(i, j)\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Delete question\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M2.5 4.99935H4.16667M4.16667 4.99935H17.5M4.16667 4.99935V16.666C4.16667 17.108 4.34226 17.532 4.65482 17.8445C4.96738 18.1571 5.39131 18.3327 5.83333 18.3327H14.1667C14.6087 18.3327 15.0326 18.1571 15.3452 17.8445C15.6577 17.532 15.8333 17.108 15.8333 16.666V4.99935H4.16667ZM6.66667 4.99935V3.33268C6.66667 2.89065 6.84226 2.46673 7.15482 2.15417C7.46738 1.84161 7.89131 1.66602 8.33333 1.66602H11.6667C12.1087 1.66602 12.5326 1.84161 12.8452 2.15417C13.1577 2.46673 13.3333 2.89065 13.3333 3.33268V4.99935M8.33333 9.16602V14.166M11.6667 9.16602V14.166\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <button (click)=\"addNewQuestion(i)\"\r\n *ngIf=\"j === (getQuestions(i)?.controls?.length ?? 0) - 1\"\r\n class=\"btn btn-outline w-100\">\r\n <svg class=\"mr-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>Add New Question</span>\r\n\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </form>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;background:#f9fafb;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", 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]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
361
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateTaskComponent, selector: "lib-create-task", ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"c-card d-flex justify-content-between\">\r\n <div>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\" placeholder=\"Enter Checklist Name\" class=\"plain-input checklist-name mb-5\">\r\n <input [formControl]=\"taskForm.controls.checklistDescription\" type=\"text\" placeholder=\"Enter Checklist Description\" class=\"plain-input checklist-desc\">\r\n </div>\r\n <div class=\"d-flex align-items-center\" >\r\n <button (click)=\"onSubmit('configure')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-primary me-5\" >Configure</button>\r\n <button (click)=\"onSubmit('save')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-outline\" >Save as Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <div (click)=\"selectQuestion(i, j, question)\"\r\n [ngClass]=\"question?.get('qno')?.value === selectedQuestion?.get('qno')?.value ? 'question-badge-selected' : ''\"\r\n class=\"question-badge\">\r\n {{question?.get('qname')?.value ?question?.get('qname')?.value : 'Question ' + question?.get('qno')?.value }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-9\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <div class=\"question-name\">\r\n Question {{j + 1}}\r\n </div>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"text\"\r\n [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"number\"\r\n [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <!-- <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <!-- <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div class=\"check-desc\">Trigger an action for each response\r\n to validate it</div>\r\n </div>\r\n </div> -->\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <!-- <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <!-- <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div style=\"white-space: nowrap;\" class=\"check-desc\">\r\n Trigger an action for each\r\n response\r\n to validate it</div>\r\n </div>\r\n <div>\r\n <svg (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n\r\n </div> -->\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end mb-5\">\r\n <svg (click)=\"onQuestionClone(i, j, question)\" class=\"me-8 cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Duplicate\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3385_10578)\">\r\n <path\r\n d=\"M4.16663 12.4993H3.33329C2.89127 12.4993 2.46734 12.3238 2.15478 12.0112C1.84222 11.6986 1.66663 11.2747 1.66663 10.8327V3.33268C1.66663 2.89065 1.84222 2.46673 2.15478 2.15417C2.46734 1.84161 2.89127 1.66602 3.33329 1.66602H10.8333C11.2753 1.66602 11.6992 1.84161 12.0118 2.15417C12.3244 2.46673 12.5 2.89065 12.5 3.33268V4.16602M9.16663 7.49935H16.6666C17.5871 7.49935 18.3333 8.24554 18.3333 9.16602V16.666C18.3333 17.5865 17.5871 18.3327 16.6666 18.3327H9.16663C8.24615 18.3327 7.49996 17.5865 7.49996 16.666V9.16602C7.49996 8.24554 8.24615 7.49935 9.16663 7.49935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3385_10578\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"(getQuestions(i)?.controls?.length ?? 0) > 1\" (click)=\"onQuestionDelete(i, j)\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Delete question\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M2.5 4.99935H4.16667M4.16667 4.99935H17.5M4.16667 4.99935V16.666C4.16667 17.108 4.34226 17.532 4.65482 17.8445C4.96738 18.1571 5.39131 18.3327 5.83333 18.3327H14.1667C14.6087 18.3327 15.0326 18.1571 15.3452 17.8445C15.6577 17.532 15.8333 17.108 15.8333 16.666V4.99935H4.16667ZM6.66667 4.99935V3.33268C6.66667 2.89065 6.84226 2.46673 7.15482 2.15417C7.46738 1.84161 7.89131 1.66602 8.33333 1.66602H11.6667C12.1087 1.66602 12.5326 1.84161 12.8452 2.15417C13.1577 2.46673 13.3333 2.89065 13.3333 3.33268V4.99935M8.33333 9.16602V14.166M11.6667 9.16602V14.166\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <button (click)=\"addNewQuestion(i)\"\r\n *ngIf=\"j === (getQuestions(i)?.controls?.length ?? 0) - 1\"\r\n class=\"btn btn-outline w-100\">\r\n <svg class=\"mr-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>Add New Question</span>\r\n\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </form>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;background:#f9fafb;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", 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]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
362
362
|
}
|
|
363
363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateTaskComponent, decorators: [{
|
|
364
364
|
type: Component,
|
|
365
|
-
args: [{ selector: 'lib-create-task', template: "<div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"c-card d-flex justify-content-between\">\r\n <div>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\" placeholder=\"Enter Checklist Name\" class=\"plain-input checklist-name mb-5\">\r\n <input [formControl]=\"taskForm.controls.checklistDescription\" type=\"text\" placeholder=\"Enter Checklist Description\" class=\"plain-input checklist-desc\">\r\n </div>\r\n <div class=\"d-flex align-items-center\" >\r\n <button (click)=\"onSubmit('configure')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-primary me-5\" >Configure</button>\r\n <button (click)=\"onSubmit('save')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-outline\" >Save as Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <div (click)=\"selectQuestion(i, j, question)\"\r\n [ngClass]=\"question?.get('qno')?.value === selectedQuestion?.get('qno')?.value ? 'question-badge-selected' : ''\"\r\n class=\"question-badge\">\r\n {{question?.get('qname')?.value ?question?.get('qname')?.value : 'Question ' + question?.get('qno')?.value }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-9\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <div class=\"question-name\">\r\n Question {{j + 1}}\r\n </div>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"text\"\r\n [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"number\"\r\n [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div class=\"check-desc\">Trigger an action for each response\r\n to validate it</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div style=\"white-space: nowrap;\" class=\"check-desc\">\r\n Trigger an action for each\r\n response\r\n to validate it</div>\r\n </div>\r\n <div>\r\n <svg (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end mb-5\">\r\n <svg (click)=\"onQuestionClone(i, j, question)\" class=\"me-8 cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Duplicate\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3385_10578)\">\r\n <path\r\n d=\"M4.16663 12.4993H3.33329C2.89127 12.4993 2.46734 12.3238 2.15478 12.0112C1.84222 11.6986 1.66663 11.2747 1.66663 10.8327V3.33268C1.66663 2.89065 1.84222 2.46673 2.15478 2.15417C2.46734 1.84161 2.89127 1.66602 3.33329 1.66602H10.8333C11.2753 1.66602 11.6992 1.84161 12.0118 2.15417C12.3244 2.46673 12.5 2.89065 12.5 3.33268V4.16602M9.16663 7.49935H16.6666C17.5871 7.49935 18.3333 8.24554 18.3333 9.16602V16.666C18.3333 17.5865 17.5871 18.3327 16.6666 18.3327H9.16663C8.24615 18.3327 7.49996 17.5865 7.49996 16.666V9.16602C7.49996 8.24554 8.24615 7.49935 9.16663 7.49935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3385_10578\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"(getQuestions(i)?.controls?.length ?? 0) > 1\" (click)=\"onQuestionDelete(i, j)\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Delete question\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M2.5 4.99935H4.16667M4.16667 4.99935H17.5M4.16667 4.99935V16.666C4.16667 17.108 4.34226 17.532 4.65482 17.8445C4.96738 18.1571 5.39131 18.3327 5.83333 18.3327H14.1667C14.6087 18.3327 15.0326 18.1571 15.3452 17.8445C15.6577 17.532 15.8333 17.108 15.8333 16.666V4.99935H4.16667ZM6.66667 4.99935V3.33268C6.66667 2.89065 6.84226 2.46673 7.15482 2.15417C7.46738 1.84161 7.89131 1.66602 8.33333 1.66602H11.6667C12.1087 1.66602 12.5326 1.84161 12.8452 2.15417C13.1577 2.46673 13.3333 2.89065 13.3333 3.33268V4.99935M8.33333 9.16602V14.166M11.6667 9.16602V14.166\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <button (click)=\"addNewQuestion(i)\"\r\n *ngIf=\"j === (getQuestions(i)?.controls?.length ?? 0) - 1\"\r\n class=\"btn btn-outline w-100\">\r\n <svg class=\"mr-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>Add New Question</span>\r\n\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </form>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;background:#f9fafb;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}\n"] }]
|
|
365
|
+
args: [{ selector: 'lib-create-task', template: "<div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"c-card d-flex justify-content-between\">\r\n <div>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\" placeholder=\"Enter Checklist Name\" class=\"plain-input checklist-name mb-5\">\r\n <input [formControl]=\"taskForm.controls.checklistDescription\" type=\"text\" placeholder=\"Enter Checklist Description\" class=\"plain-input checklist-desc\">\r\n </div>\r\n <div class=\"d-flex align-items-center\" >\r\n <button (click)=\"onSubmit('configure')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-primary me-5\" >Configure</button>\r\n <button (click)=\"onSubmit('save')\" [disabled]=\"taskForm.invalid\" class=\"btn btn-outline\" >Save as Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <div (click)=\"selectQuestion(i, j, question)\"\r\n [ngClass]=\"question?.get('qno')?.value === selectedQuestion?.get('qno')?.value ? 'question-badge-selected' : ''\"\r\n class=\"question-badge\">\r\n {{question?.get('qname')?.value ?question?.get('qname')?.value : 'Question ' + question?.get('qno')?.value }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-9\">\r\n <div style=\"height: 80vh; overflow-y: auto;\" class=\"c-card\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <div class=\"question-name\">\r\n Question {{j + 1}}\r\n </div>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"text\"\r\n [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"number\"\r\n [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <!-- <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <!-- <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div class=\"check-desc\">Trigger an action for each response\r\n to validate it</div>\r\n </div>\r\n </div> -->\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"mb-5 ans-header\">Answer Options</div>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-6 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\" placeholder=\"Enter answer here\">\r\n <!-- <button\r\n (click)=\"answer.get('showLinked')?.setValue(!answer.get('showLinked')?.value); answer.get('showLinked')?.value ? answer.get('validation')?.setValue(false) : null;\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg _ngcontent-ng-c1491044170=\"\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n class=\"imgAdd ng-star-inserted\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n </button> -->\r\n <!-- <button\r\n (click)=\"answer.get('sopFlag')?.setValue(!answer.get('sopFlag')?.value)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n [attr.fill]=\"answer.get('sopFlag')?.value ? 'red' : 'none'\">\r\n <path\r\n d=\"M3.33203 12.5001C3.33203 12.5001 4.16536 11.6667 6.66536 11.6667C9.16536 11.6667 10.832 13.3334 13.332 13.3334C15.832 13.3334 16.6654 12.5001 16.6654 12.5001V2.50008C16.6654 2.50008 15.832 3.33341 13.332 3.33341C10.832 3.33341 9.16536 1.66675 6.66536 1.66675C4.16536 1.66675 3.33203 2.50008 3.33203 2.50008V12.5001ZM3.33203 12.5001V18.3334\"\r\n [attr.stroke]=\"answer.get('sopFlag')?.value ? 'red' : '#667085'\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n <!-- <div *ngIf=\"!answer.get('showLinked')?.value\" class=\"col-6\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div style=\"padding-left: unset;\" class=\"form-check\">\r\n <input formControlName=\"validation\"\r\n (change)=\"onValidateResponseChange($event, i, j, k)\"\r\n class=\"form-check-input c-checkbox\" type=\"checkbox\"\r\n [id]=\"'validate_response'+i+j+k\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'validate_response'+i+j+k\">\r\n Validate response\r\n </label>\r\n <div style=\"white-space: nowrap;\" class=\"check-desc\">\r\n Trigger an action for each\r\n response\r\n to validate it</div>\r\n </div>\r\n <div>\r\n <svg (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n\r\n </div> -->\r\n <div *ngIf=\"answer.get('showLinked')?.value && !answer.get('validation')?.value\"\r\n class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <span\r\n class=\"check-label d-flex align-items-center h-100\">Linked\r\n Question</span>\r\n </div>\r\n <div class=\"col-9\">\r\n <select formControlName=\"linkedQuestion\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let question of getQuestions(i).controls; let l = index\"\r\n [ngValue]=\"question.get('qno')?.value\">\r\n {{'Question ' + l + 1}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <ng-container\r\n *ngIf=\"answer.get('validation')?.value && !answer.get('showLinked')?.value\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between mb-5\">\r\n <span class=\"check-label\">If the response is this,\r\n then</span>\r\n <span>\r\n <select formControlName=\"validationType\"\r\n class=\"form-select \">\r\n <option\r\n *ngFor=\"let validation of validationTypes\"\r\n [value]=\"validation.value\">\r\n {{validation.label}}</option>\r\n </select>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\"\r\n class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"answer.get('validationType')?.value === 'Capture Image'\"\r\n class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j + k\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j + k\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j, k)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"answer.get('referenceImage')?.value\"\r\n [src]=\"answer.get('referenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'answer_validation_reference'+i+j+k\"\r\n (change)=\"uploadFile($event, i, j, k)\"\r\n style=\"display: none;\" type=\"file\"\r\n accept=\"image/png, image/jpeg\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <label [for]=\"'answer_validation_reference'+i+j+k\"\r\n class=\"add-reference-btn \">\r\n <svg *ngIf=\"!answer.get('referenceImage')?.value\"\r\n class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"answer.get('referenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span\r\n *ngIf=\"!answer.get('referenceImage')?.value\">Add\r\n Reference\r\n Image</span>\r\n <span\r\n *ngIf=\"answer.get('referenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n <div class=\"d-flex flex-column mb-5\">\r\n <textarea formControlName=\"qname\" placeholder=\"Enter question here\"\r\n class=\"form-control\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <div *ngIf=\"question.get('qname')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Question is required</div>\r\n </ng-container>\r\n </div>\r\n <div style=\"position: relative;\">\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n (click)=\"onDeleteReferenceImage(i, j)\"\r\n style=\"position: absolute; right: 10px; top: 10px; cursor: pointer;\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <img class=\"mb-5\" height=\"300px\"\r\n style=\"width: 100%; object-fit: contain; background: white; border-radius: 5px;\"\r\n *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n [src]=\"question.get('questionReferenceImage')?.value\">\r\n </div>\r\n\r\n\r\n <input [id]=\"'question_reference'+i+j\" (change)=\"uploadFile($event, i, j)\"\r\n style=\"display: none;\" type=\"file\" accept=\"image/png, image/jpeg\">\r\n <label [for]=\"'question_reference'+i+j\" class=\"add-reference-btn mb-5\">\r\n <svg *ngIf=\"!question.get('questionReferenceImage')?.value\" class=\"mr-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\" stroke=\"#009BF3\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"question.get('questionReferenceImage')?.value\"\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span *ngIf=\"!question.get('questionReferenceImage')?.value\">Add Reference\r\n Image</span>\r\n <span *ngIf=\"question.get('questionReferenceImage')?.value\">Reupload\r\n Image</span>\r\n\r\n </label>\r\n\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n <ng-container *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end mb-5\">\r\n <svg (click)=\"onQuestionClone(i, j, question)\" class=\"me-8 cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Duplicate\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3385_10578)\">\r\n <path\r\n d=\"M4.16663 12.4993H3.33329C2.89127 12.4993 2.46734 12.3238 2.15478 12.0112C1.84222 11.6986 1.66663 11.2747 1.66663 10.8327V3.33268C1.66663 2.89065 1.84222 2.46673 2.15478 2.15417C2.46734 1.84161 2.89127 1.66602 3.33329 1.66602H10.8333C11.2753 1.66602 11.6992 1.84161 12.0118 2.15417C12.3244 2.46673 12.5 2.89065 12.5 3.33268V4.16602M9.16663 7.49935H16.6666C17.5871 7.49935 18.3333 8.24554 18.3333 9.16602V16.666C18.3333 17.5865 17.5871 18.3327 16.6666 18.3327H9.16663C8.24615 18.3327 7.49996 17.5865 7.49996 16.666V9.16602C7.49996 8.24554 8.24615 7.49935 9.16663 7.49935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3385_10578\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"(getQuestions(i)?.controls?.length ?? 0) > 1\" (click)=\"onQuestionDelete(i, j)\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Delete question\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M2.5 4.99935H4.16667M4.16667 4.99935H17.5M4.16667 4.99935V16.666C4.16667 17.108 4.34226 17.532 4.65482 17.8445C4.96738 18.1571 5.39131 18.3327 5.83333 18.3327H14.1667C14.6087 18.3327 15.0326 18.1571 15.3452 17.8445C15.6577 17.532 15.8333 17.108 15.8333 16.666V4.99935H4.16667ZM6.66667 4.99935V3.33268C6.66667 2.89065 6.84226 2.46673 7.15482 2.15417C7.46738 1.84161 7.89131 1.66602 8.33333 1.66602H11.6667C12.1087 1.66602 12.5326 1.84161 12.8452 2.15417C13.1577 2.46673 13.3333 2.89065 13.3333 3.33268V4.99935M8.33333 9.16602V14.166M11.6667 9.16602V14.166\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <button (click)=\"addNewQuestion(i)\"\r\n *ngIf=\"j === (getQuestions(i)?.controls?.length ?? 0) - 1\"\r\n class=\"btn btn-outline w-100\">\r\n <svg class=\"mr-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>Add New Question</span>\r\n\r\n </button>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </form>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;background:#f9fafb;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}\n"] }]
|
|
366
366
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TraxService }, { type: i3.GlobalStateService }, { type: i4.ToastService }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i3.PageInfoService }] });
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtdGFzay9jcmVhdGUtdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS10YXNrL2NyZWF0ZS10YXNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBMEIsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVGLE9BQU8sRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsa0NBQWtDLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsd0NBQXdDLEVBQUUsc0NBQXNDLEVBQUUsK0JBQStCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFVdFosTUFBTSxPQUFPLG1CQUFtQjtJQXlCVjtJQUF5QjtJQUFrQztJQUFnQztJQUFtQztJQUE4QjtJQUF1QjtJQXZCdk0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekIsUUFBUSxDQUFxQjtJQUM3QixXQUFXLENBQU87SUFDbEIsVUFBVSxDQUFrQztJQUM1QyxnQkFBZ0IsQ0FBcUM7SUFDckQsV0FBVyxHQUEyQztRQUNwRCxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3JELEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQzFDLEVBQUUsS0FBSyxFQUFFLDBDQUEwQyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRTtRQUNwRixFQUFFLEtBQUssRUFBRSw0Q0FBNEMsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7UUFDeEYsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1FBQ3RFLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDcEQsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtRQUNwRCxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1FBQzNELEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDN0MsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDL0MsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FBQyxDQUFBO0lBQ25DLGVBQWUsR0FBK0M7UUFDNUQsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7UUFDbEQsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO1FBQzVELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO0tBQUMsQ0FBQTtJQUNuRCxhQUFhLENBQU87SUFFdEIsWUFBb0IsRUFBZSxFQUFVLFdBQXdCLEVBQVUsRUFBc0IsRUFBVSxZQUF5QixFQUFVLEtBQW9CLEVBQVUsTUFBYSxFQUFVLFFBQXdCO1FBQTNNLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUFVLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQzdOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFXLENBQUMsQ0FBQTtRQUM5RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUE7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2FBQ2pDO2lCQUFJO2dCQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtnQkFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBeUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO2dCQUM1RSxrRkFBa0Y7Z0JBQ2xGLHFEQUFxRDthQUN0RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgseUJBQXlCO1FBQ3pCLGtDQUFrQztRQUNsQyw0QkFBNEI7UUFDNUIsOEJBQThCO1FBQzlCLHdCQUF3QjtRQUN4Qiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLHlDQUF5QztRQUN6QyxRQUFRO1FBQ1IsTUFBTTtRQUNOLEtBQUs7SUFDVCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzQixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUM1RixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtTQUM1RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDNUIsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBeUIsRUFBRSxDQUFDO1NBQ3BELENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDdkIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDbkQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFO1NBQ2xFLENBQUMsQ0FBQTtRQUNGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNsRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFpQjtRQUM5QixNQUFNLGVBQWUsR0FBMkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDNUQsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUEwQixFQUFFLENBQUM7U0FDdEQsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUF1QyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWtCLEVBQUUsWUFBb0IsRUFBRSxXQUFvQjtRQUM1RSxNQUFNLGdCQUFnQixHQUE0QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM5RCxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkksS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsSUFBSSxhQUFhLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUM7WUFDakMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQ3BELHNCQUFzQixFQUFFLENBQUMsUUFBUSxFQUFFLHNCQUFzQixJQUFJLEtBQUssQ0FBQztZQUNuRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztZQUN2QyxzQkFBc0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsSUFBSSxFQUFFLENBQUM7WUFDaEUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUF3QixFQUFFLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLGFBQWEsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLGVBQWUsRUFBRTtZQUNwRixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLGVBQWUsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQzVIO1FBRUQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBdUM7aUJBQ3BFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUF3QyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtZQUMvRyxPQUFNO1NBQ1A7UUFFQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQXVDO2FBQ3BFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUF3QyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYyxFQUFFLFlBQW9CLEVBQUUsYUFBcUIsRUFBRSxXQUFvQjtRQUM3RixNQUFNLGNBQWMsR0FBMEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDMUQsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDOUIsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdMLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDO1lBQ25DLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksS0FBSyxDQUFDO1lBQ3pDLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1lBQzlDLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1lBQzlDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksS0FBSyxDQUFDO1lBQ3pDLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQzdDLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1NBQy9DLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQWUsQ0FBQSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFlLENBQUEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUUzSyxJQUFJLFVBQVUsS0FBSyxhQUFhLElBQUksVUFBVSxLQUFLLGtCQUFrQixJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksVUFBVSxLQUFLLGVBQWUsSUFBSSxVQUFVLEtBQUssTUFBTSxJQUFJLFVBQVUsS0FBSyxhQUFhLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUNuTixjQUFjLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQy9GO1FBRUQsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxzQkFBc0IsSUFBSSxVQUFVLEtBQUssd0JBQXdCLEVBQUU7WUFDL0csY0FBYyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5RyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDN0U7UUFFRCxJQUFJLFVBQVUsS0FBSyxhQUFhLEVBQUU7WUFDaEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssc0JBQXNCLElBQUksVUFBVSxLQUFLLHdCQUF3QixJQUFJLFVBQVUsS0FBSyxlQUFlLEVBQUU7WUFDakosY0FBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZUFBZSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDbEc7UUFFRCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUF1QztpQkFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQXdDO2lCQUN4RSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBc0MsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBQzFHLE9BQU07U0FDUDtRQUVFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBdUM7YUFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQXdDO2FBQ3hFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFzQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM3RixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQXVDLENBQUE7SUFDOUUsQ0FBQztJQUVELFlBQVksQ0FBQyxZQUFvQjtRQUMvQixPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUF1QyxDQUFBLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQXdDLENBQUE7SUFDekosQ0FBQztJQUVELFVBQVUsQ0FBQyxZQUFvQixFQUFFLGFBQXFCO1FBQ3BELE9BQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUF1QyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUF3QyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFzQyxDQUFBO0lBQzlOLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxFQUFFLFlBQW9CLEVBQUUsYUFBcUIsRUFBRSxXQUFvQjtRQUN0RixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksR0FBUyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBZ0IsQ0FBQyxDQUFBO1lBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNsRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDakIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDbkIsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFOzRCQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTt5QkFDM0c7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO3lCQUM5RztxQkFDRjtnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBQyxDQUFDLEdBQU8sRUFBQyxFQUFFO29CQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxDQUFBO2dCQUN2RixDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7SUFDRCxDQUFDO0lBRUQsZUFBZSxDQUFDLFlBQW9CLEVBQUUsYUFBcUIsRUFBRSxRQUFpQztRQUM1RixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW9CLEVBQUUsYUFBcUI7UUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUVwRSxDQUFDO0lBRUQsc0JBQXNCLENBQUMsWUFBb0IsRUFBRSxhQUFxQixFQUFFLFdBQW9CO1FBQ3RGLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ2pHO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDOUY7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBVSxFQUFFLFlBQW9CLEVBQUUsYUFBcUIsRUFBRSxXQUFtQjtRQUNuRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ2hHO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxZQUFvQixFQUFFLGFBQXFCLEVBQUUsV0FBbUI7UUFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFFbEUsQ0FBQztJQUVELFlBQVksQ0FBQyxZQUFvQixFQUFFLGFBQXFCLEVBQUUsSUFBZ0I7UUFDeEUsSUFBSSxJQUFJLEtBQUssc0JBQXNCLElBQUksSUFBSSxLQUFLLHdCQUF3QixFQUFFO1lBQ3hFLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQXdDLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1lBQ3pGLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLENBQUE7U0FFL0Q7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFlBQW9CO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQXlDLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDN0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVSxFQUFFLFlBQW9CLEVBQUUsYUFBcUI7UUFDdEUsSUFBSSxRQUFRLENBQUE7UUFDWixNQUFNLFVBQVUsR0FBYyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUNoRCxRQUFRLFVBQVUsRUFBRTtZQUNsQixLQUFLLGFBQWE7Z0JBQUUsUUFBUSxHQUFHLDZCQUE2QixDQUFBO2dCQUMxRCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUFFLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQTtnQkFDakQsTUFBTTtZQUNSLEtBQUssc0JBQXNCO2dCQUFFLFFBQVEsR0FBRyxzQ0FBc0MsQ0FBQTtnQkFDNUUsTUFBTTtZQUNSLEtBQUssd0JBQXdCO2dCQUFFLFFBQVEsR0FBRyx3Q0FBd0MsQ0FBQTtnQkFDaEYsTUFBTTtZQUNSLEtBQUssa0JBQWtCO2dCQUFFLFFBQVEsR0FBRyxrQ0FBa0MsQ0FBQTtnQkFDcEUsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFBRSxRQUFRLEdBQUcsdUJBQXVCLENBQUE7Z0JBQzlDLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQUUsUUFBUSxHQUFHLHVCQUF1QixDQUFBO2dCQUM5QyxNQUFNO1lBQ1IsS0FBSyxlQUFlO2dCQUFFLFFBQVEsR0FBRywrQkFBK0IsQ0FBQTtnQkFDOUQsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFBRSxRQUFRLEdBQUcsc0JBQXNCLENBQUE7Z0JBQzVDLE1BQU07WUFDUixLQUFLLGFBQWE7Z0JBQUUsUUFBUSxHQUFHLDZCQUE2QixDQUFBO2dCQUMxRCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUFFLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQTtnQkFDNUMsTUFBTTtZQUNSO2dCQUFTLFFBQVEsR0FBRyw2QkFBNkIsQ0FBQTtnQkFDL0MsTUFBTTtTQUNUO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUE7UUFFaEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFvQixFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUV2RSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXRGLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBaUIsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUN2RSxvQ0FBb0M7Z0JBQ3BDLDhHQUE4RztnQkFDOUcsaUdBQWlHO2dCQUNqRyxJQUFJO1lBQ04sQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsWUFBb0IsRUFBRSxhQUFxQixFQUFFLFFBQWlDO1FBQzNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUE7UUFDaEMsTUFBTSxTQUFTLEdBQUcsWUFBWSxZQUFZLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDN0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2hFO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixTQUFTLFlBQVksQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUEyQjtRQUNsQyxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU07WUFDakMsVUFBVSxFQUFFLE1BQU07WUFDbEIsR0FBRyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLGFBQWEsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3pELENBQUE7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RSxJQUFJLEVBQUMsQ0FBQyxHQUFPLEVBQUMsRUFBRTtnQkFDZCxJQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFDO29CQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUNyRCxJQUFHLE1BQU0sS0FBSyxXQUFXLEVBQUM7d0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQTtxQkFDckc7b0JBQ0QsSUFBRyxNQUFNLEtBQUssTUFBTSxFQUFDO3dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtxQkFDM0M7aUJBQ0Y7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFDLENBQUMsR0FBTyxFQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHNCQUFzQixDQUFDLENBQUE7WUFDdkYsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBUztRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BHLElBQUksRUFBQyxDQUFDLEdBQU8sRUFBQyxFQUFFO2dCQUNkLElBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUM7b0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtvQkFDNUMsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBQzt3QkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxDQUFBO3FCQUNyRztvQkFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7aUJBQ2xCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBQyxDQUFDLEdBQU8sRUFBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxDQUFBO1lBQ3ZGLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO3dHQXZXVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix1RENoQmhDLHd2eUhBb3ZDTTs7NEZEcHVDTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBbnN3ZXIsIEFuc3dlckZvcm0sIEFuc3dlclR5cGUsIEhlYWRlckZpbHRlciwgSVRhc2ssIFF1ZXN0aW9uLCBRdWVzdGlvbkZvcm0sIFNlY3Rpb24sIFNlY3Rpb25Gb3JtLCBUYXNrRm9ybSwgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuL2NyZWF0ZS10YXNrLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBkYXRlX3F1ZXN0aW9uX3RlbXBsYXRlLCBkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZSwgZGVzY3JpcHRpdmVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZSwgaW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGUsIGxpbmVhcnNjYWxlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlbXVsdGlwbGVfcXVlc3Rpb25fdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlc2luZ2xlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZUltYWdlX3F1ZXN0aW9uX3RlbXBsYXRlLCB0aW1lX3F1ZXN0aW9uX3RlbXBsYXRlLCB2aWRlb19xdWVzdGlvbl90ZW1wbGF0ZSwgeWVzb3Jub19xdWVzdGlvbl90ZW1wbGF0ZSB9IGZyb20gJy4vY3JlYXRlLXRhc2suZGF0YSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jcmVhdGUtdGFzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS10YXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY3JlYXRlLXRhc2suY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVUYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgdGFza0Zvcm06IEZvcm1Hcm91cDxUYXNrRm9ybT5cclxuICB0YXNrRGV0YWlsczogSVRhc2sgXHJcbiAgaGVhZGVyRGF0YTogSGVhZGVyRmlsdGVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICBzZWxlY3RlZFF1ZXN0aW9uOiBGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPiB8IHVuZGVmaW5lZFxyXG4gIGFuc3dlclR5cGVzOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBBbnN3ZXJUeXBlIH1bXSA9IFtcclxuICAgIHsgbGFiZWw6ICdEZXNjcmlwdGl2ZSBBbnN3ZXInLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0EvQiBRdWVzdGlvbicsIHZhbHVlOiAneWVzL25vJyB9LFxyXG4gICAgeyBsYWJlbDogJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtIFNpbmdsZSBBbnN3ZXInLCB2YWx1ZTogJ211bHRpcGxlY2hvaWNlc2luZ2xlJyB9LFxyXG4gICAgeyBsYWJlbDogJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtIE11bHRpcGxlIEFuc3dlcicsIHZhbHVlOiAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlIHdpdGggRGVzY3JpcHRpb24nLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlSW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZSBhcyBhbnN3ZXInLCB2YWx1ZTogJ2ltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgdmlkZW8gYXMgYW5zd2VyJywgdmFsdWU6ICd2aWRlbycgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIE11bHRpcGxlIEltYWdlJywgdmFsdWU6ICdtdWx0aXBsZUltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0RhdGUgLSBERC9NTS9ZWVlZJywgdmFsdWU6ICdkYXRlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0xpbmVhciBTY2FsZScsIHZhbHVlOiAnbGluZWFyc2NhbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnVGltZScsIHZhbHVlOiAndGltZScgfV1cclxuICB2YWxpZGF0aW9uVHlwZXM6IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IFZhbGlkYXRpb25UeXBlIH1bXSA9IFtcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlJywgdmFsdWU6ICdDYXB0dXJlIEltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0Rlc2NyaXB0aXZlIEFuc3dlcicsIHZhbHVlOiAnRGVzY3JpcHRpdmUgQW5zd2VyJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgVmlkZW8nLCB2YWx1ZTogJ0NhcHR1cmUgVmlkZW8nIH1dXHJcbiAgICBjdXJyZW50VGFza0lkOnN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSwgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6VG9hc3RTZXJ2aWNlLCBwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsIHByaXZhdGUgcGFnZUluZm86UGFnZUluZm9TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmhlYWRlckRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIGFzIHN0cmluZykgXHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKClcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFza0lkID0gcGFyYW1zLmlkXHJcbiAgICAgICAgICB0aGlzLmdldFRhc2sodGhpcy5jdXJyZW50VGFza0lkKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5hZGRTZWN0aW9uRm9ybSgpXHJcbiAgICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uRm9ybShkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZSBhcyBRdWVzdGlvbiwgMClcclxuICAgICAgICAgIHRoaXMuYWRkQW5zd2VyRm9ybShkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZS5hbnN3ZXJzWzBdIGFzIEFuc3dlciwgMCwgMClcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QW5zd2VycygwLDApLmF0KDApLmdldCgnYW5zd2VyJyk/LnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25zKDApLmF0KDApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAvLyAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCkpXHJcbiAgICAgIC8vIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgLy8gICAgIHRoaXMuaGVhZGVyRGF0YSA9IGRhdGE7XHJcbiAgICAgIC8vICAgICBpZih0aGlzLmN1cnJlbnRUYXNrSWQpe1xyXG4gICAgICAvLyAgICAgICB0aGlzLmdldFRhc2sodGhpcy5jdXJyZW50VGFza0lkKVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiVGFza3NcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIHRoaXMudGFza0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY2hlY2tsaXN0TmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogWycnXSxcclxuICAgICAgc2VjdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4oW10pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRm9ybSgpe1xyXG4gICAgdGhpcy50YXNrRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgY2hlY2tsaXN0TmFtZTogdGhpcy50YXNrRGV0YWlscy5jaGVja0xpc3ROYW1lID8/ICcnLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy50YXNrRGV0YWlscy5jaGVja0xpc3REZXNjcmlwdGlvbiA/PyAnJyxcclxuICAgIH0pXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFza0RldGFpbHM/LnNlY3Rpb25zPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmFkZFNlY3Rpb25Gb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0pO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9ucz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uRm9ybSh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldPy5xdWVzdGlvbnNbal0sIGkpO1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy50YXNrRGV0YWlscy5zZWN0aW9uc1tpXT8ucXVlc3Rpb25zW2pdPy5hbnN3ZXJzPy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgdGhpcy5hZGRBbnN3ZXJGb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9uc1tqXT8uYW5zd2Vyc1trXSwgaSwgaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9ucygwKS5hdCgwKVxyXG4gIH1cclxuXHJcbiAgYWRkU2VjdGlvbkZvcm0oc2VjdGlvbj86IFNlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlY3Rpb25Gb3JtRGF0YTogRm9ybUdyb3VwPFNlY3Rpb25Gb3JtPiA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZDogW3NlY3Rpb24/LmlkID8/ICcnXSxcclxuICAgICAgbmFtZTogW3NlY3Rpb24/Lm5hbWUgPz8gJyddLFxyXG4gICAgICBxdWVzdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KFtdKVxyXG4gICAgfSk7XHJcbiAgICAodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KS5wdXNoKHNlY3Rpb25Gb3JtRGF0YSlcclxuICB9XHJcblxyXG4gIGFkZFF1ZXN0aW9uRm9ybShxdWVzdGlvbjogUXVlc3Rpb24sIHNlY3Rpb25JbmRleDogbnVtYmVyLCBpbnNlcnRJbmRleD86IG51bWJlcikge1xyXG4gICAgY29uc3QgcXVlc3Rpb25Gb3JtRGF0YTogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcW5vOiBbcXVlc3Rpb24/LnFubyA/PyAodGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KT8ubGVuZ3RoID8gdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5sZW5ndGgrMSA6IDEpLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBxbmFtZTogW3F1ZXN0aW9uPy5xbmFtZSA/PyAnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYW5zd2VyVHlwZTogW3F1ZXN0aW9uPy5hbnN3ZXJUeXBlID8/ICdkZXNjcmlwdGl2ZScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJ1bkFJOiBbcXVlc3Rpb24/LnJ1bkFJID8/IGZhbHNlXSxcclxuICAgICAgcnVuQUlEZXNjcmlwdGlvbjogW3F1ZXN0aW9uPy5ydW5BSURlc2NyaXB0aW9uID8/ICcnXSxcclxuICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogW3F1ZXN0aW9uPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID8/IGZhbHNlXSxcclxuICAgICAgbGlua1R5cGU6IFtxdWVzdGlvbj8ubGlua1R5cGUgPz8gZmFsc2VdLFxyXG4gICAgICBxdWVzdGlvblJlZmVyZW5jZUltYWdlOiBbcXVlc3Rpb24/LnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgPz8gJyddLFxyXG4gICAgICBhbnN3ZXJzOiB0aGlzLmZiLmFycmF5PEZvcm1Hcm91cDxBbnN3ZXJGb3JtPj4oW10pXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocXVlc3Rpb24uYW5zd2VyVHlwZSA9PT0gJ2Rlc2NyaXB0aXZlJyB8fCBxdWVzdGlvbi5hbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVJbWFnZScpIHtcclxuICAgICAgcXVlc3Rpb25Gb3JtRGF0YS5hZGRDb250cm9sKCdkZXNjcmlwdGl2ZXR5cGUnLCBuZXcgRm9ybUNvbnRyb2wocXVlc3Rpb24/LmRlc2NyaXB0aXZldHlwZSA/PyAndGV4dCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluc2VydEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAgIC5hdChzZWN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PikuaW5zZXJ0KGluc2VydEluZGV4LCBxdWVzdGlvbkZvcm1EYXRhKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAoKHRoaXMudGFza0Zvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PilcclxuICAgIC5hdChzZWN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PikucHVzaChxdWVzdGlvbkZvcm1EYXRhKVxyXG4gIH1cclxuXHJcbiAgYWRkQW5zd2VyRm9ybShhbnN3ZXI6IEFuc3dlciwgc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgaW5zZXJ0SW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFuc3dlckZvcm1EYXRhOiBGb3JtR3JvdXA8QW5zd2VyRm9ybT4gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgYW5zd2VyOiBbYW5zd2VyPy5hbnN3ZXIgPz8gJyddLFxyXG4gICAgICBhbnN3ZXJvcHRpb25OdW1iZXI6IFthbnN3ZXI/LmFuc3dlcm9wdGlvbk51bWJlciA/PyAodGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCk/Lmxlbmd0aCA/IHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpLmxlbmd0aCsxIDogMSksIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHNvcEZsYWc6IFthbnN3ZXI/LnNvcEZsYWcgPz8gZmFsc2VdLFxyXG4gICAgICB2YWxpZGF0aW9uOiBbYW5zd2VyPy52YWxpZGF0aW9uID8/IGZhbHNlXSxcclxuICAgICAgdmFsaWRhdGlvblR5cGU6IFthbnN3ZXI/LnZhbGlkYXRpb25UeXBlID8/ICcnXSxcclxuICAgICAgcmVmZXJlbmNlSW1hZ2U6IFthbnN3ZXI/LnJlZmVyZW5jZUltYWdlID8/ICcnXSxcclxuICAgICAgc2hvd0xpbmtlZDogW2Fuc3dlcj8uc2hvd0xpbmtlZCA/PyBmYWxzZV0sXHJcbiAgICAgIGxpbmtlZFF1ZXN0aW9uOiBbYW5zd2VyPy5saW5rZWRRdWVzdGlvbiA/PyAwXSxcclxuICAgICAgbmVzdGVkUXVlc3Rpb246IFthbnN3ZXI/Lm5lc3RlZFF1ZXN0aW9uID8/IFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFuc3dlclR5cGU6IEFuc3dlclR5cGUgPSAoKHRoaXMudGFza0Zvcm0/LmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHNlY3Rpb25JbmRleCk/LmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxdWVzdGlvbkluZGV4KT8uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlO1xyXG5cclxuICAgIGlmIChhbnN3ZXJUeXBlID09PSAnZGVzY3JpcHRpdmUnIHx8IGFuc3dlclR5cGUgPT09ICdkZXNjcmlwdGl2ZUltYWdlJyB8fCBhbnN3ZXJUeXBlID09PSAnaW1hZ2UnIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZUltYWdlJyB8fCBhbnN3ZXJUeXBlID09PSAnZGF0ZScgfHwgYW5zd2VyVHlwZSA9PT0gJ2xpbmVhcnNjYWxlJyB8fCBhbnN3ZXJUeXBlID09PSAndGltZScpIHtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgndmFsaWRhdGlvbkFuc3dlcicsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnZhbGlkYXRpb25BbnN3ZXIgPz8gJycpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbnN3ZXJUeXBlID09PSAneWVzL25vJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZWNob2ljZW11bHRpcGxlJykge1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSA/PyBmYWxzZSkpO1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdydW5BSScsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnJ1bkFJID8/IGZhbHNlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuc3dlclR5cGUgPT09ICdsaW5lYXJzY2FsZScpIHtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgncmFuZ2VTdGFydCcsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnJhbmdlU3RhcnQgPz8gMCkpO1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdyYW5nZUVuZCcsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnJhbmdlRW5kID8/IDApKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYW5zd2VyVHlwZSA9PT0gJ3llcy9ubycgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlc2luZ2xlJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlSW1hZ2UnKSB7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ2Rlc2NyaXB0aXZldHlwZScsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LmRlc2NyaXB0aXZldHlwZSA/PyAndGV4dCcpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5zZXJ0SW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAoKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAgIC5hdChzZWN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PilcclxuICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8QW5zd2VyRm9ybT4+KS5pbnNlcnQoaW5zZXJ0SW5kZXgsIGFuc3dlckZvcm1EYXRhKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAoKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pXHJcbiAgICAuYXQocXVlc3Rpb25JbmRleCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxBbnN3ZXJGb3JtPj4pLnB1c2goYW5zd2VyRm9ybURhdGEpXHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0U2VjdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMudGFza0Zvcm0/LmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAoKHRoaXMudGFza0Zvcm0/LmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pLmF0KHNlY3Rpb25JbmRleCk/LmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PilcclxuICB9XHJcblxyXG4gIGdldEFuc3dlcnMoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICgoKHRoaXMudGFza0Zvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PikuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8QW5zd2VyRm9ybT4+KVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZShldmVudDogYW55LCBzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBhbnN3ZXJJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5maWxlcyAhPSB1bmRlZmluZWQgJiYgZXZlbnQudGFyZ2V0LmZpbGVzLmxlbmd0aCkge1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdjbGllbnRJZCcsIHRoaXMuaGVhZGVyRGF0YT8uY2xpZW50IGFzIHN0cmluZylcclxuICAgIHRoaXMudHJheFNlcnZpY2UudGFza0ltYWdldXBsb2FkKGZvcm1EYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmltZ1VybCkge1xyXG4gICAgICAgICAgaWYgKGFuc3dlckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUocmVzLmRhdGEuaW1nVXJsKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoYW5zd2VySW5kZXgpLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUocmVzLmRhdGEuaW1nVXJsKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICB9XHJcblxyXG4gIG9uUXVlc3Rpb25DbG9uZShzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbjogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4pIHtcclxuICAgIHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCkuaW5zZXJ0KHF1ZXN0aW9uSW5kZXggKyAxLCBxdWVzdGlvbilcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnUXVlc3Rpb24gY2xvbmVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgfVxyXG5cclxuICBvblF1ZXN0aW9uRGVsZXRlKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCkucmVtb3ZlQXQocXVlc3Rpb25JbmRleClcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnUXVlc3Rpb24gZGVsZXRlZCBzdWNjZXNzZnVsbHknKVxyXG5cclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUmVmZXJlbmNlSW1hZ2Uoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmIChhbnN3ZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpLmF0KGFuc3dlckluZGV4KS5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnNldFZhbHVlKCcnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUoJycpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblZhbGlkYXRlUmVzcG9uc2VDaGFuZ2UoZXZlbnQ6IGFueSwgc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpLmF0KGFuc3dlckluZGV4KS5nZXQoJ3Nob3dMaW5rZWQnKT8uc2V0VmFsdWUoZmFsc2UpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFuc3dlckRlbGV0ZShzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBhbnN3ZXJJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5yZW1vdmVBdChhbnN3ZXJJbmRleClcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnQW5zd2VyIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5JylcclxuXHJcbiAgfVxyXG5cclxuICBhZGROZXdBbnN3ZXIoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgdHlwZTogQW5zd2VyVHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgdHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnKSB7XHJcbiAgICAgIHRoaXMuYWRkQW5zd2VyRm9ybShtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUgYXMgQW5zd2VyLCBzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpXHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnQW5zd2VyIGFkZGVkIHN1Y2Nlc3NmdWxseScpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3UXVlc3Rpb24oc2VjdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWRkUXVlc3Rpb25Gb3JtKGRlc2NyaXB0aXZlX3F1ZXN0aW9uX3RlbXBsYXRlIGFzIFF1ZXN0aW9uLCBzZWN0aW9uSW5kZXgpXHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoJ1F1ZXN0aW9uIGFkZGVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgfVxyXG5cclxuICBvblF1ZXN0aW9uQ2hhbmdlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBxdWVzdGlvblxyXG4gICAgY29uc3QgYW5zd2VyVHlwZTpBbnN3ZXJUeXBlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICBzd2l0Y2ggKGFuc3dlclR5cGUpIHtcclxuICAgICAgY2FzZSAnZGVzY3JpcHRpdmUnOiBxdWVzdGlvbiA9IGRlc2NyaXB0aXZlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3llcy9ubyc6IHF1ZXN0aW9uID0geWVzb3Jub19xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtdWx0aXBsZWNob2ljZXNpbmdsZSc6IHF1ZXN0aW9uID0gbXVsdGlwbGVjaG9pY2VzaW5nbGVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSc6IHF1ZXN0aW9uID0gbXVsdGlwbGVjaG9pY2VtdWx0aXBsZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkZXNjcmlwdGl2ZUltYWdlJzogcXVlc3Rpb24gPSBkZXNjcmlwdGl2ZUltYWdlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ltYWdlJzogcXVlc3Rpb24gPSBpbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWRlbyc6IHF1ZXN0aW9uID0gdmlkZW9fcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGVJbWFnZSc6IHF1ZXN0aW9uID0gbXVsdGlwbGVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlJzogcXVlc3Rpb24gPSBkYXRlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xpbmVhcnNjYWxlJzogcXVlc3Rpb24gPSBsaW5lYXJzY2FsZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0aW1lJzogcXVlc3Rpb24gPSB0aW1lX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHF1ZXN0aW9uID0gZGVzY3JpcHRpdmVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVzdGlvbk5hbWUgPSB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8udmFsdWUgfHwgJydcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLnJlbW92ZUF0KHF1ZXN0aW9uSW5kZXgpXHJcblxyXG4gICAgdGhpcy5hZGRRdWVzdGlvbkZvcm0ocXVlc3Rpb24gYXMgUXVlc3Rpb24sIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleClcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8uc2V0VmFsdWUocXVlc3Rpb25OYW1lKVxyXG5cclxuICAgIGlmIChxdWVzdGlvbj8uYW5zd2Vycy5sZW5ndGgpIHtcclxuICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChlbGVtZW50LCBpZHgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZEFuc3dlckZvcm0oZWxlbWVudCBhcyBBbnN3ZXIsIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCwgaWR4KVxyXG4gICAgICAgIC8vIGlmKGFuc3dlclR5cGUgPT09ICdkZXNjcmlwdGl2ZScpe1xyXG4gICAgICAgIC8vICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoaWR4KS5nZXQoJ2Fuc3dlcicpPy5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgLy8gICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5hdChpZHgpLmdldCgnYW5zd2VyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RRdWVzdGlvbihzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbjogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbiA9IHF1ZXN0aW9uXHJcbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtzZWN0aW9uSW5kZXh9JHtxdWVzdGlvbkluZGV4fWA7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBFbGVtZW50IHdpdGggSUQgJHtlbGVtZW50SWR9IG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoYWN0aW9uOidzYXZlJyB8ICdjb25maWd1cmUnKXtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIC4uLnRoaXMudGFza0Zvcm0udmFsdWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgICAgc3VibWl0VHlwZTogYWN0aW9uLFxyXG4gICAgICAuLi4odGhpcz8uY3VycmVudFRhc2tJZCkgPyB7X2lkOnRoaXMuY3VycmVudFRhc2tJZH0gOiB7fVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5jcmVhdGVUYXNrKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8uZGF0YT8ubWVzc2FnZSlcclxuICAgICAgICAgIGlmKGFjdGlvbiA9PT0gJ2NvbmZpZ3VyZScpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ21hbmFnZS90cmF4L3Rhc2stY29uZmlndXJlJ10sIHsgcXVlcnlQYXJhbXM6IHt0YXNrSWQ6cmVzLmRhdGEuY2hlY2tsaXN0SWR9IH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihhY3Rpb24gPT09ICdzYXZlJyl7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnbWFuYWdlL3RyYXgvdGFzayddKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0VGFzayhpZDpzdHJpbmcpe1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRUYXNrY29uZmlnKGlkLCB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgICAgICAgdGhpcy50YXNrRGV0YWlscyA9IHJlcy5kYXRhLmNoZWNrTGlzdERldGFpbHNcclxuICAgICAgICAgIGlmKHRoaXMudGFza0RldGFpbHMucHVibGlzaCl7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnbWFuYWdlL3RyYXgvdGFzay1jb25maWd1cmUnXSwgeyBxdWVyeVBhcmFtczoge3Rhc2tJZDp0aGlzLnRhc2tEZXRhaWxzLl9pZH0gfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpXHJcbiAgICAgICAgfSBcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjLWNhcmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cInRhc2tGb3JtLmNvbnRyb2xzLmNoZWNrbGlzdE5hbWVcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ2hlY2tsaXN0IE5hbWVcIiBjbGFzcz1cInBsYWluLWlucHV0IGNoZWNrbGlzdC1uYW1lIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwidGFza0Zvcm0uY29udHJvbHMuY2hlY2tsaXN0RGVzY3JpcHRpb25cIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ2hlY2tsaXN0IERlc2NyaXB0aW9uXCIgY2xhc3M9XCJwbGFpbi1pbnB1dCBjaGVja2xpc3QtZGVzY1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblN1Ym1pdCgnY29uZmlndXJlJylcIiBbZGlzYWJsZWRdPVwidGFza0Zvcm0uaW52YWxpZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTVcIiA+Q29uZmlndXJlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblN1Ym1pdCgnc2F2ZScpXCIgW2Rpc2FibGVkXT1cInRhc2tGb3JtLmludmFsaWRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiID5TYXZlIGFzIERyYWZ0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiA4MHZoOyBvdmVyZmxvdy15OiBhdXRvO1wiIGNsYXNzPVwiYy1jYXJkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgZ2V0U2VjdGlvbnM/LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBnZXRRdWVzdGlvbnMoaSk/LmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UXVlc3Rpb24oaSwgaiwgcXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb24/LmdldCgncW5vJyk/LnZhbHVlID09PSBzZWxlY3RlZFF1ZXN0aW9uPy5nZXQoJ3FubycpPy52YWx1ZSA/ICdxdWVzdGlvbi1iYWRnZS1zZWxlY3RlZCcgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicXVlc3Rpb24tYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbj8uZ2V0KCdxbmFtZScpPy52YWx1ZSA/cXVlc3Rpb24/LmdldCgncW5hbWUnKT8udmFsdWUgOiAnUXVlc3Rpb24gJyArIHF1ZXN0aW9uPy5nZXQoJ3FubycpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogODB2aDsgb3ZlcmZsb3cteTogYXV0bztcIiBjbGFzcz1cImMtY2FyZFwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInRhc2tGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGdldFNlY3Rpb25zPy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJxdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidxdWVzdGlvbi0nICsgaSArIGpcIiBjbGFzcz1cInF1ZXN0aW9uLWNvbnRhaW5lciBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb24tbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb24ge3tqICsgMX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ2Rlc2NyaXB0aXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGZvcm1Db250cm9sTmFtZT1cInFuYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvbiBoZXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LmludmFsaWQgJiYgcXVlc3Rpb24uZ2V0KCdxbmFtZScpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPiogUXVlc3Rpb24gaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNS4wMDEzSDQuMTY2NjdNNC4xNjY2NyA1LjAwMTNIMTcuNU00LjE2NjY3IDUuMDAxM1YxNi42NjhDNC4xNjY2NyAxNy4xMSA0LjM0MjI2IDE3LjUzMzkgNC42NTQ4MiAxNy44NDY1QzQuOTY3MzggMTguMTU5IDUuMzkxMzEgMTguMzM0NiA1LjgzMzMzIDE4LjMzNDZIMTQuMTY2N0MxNC42MDg3IDE4LjMzNDYgMTUuMDMyNiAxOC4xNTkgMTUuMzQ1MiAxNy44NDY1QzE1LjY1NzcgMTcuNTMzOSAxNS44MzMzIDE3LjExIDE1LjgzMzMgMTYuNjY4VjUuMDAxM0g0LjE2NjY3Wk02LjY2NjY3IDUuMDAxM1YzLjMzNDY0QzYuNjY2NjcgMi44OTI2MSA2Ljg0MjI2IDIuNDY4NjggNy4xNTQ4MiAyLjE1NjEyQzcuNDY3MzggMS44NDM1NiA3Ljg5MTMxIDEuNjY3OTcgOC4zMzMzMyAxLjY2Nzk3SDExLjY2NjdDMTIuMTA4NyAxLjY2Nzk3IDEyLjUzMjYgMS44NDM1NiAxMi44NDUyIDIuMTU2MTJDMTMuMTU3NyAyLjQ2ODY4IDEzLjMzMzMgMi44OTI2MSAxMy4zMzMzIDMuMzM0NjRWNS4wMDEzTTguMzMzMzMgOS4xNjc5N1YxNC4xNjhNMTEuNjY2NyA5LjE2Nzk3VjE0LjE2OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIiBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCIgc3Ryb2tlPVwiIzAwOUJGM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZldHlwZV90ZXh0JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZldHlwZV90ZXh0JyArIGkgKyBqXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZGVzY3JpcHRpdmV0eXBlX251bWJlcicgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidkZXNjcmlwdGl2ZXR5cGVfbnVtYmVyJyArIGkgKyBqXCI+TnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAneWVzL25vJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGZvcm1Db250cm9sTmFtZT1cInFuYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvbiBoZXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LmludmFsaWQgJiYgcXVlc3Rpb24uZ2V0KCdxbmFtZScpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPiogUXVlc3Rpb24gaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNS4wMDEzSDQuMTY2NjdNNC4xNjY2NyA1LjAwMTNIMTcuNU00LjE2NjY3IDUuMDAxM1YxNi42NjhDNC4xNjY2NyAxNy4xMSA0LjM0MjI2IDE3LjUzMzkgNC42NTQ4MiAxNy44NDY1QzQuOTY3MzggMTguMTU5IDUuMzkxMzEgMTguMzM0NiA1LjgzMzMzIDE4LjMzNDZIMTQuMTY2N0MxNC42MDg3IDE4LjMzNDYgMTUuMDMyNiAxOC4xNTkgMTUuMzQ1MiAxNy44NDY1QzE1LjY1NzcgMTcuNTMzOSAxNS44MzMzIDE3LjExIDE1LjgzMzMgMTYuNjY4VjUuMDAxM0g0LjE2NjY3Wk02LjY2NjY3IDUuMDAxM1YzLjMzNDY0QzYuNjY2NjcgMi44OTI2MSA2Ljg0MjI2IDIuNDY4NjggNy4xNTQ4MiAyLjE1NjEyQzcuNDY3MzggMS44NDM1NiA3Ljg5MTMxIDEuNjY3OTcgOC4zMzMzMyAxLjY2Nzk3SDExLjY2NjdDMTIuMTA4NyAxLjY2Nzk3IDEyLjUzMjYgMS44NDM1NiAxMi44NDUyIDIuMTU2MTJDMTMuMTU3NyAyLjQ2ODY4IDEzLjMzMzMgMi44OTI2MSAxMy4zMzMzIDMuMzM0NjRWNS4wMDEzTTguMzMzMzMgOS4xNjc5N1YxNC4xNjhNMTEuNjY2NyA5LjE2Nzk3VjE0LjE2OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIiBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCIgc3Ryb2tlPVwiIzAwOUJGM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNSBhbnMtaGVhZGVyXCI+QW5zd2VyIE9wdGlvbnM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJhbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYW5zd2VyIGhlcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy5zZXRWYWx1ZSghYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZSk7IGFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8udmFsdWUgPyBhbnN3ZXIuZ2V0KCd2YWxpZGF0aW9uJyk/LnNldFZhbHVlKGZhbHNlKSA6IG51bGw7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBfbmdjb250ZW50LW5nLWMxNDkxMDQ0MTcwPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1nQWRkIG5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBfbmdjb250ZW50LW5nLWMxNDkxMDQ0MTcwPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05Ljk5OTk5IDQuMTY2MDJWMTUuODMyN000LjE2NjY2IDkuOTk5MzVIMTUuODMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFuc3dlci5nZXQoJ3NvcEZsYWcnKT8uc2V0VmFsdWUoIWFuc3dlci5nZXQoJ3NvcEZsYWcnKT8udmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImFuc3dlci5nZXQoJ3NvcEZsYWcnKT8udmFsdWUgPyAncmVkJyA6ICdub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy4zMzIwMyAxMi41MDAxQzMuMzMyMDMgMTIuNTAwMSA0LjE2NTM2IDExLjY2NjcgNi42NjUzNiAxMS42NjY3QzkuMTY1MzYgMTEuNjY2NyAxMC44MzIgMTMuMzMzNCAxMy4zMzIgMTMuMzMzNEMxNS44MzIgMTMuMzMzNCAxNi42NjU0IDEyLjUwMDEgMTYuNjY1NCAxMi41MDAxVjIuNTAwMDhDMTYuNjY1NCAyLjUwMDA4IDE1LjgzMiAzLjMzMzQxIDEzLjMzMiAzLjMzMzQxQzEwLjgzMiAzLjMzMzQxIDkuMTY1MzYgMS42NjY3NSA2LjY2NTM2IDEuNjY2NzVDNC4xNjUzNiAxLjY2Njc1IDMuMzMyMDMgMi41MDAwOCAzLjMzMjAzIDIuNTAwMDhWMTIuNTAwMVpNMy4zMzIwMyAxMi41MDAxVjE4LjMzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwiYW5zd2VyLmdldCgnc29wRmxhZycpPy52YWx1ZSA/ICdyZWQnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5pbnZhbGlkICYmIGFuc3dlci5nZXQoJ2Fuc3dlcicpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBBbnN3ZXIgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhbnN3ZXIuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlXCIgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IHVuc2V0O1wiIGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsaWRhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVmFsaWRhdGVSZXNwb25zZUNoYW5nZSgkZXZlbnQsIGksIGosIGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjLWNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIndmFsaWRhdGVfcmVzcG9uc2UnK2kraitrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCIndmFsaWRhdGVfcmVzcG9uc2UnK2kraitrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZSByZXNwb25zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stZGVzY1wiPlRyaWdnZXIgYW4gYWN0aW9uIGZvciBlYWNoIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB2YWxpZGF0ZSBpdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTEwMFwiPkxpbmtlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxpbmtlZFF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKS5jb250cm9sczsgbGV0IGwgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInF1ZXN0aW9uLmdldCgncW5vJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1F1ZXN0aW9uICcgKyBsICsgMX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVjay1sYWJlbFwiPklmIHRoZSByZXNwb25zZSBpcyB0aGlzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInZhbGlkYXRpb25UeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvblR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWxpZGF0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRpb24ubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFuc3dlci5nZXQoJ3ZhbGlkYXRpb25UeXBlJyk/LnZhbHVlID09PSAnRGVzY3JpcHRpdmUgQW5zd2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZGVzY3JpcHRpdmVfYW5zd2VyX3ZhbGlkYXRpb25fdGV4dCcgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX3RleHQnICsgaSArIGogKyBrXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbnN3ZXIuZ2V0KCd2YWxpZGF0aW9uVHlwZScpPy52YWx1ZSA9PT0gJ0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ2Fuc3dlcl92YWxpZGF0aW9uX3JlZmVyZW5jZScraStqK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgaiwgaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjY2NjcgMy4zMzUyN1Y4LjMzNTI3TTE5LjY2NjcgOC4zMzUyN0gxNC42NjY3TTE5LjY2NjcgOC4zMzUyN0wxNS44IDQuNzAxOTNDMTQuOTA0NCAzLjgwNTg2IDEzLjc5NjQgMy4xNTEyNyAxMi41NzkzIDIuNzk5MjVDMTEuMzYyMyAyLjQ0NzIyIDEwLjA3NTkgMi40MDkyMyA4Ljg0MDI1IDIuNjg4ODJDNy42MDQ1NiAyLjk2ODQxIDYuNDU5ODQgMy41NTY0NiA1LjUxMjkgNC4zOTgxMkM0LjU2NTk1IDUuMjM5NzcgMy44NDc2NSA2LjMwNzU5IDMuNDI1MDEgNy41MDE5M00xLjMzMzM0IDE2LjY2ODZWMTEuNjY4Nk0xLjMzMzM0IDExLjY2ODZINi4zMzMzNE0xLjMzMzM0IDExLjY2ODZMNS4yMDAwMSAxNS4zMDE5QzYuMDk1NjMgMTYuMTk4IDcuMjAzNjUgMTYuODUyNiA4LjQyMDY4IDE3LjIwNDZDOS42Mzc3MSAxNy41NTY3IDEwLjkyNDEgMTcuNTk0NiAxMi4xNTk4IDE3LjMxNTFDMTMuMzk1NSAxNy4wMzU1IDE0LjU0MDIgMTYuNDQ3NCAxNS40ODcxIDE1LjYwNThDMTYuNDM0MSAxNC43NjQxIDE3LjE1MjQgMTMuNjk2MyAxNy41NzUgMTIuNTAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDgyXzMxMjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+QWRkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5SZXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgaiArIGtcIj5BbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlUmVmZXJlbmNlSW1hZ2UoaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEwcHg7IHRvcDogMTBweDsgY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtYi01XCIgaGVpZ2h0PVwiMzAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cIidxdWVzdGlvbl9yZWZlcmVuY2UnK2kralwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsIGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS9wbmcsIGltYWdlL2pwZWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidxdWVzdGlvbl9yZWZlcmVuY2UnK2kralwiIGNsYXNzPVwiYWRkLXJlZmVyZW5jZS1idG4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCIgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDQuMTY3OTdWMTUuODM0Nk00LjE2NjY5IDEwLjAwMTNIMTUuODMzNFwiIHN0cm9rZT1cIiMwMDlCRjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJteC0yXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4Ml8zMTIyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjY2NjcgMy4zMzUyN1Y4LjMzNTI3TTE5LjY2NjcgOC4zMzUyN0gxNC42NjY3TTE5LjY2NjcgOC4zMzUyN0wxNS44IDQuNzAxOTNDMTQuOTA0NCAzLjgwNTg2IDEzLjc5NjQgMy4xNTEyNyAxMi41NzkzIDIuNzk5MjVDMTEuMzYyMyAyLjQ0NzIyIDEwLjA3NTkgMi40MDkyMyA4Ljg0MDI1IDIuNjg4ODJDNy42MDQ1NiAyLjk2ODQxIDYuNDU5ODQgMy41NTY0NiA1LjUxMjkgNC4zOTgxMkM0LjU2NTk1IDUuMjM5NzcgMy44NDc2NSA2LjMwNzU5IDMuNDI1MDEgNy41MDE5M00xLjMzMzM0IDE2LjY2ODZWMTEuNjY4Nk0xLjMzMzM0IDExLjY2ODZINi4zMzMzNE0xLjMzMzM0IDExLjY2ODZMNS4yMDAwMSAxNS4zMDE5QzYuMDk1NjMgMTYuMTk4IDcuMjAzNjUgMTYuODUyNiA4LjQyMDY4IDE3LjIwNDZDOS42Mzc3MSAxNy41NTY3IDEwLjkyNDEgMTcuNTk0NiAxMi4xNTk4IDE3LjMxNTFDMTMuMzk1NSAxNy4wMzU1IDE0LjU0MDIgMTYuNDQ3NCAxNS40ODcxIDE1LjYwNThDMTYuNDM0MSAxNC43NjQxIDE3LjE1MjQgMTMuNjk2MyAxNy41NzUgMTIuNTAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDgyXzMxMjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+QWRkIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlJldXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cIm9uUXVlc3Rpb25DaGFuZ2UoJGV2ZW50LCBpLCBqKVwiIGZvcm1Db250cm9sTmFtZT1cImFuc3dlclR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFuc3dlciBvZiBhbnN3ZXJUeXBlc1wiIFt2YWx1ZV09XCJhbnN3ZXIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thbnN3ZXIubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTUgYW5zLWhlYWRlclwiPkFuc3dlciBPcHRpb25zPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGFuc3dlciBoZXJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8uc2V0VmFsdWUoIWFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8udmFsdWUpOyBhbnN3ZXIuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlID8gYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy5zZXRWYWx1ZShmYWxzZSkgOiBudWxsO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgX25nY29udGVudC1uZy1jMTQ5MTA0NDE3MD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltZ0FkZCBuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1uZy1jMTQ5MTA0NDE3MD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS45OTk5OSA0LjE2NjAyVjE1LjgzMjdNNC4xNjY2NiA5Ljk5OTM1SDE1LjgzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhbnN3ZXIuZ2V0KCdzb3BGbGFnJyk/LnNldFZhbHVlKCFhbnN3ZXIuZ2V0KCdzb3BGbGFnJyk/LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJhbnN3ZXIuZ2V0KCdzb3BGbGFnJyk/LnZhbHVlID8gJ3JlZCcgOiAnbm9uZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMuMzMyMDMgMTIuNTAwMUMzLjMzMjAzIDEyLjUwMDEgNC4xNjUzNiAxMS42NjY3IDYuNjY1MzYgMTEuNjY2N0M5LjE2NTM2IDExLjY2NjcgMTAuODMyIDEzLjMzMzQgMTMuMzMyIDEzLjMzMzRDMTUuODMyIDEzLjMzMzQgMTYuNjY1NCAxMi41MDAxIDE2LjY2NTQgMTIuNTAwMVYyLjUwMDA4QzE2LjY2NTQgMi41MDAwOCAxNS44MzIgMy4zMzM0MSAxMy4zMzIgMy4zMzM0MUMxMC44MzIgMy4zMzM0MSA5LjE2NTM2IDEuNjY2NzUgNi42NjUzNiAxLjY2Njc1QzQuMTY1MzYgMS42NjY3NSAzLjMzMjAzIDIuNTAwMDggMy4zMzIwMyAyLjUwMDA4VjEyLjUwMDFaTTMuMzMyMDMgMTIuNTAwMVYxOC4zMzM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImFuc3dlci5nZXQoJ3NvcEZsYWcnKT8udmFsdWUgPyAncmVkJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8uaW52YWxpZCAmJiBhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnYW5zd2VyJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPiogQW5zd2VyIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZVwiIGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy1sZWZ0OiB1bnNldDtcIiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2YWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVmFsaWRhdGVSZXNwb25zZUNoYW5nZSgkZXZlbnQsIGksIGosIGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgYy1jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIid2YWxpZGF0ZV9yZXNwb25zZScraStqK2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ3ZhbGlkYXRlX3Jlc3BvbnNlJytpK2ora1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCIgY2xhc3M9XCJjaGVjay1kZXNjXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpZ2dlciBhbiBhY3Rpb24gZm9yIGVhY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHZhbGlkYXRlIGl0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwib25BbnN3ZXJEZWxldGUoaSwgaiwgaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGUgYW5zd2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRlc3RcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIF9uZ2NvbnRlbnQtbmctYzE0OTEwNDQxNzA9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1IDVMNSAxNU01IDVMMTUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTEwMFwiPkxpbmtlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxpbmtlZFF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKS5jb250cm9sczsgbGV0IGwgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInF1ZXN0aW9uLmdldCgncW5vJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1F1ZXN0aW9uICcgKyBsICsgMX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVjay1sYWJlbFwiPklmIHRoZSByZXNwb25zZSBpcyB0aGlzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInZhbGlkYXRpb25UeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvblR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWxpZGF0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRpb24ubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFuc3dlci5nZXQoJ3ZhbGlkYXRpb25UeXBlJyk/LnZhbHVlID09PSAnRGVzY3JpcHRpdmUgQW5zd2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZGVzY3JpcHRpdmVfYW5zd2VyX3ZhbGlkYXRpb25fdGV4dCcgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX3RleHQnICsgaSArIGogKyBrXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbnN3ZXIuZ2V0KCd2YWxpZGF0aW9uVHlwZScpPy52YWx1ZSA9PT0gJ0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidhbnN3ZXJfdmFsaWRhdGlvbl9yZWZlcmVuY2UnK2kraitrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRkLXJlZmVyZW5jZS1idG4gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlJldXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqICsga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqICsga1wiPkFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZCBmcm9tIGdhbGxlcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFkZE5ld0Fuc3dlcihpLCBqLCAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIE1vcmUgQW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnZGVzY3JpcHRpdmVJbWFnZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwicW5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHF1ZXN0aW9uIGhlcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaW52YWxpZCAmJiBxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBRdWVzdGlvbiBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cIm9uUXVlc3Rpb25DaGFuZ2UoJGV2ZW50LCBpLCBqKVwiIGZvcm1Db250cm9sTmFtZT1cImFuc3dlclR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFuc3dlciBvZiBhbnN3ZXJUeXBlc1wiIFt2YWx1ZV09XCJhbnN3ZXIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thbnN3ZXIubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEwcHg7IHRvcDogMTBweDsgY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ2Fuc3dlcl92YWxpZGF0aW9uX3JlZmVyZW5jZScraStqK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ2Fuc3dlcl92YWxpZGF0aW9uX3JlZmVyZW5jZScraStqK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjY2NjcgMy4zMzUyN1Y4LjMzNTI3TTE5LjY2NjcgOC4zMzUyN0gxNC42NjY3TTE5LjY2NjcgOC4zMzUyN0wxNS44IDQuNzAxOTNDMTQuOTA0NCAzLjgwNTg2IDEzLjc5NjQgMy4xNTEyNyAxMi41NzkzIDIuNzk5MjVDMTEuMzYyMyAyLjQ0NzIyIDEwLjA3NTkgMi40MDkyMyA4Ljg0MDI1IDIuNjg4ODJDNy42MDQ1NiAyLjk2ODQxIDYuNDU5ODQgMy41NTY0NiA1LjUxMjkgNC4zOTgxMkM0LjU2NTk1IDUuMjM5NzcgMy44NDc2NSA2LjMwNzU5IDMuNDI1MDEgNy41MDE5M00xLjMzMzM0IDE2LjY2ODZWMTEuNjY4Nk0xLjMzMzM0IDExLjY2ODZINi4zMzMzNE0xLjMzMzM0IDExLjY2ODZMNS4yMDAwMSAxNS4zMDE5QzYuMDk1NjMgMTYuMTk4IDcuMjAzNjUgMTYuODUyNiA4LjQyMDY4IDE3LjIwNDZDOS42Mzc3MSAxNy41NTY3IDEwLjkyNDEgMTcuNTk0NiAxMi4xNTk4IDE3LjMxNTFDMTMuMzk1NSAxNy4wMzU1IDE0LjU0MDIgMTYuNDQ3NCAxNS40ODcxIDE1LjYwNThDMTYuNDM0MSAxNC43NjQxIDE3LjE1MjQgMTMuNjk2MyAxNy41NzUgMTIuNTAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+QWRkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlJldXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJxdWVzdGlvbi5jb250cm9scy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVjay1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPkFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIGZyb20gZ2FsbGVyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAndmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwicW5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHF1ZXN0aW9uIGhlcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaW52YWxpZCAmJiBxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBRdWVzdGlvbiBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNS4wMDEzSDQuMTY2NjdNNC4xNjY2NyA1LjAwMTNIMTcuNU00LjE2NjY3IDUuMDAxM1YxNi42NjhDNC4xNjY2NyAxNy4xMSA0LjM0MjI2IDE3LjUzMzkgNC42NTQ4MiAxNy44NDY1QzQuOTY3MzggMTguMTU5IDUuMzkxMzEgMTguMzM0NiA1LjgzMzMzIDE4LjMzNDZIMTQuMTY2N0MxNC42MDg3IDE4LjMzNDYgMTUuMDMyNiAxOC4xNTkgMTUuMzQ1MiAxNy44NDY1QzE1LjY1NzcgMTcuNTMzOSAxNS44MzMzIDE3LjExIDE1LjgzMzMgMTYuNjY4VjUuMDAxM0g0LjE2NjY3Wk02LjY2NjY3IDUuMDAxM1YzLjMzNDY0QzYuNjY2NjcgMi44OTI2MSA2Ljg0MjI2IDIuNDY4NjggNy4xNTQ4MiAyLjE1NjEyQzcuNDY3MzggMS44NDM1NiA3Ljg5MTMxIDEuNjY3OTcgOC4zMzMzMyAxLjY2Nzk3SDExLjY2NjdDMTIuMTA4NyAxLjY2Nzk3IDEyLjUzMjYgMS44NDM1NiAxMi44NDUyIDIuMTU2MTJDMTMuMTU3NyAyLjQ2ODY4IDEzLjMzMzMgMi44OTI2MSAxMy4zMzMzIDMuMzM0NjRWNS4wMDEzTTguMzMzMzMgOS4xNjc5N1YxNC4xNjhNMTEuNjY2NyA5LjE2Nzk3VjE0LjE2OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIiBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCIgc3Ryb2tlPVwiIzAwOUJGM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYWxsb3dVcGxvYWRmcm9tR2FsbGVyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVJbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJhbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJlZmVyZW5jZUltYWdlKGksIGosIGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWItNVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsIGksIGosIGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRkLXJlZmVyZW5jZS1idG4gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDQuMTY3OTdWMTUuODM0Nk00LjE2NjY5IDEwLjAwMTNIMTUuODMzNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4Ml8zMTIyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInF1ZXN0aW9uLmNvbnRyb2xzLmFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl90ZXh0JyArIGkgKyBqICsga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl90ZXh0JyArIGkgKyBqICsga1wiPlRleHQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl9udW1iZXInICsgaSArIGogKyBrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnZGF0ZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAndGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJlZmVyZW5jZUltYWdlKGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWItNVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIiBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS42NjY3IDMuMzM1MjdWOC4zMzUyN00xOS42NjY3IDguMzM1MjdIMTQuNjY2N00xOS42NjY3IDguMzM1MjdMMTUuOCA0LjcwMTkzQzE0LjkwNDQgMy44MDU4NiAxMy43OTY0IDMuMTUxMjcgMTIuNTc5MyAyLjc5OTI1QzExLjM2MjMgMi40NDcyMiAxMC4wNzU5IDIuNDA5MjMgOC44NDAyNSAyLjY4ODgyQzcuNjA0NTYgMi45Njg0MSA2LjQ1OTg0IDMuNTU2NDYgNS41MTI5IDQuMzk4MTJDNC41NjU5NSA1LjIzOTc3IDMuODQ3NjUgNi4zMDc1OSAzLjQyNTAxIDcuNTAxOTNNMS4zMzMzNCAxNi42Njg2VjExLjY2ODZNMS4zMzMzNCAxMS42Njg2SDYuMzMzMzRNMS4zMzMzNCAxMS42Njg2TDUuMjAwMDEgMTUuMzAxOUM2LjA5NTYzIDE2LjE5OCA3LjIwMzY1IDE2Ljg1MjYgOC40MjA2OCAxNy4yMDQ2QzkuNjM3NzEgMTcuNTU2NyAxMC45MjQxIDE3LjU5NDYgMTIuMTU5OCAxNy4zMTUxQzEzLjM5NTUgMTcuMDM1NSAxNC41NDAyIDE2LjQ0NzQgMTUuNDg3MSAxNS42MDU4QzE2LjQzNDEgMTQuNzY0MSAxNy4xNTI0IDEzLjY5NjMgMTcuNTc1IDEyLjUwMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPkFkZCBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5SZXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJvblF1ZXN0aW9uQ2hhbmdlKCRldmVudCwgaSwgailcIiBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgYW5zd2VyVHlwZXNcIiBbdmFsdWVdPVwiYW5zd2VyLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YW5zd2VyLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdsaW5lYXJzY2FsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJlZmVyZW5jZUltYWdlKGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWItNVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIiBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS42NjY3IDMuMzM1MjdWOC4zMzUyN00xOS42NjY3IDguMzM1MjdIMTQuNjY2N00xOS42NjY3IDguMzM1MjdMMTUuOCA0LjcwMTkzQzE0LjkwNDQgMy44MDU4NiAxMy43OTY0IDMuMTUxMjcgMTIuNTc5MyAyLjc5OTI1QzExLjM2MjMgMi40NDcyMiAxMC4wNzU5IDIuNDA5MjMgOC44NDAyNSAyLjY4ODgyQzcuNjA0NTYgMi45Njg0MSA2LjQ1OTg0IDMuNTU2NDYgNS41MTI5IDQuMzk4MTJDNC41NjU5NSA1LjIzOTc3IDMuODQ3NjUgNi4zMDc1OSAzLjQyNTAxIDcuNTAxOTNNMS4zMzMzNCAxNi42Njg2VjExLjY2ODZNMS4zMzMzNCAxMS42Njg2SDYuMzMzMzRNMS4zMzMzNCAxMS42Njg2TDUuMjAwMDEgMTUuMzAxOUM2LjA5NTYzIDE2LjE5OCA3LjIwMzY1IDE2Ljg1MjYgOC40MjA2OCAxNy4yMDQ2QzkuNjM3NzEgMTcuNTU2NyAxMC45MjQxIDE3LjU5NDYgMTIuMTU5OCAxNy4zMTUxQzEzLjM5NTUgMTcuMDM1NSAxNC41NDAyIDE2LjQ0NzQgMTUuNDg3MSAxNS42MDU4QzE2LjQzNDEgMTQuNzY0MSAxNy4xNTI0IDEzLjY5NjMgMTcuNTc1IDEyLjUwMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPkFkZCBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5SZXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJvblF1ZXN0aW9uQ2hhbmdlKCRldmVudCwgaSwgailcIiBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgYW5zd2VyVHlwZXNcIiBbdmFsdWVdPVwiYW5zd2VyLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YW5zd2VyLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBnZXRBbnN3ZXJzKGksIGopLmNvbnRyb2xzOyBsZXQgayA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VTdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yIGNoZWNrLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJyYW5nZUVuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJvblF1ZXN0aW9uQ2xvbmUoaSwgaiwgcXVlc3Rpb24pXCIgY2xhc3M9XCJtZS04IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRHVwbGljYXRlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8zMzg1XzEwNTc4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2NjYzIDEyLjQ5OTNIMy4zMzMyOUMyLjg5MTI3IDEyLjQ5OTMgMi40NjczNCAxMi4zMjM4IDIuMTU0NzggMTIuMDExMkMxLjg0MjIyIDExLjY5ODYgMS42NjY2MyAxMS4yNzQ3IDEuNjY2NjMgMTAuODMyN1YzLjMzMjY4QzEuNjY2NjMgMi44OTA2NSAxLjg0MjIyIDIuNDY2NzMgMi4xNTQ3OCAyLjE1NDE3QzIuNDY3MzQgMS44NDE2MSAyLjg5MTI3IDEuNjY2MDIgMy4zMzMyOSAxLjY2NjAySDEwLjgzMzNDMTEuMjc1MyAxLjY2NjAyIDExLjY5OTIgMS44NDE2MSAxMi4wMTE4IDIuMTU0MTdDMTIuMzI0NCAyLjQ2NjczIDEyLjUgMi44OTA2NSAxMi41IDMuMzMyNjhWNC4xNjYwMk05LjE2NjYzIDcuNDk5MzVIMTYuNjY2NkMxNy41ODcxIDcuNDk5MzUgMTguMzMzMyA4LjI0NTU0IDE4LjMzMzMgOS4xNjYwMlYxNi42NjZDMTguMzMzMyAxNy41ODY1IDE3LjU4NzEgMTguMzMyNyAxNi42NjY2IDE4LjMzMjdIOS4xNjY2M0M4LjI0NjE1IDE4LjMzMjcgNy40OTk5NiAxNy41ODY1IDcuNDk5OTYgMTYuNjY2VjkuMTY2MDJDNy40OTk5NiA4LjI0NTU0IDguMjQ2MTUgNy40OTkzNSA5LjE2NjYzIDcuNDk5MzVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMzg1XzEwNTc4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIihnZXRRdWVzdGlvbnMoaSk/LmNvbnRyb2xzPy5sZW5ndGggPz8gMCkgPiAxXCIgKGNsaWNrKT1cIm9uUXVlc3Rpb25EZWxldGUoaSwgailcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHF1ZXN0aW9uXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNC45OTkzNUg0LjE2NjY3TTQuMTY2NjcgNC45OTkzNUgxNy41TTQuMTY2NjcgNC45OTkzNVYxNi42NjZDNC4xNjY2NyAxNy4xMDggNC4zNDIyNiAxNy41MzIgNC42NTQ4MiAxNy44NDQ1QzQuOTY3MzggMTguMTU3MSA1LjM5MTMxIDE4LjMzMjcgNS44MzMzMyAxOC4zMzI3SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzI3IDE1LjAzMjYgMTguMTU3MSAxNS4zNDUyIDE3Ljg0NDVDMTUuNjU3NyAxNy41MzIgMTUuODMzMyAxNy4xMDggMTUuODMzMyAxNi42NjZWNC45OTkzNUg0LjE2NjY3Wk02LjY2NjY3IDQuOTk5MzVWMy4zMzI2OEM2LjY2NjY3IDIuODkwNjUgNi44NDIyNiAyLjQ2NjczIDcuMTU0ODIgMi4xNTQxN0M3LjQ2NzM4IDEuODQxNjEgNy44OTEzMSAxLjY2NjAyIDguMzMzMzMgMS42NjYwMkgxMS42NjY3QzEyLjEwODcgMS42NjYwMiAxMi41MzI2IDEuODQxNjEgMTIuODQ1MiAyLjE1NDE3QzEzLjE1NzcgMi40NjY3MyAxMy4zMzMzIDIuODkwNjUgMTMuMzMzMyAzLjMzMjY4VjQuOTk5MzVNOC4zMzMzMyA5LjE2NjAyVjE0LjE2Nk0xMS42NjY3IDkuMTY2MDJWMTQuMTY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkTmV3UXVlc3Rpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJqID09PSAoZ2V0UXVlc3Rpb25zKGkpPy5jb250cm9scz8ubGVuZ3RoID8/IDApIC0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1yLTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTk5OTkgNC4xNjYwMlYxNS44MzI3TTQuMTY2NjYgOS45OTkzNUgxNS44MzMzXCIgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkIE5ldyBRdWVzdGlvbjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtdGFzay9jcmVhdGUtdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS10YXNrL2NyZWF0ZS10YXNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBMEIsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVGLE9BQU8sRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsa0NBQWtDLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsd0NBQXdDLEVBQUUsc0NBQXNDLEVBQUUsK0JBQStCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFVdFosTUFBTSxPQUFPLG1CQUFtQjtJQXlCVjtJQUF5QjtJQUFrQztJQUFnQztJQUFtQztJQUE4QjtJQUF1QjtJQXZCdk0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekIsUUFBUSxDQUFxQjtJQUM3QixXQUFXLENBQU87SUFDbEIsVUFBVSxDQUFrQztJQUM1QyxnQkFBZ0IsQ0FBcUM7SUFDckQsV0FBVyxHQUEyQztRQUNwRCxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3JELEVBQUUsS0FBSyxFQUFF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LEVBQUM7b0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtvQkFDNUMsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBQzt3QkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxDQUFBO3FCQUNyRztvQkFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7aUJBQ2xCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBQyxDQUFDLEdBQU8sRUFBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxDQUFBO1lBQ3ZGLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO3dHQXZXVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix1RENoQmhDLDR4eUhBb3ZDTTs7NEZEcHVDTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBbnN3ZXIsIEFuc3dlckZvcm0sIEFuc3dlclR5cGUsIEhlYWRlckZpbHRlciwgSVRhc2ssIFF1ZXN0aW9uLCBRdWVzdGlvbkZvcm0sIFNlY3Rpb24sIFNlY3Rpb25Gb3JtLCBUYXNrRm9ybSwgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuL2NyZWF0ZS10YXNrLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBkYXRlX3F1ZXN0aW9uX3RlbXBsYXRlLCBkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZSwgZGVzY3JpcHRpdmVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZSwgaW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGUsIGxpbmVhcnNjYWxlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlbXVsdGlwbGVfcXVlc3Rpb25fdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlc2luZ2xlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZUltYWdlX3F1ZXN0aW9uX3RlbXBsYXRlLCB0aW1lX3F1ZXN0aW9uX3RlbXBsYXRlLCB2aWRlb19xdWVzdGlvbl90ZW1wbGF0ZSwgeWVzb3Jub19xdWVzdGlvbl90ZW1wbGF0ZSB9IGZyb20gJy4vY3JlYXRlLXRhc2suZGF0YSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jcmVhdGUtdGFzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS10YXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY3JlYXRlLXRhc2suY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVUYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgdGFza0Zvcm06IEZvcm1Hcm91cDxUYXNrRm9ybT5cclxuICB0YXNrRGV0YWlsczogSVRhc2sgXHJcbiAgaGVhZGVyRGF0YTogSGVhZGVyRmlsdGVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICBzZWxlY3RlZFF1ZXN0aW9uOiBGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPiB8IHVuZGVmaW5lZFxyXG4gIGFuc3dlclR5cGVzOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBBbnN3ZXJUeXBlIH1bXSA9IFtcclxuICAgIHsgbGFiZWw6ICdEZXNjcmlwdGl2ZSBBbnN3ZXInLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0EvQiBRdWVzdGlvbicsIHZhbHVlOiAneWVzL25vJyB9LFxyXG4gICAgeyBsYWJlbDogJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtIFNpbmdsZSBBbnN3ZXInLCB2YWx1ZTogJ211bHRpcGxlY2hvaWNlc2luZ2xlJyB9LFxyXG4gICAgeyBsYWJlbDogJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtIE11bHRpcGxlIEFuc3dlcicsIHZhbHVlOiAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlIHdpdGggRGVzY3JpcHRpb24nLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlSW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZSBhcyBhbnN3ZXInLCB2YWx1ZTogJ2ltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgdmlkZW8gYXMgYW5zd2VyJywgdmFsdWU6ICd2aWRlbycgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIE11bHRpcGxlIEltYWdlJywgdmFsdWU6ICdtdWx0aXBsZUltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0RhdGUgLSBERC9NTS9ZWVlZJywgdmFsdWU6ICdkYXRlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0xpbmVhciBTY2FsZScsIHZhbHVlOiAnbGluZWFyc2NhbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnVGltZScsIHZhbHVlOiAndGltZScgfV1cclxuICB2YWxpZGF0aW9uVHlwZXM6IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IFZhbGlkYXRpb25UeXBlIH1bXSA9IFtcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlJywgdmFsdWU6ICdDYXB0dXJlIEltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0Rlc2NyaXB0aXZlIEFuc3dlcicsIHZhbHVlOiAnRGVzY3JpcHRpdmUgQW5zd2VyJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgVmlkZW8nLCB2YWx1ZTogJ0NhcHR1cmUgVmlkZW8nIH1dXHJcbiAgICBjdXJyZW50VGFza0lkOnN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSwgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6VG9hc3RTZXJ2aWNlLCBwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsIHByaXZhdGUgcGFnZUluZm86UGFnZUluZm9TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmhlYWRlckRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIGFzIHN0cmluZykgXHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKClcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFza0lkID0gcGFyYW1zLmlkXHJcbiAgICAgICAgICB0aGlzLmdldFRhc2sodGhpcy5jdXJyZW50VGFza0lkKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5hZGRTZWN0aW9uRm9ybSgpXHJcbiAgICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uRm9ybShkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZSBhcyBRdWVzdGlvbiwgMClcclxuICAgICAgICAgIHRoaXMuYWRkQW5zd2VyRm9ybShkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZS5hbnN3ZXJzWzBdIGFzIEFuc3dlciwgMCwgMClcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QW5zd2VycygwLDApLmF0KDApLmdldCgnYW5zd2VyJyk/LnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25zKDApLmF0KDApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAvLyAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCkpXHJcbiAgICAgIC8vIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgLy8gICAgIHRoaXMuaGVhZGVyRGF0YSA9IGRhdGE7XHJcbiAgICAgIC8vICAgICBpZih0aGlzLmN1cnJlbnRUYXNrSWQpe1xyXG4gICAgICAvLyAgICAgICB0aGlzLmdldFRhc2sodGhpcy5jdXJyZW50VGFza0lkKVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiVGFza3NcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIHRoaXMudGFza0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY2hlY2tsaXN0TmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogWycnXSxcclxuICAgICAgc2VjdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4oW10pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRm9ybSgpe1xyXG4gICAgdGhpcy50YXNrRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgY2hlY2tsaXN0TmFtZTogdGhpcy50YXNrRGV0YWlscy5jaGVja0xpc3ROYW1lID8/ICcnLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy50YXNrRGV0YWlscy5jaGVja0xpc3REZXNjcmlwdGlvbiA/PyAnJyxcclxuICAgIH0pXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFza0RldGFpbHM/LnNlY3Rpb25zPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmFkZFNlY3Rpb25Gb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0pO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9ucz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uRm9ybSh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldPy5xdWVzdGlvbnNbal0sIGkpO1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy50YXNrRGV0YWlscy5zZWN0aW9uc1tpXT8ucXVlc3Rpb25zW2pdPy5hbnN3ZXJzPy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgdGhpcy5hZGRBbnN3ZXJGb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9uc1tqXT8uYW5zd2Vyc1trXSwgaSwgaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9ucygwKS5hdCgwKVxyXG4gIH1cclxuXHJcbiAgYWRkU2VjdGlvbkZvcm0oc2VjdGlvbj86IFNlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlY3Rpb25Gb3JtRGF0YTogRm9ybUdyb3VwPFNlY3Rpb25Gb3JtPiA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZDogW3NlY3Rpb24/LmlkID8/ICcnXSxcclxuICAgICAgbmFtZTogW3NlY3Rpb24/Lm5hbWUgPz8gJyddLFxyXG4gICAgICBxdWVzdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KFtdKVxyXG4gICAgfSk7XHJcbiAgICAodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KS5wdXNoKHNlY3Rpb25Gb3JtRGF0YSlcclxuICB9XHJcblxyXG4gIGFkZFF1ZXN0aW9uRm9ybShxdWVzdGlvbjogUXVlc3Rpb24sIHNlY3Rpb25JbmRleDogbnVtYmVyLCBpbnNlcnRJbmRleD86IG51bWJlcikge1xyXG4gICAgY29uc3QgcXVlc3Rpb25Gb3JtRGF0YTogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcW5vOiBbcXVlc3Rpb24/LnFubyA/PyAodGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KT8ubGVuZ3RoID8gdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5sZW5ndGgrMSA6IDEpLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBxbmFtZTogW3F1ZXN0aW9uPy5xbmFtZSA/PyAnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYW5zd2VyVHlwZTogW3F1ZXN0aW9uPy5hbnN3ZXJUeXBlID8/ICdkZXNjcmlwdGl2ZScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJ1bkFJOiBbcXVlc3Rpb24/LnJ1bkFJID8/IGZhbHNlXSxcclxuICAgICAgcnVuQUlEZXNjcmlwdGlvbjogW3F1ZXN0aW9uPy5ydW5BSURlc2NyaXB0aW9uID8/ICcnXSxcclxuICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogW3F1ZXN0aW9uPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID8/IGZhbHNlXSxcclxuICAgICAgbGlua1R5cGU6IFtxdWVzdGlvbj8ubGlua1R5cGUgPz8gZmFsc2VdLFxyXG4gICAgICBxdWVzdGlvblJlZmVyZW5jZUltYWdlOiBbcXVlc3Rpb24/LnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgPz8gJyddLFxyXG4gICAgICBhbnN3ZXJzOiB0aGlzLmZiLmFycmF5PEZvcm1Hcm91cDxBbnN3ZXJGb3JtPj4oW10pXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocXVlc3Rpb24uYW5zd2VyVHlwZSA9PT0gJ2Rlc2NyaXB0aXZlJyB8fCBxdWVzdGlvbi5hbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVJbWFnZScpIHtcclxuICAgICAgcXVlc3Rpb25Gb3JtRGF0YS5hZGRDb250cm9sKCdkZXNjcmlwdGl2ZXR5cGUnLCBuZXcgRm9ybUNvbnRyb2wocXVlc3Rpb24/LmRlc2NyaXB0aXZldHlwZSA/PyAndGV4dCcpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnNlcnRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICgodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pLmluc2VydChpbnNlcnRJbmRleCwgcXVlc3Rpb25Gb3JtRGF0YSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pLnB1c2gocXVlc3Rpb25Gb3JtRGF0YSlcclxuICB9XHJcblxyXG4gIGFkZEFuc3dlckZvcm0oYW5zd2VyOiBBbnN3ZXIsIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGluc2VydEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhbnN3ZXJGb3JtRGF0YTogRm9ybUdyb3VwPEFuc3dlckZvcm0+ID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGFuc3dlcjogW2Fuc3dlcj8uYW5zd2VyID8/ICcnXSxcclxuICAgICAgYW5zd2Vyb3B0aW9uTnVtYmVyOiBbYW5zd2VyPy5hbnN3ZXJvcHRpb25OdW1iZXIgPz8gKHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpPy5sZW5ndGggPyB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5sZW5ndGgrMSA6IDEpLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzb3BGbGFnOiBbYW5zd2VyPy5zb3BGbGFnID8/IGZhbHNlXSxcclxuICAgICAgdmFsaWRhdGlvbjogW2Fuc3dlcj8udmFsaWRhdGlvbiA/PyBmYWxzZV0sXHJcbiAgICAgIHZhbGlkYXRpb25UeXBlOiBbYW5zd2VyPy52YWxpZGF0aW9uVHlwZSA/PyAnJ10sXHJcbiAgICAgIHJlZmVyZW5jZUltYWdlOiBbYW5zd2VyPy5yZWZlcmVuY2VJbWFnZSA/PyAnJ10sXHJcbiAgICAgIHNob3dMaW5rZWQ6IFthbnN3ZXI/LnNob3dMaW5rZWQgPz8gZmFsc2VdLFxyXG4gICAgICBsaW5rZWRRdWVzdGlvbjogW2Fuc3dlcj8ubGlua2VkUXVlc3Rpb24gPz8gMF0sXHJcbiAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbYW5zd2VyPy5uZXN0ZWRRdWVzdGlvbiA/PyBbXV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhbnN3ZXJUeXBlOiBBbnN3ZXJUeXBlID0gKCh0aGlzLnRhc2tGb3JtPy5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChzZWN0aW9uSW5kZXgpPy5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQocXVlc3Rpb25JbmRleCk/LmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZTtcclxuXHJcbiAgICBpZiAoYW5zd2VyVHlwZSA9PT0gJ2Rlc2NyaXB0aXZlJyB8fCBhbnN3ZXJUeXBlID09PSAnZGVzY3JpcHRpdmVJbWFnZScgfHwgYW5zd2VyVHlwZSA9PT0gJ2ltYWdlJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVJbWFnZScgfHwgYW5zd2VyVHlwZSA9PT0gJ2RhdGUnIHx8IGFuc3dlclR5cGUgPT09ICdsaW5lYXJzY2FsZScgfHwgYW5zd2VyVHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ3ZhbGlkYXRpb25BbnN3ZXInLCBuZXcgRm9ybUNvbnRyb2woYW5zd2VyPy52YWxpZGF0aW9uQW5zd2VyID8/ICcnKSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYW5zd2VyVHlwZSA9PT0gJ3llcy9ubycgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlc2luZ2xlJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScpIHtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeScsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPz8gZmFsc2UpKTtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgncnVuQUknLCBuZXcgRm9ybUNvbnRyb2woYW5zd2VyPy5ydW5BSSA/PyBmYWxzZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbnN3ZXJUeXBlID09PSAnbGluZWFyc2NhbGUnKSB7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ3JhbmdlU3RhcnQnLCBuZXcgRm9ybUNvbnRyb2woYW5zd2VyPy5yYW5nZVN0YXJ0ID8/IDApKTtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgncmFuZ2VFbmQnLCBuZXcgRm9ybUNvbnRyb2woYW5zd2VyPy5yYW5nZUVuZCA/PyAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuc3dlclR5cGUgPT09ICd5ZXMvbm8nIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZUltYWdlJykge1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdkZXNjcmlwdGl2ZXR5cGUnLCBuZXcgRm9ybUNvbnRyb2woYW5zd2VyPy5kZXNjcmlwdGl2ZXR5cGUgPz8gJ3RleHQnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluc2VydEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgKCgodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pXHJcbiAgICAgIC5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPEFuc3dlckZvcm0+PikuaW5zZXJ0KGluc2VydEluZGV4LCBhbnN3ZXJGb3JtRGF0YSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgKCgodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gICAgLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KVxyXG4gICAgLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8QW5zd2VyRm9ybT4+KS5wdXNoKGFuc3dlckZvcm1EYXRhKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFNlY3Rpb25zKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnRhc2tGb3JtPy5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLnRhc2tGb3JtPy5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KS5hdChzZWN0aW9uSW5kZXgpPy5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pXHJcbiAgfVxyXG5cclxuICBnZXRBbnN3ZXJzKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAoKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KS5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPEFuc3dlckZvcm0+PilcclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGUoZXZlbnQ6IGFueSwgc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgIT0gdW5kZWZpbmVkICYmIGV2ZW50LnRhcmdldC5maWxlcy5sZW5ndGgpIHtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSwgZmlsZS5uYW1lKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnY2xpZW50SWQnLCB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCBhcyBzdHJpbmcpXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmltYWdldXBsb2FkKGZvcm1EYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmltZ1VybCkge1xyXG4gICAgICAgICAgaWYgKGFuc3dlckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUocmVzLmRhdGEuaW1nVXJsKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoYW5zd2VySW5kZXgpLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUocmVzLmRhdGEuaW1nVXJsKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICB9XHJcblxyXG4gIG9uUXVlc3Rpb25DbG9uZShzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbjogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4pIHtcclxuICAgIHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCkuaW5zZXJ0KHF1ZXN0aW9uSW5kZXggKyAxLCBxdWVzdGlvbilcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnUXVlc3Rpb24gY2xvbmVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgfVxyXG5cclxuICBvblF1ZXN0aW9uRGVsZXRlKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCkucmVtb3ZlQXQocXVlc3Rpb25JbmRleClcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnUXVlc3Rpb24gZGVsZXRlZCBzdWNjZXNzZnVsbHknKVxyXG5cclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUmVmZXJlbmNlSW1hZ2Uoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmIChhbnN3ZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpLmF0KGFuc3dlckluZGV4KS5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnNldFZhbHVlKCcnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUoJycpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblZhbGlkYXRlUmVzcG9uc2VDaGFuZ2UoZXZlbnQ6IGFueSwgc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpLmF0KGFuc3dlckluZGV4KS5nZXQoJ3Nob3dMaW5rZWQnKT8uc2V0VmFsdWUoZmFsc2UpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFuc3dlckRlbGV0ZShzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBhbnN3ZXJJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5yZW1vdmVBdChhbnN3ZXJJbmRleClcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnQW5zd2VyIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5JylcclxuXHJcbiAgfVxyXG5cclxuICBhZGROZXdBbnN3ZXIoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgdHlwZTogQW5zd2VyVHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgdHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnKSB7XHJcbiAgICAgIHRoaXMuYWRkQW5zd2VyRm9ybShtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUgYXMgQW5zd2VyLCBzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpXHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnQW5zd2VyIGFkZGVkIHN1Y2Nlc3NmdWxseScpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3UXVlc3Rpb24oc2VjdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWRkUXVlc3Rpb25Gb3JtKGRlc2NyaXB0aXZlX3F1ZXN0aW9uX3RlbXBsYXRlIGFzIFF1ZXN0aW9uLCBzZWN0aW9uSW5kZXgpXHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoJ1F1ZXN0aW9uIGFkZGVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgfVxyXG5cclxuICBvblF1ZXN0aW9uQ2hhbmdlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBxdWVzdGlvblxyXG4gICAgY29uc3QgYW5zd2VyVHlwZTpBbnN3ZXJUeXBlID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICBzd2l0Y2ggKGFuc3dlclR5cGUpIHtcclxuICAgICAgY2FzZSAnZGVzY3JpcHRpdmUnOiBxdWVzdGlvbiA9IGRlc2NyaXB0aXZlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3llcy9ubyc6IHF1ZXN0aW9uID0geWVzb3Jub19xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtdWx0aXBsZWNob2ljZXNpbmdsZSc6IHF1ZXN0aW9uID0gbXVsdGlwbGVjaG9pY2VzaW5nbGVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSc6IHF1ZXN0aW9uID0gbXVsdGlwbGVjaG9pY2VtdWx0aXBsZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkZXNjcmlwdGl2ZUltYWdlJzogcXVlc3Rpb24gPSBkZXNjcmlwdGl2ZUltYWdlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ltYWdlJzogcXVlc3Rpb24gPSBpbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWRlbyc6IHF1ZXN0aW9uID0gdmlkZW9fcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGVJbWFnZSc6IHF1ZXN0aW9uID0gbXVsdGlwbGVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlJzogcXVlc3Rpb24gPSBkYXRlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xpbmVhcnNjYWxlJzogcXVlc3Rpb24gPSBsaW5lYXJzY2FsZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0aW1lJzogcXVlc3Rpb24gPSB0aW1lX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHF1ZXN0aW9uID0gZGVzY3JpcHRpdmVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVzdGlvbk5hbWUgPSB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8udmFsdWUgfHwgJydcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLnJlbW92ZUF0KHF1ZXN0aW9uSW5kZXgpXHJcblxyXG4gICAgdGhpcy5hZGRRdWVzdGlvbkZvcm0ocXVlc3Rpb24gYXMgUXVlc3Rpb24sIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleClcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8uc2V0VmFsdWUocXVlc3Rpb25OYW1lKVxyXG5cclxuICAgIGlmIChxdWVzdGlvbj8uYW5zd2Vycy5sZW5ndGgpIHtcclxuICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChlbGVtZW50LCBpZHgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZEFuc3dlckZvcm0oZWxlbWVudCBhcyBBbnN3ZXIsIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCwgaWR4KVxyXG4gICAgICAgIC8vIGlmKGFuc3dlclR5cGUgPT09ICdkZXNjcmlwdGl2ZScpe1xyXG4gICAgICAgIC8vICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoaWR4KS5nZXQoJ2Fuc3dlcicpPy5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgLy8gICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5hdChpZHgpLmdldCgnYW5zd2VyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RRdWVzdGlvbihzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbjogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbiA9IHF1ZXN0aW9uXHJcbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtzZWN0aW9uSW5kZXh9JHtxdWVzdGlvbkluZGV4fWA7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBFbGVtZW50IHdpdGggSUQgJHtlbGVtZW50SWR9IG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoYWN0aW9uOidzYXZlJyB8ICdjb25maWd1cmUnKXtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIC4uLnRoaXMudGFza0Zvcm0udmFsdWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgICAgc3VibWl0VHlwZTogYWN0aW9uLFxyXG4gICAgICAuLi4odGhpcz8uY3VycmVudFRhc2tJZCkgPyB7X2lkOnRoaXMuY3VycmVudFRhc2tJZH0gOiB7fVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5jcmVhdGVUYXNrKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8uZGF0YT8ubWVzc2FnZSlcclxuICAgICAgICAgIGlmKGFjdGlvbiA9PT0gJ2NvbmZpZ3VyZScpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ21hbmFnZS90cmF4L3Rhc2stY29uZmlndXJlJ10sIHsgcXVlcnlQYXJhbXM6IHt0YXNrSWQ6cmVzLmRhdGEuY2hlY2tsaXN0SWR9IH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihhY3Rpb24gPT09ICdzYXZlJyl7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnbWFuYWdlL3RyYXgvdGFzayddKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0VGFzayhpZDpzdHJpbmcpe1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRUYXNrY29uZmlnKGlkLCB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgICAgICAgdGhpcy50YXNrRGV0YWlscyA9IHJlcy5kYXRhLmNoZWNrTGlzdERldGFpbHNcclxuICAgICAgICAgIGlmKHRoaXMudGFza0RldGFpbHMucHVibGlzaCl7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnbWFuYWdlL3RyYXgvdGFzay1jb25maWd1cmUnXSwgeyBxdWVyeVBhcmFtczoge3Rhc2tJZDp0aGlzLnRhc2tEZXRhaWxzLl9pZH0gfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpXHJcbiAgICAgICAgfSBcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjLWNhcmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cInRhc2tGb3JtLmNvbnRyb2xzLmNoZWNrbGlzdE5hbWVcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ2hlY2tsaXN0IE5hbWVcIiBjbGFzcz1cInBsYWluLWlucHV0IGNoZWNrbGlzdC1uYW1lIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwidGFza0Zvcm0uY29udHJvbHMuY2hlY2tsaXN0RGVzY3JpcHRpb25cIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ2hlY2tsaXN0IERlc2NyaXB0aW9uXCIgY2xhc3M9XCJwbGFpbi1pbnB1dCBjaGVja2xpc3QtZGVzY1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblN1Ym1pdCgnY29uZmlndXJlJylcIiBbZGlzYWJsZWRdPVwidGFza0Zvcm0uaW52YWxpZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTVcIiA+Q29uZmlndXJlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblN1Ym1pdCgnc2F2ZScpXCIgW2Rpc2FibGVkXT1cInRhc2tGb3JtLmludmFsaWRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiID5TYXZlIGFzIERyYWZ0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiA4MHZoOyBvdmVyZmxvdy15OiBhdXRvO1wiIGNsYXNzPVwiYy1jYXJkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgZ2V0U2VjdGlvbnM/LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBnZXRRdWVzdGlvbnMoaSk/LmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UXVlc3Rpb24oaSwgaiwgcXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb24/LmdldCgncW5vJyk/LnZhbHVlID09PSBzZWxlY3RlZFF1ZXN0aW9uPy5nZXQoJ3FubycpPy52YWx1ZSA/ICdxdWVzdGlvbi1iYWRnZS1zZWxlY3RlZCcgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicXVlc3Rpb24tYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbj8uZ2V0KCdxbmFtZScpPy52YWx1ZSA/cXVlc3Rpb24/LmdldCgncW5hbWUnKT8udmFsdWUgOiAnUXVlc3Rpb24gJyArIHF1ZXN0aW9uPy5nZXQoJ3FubycpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogODB2aDsgb3ZlcmZsb3cteTogYXV0bztcIiBjbGFzcz1cImMtY2FyZFwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInRhc2tGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGdldFNlY3Rpb25zPy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJxdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidxdWVzdGlvbi0nICsgaSArIGpcIiBjbGFzcz1cInF1ZXN0aW9uLWNvbnRhaW5lciBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb24tbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb24ge3tqICsgMX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ2Rlc2NyaXB0aXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGZvcm1Db250cm9sTmFtZT1cInFuYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvbiBoZXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LmludmFsaWQgJiYgcXVlc3Rpb24uZ2V0KCdxbmFtZScpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPiogUXVlc3Rpb24gaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNS4wMDEzSDQuMTY2NjdNNC4xNjY2NyA1LjAwMTNIMTcuNU00LjE2NjY3IDUuMDAxM1YxNi42NjhDNC4xNjY2NyAxNy4xMSA0LjM0MjI2IDE3LjUzMzkgNC42NTQ4MiAxNy44NDY1QzQuOTY3MzggMTguMTU5IDUuMzkxMzEgMTguMzM0NiA1LjgzMzMzIDE4LjMzNDZIMTQuMTY2N0MxNC42MDg3IDE4LjMzNDYgMTUuMDMyNiAxOC4xNTkgMTUuMzQ1MiAxNy44NDY1QzE1LjY1NzcgMTcuNTMzOSAxNS44MzMzIDE3LjExIDE1LjgzMzMgMTYuNjY4VjUuMDAxM0g0LjE2NjY3Wk02LjY2NjY3IDUuMDAxM1YzLjMzNDY0QzYuNjY2NjcgMi44OTI2MSA2Ljg0MjI2IDIuNDY4NjggNy4xNTQ4MiAyLjE1NjEyQzcuNDY3MzggMS44NDM1NiA3Ljg5MTMxIDEuNjY3OTcgOC4zMzMzMyAxLjY2Nzk3SDExLjY2NjdDMTIuMTA4NyAxLjY2Nzk3IDEyLjUzMjYgMS44NDM1NiAxMi44NDUyIDIuMTU2MTJDMTMuMTU3NyAyLjQ2ODY4IDEzLjMzMzMgMi44OTI2MSAxMy4zMzMzIDMuMzM0NjRWNS4wMDEzTTguMzMzMzMgOS4xNjc5N1YxNC4xNjhNMTEuNjY2NyA5LjE2Nzk3VjE0LjE2OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIiBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCIgc3Ryb2tlPVwiIzAwOUJGM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZldHlwZV90ZXh0JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZldHlwZV90ZXh0JyArIGkgKyBqXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZGVzY3JpcHRpdmV0eXBlX251bWJlcicgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidkZXNjcmlwdGl2ZXR5cGVfbnVtYmVyJyArIGkgKyBqXCI+TnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAneWVzL25vJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGZvcm1Db250cm9sTmFtZT1cInFuYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvbiBoZXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LmludmFsaWQgJiYgcXVlc3Rpb24uZ2V0KCdxbmFtZScpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPiogUXVlc3Rpb24gaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNS4wMDEzSDQuMTY2NjdNNC4xNjY2NyA1LjAwMTNIMTcuNU00LjE2NjY3IDUuMDAxM1YxNi42NjhDNC4xNjY2NyAxNy4xMSA0LjM0MjI2IDE3LjUzMzkgNC42NTQ4MiAxNy44NDY1QzQuOTY3MzggMTguMTU5IDUuMzkxMzEgMTguMzM0NiA1LjgzMzMzIDE4LjMzNDZIMTQuMTY2N0MxNC42MDg3IDE4LjMzNDYgMTUuMDMyNiAxOC4xNTkgMTUuMzQ1MiAxNy44NDY1QzE1LjY1NzcgMTcuNTMzOSAxNS44MzMzIDE3LjExIDE1LjgzMzMgMTYuNjY4VjUuMDAxM0g0LjE2NjY3Wk02LjY2NjY3IDUuMDAxM1YzLjMzNDY0QzYuNjY2NjcgMi44OTI2MSA2Ljg0MjI2IDIuNDY4NjggNy4xNTQ4MiAyLjE1NjEyQzcuNDY3MzggMS44NDM1NiA3Ljg5MTMxIDEuNjY3OTcgOC4zMzMzMyAxLjY2Nzk3SDExLjY2NjdDMTIuMTA4NyAxLjY2Nzk3IDEyLjUzMjYgMS44NDM1NiAxMi44NDUyIDIuMTU2MTJDMTMuMTU3NyAyLjQ2ODY4IDEzLjMzMzMgMi44OTI2MSAxMy4zMzMzIDMuMzM0NjRWNS4wMDEzTTguMzMzMzMgOS4xNjc5N1YxNC4xNjhNMTEuNjY2NyA5LjE2Nzk3VjE0LjE2OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIiBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCIgc3Ryb2tlPVwiIzAwOUJGM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNSBhbnMtaGVhZGVyXCI+QW5zd2VyIE9wdGlvbnM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJhbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYW5zd2VyIGhlcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy5zZXRWYWx1ZSghYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZSk7IGFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8udmFsdWUgPyBhbnN3ZXIuZ2V0KCd2YWxpZGF0aW9uJyk/LnNldFZhbHVlKGZhbHNlKSA6IG51bGw7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBfbmdjb250ZW50LW5nLWMxNDkxMDQ0MTcwPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1nQWRkIG5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBfbmdjb250ZW50LW5nLWMxNDkxMDQ0MTcwPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05Ljk5OTk5IDQuMTY2MDJWMTUuODMyN000LjE2NjY2IDkuOTk5MzVIMTUuODMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYW5zd2VyLmdldCgnc29wRmxhZycpPy5zZXRWYWx1ZSghYW5zd2VyLmdldCgnc29wRmxhZycpPy52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwiYW5zd2VyLmdldCgnc29wRmxhZycpPy52YWx1ZSA/ICdyZWQnIDogJ25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjMzMjAzIDEyLjUwMDFDMy4zMzIwMyAxMi41MDAxIDQuMTY1MzYgMTEuNjY2NyA2LjY2NTM2IDExLjY2NjdDOS4xNjUzNiAxMS42NjY3IDEwLjgzMiAxMy4zMzM0IDEzLjMzMiAxMy4zMzM0QzE1LjgzMiAxMy4zMzM0IDE2LjY2NTQgMTIuNTAwMSAxNi42NjU0IDEyLjUwMDFWMi41MDAwOEMxNi42NjU0IDIuNTAwMDggMTUuODMyIDMuMzMzNDEgMTMuMzMyIDMuMzMzNDFDMTAuODMyIDMuMzMzNDEgOS4xNjUzNiAxLjY2Njc1IDYuNjY1MzYgMS42NjY3NUM0LjE2NTM2IDEuNjY2NzUgMy4zMzIwMyAyLjUwMDA4IDMuMzMyMDMgMi41MDAwOFYxMi41MDAxWk0zLjMzMjAzIDEyLjUwMDFWMTguMzMzNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJhbnN3ZXIuZ2V0KCdzb3BGbGFnJyk/LnZhbHVlID8gJ3JlZCcgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5pbnZhbGlkICYmIGFuc3dlci5nZXQoJ2Fuc3dlcicpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBBbnN3ZXIgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8udmFsdWVcIiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogdW5zZXQ7XCIgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2YWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYWxpZGF0ZVJlc3BvbnNlQ2hhbmdlKCRldmVudCwgaSwgaiwgaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGMtY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIid2YWxpZGF0ZV9yZXNwb25zZScraStqK2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVjay1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIid2YWxpZGF0ZV9yZXNwb25zZScraStqK2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1kZXNjXCI+VHJpZ2dlciBhbiBhY3Rpb24gZm9yIGVhY2ggcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHZhbGlkYXRlIGl0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTEwMFwiPkxpbmtlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxpbmtlZFF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKS5jb250cm9sczsgbGV0IGwgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInF1ZXN0aW9uLmdldCgncW5vJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1F1ZXN0aW9uICcgKyBsICsgMX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVjay1sYWJlbFwiPklmIHRoZSByZXNwb25zZSBpcyB0aGlzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInZhbGlkYXRpb25UeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvblR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWxpZGF0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRpb24ubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFuc3dlci5nZXQoJ3ZhbGlkYXRpb25UeXBlJyk/LnZhbHVlID09PSAnRGVzY3JpcHRpdmUgQW5zd2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZGVzY3JpcHRpdmVfYW5zd2VyX3ZhbGlkYXRpb25fdGV4dCcgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX3RleHQnICsgaSArIGogKyBrXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbnN3ZXIuZ2V0KCd2YWxpZGF0aW9uVHlwZScpPy52YWx1ZSA9PT0gJ0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ2Fuc3dlcl92YWxpZGF0aW9uX3JlZmVyZW5jZScraStqK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgaiwgaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjY2NjcgMy4zMzUyN1Y4LjMzNTI3TTE5LjY2NjcgOC4zMzUyN0gxNC42NjY3TTE5LjY2NjcgOC4zMzUyN0wxNS44IDQuNzAxOTNDMTQuOTA0NCAzLjgwNTg2IDEzLjc5NjQgMy4xNTEyNyAxMi41NzkzIDIuNzk5MjVDMTEuMzYyMyAyLjQ0NzIyIDEwLjA3NTkgMi40MDkyMyA4Ljg0MDI1IDIuNjg4ODJDNy42MDQ1NiAyLjk2ODQxIDYuNDU5ODQgMy41NTY0NiA1LjUxMjkgNC4zOTgxMkM0LjU2NTk1IDUuMjM5NzcgMy44NDc2NSA2LjMwNzU5IDMuNDI1MDEgNy41MDE5M00xLjMzMzM0IDE2LjY2ODZWMTEuNjY4Nk0xLjMzMzM0IDExLjY2ODZINi4zMzMzNE0xLjMzMzM0IDExLjY2ODZMNS4yMDAwMSAxNS4zMDE5QzYuMDk1NjMgMTYuMTk4IDcuMjAzNjUgMTYuODUyNiA4LjQyMDY4IDE3LjIwNDZDOS42Mzc3MSAxNy41NTY3IDEwLjkyNDEgMTcuNTk0NiAxMi4xNTk4IDE3LjMxNTFDMTMuMzk1NSAxNy4wMzU1IDE0LjU0MDIgMTYuNDQ3NCAxNS40ODcxIDE1LjYwNThDMTYuNDM0MSAxNC43NjQxIDE3LjE1MjQgMTMuNjk2MyAxNy41NzUgMTIuNTAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDgyXzMxMjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+QWRkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5SZXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgaiArIGtcIj5BbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlUmVmZXJlbmNlSW1hZ2UoaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEwcHg7IHRvcDogMTBweDsgY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtYi01XCIgaGVpZ2h0PVwiMzAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cIidxdWVzdGlvbl9yZWZlcmVuY2UnK2kralwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsIGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS9wbmcsIGltYWdlL2pwZWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidxdWVzdGlvbl9yZWZlcmVuY2UnK2kralwiIGNsYXNzPVwiYWRkLXJlZmVyZW5jZS1idG4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCIgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDQuMTY3OTdWMTUuODM0Nk00LjE2NjY5IDEwLjAwMTNIMTUuODMzNFwiIHN0cm9rZT1cIiMwMDlCRjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJteC0yXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4Ml8zMTIyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjY2NjcgMy4zMzUyN1Y4LjMzNTI3TTE5LjY2NjcgOC4zMzUyN0gxNC42NjY3TTE5LjY2NjcgOC4zMzUyN0wxNS44IDQuNzAxOTNDMTQuOTA0NCAzLjgwNTg2IDEzLjc5NjQgMy4xNTEyNyAxMi41NzkzIDIuNzk5MjVDMTEuMzYyMyAyLjQ0NzIyIDEwLjA3NTkgMi40MDkyMyA4Ljg0MDI1IDIuNjg4ODJDNy42MDQ1NiAyLjk2ODQxIDYuNDU5ODQgMy41NTY0NiA1LjUxMjkgNC4zOTgxMkM0LjU2NTk1IDUuMjM5NzcgMy44NDc2NSA2LjMwNzU5IDMuNDI1MDEgNy41MDE5M00xLjMzMzM0IDE2LjY2ODZWMTEuNjY4Nk0xLjMzMzM0IDExLjY2ODZINi4zMzMzNE0xLjMzMzM0IDExLjY2ODZMNS4yMDAwMSAxNS4zMDE5QzYuMDk1NjMgMTYuMTk4IDcuMjAzNjUgMTYuODUyNiA4LjQyMDY4IDE3LjIwNDZDOS42Mzc3MSAxNy41NTY3IDEwLjkyNDEgMTcuNTk0NiAxMi4xNTk4IDE3LjMxNTFDMTMuMzk1NSAxNy4wMzU1IDE0LjU0MDIgMTYuNDQ3NCAxNS40ODcxIDE1LjYwNThDMTYuNDM0MSAxNC43NjQxIDE3LjE1MjQgMTMuNjk2MyAxNy41NzUgMTIuNTAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDgyXzMxMjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+QWRkIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlJldXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cIm9uUXVlc3Rpb25DaGFuZ2UoJGV2ZW50LCBpLCBqKVwiIGZvcm1Db250cm9sTmFtZT1cImFuc3dlclR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFuc3dlciBvZiBhbnN3ZXJUeXBlc1wiIFt2YWx1ZV09XCJhbnN3ZXIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thbnN3ZXIubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTUgYW5zLWhlYWRlclwiPkFuc3dlciBPcHRpb25zPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGFuc3dlciBoZXJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8uc2V0VmFsdWUoIWFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8udmFsdWUpOyBhbnN3ZXIuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlID8gYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy5zZXRWYWx1ZShmYWxzZSkgOiBudWxsO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgX25nY29udGVudC1uZy1jMTQ5MTA0NDE3MD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltZ0FkZCBuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1uZy1jMTQ5MTA0NDE3MD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS45OTk5OSA0LjE2NjAyVjE1LjgzMjdNNC4xNjY2NiA5Ljk5OTM1SDE1LjgzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFuc3dlci5nZXQoJ3NvcEZsYWcnKT8uc2V0VmFsdWUoIWFuc3dlci5nZXQoJ3NvcEZsYWcnKT8udmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImFuc3dlci5nZXQoJ3NvcEZsYWcnKT8udmFsdWUgPyAncmVkJyA6ICdub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy4zMzIwMyAxMi41MDAxQzMuMzMyMDMgMTIuNTAwMSA0LjE2NTM2IDExLjY2NjcgNi42NjUzNiAxMS42NjY3QzkuMTY1MzYgMTEuNjY2NyAxMC44MzIgMTMuMzMzNCAxMy4zMzIgMTMuMzMzNEMxNS44MzIgMTMuMzMzNCAxNi42NjU0IDEyLjUwMDEgMTYuNjY1NCAxMi41MDAxVjIuNTAwMDhDMTYuNjY1NCAyLjUwMDA4IDE1LjgzMiAzLjMzMzQxIDEzLjMzMiAzLjMzMzQxQzEwLjgzMiAzLjMzMzQxIDkuMTY1MzYgMS42NjY3NSA2LjY2NTM2IDEuNjY2NzVDNC4xNjUzNiAxLjY2Njc1IDMuMzMyMDMgMi41MDAwOCAzLjMzMjAzIDIuNTAwMDhWMTIuNTAwMVpNMy4zMzIwMyAxMi41MDAxVjE4LjMzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwiYW5zd2VyLmdldCgnc29wRmxhZycpPy52YWx1ZSA/ICdyZWQnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8uaW52YWxpZCAmJiBhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnYW5zd2VyJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPiogQW5zd2VyIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFhbnN3ZXIuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlXCIgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IHVuc2V0O1wiIGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbGlkYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYWxpZGF0ZVJlc3BvbnNlQ2hhbmdlKCRldmVudCwgaSwgaiwgaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjLWNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3ZhbGlkYXRlX3Jlc3BvbnNlJytpK2ora1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVjay1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCIndmFsaWRhdGVfcmVzcG9uc2UnK2kraitrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGUgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIiBjbGFzcz1cImNoZWNrLWRlc2NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmlnZ2VyIGFuIGFjdGlvbiBmb3IgZWFjaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdmFsaWRhdGUgaXQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJvbkFuc3dlckRlbGV0ZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSBhbnN3ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdGVzdFwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1uZy1jMTQ5MTA0NDE3MD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgNUw1IDE1TTUgNUwxNSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTEwMFwiPkxpbmtlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxpbmtlZFF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKS5jb250cm9sczsgbGV0IGwgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInF1ZXN0aW9uLmdldCgncW5vJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1F1ZXN0aW9uICcgKyBsICsgMX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZSAmJiAhYW5zd2VyLmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVjay1sYWJlbFwiPklmIHRoZSByZXNwb25zZSBpcyB0aGlzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInZhbGlkYXRpb25UeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvblR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWxpZGF0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRpb24ubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFuc3dlci5nZXQoJ3ZhbGlkYXRpb25UeXBlJyk/LnZhbHVlID09PSAnRGVzY3JpcHRpdmUgQW5zd2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZGVzY3JpcHRpdmVfYW5zd2VyX3ZhbGlkYXRpb25fdGV4dCcgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX3RleHQnICsgaSArIGogKyBrXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbnN3ZXIuZ2V0KCd2YWxpZGF0aW9uVHlwZScpPy52YWx1ZSA9PT0gJ0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidhbnN3ZXJfdmFsaWRhdGlvbl9yZWZlcmVuY2UnK2kraitrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRkLXJlZmVyZW5jZS1idG4gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlJldXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqICsga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqICsga1wiPkFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZCBmcm9tIGdhbGxlcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFkZE5ld0Fuc3dlcihpLCBqLCAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIE1vcmUgQW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnZGVzY3JpcHRpdmVJbWFnZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwicW5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHF1ZXN0aW9uIGhlcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaW52YWxpZCAmJiBxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBRdWVzdGlvbiBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cIm9uUXVlc3Rpb25DaGFuZ2UoJGV2ZW50LCBpLCBqKVwiIGZvcm1Db250cm9sTmFtZT1cImFuc3dlclR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFuc3dlciBvZiBhbnN3ZXJUeXBlc1wiIFt2YWx1ZV09XCJhbnN3ZXIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thbnN3ZXIubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEwcHg7IHRvcDogMTBweDsgY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ2Fuc3dlcl92YWxpZGF0aW9uX3JlZmVyZW5jZScraStqK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ2Fuc3dlcl92YWxpZGF0aW9uX3JlZmVyZW5jZScraStqK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjY2NjcgMy4zMzUyN1Y4LjMzNTI3TTE5LjY2NjcgOC4zMzUyN0gxNC42NjY3TTE5LjY2NjcgOC4zMzUyN0wxNS44IDQuNzAxOTNDMTQuOTA0NCAzLjgwNTg2IDEzLjc5NjQgMy4xNTEyNyAxMi41NzkzIDIuNzk5MjVDMTEuMzYyMyAyLjQ0NzIyIDEwLjA3NTkgMi40MDkyMyA4Ljg0MDI1IDIuNjg4ODJDNy42MDQ1NiAyLjk2ODQxIDYuNDU5ODQgMy41NTY0NiA1LjUxMjkgNC4zOTgxMkM0LjU2NTk1IDUuMjM5NzcgMy44NDc2NSA2LjMwNzU5IDMuNDI1MDEgNy41MDE5M00xLjMzMzM0IDE2LjY2ODZWMTEuNjY4Nk0xLjMzMzM0IDExLjY2ODZINi4zMzMzNE0xLjMzMzM0IDExLjY2ODZMNS4yMDAwMSAxNS4zMDE5QzYuMDk1NjMgMTYuMTk4IDcuMjAzNjUgMTYuODUyNiA4LjQyMDY4IDE3LjIwNDZDOS42Mzc3MSAxNy41NTY3IDEwLjkyNDEgMTcuNTk0NiAxMi4xNTk4IDE3LjMxNTFDMTMuMzk1NSAxNy4wMzU1IDE0LjU0MDIgMTYuNDQ3NCAxNS40ODcxIDE1LjYwNThDMTYuNDM0MSAxNC43NjQxIDE3LjE1MjQgMTMuNjk2MyAxNy41NzUgMTIuNTAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+QWRkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlJldXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJxdWVzdGlvbi5jb250cm9scy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVjay1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPkFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIGZyb20gZ2FsbGVyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAndmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwicW5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHF1ZXN0aW9uIGhlcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaW52YWxpZCAmJiBxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBRdWVzdGlvbiBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSZWZlcmVuY2VJbWFnZShpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNS4wMDEzSDQuMTY2NjdNNC4xNjY2NyA1LjAwMTNIMTcuNU00LjE2NjY3IDUuMDAxM1YxNi42NjhDNC4xNjY2NyAxNy4xMSA0LjM0MjI2IDE3LjUzMzkgNC42NTQ4MiAxNy44NDY1QzQuOTY3MzggMTguMTU5IDUuMzkxMzEgMTguMzM0NiA1LjgzMzMzIDE4LjMzNDZIMTQuMTY2N0MxNC42MDg3IDE4LjMzNDYgMTUuMDMyNiAxOC4xNTkgMTUuMzQ1MiAxNy44NDY1QzE1LjY1NzcgMTcuNTMzOSAxNS44MzMzIDE3LjExIDE1LjgzMzMgMTYuNjY4VjUuMDAxM0g0LjE2NjY3Wk02LjY2NjY3IDUuMDAxM1YzLjMzNDY0QzYuNjY2NjcgMi44OTI2MSA2Ljg0MjI2IDIuNDY4NjggNy4xNTQ4MiAyLjE1NjEyQzcuNDY3MzggMS44NDM1NiA3Ljg5MTMxIDEuNjY3OTcgOC4zMzMzMyAxLjY2Nzk3SDExLjY2NjdDMTIuMTA4NyAxLjY2Nzk3IDEyLjUzMjYgMS44NDM1NiAxMi44NDUyIDIuMTU2MTJDMTMuMTU3NyAyLjQ2ODY4IDEzLjMzMzMgMi44OTI2MSAxMy4zMzMzIDMuMzM0NjRWNS4wMDEzTTguMzMzMzMgOS4xNjc5N1YxNC4xNjhNMTEuNjY2NyA5LjE2Nzk3VjE0LjE2OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1iLTVcIiBoZWlnaHQ9XCIzMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1ZXN0aW9uX3JlZmVyZW5jZScraStqXCIgY2xhc3M9XCJhZGQtcmVmZXJlbmNlLWJ0biBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIiBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCIgc3Ryb2tlPVwiIzAwOUJGM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cIm14LTJcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYWxsb3dVcGxvYWRmcm9tR2FsbGVyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVJbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGFuc3dlclR5cGVzXCIgW3ZhbHVlXT1cImFuc3dlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJhbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJlZmVyZW5jZUltYWdlKGksIGosIGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTBweDsgdG9wOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi41IDUuMDAxM0g0LjE2NjY3TTQuMTY2NjcgNS4wMDEzSDE3LjVNNC4xNjY2NyA1LjAwMTNWMTYuNjY4QzQuMTY2NjcgMTcuMTEgNC4zNDIyNiAxNy41MzM5IDQuNjU0ODIgMTcuODQ2NUM0Ljk2NzM4IDE4LjE1OSA1LjM5MTMxIDE4LjMzNDYgNS44MzMzMyAxOC4zMzQ2SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzQ2IDE1LjAzMjYgMTguMTU5IDE1LjM0NTIgMTcuODQ2NUMxNS42NTc3IDE3LjUzMzkgMTUuODMzMyAxNy4xMSAxNS44MzMzIDE2LjY2OFY1LjAwMTNINC4xNjY2N1pNNi42NjY2NyA1LjAwMTNWMy4zMzQ2NEM2LjY2NjY3IDIuODkyNjEgNi44NDIyNiAyLjQ2ODY4IDcuMTU0ODIgMi4xNTYxMkM3LjQ2NzM4IDEuODQzNTYgNy44OTEzMSAxLjY2Nzk3IDguMzMzMzMgMS42Njc5N0gxMS42NjY3QzEyLjEwODcgMS42Njc5NyAxMi41MzI2IDEuODQzNTYgMTIuODQ1MiAyLjE1NjEyQzEzLjE1NzcgMi40Njg2OCAxMy4zMzMzIDIuODkyNjEgMTMuMzMzMyAzLjMzNDY0VjUuMDAxM004LjMzMzMzIDkuMTY3OTdWMTQuMTY4TTExLjY2NjcgOS4xNjc5N1YxNC4xNjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWItNVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsIGksIGosIGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInYW5zd2VyX3ZhbGlkYXRpb25fcmVmZXJlbmNlJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRkLXJlZmVyZW5jZS1idG4gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDQuMTY3OTdWMTUuODM0Nk00LjE2NjY5IDEwLjAwMTNIMTUuODMzNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4Ml8zMTIyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYW5zd2VyLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5BZGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+UmV1cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInF1ZXN0aW9uLmNvbnRyb2xzLmFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl90ZXh0JyArIGkgKyBqICsga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl90ZXh0JyArIGkgKyBqICsga1wiPlRleHQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl9udW1iZXInICsgaSArIGogKyBrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnZGF0ZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAndGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJlZmVyZW5jZUltYWdlKGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWItNVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIiBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS42NjY3IDMuMzM1MjdWOC4zMzUyN00xOS42NjY3IDguMzM1MjdIMTQuNjY2N00xOS42NjY3IDguMzM1MjdMMTUuOCA0LjcwMTkzQzE0LjkwNDQgMy44MDU4NiAxMy43OTY0IDMuMTUxMjcgMTIuNTc5MyAyLjc5OTI1QzExLjM2MjMgMi40NDcyMiAxMC4wNzU5IDIuNDA5MjMgOC44NDAyNSAyLjY4ODgyQzcuNjA0NTYgMi45Njg0MSA2LjQ1OTg0IDMuNTU2NDYgNS41MTI5IDQuMzk4MTJDNC41NjU5NSA1LjIzOTc3IDMuODQ3NjUgNi4zMDc1OSAzLjQyNTAxIDcuNTAxOTNNMS4zMzMzNCAxNi42Njg2VjExLjY2ODZNMS4zMzMzNCAxMS42Njg2SDYuMzMzMzRNMS4zMzMzNCAxMS42Njg2TDUuMjAwMDEgMTUuMzAxOUM2LjA5NTYzIDE2LjE5OCA3LjIwMzY1IDE2Ljg1MjYgOC40MjA2OCAxNy4yMDQ2QzkuNjM3NzEgMTcuNTU2NyAxMC45MjQxIDE3LjU5NDYgMTIuMTU5OCAxNy4zMTUxQzEzLjM5NTUgMTcuMDM1NSAxNC41NDAyIDE2LjQ0NzQgMTUuNDg3MSAxNS42MDU4QzE2LjQzNDEgMTQuNzY0MSAxNy4xNTI0IDEzLjY5NjMgMTcuNTc1IDEyLjUwMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPkFkZCBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5SZXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJvblF1ZXN0aW9uQ2hhbmdlKCRldmVudCwgaSwgailcIiBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgYW5zd2VyVHlwZXNcIiBbdmFsdWVdPVwiYW5zd2VyLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YW5zd2VyLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdsaW5lYXJzY2FsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJxbmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcXVlc3Rpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uLmdldCgncW5hbWUnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIFF1ZXN0aW9uIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJlZmVyZW5jZUltYWdlKGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMHB4OyB0b3A6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWItNVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbjsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVlc3Rpb25fcmVmZXJlbmNlJytpK2pcIiBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIiBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQwODJfMzEyMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS42NjY3IDMuMzM1MjdWOC4zMzUyN00xOS42NjY3IDguMzM1MjdIMTQuNjY2N00xOS42NjY3IDguMzM1MjdMMTUuOCA0LjcwMTkzQzE0LjkwNDQgMy44MDU4NiAxMy43OTY0IDMuMTUxMjcgMTIuNTc5MyAyLjc5OTI1QzExLjM2MjMgMi40NDcyMiAxMC4wNzU5IDIuNDA5MjMgOC44NDAyNSAyLjY4ODgyQzcuNjA0NTYgMi45Njg0MSA2LjQ1OTg0IDMuNTU2NDYgNS41MTI5IDQuMzk4MTJDNC41NjU5NSA1LjIzOTc3IDMuODQ3NjUgNi4zMDc1OSAzLjQyNTAxIDcuNTAxOTNNMS4zMzMzNCAxNi42Njg2VjExLjY2ODZNMS4zMzMzNCAxMS42Njg2SDYuMzMzMzRNMS4zMzMzNCAxMS42Njg2TDUuMjAwMDEgMTUuMzAxOUM2LjA5NTYzIDE2LjE5OCA3LjIwMzY1IDE2Ljg1MjYgOC40MjA2OCAxNy4yMDQ2QzkuNjM3NzEgMTcuNTU2NyAxMC45MjQxIDE3LjU5NDYgMTIuMTU5OCAxNy4zMTUxQzEzLjM5NTUgMTcuMDM1NSAxNC41NDAyIDE2LjQ0NzQgMTUuNDg3MSAxNS42MDU4QzE2LjQzNDEgMTQuNzY0MSAxNy4xNTI0IDEzLjY5NjMgMTcuNTc1IDEyLjUwMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXF1ZXN0aW9uLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiPkFkZCBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIj5SZXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJvblF1ZXN0aW9uQ2hhbmdlKCRldmVudCwgaSwgailcIiBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgYW5zd2VyVHlwZXNcIiBbdmFsdWVdPVwiYW5zd2VyLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YW5zd2VyLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBnZXRBbnN3ZXJzKGksIGopLmNvbnRyb2xzOyBsZXQgayA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VTdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yIGNoZWNrLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJyYW5nZUVuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJvblF1ZXN0aW9uQ2xvbmUoaSwgaiwgcXVlc3Rpb24pXCIgY2xhc3M9XCJtZS04IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRHVwbGljYXRlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8zMzg1XzEwNTc4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2NjYzIDEyLjQ5OTNIMy4zMzMyOUMyLjg5MTI3IDEyLjQ5OTMgMi40NjczNCAxMi4zMjM4IDIuMTU0NzggMTIuMDExMkMxLjg0MjIyIDExLjY5ODYgMS42NjY2MyAxMS4yNzQ3IDEuNjY2NjMgMTAuODMyN1YzLjMzMjY4QzEuNjY2NjMgMi44OTA2NSAxLjg0MjIyIDIuNDY2NzMgMi4xNTQ3OCAyLjE1NDE3QzIuNDY3MzQgMS44NDE2MSAyLjg5MTI3IDEuNjY2MDIgMy4zMzMyOSAxLjY2NjAySDEwLjgzMzNDMTEuMjc1MyAxLjY2NjAyIDExLjY5OTIgMS44NDE2MSAxMi4wMTE4IDIuMTU0MTdDMTIuMzI0NCAyLjQ2NjczIDEyLjUgMi44OTA2NSAxMi41IDMuMzMyNjhWNC4xNjYwMk05LjE2NjYzIDcuNDk5MzVIMTYuNjY2NkMxNy41ODcxIDcuNDk5MzUgMTguMzMzMyA4LjI0NTU0IDE4LjMzMzMgOS4xNjYwMlYxNi42NjZDMTguMzMzMyAxNy41ODY1IDE3LjU4NzEgMTguMzMyNyAxNi42NjY2IDE4LjMzMjdIOS4xNjY2M0M4LjI0NjE1IDE4LjMzMjcgNy40OTk5NiAxNy41ODY1IDcuNDk5OTYgMTYuNjY2VjkuMTY2MDJDNy40OTk5NiA4LjI0NTU0IDguMjQ2MTUgNy40OTkzNSA5LjE2NjYzIDcuNDk5MzVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMzg1XzEwNTc4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIihnZXRRdWVzdGlvbnMoaSk/LmNvbnRyb2xzPy5sZW5ndGggPz8gMCkgPiAxXCIgKGNsaWNrKT1cIm9uUXVlc3Rpb25EZWxldGUoaSwgailcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHF1ZXN0aW9uXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjUgNC45OTkzNUg0LjE2NjY3TTQuMTY2NjcgNC45OTkzNUgxNy41TTQuMTY2NjcgNC45OTkzNVYxNi42NjZDNC4xNjY2NyAxNy4xMDggNC4zNDIyNiAxNy41MzIgNC42NTQ4MiAxNy44NDQ1QzQuOTY3MzggMTguMTU3MSA1LjM5MTMxIDE4LjMzMjcgNS44MzMzMyAxOC4zMzI3SDE0LjE2NjdDMTQuNjA4NyAxOC4zMzI3IDE1LjAzMjYgMTguMTU3MSAxNS4zNDUyIDE3Ljg0NDVDMTUuNjU3NyAxNy41MzIgMTUuODMzMyAxNy4xMDggMTUuODMzMyAxNi42NjZWNC45OTkzNUg0LjE2NjY3Wk02LjY2NjY3IDQuOTk5MzVWMy4zMzI2OEM2LjY2NjY3IDIuODkwNjUgNi44NDIyNiAyLjQ2NjczIDcuMTU0ODIgMi4xNTQxN0M3LjQ2NzM4IDEuODQxNjEgNy44OTEzMSAxLjY2NjAyIDguMzMzMzMgMS42NjYwMkgxMS42NjY3QzEyLjEwODcgMS42NjYwMiAxMi41MzI2IDEuODQxNjEgMTIuODQ1MiAyLjE1NDE3QzEzLjE1NzcgMi40NjY3MyAxMy4zMzMzIDIuODkwNjUgMTMuMzMzMyAzLjMzMjY4VjQuOTk5MzVNOC4zMzMzMyA5LjE2NjAyVjE0LjE2Nk0xMS42NjY3IDkuMTY2MDJWMTQuMTY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkTmV3UXVlc3Rpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJqID09PSAoZ2V0UXVlc3Rpb25zKGkpPy5jb250cm9scz8ubGVuZ3RoID8/IDApIC0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1yLTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTk5OTkgNC4xNjYwMlYxNS44MzI3TTQuMTY2NjYgOS45OTkzNUgxNS44MzMzXCIgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkIE5ldyBRdWVzdGlvbjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|