@smarterplan/ngx-smarterplan-admin 0.1.45 → 0.1.47
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/esm2020/lib/user/user-mission-form/user-mission-form.component.mjs +26 -11
- package/esm2020/lib/user/user.component.mjs +3 -3
- package/esm2020/lib/visitor/visitor.component.mjs +7 -3
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs +31 -13
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs +31 -13
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/lib/user/user-mission-form/user-mission-form.component.d.ts +6 -2
- package/lib/visitor/visitor.component.d.ts +4 -0
- package/package.json +2 -2
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
|
+
import { textValidator, noEmptyValidator, emailValidator } from '@smarterplan/ngx-smarterplan-core';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/forms";
|
|
5
6
|
import * as i2 from "@smarterplan/ngx-smarterplan-core";
|
|
6
7
|
import * as i3 from "@ngx-translate/core";
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
import * as i5 from "
|
|
8
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i5 from "../form-mission/form-mission.component";
|
|
9
10
|
import * as i6 from "@angular/common";
|
|
10
11
|
export class UserMissionFormComponent {
|
|
11
|
-
constructor(fb, userService, translate) {
|
|
12
|
+
constructor(fb, userService, translate, validatorsService) {
|
|
12
13
|
this.fb = fb;
|
|
13
14
|
this.userService = userService;
|
|
14
15
|
this.translate = translate;
|
|
16
|
+
this.validatorsService = validatorsService;
|
|
15
17
|
this.createForExistingUser = false;
|
|
16
18
|
this.added = new EventEmitter();
|
|
17
19
|
this.working = false;
|
|
20
|
+
this.errorForm = false;
|
|
18
21
|
}
|
|
19
22
|
ngOnInit() {
|
|
20
23
|
this.onAddNewUserMissionToOrg();
|
|
21
24
|
}
|
|
22
25
|
async onAddNewUserMissionToOrg() {
|
|
23
26
|
this.form = this.fb.group({
|
|
24
|
-
email: [null, [Validators.required]],
|
|
25
|
-
lastName: [""],
|
|
26
|
-
firstName: [""],
|
|
27
|
+
email: [null, [Validators.required, emailValidator()]],
|
|
28
|
+
lastName: ["", [Validators.maxLength(255), textValidator(), noEmptyValidator()]],
|
|
29
|
+
firstName: ["", [Validators.maxLength(255), textValidator(), noEmptyValidator()]],
|
|
27
30
|
});
|
|
28
31
|
}
|
|
29
32
|
onCancel() {
|
|
@@ -33,6 +36,10 @@ export class UserMissionFormComponent {
|
|
|
33
36
|
return this.form.get("email");
|
|
34
37
|
}
|
|
35
38
|
async onSubmit() {
|
|
39
|
+
if (!this.form.valid) {
|
|
40
|
+
this.errorForm = true;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
36
43
|
this.working = true;
|
|
37
44
|
let p;
|
|
38
45
|
try {
|
|
@@ -86,13 +93,21 @@ export class UserMissionFormComponent {
|
|
|
86
93
|
this.added.emit(false);
|
|
87
94
|
}
|
|
88
95
|
}
|
|
96
|
+
isFormError(control) {
|
|
97
|
+
return control && control.invalid && this.errorForm;
|
|
98
|
+
}
|
|
99
|
+
onFormChange() {
|
|
100
|
+
if (this.errorForm && this.form.valid) {
|
|
101
|
+
this.errorForm = false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
89
104
|
}
|
|
90
|
-
UserMissionFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserMissionFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BaseUserService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
91
|
-
UserMissionFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: UserMissionFormComponent, selector: "lib-user-mission-form", inputs: { addToOrganisation: "addToOrganisation", isSP: "isSP", createForExistingUser: "createForExistingUser", currentOrg: "currentOrg" }, outputs: { added: "added" }, ngImport: i0, template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" [
|
|
105
|
+
UserMissionFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserMissionFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BaseUserService }, { token: i3.TranslateService }, { token: i2.ValidatorsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
+
UserMissionFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: UserMissionFormComponent, selector: "lib-user-mission-form", inputs: { addToOrganisation: "addToOrganisation", isSP: "isSP", createForExistingUser: "createForExistingUser", currentOrg: "currentOrg" }, outputs: { added: "added" }, ngImport: i0, template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-user-email\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['email'])|| isFormError(form.controls['email'])}\"\r\n required formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-email-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['email']) \r\n || isFormError(form.controls['email'])\">\r\n {{validatorsService.getError(form.controls['email']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\" data-testid=\"new-user-lastName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['lastName'])|| isFormError(form.controls['lastName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-lastName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['lastName']) \r\n || isFormError(form.controls['lastName'])\">\r\n {{validatorsService.getError(form.controls['lastName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\" data-testid=\"new-user-firstName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['firstName'])|| isFormError(form.controls['firstName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-firstName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['firstName']) \r\n || isFormError(form.controls['firstName'])\">\r\n {{validatorsService.getError(form.controls['firstName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <div *ngIf=\"createdUser; else waitingForUser\">\r\n <div class=\"alert alert-info\">\r\n {{'User successfully created' | translate}}\r\n </div>\r\n <lib-form-mission [organisationForMission]=\"addToOrganisation\" [userForMissionID]=\"createdUser.id\"\r\n [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\" (addedMissionInput)=\"onMissionInput($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <ng-template #waitingForUser>\r\n <div class=\"action-button-container\">\r\n <button data-testid=\"new-user-submit-btn\" type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n [disabled]=\"working\">{{'Create user' | translate}}</button>\r\n <button data-testid=\"new-user-cancel-btn\" type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-user-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n </ngb-alert>\r\n </div>\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'Mission details' | translate }}</h4>\r\n </div>\r\n <ngb-alert type=\"warning\" [dismissible]=\"false\">{{'Please create a user first' | translate}}.</ngb-alert>\r\n\r\n </ng-template>\r\n </form>\r\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"], components: [{ type: i4.NgbAlert, selector: "ngb-alert", inputs: ["animation", "dismissible", "type"], outputs: ["closed"], exportAs: ["ngbAlert"] }, { type: i2.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }, { type: i5.FormMissionComponent, selector: "lib-form-mission", inputs: ["missionToEdit", "organisationForMission", "isSP", "userForMissionID", "currentUserOrganisation"], outputs: ["addedMissionInput"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe } });
|
|
92
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserMissionFormComponent, decorators: [{
|
|
93
108
|
type: Component,
|
|
94
|
-
args: [{ selector: 'lib-user-mission-form', template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" [
|
|
95
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.BaseUserService }, { type: i3.TranslateService }]; }, propDecorators: { addToOrganisation: [{
|
|
109
|
+
args: [{ selector: 'lib-user-mission-form', template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-user-email\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['email'])|| isFormError(form.controls['email'])}\"\r\n required formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-email-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['email']) \r\n || isFormError(form.controls['email'])\">\r\n {{validatorsService.getError(form.controls['email']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\" data-testid=\"new-user-lastName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['lastName'])|| isFormError(form.controls['lastName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-lastName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['lastName']) \r\n || isFormError(form.controls['lastName'])\">\r\n {{validatorsService.getError(form.controls['lastName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\" data-testid=\"new-user-firstName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['firstName'])|| isFormError(form.controls['firstName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-firstName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['firstName']) \r\n || isFormError(form.controls['firstName'])\">\r\n {{validatorsService.getError(form.controls['firstName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <div *ngIf=\"createdUser; else waitingForUser\">\r\n <div class=\"alert alert-info\">\r\n {{'User successfully created' | translate}}\r\n </div>\r\n <lib-form-mission [organisationForMission]=\"addToOrganisation\" [userForMissionID]=\"createdUser.id\"\r\n [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\" (addedMissionInput)=\"onMissionInput($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <ng-template #waitingForUser>\r\n <div class=\"action-button-container\">\r\n <button data-testid=\"new-user-submit-btn\" type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n [disabled]=\"working\">{{'Create user' | translate}}</button>\r\n <button data-testid=\"new-user-cancel-btn\" type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-user-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n </ngb-alert>\r\n </div>\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'Mission details' | translate }}</h4>\r\n </div>\r\n <ngb-alert type=\"warning\" [dismissible]=\"false\">{{'Please create a user first' | translate}}.</ngb-alert>\r\n\r\n </ng-template>\r\n </form>\r\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"] }]
|
|
110
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.BaseUserService }, { type: i3.TranslateService }, { type: i2.ValidatorsService }]; }, propDecorators: { addToOrganisation: [{
|
|
96
111
|
type: Input
|
|
97
112
|
}], isSP: [{
|
|
98
113
|
type: Input
|
|
@@ -103,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
103
118
|
}], added: [{
|
|
104
119
|
type: Output
|
|
105
120
|
}] } });
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdXNlci91c2VyLW1pc3Npb24tZm9ybS91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL3VzZXItbWlzc2lvbi1mb3JtL3VzZXItbWlzc2lvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUEwQixVQUFVLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBU3JGLE1BQU0sT0FBTyx3QkFBd0I7SUFvQmpDLFlBQ1ksRUFBZSxFQUNmLFdBQTRCLEVBQzVCLFNBQTJCO1FBRjNCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFqQjlCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQU03QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU5QyxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBVVosQ0FBQztJQUVMLFFBQVE7UUFDSixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3RCLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDZCxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDbEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDVixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQVUsQ0FBQztRQUNmLElBQUk7WUFDQSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNsQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLEVBQUU7Z0JBQ0gsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixPQUFPO2FBQ1Y7WUFDRCxJQUFJO2dCQUNBLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FDMUQsU0FBUyxFQUNULElBQUksQ0FDUCxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7YUFDOUI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPO2FBQ1Y7U0FDSjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMkNBQTJDO0lBQzNDLG1DQUFtQztJQUNuQywyREFBMkQ7SUFDM0QscUNBQXFDO0lBQ3JDLGFBQWE7SUFDYix5QkFBeUI7SUFDekIsd0RBQXdEO0lBQ3hELDJEQUEyRDtJQUMzRCxxQ0FBcUM7SUFDckMsK0VBQStFO0lBQy9FLGdCQUFnQjtJQUNoQiwrQ0FBK0M7SUFDL0MsaUVBQWlFO0lBQ2pFLGNBQWM7SUFDZCxTQUFTO0lBQ1QsSUFBSTtJQUVKLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBZ0I7UUFDakMsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsdUNBQXVDLENBQzFELElBQUksQ0FBQyxZQUF1QixFQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FDbkMsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7O3FIQXhHUSx3QkFBd0I7eUdBQXhCLHdCQUF3QixzT0NWckMsdzdGQXlETTsyRkQvQ08sd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLHVCQUF1QjsrSkFNeEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPcmdhbmlzYXRpb24sIE1pc3Npb24sIFByb2ZpbGUsIEJhc2VVc2VyU2VydmljZSB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLXVzZXItbWlzc2lvbi1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWlzc2lvbkZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBJbnB1dCgpIGFkZFRvT3JnYW5pc2F0aW9uOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgQElucHV0KCkgaXNTUDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKSBjcmVhdGVGb3JFeGlzdGluZ1VzZXIgPSBmYWxzZTtcclxuXHJcbiAgICBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgQElucHV0KCkgY3VycmVudE9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIEBPdXRwdXQoKSBhZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICB3b3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgbWlzc2lvbklucHV0OiBNaXNzaW9uO1xyXG5cclxuICAgIGNyZWF0ZWRVc2VyOiBQcm9maWxlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGVtYWlsOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IFtcIlwiXSxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiBbXCJcIl0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRlZC5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZW1haWwoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcImVtYWlsXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHA6IFByb2ZpbGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgICAgICBwID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5wcm9maWxlRm9yTWFpbChmb3JtVmFsdWUuZW1haWwpO1xyXG4gICAgICAgICAgICBpZiAocCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoXCJVc2VyIHdpdGggdGhpcyBlbWFpbCBleGlzdHMgYWxyZWFkeSFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZmlsZSA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UuY3JlYXRlVXNlckFXU2FuZFByb2ZpbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybVZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVc2VyIGNyZWF0ZWQhXCIsIHByb2ZpbGUubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVkVXNlciA9IHByb2ZpbGU7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KHRoaXMudHJhbnNsYXRlLmluc3RhbnQoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmMgdXBkYXRlQWxsTWlzc2lvbnNGcm9tVGVtcGxhdGUobWlzc2lvbklucHV0OiBVcGRhdGVNaXNzaW9uSW5wdXQpIHtcclxuICAgIC8vICAgICAvLyBhbGwgbWlzc2lvbnMgb2YgdGhpcyBvcmdhbmlzYXRpb25cclxuICAgIC8vICAgICBjb25zdCBtaXNzaW9uc0Zyb21UZW1wbGF0ZSA9XHJcbiAgICAvLyAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeVRlbXBsYXRlKFxyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0LmlkLFxyXG4gICAgLy8gICAgICAgICApO1xyXG4gICAgLy8gICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgLy8gICAgICAgICBtaXNzaW9uc0Zyb21UZW1wbGF0ZS5tYXAoYXN5bmMgKG1pc3Npb24pID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25UZW1wbGF0ZSA9IHsgLi4ubWlzc2lvbklucHV0IH07XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5zZW5kVXBkYXRlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbWlzc2lvblRlbXBsYXRlLmVtYWlsU3RhdHVzID0gRW1haWxTdGF0dXMuVVBEQVRFX1RPX0RFTElWRVI7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICBtaXNzaW9uVGVtcGxhdGUuaWQgPSBtaXNzaW9uLmlkO1xyXG4gICAgLy8gICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS51cGRhdGUobWlzc2lvblRlbXBsYXRlKTtcclxuICAgIC8vICAgICAgICAgfSksXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBhc3luYyBvbk1pc3Npb25JbnB1dChtaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgdGhpcy5taXNzaW9uSW5wdXQgPSBtaXNzaW9uO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZU9yVXBkYXRlTWlzc2lvbkZvck9yZ1dpdGhQcm9wZXJ0eShcclxuICAgICAgICAgICAgICAgIHRoaXMubWlzc2lvbklucHV0IGFzIE1pc3Npb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1pc3Npb25JbnB1dC5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRlZC5lbWl0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkZWQuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJmb3JtXCI+XHJcbiAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwZXJzb25hbEluZm9cIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDFyZW07XCI+XHJcbiAgICAgICAgICAgICAgICA8aDQ+e3sgJ1VzZXIgUGVyc29uYWwgSW5mb3JtYXRpb24nIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydFbWFpbCcgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwiZW1haWwuaW52YWxpZCAmJiBlbWFpbC50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBbiBlbWFpbCBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydMYXN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0ZpcnN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cIndvcmtpbmdcIj5cclxuICAgICAgICAgICAgPGxpYi1sb2FkZXI+PC9saWItbG9hZGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY3JlYXRlZFVzZXI7IGVsc2Ugd2FpdGluZ0ZvclVzZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIHt7J1VzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxsaWItZm9ybS1taXNzaW9uIFtvcmdhbmlzYXRpb25Gb3JNaXNzaW9uXT1cImFkZFRvT3JnYW5pc2F0aW9uXCIgW3VzZXJGb3JNaXNzaW9uSURdPVwiY3JlYXRlZFVzZXIuaWRcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRVc2VyT3JnYW5pc2F0aW9uXT1cImN1cnJlbnRPcmdcIiBbaXNTUF09XCJpc1NQXCIgKGFkZGVkTWlzc2lvbklucHV0KT1cIm9uTWlzc2lvbklucHV0KCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9saWItZm9ybS1taXNzaW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjd2FpdGluZ0ZvclVzZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXItMyBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwid29ya2luZyB8fCBmb3JtLmludmFsaWRcIj57eydDcmVhdGUgdXNlcicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwid29ya2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiPnt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDFyZW07XCI+XHJcbiAgICAgICAgICAgICAgICA8aDQ+e3sgJ01pc3Npb24gZGV0YWlscycgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nYi1hbGVydCB0eXBlPVwid2FybmluZ1wiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiPnt7J1BsZWFzZSBjcmVhdGUgYSB1c2VyIGZpcnN0JyB8IHRyYW5zbGF0ZX19LjwvbmdiLWFsZXJ0PlxyXG5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj4iXX0=
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdXNlci91c2VyLW1pc3Npb24tZm9ybS91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL3VzZXItbWlzc2lvbi1mb3JtL3VzZXItbWlzc2lvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUEwQixVQUFVLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUFxRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7O0FBT3ZLLE1BQU0sT0FBTyx3QkFBd0I7SUFzQmpDLFlBQ1ksRUFBZSxFQUNmLFdBQTRCLEVBQzVCLFNBQTJCLEVBQzVCLGlCQUFxQztRQUhwQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFwQnZDLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQU03QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU5QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBTWhCLGNBQVMsR0FBWSxLQUFLLENBQUM7SUFPdkIsQ0FBQztJQUVMLFFBQVE7UUFDSixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxD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LENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FDbkMsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBTztRQUNmLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4RCxDQUFDO0lBR0QsWUFBWTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMxQjtJQUVMLENBQUM7O3FIQTVIUSx3QkFBd0I7eUdBQXhCLHdCQUF3QixzT0NWckMsaWxLQW1GTTsyRkR6RU8sd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLHVCQUF1QjsrTEFNeEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPcmdhbmlzYXRpb24sIE1pc3Npb24sIFByb2ZpbGUsIEJhc2VVc2VyU2VydmljZSwgVmFsaWRhdG9yc1NlcnZpY2UsdGV4dFZhbGlkYXRvciwgbm9FbXB0eVZhbGlkYXRvciwgZW1haWxWYWxpZGF0b3IgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi11c2VyLW1pc3Npb24tZm9ybScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1pc3Npb25Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSBhZGRUb09yZ2FuaXNhdGlvbjogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIEBJbnB1dCgpIGlzU1A6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KCkgY3JlYXRlRm9yRXhpc3RpbmdVc2VyID0gZmFsc2U7XHJcblxyXG4gICAgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIEBJbnB1dCgpIGN1cnJlbnRPcmc6IE9yZ2FuaXNhdGlvbjtcclxuXHJcbiAgICBAT3V0cHV0KCkgYWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gICAgd29ya2luZyA9IGZhbHNlO1xyXG5cclxuICAgIG1pc3Npb25JbnB1dDogTWlzc2lvbjtcclxuXHJcbiAgICBjcmVhdGVkVXNlcjogUHJvZmlsZTtcclxuXHJcbiAgICBlcnJvckZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHZhbGlkYXRvcnNTZXJ2aWNlIDogVmFsaWRhdG9yc1NlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGVtYWlsOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGVtYWlsVmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IFtcIlwiLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiBbXCJcIixbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLmFkZGVkLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbWFpbCgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFwiZW1haWxcIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwOiBQcm9maWxlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgICAgICAgICAgcCA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UucHJvZmlsZUZvck1haWwoZm9ybVZhbHVlLmVtYWlsKTtcclxuICAgICAgICAgICAgaWYgKHApIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiVXNlciB3aXRoIHRoaXMgZW1haWwgZXhpc3RzIGFscmVhZHkhXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZVVzZXJBV1NhbmRQcm9maWxlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1WYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNlciBjcmVhdGVkIVwiLCBwcm9maWxlLm1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlZFVzZXIgPSBwcm9maWxlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KEpTT04uc3RyaW5naWZ5KGVycm9yKSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFzeW5jIHVwZGF0ZUFsbE1pc3Npb25zRnJvbVRlbXBsYXRlKG1pc3Npb25JbnB1dDogVXBkYXRlTWlzc2lvbklucHV0KSB7XHJcbiAgICAvLyAgICAgLy8gYWxsIG1pc3Npb25zIG9mIHRoaXMgb3JnYW5pc2F0aW9uXHJcbiAgICAvLyAgICAgY29uc3QgbWlzc2lvbnNGcm9tVGVtcGxhdGUgPVxyXG4gICAgLy8gICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zQnlUZW1wbGF0ZShcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMubWlzc2lvblRvRWRpdC5pZCxcclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgIC8vICAgICAgICAgbWlzc2lvbnNGcm9tVGVtcGxhdGUubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBtaXNzaW9uVGVtcGxhdGUgPSB7IC4uLm1pc3Npb25JbnB1dCB9O1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMuc2VuZFVwZGF0ZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIG1pc3Npb25UZW1wbGF0ZS5lbWFpbFN0YXR1cyA9IEVtYWlsU3RhdHVzLlVQREFURV9UT19ERUxJVkVSO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgbWlzc2lvblRlbXBsYXRlLmlkID0gbWlzc2lvbi5pZDtcclxuICAgIC8vICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UudXBkYXRlKG1pc3Npb25UZW1wbGF0ZSk7XHJcbiAgICAvLyAgICAgICAgIH0pLFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgYXN5bmMgb25NaXNzaW9uSW5wdXQobWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIGlmIChtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWlzc2lvbklucHV0ID0gbWlzc2lvbjtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVPclVwZGF0ZU1pc3Npb25Gb3JPcmdXaXRoUHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1pc3Npb25JbnB1dCBhcyBNaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5taXNzaW9uSW5wdXQub3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkZWQuZW1pdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGVkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0Zvcm1FcnJvcihjb250cm9sKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIHRoaXMuZXJyb3JGb3JtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JGb3JtICYmIHRoaXMuZm9ybS52YWxpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZvcm1cIj5cclxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInBlcnNvbmFsSW5mb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTtcIj5cclxuICAgICAgICAgICAgICAgIDxoND57eyAnVXNlciBQZXJzb25hbCBJbmZvcm1hdGlvbicgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0VtYWlsJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWVtYWlsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2VtYWlsJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2VtYWlsJ10pfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWVtYWlsLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydlbWFpbCddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snZW1haWwnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snZW1haWwnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snTGFzdCBuYW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWxhc3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSl8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWxhc3ROYW1lLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydsYXN0TmFtZSddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snRmlyc3QgbmFtZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGRhdGEtdGVzdGlkPVwibmV3LXVzZXItZmlyc3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snZmlyc3ROYW1lJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2ZpcnN0TmFtZSddKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LXVzZXItZmlyc3ROYW1lLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydmaXJzdE5hbWUnXSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2ZpcnN0TmFtZSddKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydmaXJzdE5hbWUnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJ3b3JraW5nXCI+XHJcbiAgICAgICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNyZWF0ZWRVc2VyOyBlbHNlIHdhaXRpbmdGb3JVc2VyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICB7eydVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bGliLWZvcm0tbWlzc2lvbiBbb3JnYW5pc2F0aW9uRm9yTWlzc2lvbl09XCJhZGRUb09yZ2FuaXNhdGlvblwiIFt1c2VyRm9yTWlzc2lvbklEXT1cImNyZWF0ZWRVc2VyLmlkXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50VXNlck9yZ2FuaXNhdGlvbl09XCJjdXJyZW50T3JnXCIgW2lzU1BdPVwiaXNTUFwiIChhZGRlZE1pc3Npb25JbnB1dCk9XCJvbk1pc3Npb25JbnB1dCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvbGliLWZvcm0tbWlzc2lvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3dhaXRpbmdGb3JVc2VyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctdXNlci1zdWJtaXQtYnRuXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1yLTMgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndvcmtpbmdcIj57eydDcmVhdGUgdXNlcicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWNhbmNlbC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwid29ya2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiPnt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImVycm9yRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWZvcm0taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydlcnJvckZvcm0uaW5mb0J0bicgfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgPGg0Pnt7ICdNaXNzaW9uIGRldGFpbHMnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZ2ItYWxlcnQgdHlwZT1cIndhcm5pbmdcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIj57eydQbGVhc2UgY3JlYXRlIGEgdXNlciBmaXJzdCcgfCB0cmFuc2xhdGV9fS48L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+Il19
|
|
@@ -317,9 +317,9 @@ export class UserComponent {
|
|
|
317
317
|
}
|
|
318
318
|
}
|
|
319
319
|
UserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserComponent, deps: [{ token: i1.BaseUserService }, { token: i1.MissionService }, { token: i1.DomainService }, { token: i1.OrganisationService }, { token: i2.NgbModal }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
320
|
-
UserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: UserComponent, selector: "lib-user", ngImport: i0, template: "<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Users' | translate}}</h3>\r\n <!-- <app-search-bar *ngIf=\"!hideList\" [searchable]=\"orgsUsersMissions\" objectType=\"USER\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!hideList\">\r\n <button class=\"btn btn-outline-primary rounded-pill add-button\" *ngIf=\"isManager && !isGuide\" (click)=\"onAddOrg()\">\r\n {{'Add user to new organisation' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!hideList\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"filteredOrgsUsersMissions\" data-testid=\"mission-organisation-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let o of filteredOrgsUsersMissions\">\r\n <div class=\"d-flex justify-content-between align-items-center font-weight-bold\"\r\n ngbTooltip=\"See details and users\" style=\"cursor: pointer;\" (click)=\"onToggleDetailOrg(o.org.id, o.org)\">\r\n {{o.org.name}} <small *ngIf=\"o.org.id == currentOrg.id\">({{'My organisation' | translate}})</small>\r\n <small *ngIf=\"isSP && clientsSP.includes(o.org.id)\">({{'Client of SmarterPlan' | translate}})</small>\r\n <small *ngIf=\"isSP && getOrderedOrg(o.org.id)\">({{'Client of ' | translate}}\r\n {{getOrderedOrg(o.org.id)}})</small>\r\n <lib-chevron [conditionShowing]=\"detailsOrg==o.org.id\" [ngClass]=\"[getStringNoSpace(o.org.name)]\"></lib-chevron>\r\n </div>\r\n <div class=\"missions\" *ngIf=\"detailsOrg==o.org.id\">\r\n <div class='d-flex'>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3\" (click)=\"onAdd(o.org)\">{{'Add user' |\r\n translate}}</button>\r\n </div>\r\n\r\n <ul class=\"list-group list-group-flush\" data-testid=\"mission-user-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of o.users\"\r\n (click)=\"onToggleDetailUser(a.user.id)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.user.displayName}}\r\n <lib-chevron [conditionShowing]=\"detailsUser==a.user.id\" [ngClass]=\"[getStringNoSpace(a.user.displayName)]\"></lib-chevron>\r\n </div>\r\n\r\n <div *ngIf=\"detailsUser==a.user.id\">\r\n <div class=\"ml-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{'Email' | translate}}: {{a.user.email }}\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" data-testid=\"mission-new-btn\"\r\n (click)=\"onAddForUser(o.org, a.user)\">{{'Add new mission' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" (click)=\"onClearToken(a)\">\r\n {{'Clear Token' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\"\r\n (click)=\"onDeleteUser(a.user)\">{{'Delete user' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{ a.missions.length > 0 ? ('Current Missions' | translate) : ('No missions' | translate)}}\r\n </div>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let mis of a.missions\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.description\">\r\n {{'Description' | translate}}: {{mis.description}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.templateMissionID\">\r\n {{'Attendee of tour' | translate}}: {{mis.templateMission.title}}</li>\r\n\r\n <li class=\"list-group-item bg-transparent\">{{'Role' | translate}}: {{ mis.role }}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.hashtags && mis.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}: <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of mis.hashtags\">\r\n {{ hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}: {{\r\n mis.locale ? mis.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}: {{\r\n mis.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Ordered by' | translate }}: {{\r\n mis.orderedOrganisation.name}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.domains\">{{'Domains' | translate }}:\r\n {{mis.domains ?\r\n domainIdsToStringForMission(mis) : (\"No data\" | translate) }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized location' | translate }}:\r\n {{ mis.space ? mis.space.name : \"No location\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized zone' | translate }}:\r\n {{ mis.zone ? mis.zone.name : \"All zones allowed\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Starts' | translate }}:\r\n {{ mis.startDateTime ? (mis.startDateTime | timeDateString: \"day_time_zone\" | async) :\r\n \"No data\" | translate}}, {{'Ends' | translate}}: {{ mis.endDateTime\r\n ? (mis.endDateTime | timeDateString: \"day_time_zone\" | async)\r\n : \"No data\" | translate}}.\r\n </li>\r\n </ul>\r\n <div class=\"action-button-container\" >\r\n <button type=\"button\" data-testid=\"edit-mission-btn\" class=\"btn btn-outline-primary rounded-pill mr-2 action-button\"\r\n (click)=\"onEdit(mis)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" *ngIf=\"mis.role === 'VISITOR' || mis.role === 'VISITOR_MUSEUM'\"\r\n class=\"btn btn-outline-primary rounded-pill mr-2 action-button share-visitor-button\"\r\n (click)=\"onSetForShareableLink(a.user, mis)\">{{'Generate Shareable Link' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n (click)=\"onDeleteMission(mis)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"create\">\r\n <lib-user-mission-form [addToOrganisation]=\"addToOrg\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (added)=\"userAdded($event)\">\r\n </lib-user-mission-form>\r\n </div>\r\n <div *ngIf=\"edit\">\r\n <lib-form-mission [missionToEdit]=\"missionToEdit\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n (addedMissionInput)=\"onMissionEdited($event)\"></lib-form-mission>\r\n </div>\r\n <div *ngIf=\"createForExistingUser\">\r\n <lib-form-mission [organisationForMission]=\"addToOrg\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n [userForMissionID]=\"userForAddingMission.id\" (addedMissionInput)=\"onMissionCreated($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <div *ngIf=\"isAddingOrg || isAddingToExistingOrg\">\r\n <lib-form-organisation [currentOrg]=\"currentOrg\" [currentUser]=\"me\" [existing]=\"isAddingToExistingOrg\"\r\n (added)=\"orgAdded($event)\"></lib-form-organisation>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-4 col-lg-6\" *ngIf=\"orgSelectedDetails && !isGuide\">\r\n <lib-detail-organisation [org]=\"orgSelectedDetails\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (orgChanged)='orgAdded($event)'></lib-detail-organisation>\r\n </div>\r\n </div>\r\n</div>", styles: [".add-button{width:-moz-fit-content;width:fit-content;margin-left:.5rem}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.action-button-container .share-visitor-button{width:-moz-fit-content;width:fit-content}\n"], components: [{ type: i1.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }, { type: i4.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }, { type: i5.UserMissionFormComponent, selector: "lib-user-mission-form", inputs: ["addToOrganisation", "isSP", "createForExistingUser", "currentOrg"], outputs: ["added"] }, { type: i6.FormMissionComponent, selector: "lib-form-mission", inputs: ["missionToEdit", "organisationForMission", "isSP", "userForMissionID", "currentUserOrganisation"], outputs: ["addedMissionInput"] }, { type: i7.FormOrganisationComponent, selector: "lib-form-organisation", inputs: ["currentOrg", "currentUser", "existing"], outputs: ["added"] }, { type: i8.DetailOrganisationComponent, selector: "lib-detail-organisation", inputs: ["org", "currentOrg", "isSP"], outputs: ["orgChanged"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe, "async": i9.AsyncPipe, "hashtagFromID": i1.HashtagFromIdPipe, "timeDateString": i1.TimeDateToLocalStringPipe } });
|
|
320
|
+
UserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: UserComponent, selector: "lib-user", ngImport: i0, template: "<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Users' | translate}}</h3>\r\n <!-- <app-search-bar *ngIf=\"!hideList\" [searchable]=\"orgsUsersMissions\" objectType=\"USER\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!hideList\">\r\n <button class=\"btn btn-outline-primary rounded-pill add-button\" *ngIf=\"isManager && !isGuide\" (click)=\"onAddOrg()\">\r\n {{'Add user to new organisation' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!hideList\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"filteredOrgsUsersMissions\" data-testid=\"mission-organisation-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let o of filteredOrgsUsersMissions\">\r\n <div class=\"d-flex justify-content-between align-items-center font-weight-bold\"\r\n ngbTooltip=\"See details and users\" style=\"cursor: pointer;\" (click)=\"onToggleDetailOrg(o.org.id, o.org)\">\r\n {{o.org.name}} <small *ngIf=\"o.org.id == currentOrg.id\">({{'My organisation' | translate}})</small>\r\n <small *ngIf=\"isSP && clientsSP.includes(o.org.id)\">({{'Client of SmarterPlan' | translate}})</small>\r\n <small *ngIf=\"isSP && getOrderedOrg(o.org.id)\">({{'Client of ' | translate}}\r\n {{getOrderedOrg(o.org.id)}})</small>\r\n <lib-chevron [conditionShowing]=\"detailsOrg==o.org.id\" [ngClass]=\"[getStringNoSpace(o.org.name)]\"></lib-chevron>\r\n </div>\r\n <div class=\"missions\" *ngIf=\"detailsOrg==o.org.id\">\r\n <div class='d-flex'>\r\n <button data-testid=\"user-new-btn\" class=\"btn btn-outline-primary rounded-pill mt-3 mb-3\" (click)=\"onAdd(o.org)\">{{'Add user' |\r\n translate}}</button>\r\n </div>\r\n\r\n <ul class=\"list-group list-group-flush\" data-testid=\"mission-user-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of o.users\"\r\n (click)=\"onToggleDetailUser(a.user.id)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.user.displayName}}\r\n <lib-chevron [conditionShowing]=\"detailsUser==a.user.id\" [ngClass]=\"[getStringNoSpace(a.user.displayName)]\"></lib-chevron>\r\n </div>\r\n\r\n <div *ngIf=\"detailsUser==a.user.id\">\r\n <div class=\"ml-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{'Email' | translate}}: {{a.user.email }}\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" data-testid=\"mission-new-btn\"\r\n (click)=\"onAddForUser(o.org, a.user)\">{{'Add new mission' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" (click)=\"onClearToken(a)\">\r\n {{'Clear Token' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\"\r\n (click)=\"onDeleteUser(a.user)\">{{'Delete user' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{ a.missions.length > 0 ? ('Current Missions' | translate) : ('No missions' | translate)}}\r\n </div>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let mis of a.missions\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.description\">\r\n {{'Description' | translate}}: {{mis.description}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.templateMissionID\">\r\n {{'Attendee of tour' | translate}}: {{mis.templateMission.title}}</li>\r\n\r\n <li class=\"list-group-item bg-transparent\">{{'Role' | translate}}: {{ mis.role }}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.hashtags && mis.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}: <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of mis.hashtags\">\r\n {{ hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}: {{\r\n mis.locale ? mis.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}: {{\r\n mis.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Ordered by' | translate }}: {{\r\n mis.orderedOrganisation.name}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.domains\">{{'Domains' | translate }}:\r\n {{mis.domains ?\r\n domainIdsToStringForMission(mis) : (\"No data\" | translate) }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized location' | translate }}:\r\n {{ mis.space ? mis.space.name : \"No location\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized zone' | translate }}:\r\n {{ mis.zone ? mis.zone.name : \"All zones allowed\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Starts' | translate }}:\r\n {{ mis.startDateTime ? (mis.startDateTime | timeDateString: \"day_time_zone\" | async) :\r\n \"No data\" | translate}}, {{'Ends' | translate}}: {{ mis.endDateTime\r\n ? (mis.endDateTime | timeDateString: \"day_time_zone\" | async)\r\n : \"No data\" | translate}}.\r\n </li>\r\n </ul>\r\n <div class=\"action-button-container\" >\r\n <button type=\"button\" data-testid=\"edit-mission-btn\" class=\"btn btn-outline-primary rounded-pill mr-2 action-button\"\r\n (click)=\"onEdit(mis)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" *ngIf=\"mis.role === 'VISITOR' || mis.role === 'VISITOR_MUSEUM'\"\r\n class=\"btn btn-outline-primary rounded-pill mr-2 action-button share-visitor-button\"\r\n (click)=\"onSetForShareableLink(a.user, mis)\">{{'Generate Shareable Link' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n (click)=\"onDeleteMission(mis)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"create\">\r\n <lib-user-mission-form [addToOrganisation]=\"addToOrg\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (added)=\"userAdded($event)\">\r\n </lib-user-mission-form>\r\n </div>\r\n <div *ngIf=\"edit\">\r\n <lib-form-mission [missionToEdit]=\"missionToEdit\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n (addedMissionInput)=\"onMissionEdited($event)\"></lib-form-mission>\r\n </div>\r\n <div *ngIf=\"createForExistingUser\">\r\n <lib-form-mission [organisationForMission]=\"addToOrg\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n [userForMissionID]=\"userForAddingMission.id\" (addedMissionInput)=\"onMissionCreated($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <div *ngIf=\"isAddingOrg || isAddingToExistingOrg\">\r\n <lib-form-organisation [currentOrg]=\"currentOrg\" [currentUser]=\"me\" [existing]=\"isAddingToExistingOrg\"\r\n (added)=\"orgAdded($event)\"></lib-form-organisation>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-4 col-lg-6\" *ngIf=\"orgSelectedDetails && !isGuide\">\r\n <lib-detail-organisation [org]=\"orgSelectedDetails\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (orgChanged)='orgAdded($event)'></lib-detail-organisation>\r\n </div>\r\n </div>\r\n</div>", styles: [".add-button{width:-moz-fit-content;width:fit-content;margin-left:.5rem}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.action-button-container .share-visitor-button{width:-moz-fit-content;width:fit-content}\n"], components: [{ type: i1.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }, { type: i4.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }, { type: i5.UserMissionFormComponent, selector: "lib-user-mission-form", inputs: ["addToOrganisation", "isSP", "createForExistingUser", "currentOrg"], outputs: ["added"] }, { type: i6.FormMissionComponent, selector: "lib-form-mission", inputs: ["missionToEdit", "organisationForMission", "isSP", "userForMissionID", "currentUserOrganisation"], outputs: ["addedMissionInput"] }, { type: i7.FormOrganisationComponent, selector: "lib-form-organisation", inputs: ["currentOrg", "currentUser", "existing"], outputs: ["added"] }, { type: i8.DetailOrganisationComponent, selector: "lib-detail-organisation", inputs: ["org", "currentOrg", "isSP"], outputs: ["orgChanged"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe, "async": i9.AsyncPipe, "hashtagFromID": i1.HashtagFromIdPipe, "timeDateString": i1.TimeDateToLocalStringPipe } });
|
|
321
321
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserComponent, decorators: [{
|
|
322
322
|
type: Component,
|
|
323
|
-
args: [{ selector: 'lib-user', template: "<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Users' | translate}}</h3>\r\n <!-- <app-search-bar *ngIf=\"!hideList\" [searchable]=\"orgsUsersMissions\" objectType=\"USER\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!hideList\">\r\n <button class=\"btn btn-outline-primary rounded-pill add-button\" *ngIf=\"isManager && !isGuide\" (click)=\"onAddOrg()\">\r\n {{'Add user to new organisation' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!hideList\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"filteredOrgsUsersMissions\" data-testid=\"mission-organisation-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let o of filteredOrgsUsersMissions\">\r\n <div class=\"d-flex justify-content-between align-items-center font-weight-bold\"\r\n ngbTooltip=\"See details and users\" style=\"cursor: pointer;\" (click)=\"onToggleDetailOrg(o.org.id, o.org)\">\r\n {{o.org.name}} <small *ngIf=\"o.org.id == currentOrg.id\">({{'My organisation' | translate}})</small>\r\n <small *ngIf=\"isSP && clientsSP.includes(o.org.id)\">({{'Client of SmarterPlan' | translate}})</small>\r\n <small *ngIf=\"isSP && getOrderedOrg(o.org.id)\">({{'Client of ' | translate}}\r\n {{getOrderedOrg(o.org.id)}})</small>\r\n <lib-chevron [conditionShowing]=\"detailsOrg==o.org.id\" [ngClass]=\"[getStringNoSpace(o.org.name)]\"></lib-chevron>\r\n </div>\r\n <div class=\"missions\" *ngIf=\"detailsOrg==o.org.id\">\r\n <div class='d-flex'>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3\" (click)=\"onAdd(o.org)\">{{'Add user' |\r\n translate}}</button>\r\n </div>\r\n\r\n <ul class=\"list-group list-group-flush\" data-testid=\"mission-user-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of o.users\"\r\n (click)=\"onToggleDetailUser(a.user.id)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.user.displayName}}\r\n <lib-chevron [conditionShowing]=\"detailsUser==a.user.id\" [ngClass]=\"[getStringNoSpace(a.user.displayName)]\"></lib-chevron>\r\n </div>\r\n\r\n <div *ngIf=\"detailsUser==a.user.id\">\r\n <div class=\"ml-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{'Email' | translate}}: {{a.user.email }}\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" data-testid=\"mission-new-btn\"\r\n (click)=\"onAddForUser(o.org, a.user)\">{{'Add new mission' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" (click)=\"onClearToken(a)\">\r\n {{'Clear Token' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\"\r\n (click)=\"onDeleteUser(a.user)\">{{'Delete user' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{ a.missions.length > 0 ? ('Current Missions' | translate) : ('No missions' | translate)}}\r\n </div>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let mis of a.missions\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.description\">\r\n {{'Description' | translate}}: {{mis.description}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.templateMissionID\">\r\n {{'Attendee of tour' | translate}}: {{mis.templateMission.title}}</li>\r\n\r\n <li class=\"list-group-item bg-transparent\">{{'Role' | translate}}: {{ mis.role }}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.hashtags && mis.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}: <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of mis.hashtags\">\r\n {{ hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}: {{\r\n mis.locale ? mis.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}: {{\r\n mis.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Ordered by' | translate }}: {{\r\n mis.orderedOrganisation.name}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.domains\">{{'Domains' | translate }}:\r\n {{mis.domains ?\r\n domainIdsToStringForMission(mis) : (\"No data\" | translate) }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized location' | translate }}:\r\n {{ mis.space ? mis.space.name : \"No location\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized zone' | translate }}:\r\n {{ mis.zone ? mis.zone.name : \"All zones allowed\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Starts' | translate }}:\r\n {{ mis.startDateTime ? (mis.startDateTime | timeDateString: \"day_time_zone\" | async) :\r\n \"No data\" | translate}}, {{'Ends' | translate}}: {{ mis.endDateTime\r\n ? (mis.endDateTime | timeDateString: \"day_time_zone\" | async)\r\n : \"No data\" | translate}}.\r\n </li>\r\n </ul>\r\n <div class=\"action-button-container\" >\r\n <button type=\"button\" data-testid=\"edit-mission-btn\" class=\"btn btn-outline-primary rounded-pill mr-2 action-button\"\r\n (click)=\"onEdit(mis)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" *ngIf=\"mis.role === 'VISITOR' || mis.role === 'VISITOR_MUSEUM'\"\r\n class=\"btn btn-outline-primary rounded-pill mr-2 action-button share-visitor-button\"\r\n (click)=\"onSetForShareableLink(a.user, mis)\">{{'Generate Shareable Link' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n (click)=\"onDeleteMission(mis)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"create\">\r\n <lib-user-mission-form [addToOrganisation]=\"addToOrg\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (added)=\"userAdded($event)\">\r\n </lib-user-mission-form>\r\n </div>\r\n <div *ngIf=\"edit\">\r\n <lib-form-mission [missionToEdit]=\"missionToEdit\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n (addedMissionInput)=\"onMissionEdited($event)\"></lib-form-mission>\r\n </div>\r\n <div *ngIf=\"createForExistingUser\">\r\n <lib-form-mission [organisationForMission]=\"addToOrg\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n [userForMissionID]=\"userForAddingMission.id\" (addedMissionInput)=\"onMissionCreated($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <div *ngIf=\"isAddingOrg || isAddingToExistingOrg\">\r\n <lib-form-organisation [currentOrg]=\"currentOrg\" [currentUser]=\"me\" [existing]=\"isAddingToExistingOrg\"\r\n (added)=\"orgAdded($event)\"></lib-form-organisation>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-4 col-lg-6\" *ngIf=\"orgSelectedDetails && !isGuide\">\r\n <lib-detail-organisation [org]=\"orgSelectedDetails\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (orgChanged)='orgAdded($event)'></lib-detail-organisation>\r\n </div>\r\n </div>\r\n</div>", styles: [".add-button{width:-moz-fit-content;width:fit-content;margin-left:.5rem}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.action-button-container .share-visitor-button{width:-moz-fit-content;width:fit-content}\n"] }]
|
|
323
|
+
args: [{ selector: 'lib-user', template: "<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Users' | translate}}</h3>\r\n <!-- <app-search-bar *ngIf=\"!hideList\" [searchable]=\"orgsUsersMissions\" objectType=\"USER\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!hideList\">\r\n <button class=\"btn btn-outline-primary rounded-pill add-button\" *ngIf=\"isManager && !isGuide\" (click)=\"onAddOrg()\">\r\n {{'Add user to new organisation' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!hideList\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"filteredOrgsUsersMissions\" data-testid=\"mission-organisation-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let o of filteredOrgsUsersMissions\">\r\n <div class=\"d-flex justify-content-between align-items-center font-weight-bold\"\r\n ngbTooltip=\"See details and users\" style=\"cursor: pointer;\" (click)=\"onToggleDetailOrg(o.org.id, o.org)\">\r\n {{o.org.name}} <small *ngIf=\"o.org.id == currentOrg.id\">({{'My organisation' | translate}})</small>\r\n <small *ngIf=\"isSP && clientsSP.includes(o.org.id)\">({{'Client of SmarterPlan' | translate}})</small>\r\n <small *ngIf=\"isSP && getOrderedOrg(o.org.id)\">({{'Client of ' | translate}}\r\n {{getOrderedOrg(o.org.id)}})</small>\r\n <lib-chevron [conditionShowing]=\"detailsOrg==o.org.id\" [ngClass]=\"[getStringNoSpace(o.org.name)]\"></lib-chevron>\r\n </div>\r\n <div class=\"missions\" *ngIf=\"detailsOrg==o.org.id\">\r\n <div class='d-flex'>\r\n <button data-testid=\"user-new-btn\" class=\"btn btn-outline-primary rounded-pill mt-3 mb-3\" (click)=\"onAdd(o.org)\">{{'Add user' |\r\n translate}}</button>\r\n </div>\r\n\r\n <ul class=\"list-group list-group-flush\" data-testid=\"mission-user-list\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of o.users\"\r\n (click)=\"onToggleDetailUser(a.user.id)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.user.displayName}}\r\n <lib-chevron [conditionShowing]=\"detailsUser==a.user.id\" [ngClass]=\"[getStringNoSpace(a.user.displayName)]\"></lib-chevron>\r\n </div>\r\n\r\n <div *ngIf=\"detailsUser==a.user.id\">\r\n <div class=\"ml-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{'Email' | translate}}: {{a.user.email }}\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" data-testid=\"mission-new-btn\"\r\n (click)=\"onAddForUser(o.org, a.user)\">{{'Add new mission' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" (click)=\"onClearToken(a)\">\r\n {{'Clear Token' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\"\r\n (click)=\"onDeleteUser(a.user)\">{{'Delete user' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{ a.missions.length > 0 ? ('Current Missions' | translate) : ('No missions' | translate)}}\r\n </div>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let mis of a.missions\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.description\">\r\n {{'Description' | translate}}: {{mis.description}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.templateMissionID\">\r\n {{'Attendee of tour' | translate}}: {{mis.templateMission.title}}</li>\r\n\r\n <li class=\"list-group-item bg-transparent\">{{'Role' | translate}}: {{ mis.role }}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.hashtags && mis.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}: <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of mis.hashtags\">\r\n {{ hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}: {{\r\n mis.locale ? mis.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}: {{\r\n mis.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Ordered by' | translate }}: {{\r\n mis.orderedOrganisation.name}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.domains\">{{'Domains' | translate }}:\r\n {{mis.domains ?\r\n domainIdsToStringForMission(mis) : (\"No data\" | translate) }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized location' | translate }}:\r\n {{ mis.space ? mis.space.name : \"No location\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized zone' | translate }}:\r\n {{ mis.zone ? mis.zone.name : \"All zones allowed\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Starts' | translate }}:\r\n {{ mis.startDateTime ? (mis.startDateTime | timeDateString: \"day_time_zone\" | async) :\r\n \"No data\" | translate}}, {{'Ends' | translate}}: {{ mis.endDateTime\r\n ? (mis.endDateTime | timeDateString: \"day_time_zone\" | async)\r\n : \"No data\" | translate}}.\r\n </li>\r\n </ul>\r\n <div class=\"action-button-container\" >\r\n <button type=\"button\" data-testid=\"edit-mission-btn\" class=\"btn btn-outline-primary rounded-pill mr-2 action-button\"\r\n (click)=\"onEdit(mis)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" *ngIf=\"mis.role === 'VISITOR' || mis.role === 'VISITOR_MUSEUM'\"\r\n class=\"btn btn-outline-primary rounded-pill mr-2 action-button share-visitor-button\"\r\n (click)=\"onSetForShareableLink(a.user, mis)\">{{'Generate Shareable Link' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n (click)=\"onDeleteMission(mis)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"create\">\r\n <lib-user-mission-form [addToOrganisation]=\"addToOrg\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (added)=\"userAdded($event)\">\r\n </lib-user-mission-form>\r\n </div>\r\n <div *ngIf=\"edit\">\r\n <lib-form-mission [missionToEdit]=\"missionToEdit\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n (addedMissionInput)=\"onMissionEdited($event)\"></lib-form-mission>\r\n </div>\r\n <div *ngIf=\"createForExistingUser\">\r\n <lib-form-mission [organisationForMission]=\"addToOrg\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n [userForMissionID]=\"userForAddingMission.id\" (addedMissionInput)=\"onMissionCreated($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <div *ngIf=\"isAddingOrg || isAddingToExistingOrg\">\r\n <lib-form-organisation [currentOrg]=\"currentOrg\" [currentUser]=\"me\" [existing]=\"isAddingToExistingOrg\"\r\n (added)=\"orgAdded($event)\"></lib-form-organisation>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-4 col-lg-6\" *ngIf=\"orgSelectedDetails && !isGuide\">\r\n <lib-detail-organisation [org]=\"orgSelectedDetails\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (orgChanged)='orgAdded($event)'></lib-detail-organisation>\r\n </div>\r\n </div>\r\n</div>", styles: [".add-button{width:-moz-fit-content;width:fit-content;margin-left:.5rem}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.action-button-container .share-visitor-button{width:-moz-fit-content;width:fit-content}\n"] }]
|
|
324
324
|
}], ctorParameters: function () { return [{ type: i1.BaseUserService }, { type: i1.MissionService }, { type: i1.DomainService }, { type: i1.OrganisationService }, { type: i2.NgbModal }, { type: i3.TranslateService }]; } });
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL3VzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdXNlci91c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUlILFVBQVUsRUFDVixxQkFBcUIsRUFNckIsYUFBYSxFQUNiLFNBQVMsR0FDWixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7O0FBUXhFLE1BQU0sT0FBTyxhQUFhO0lBbUV0QixZQUNZLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxZQUFzQixFQUN0QixTQUEyQjtRQUwzQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUF0RXZDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFbEIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQiwwQkFBcUIs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QUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MEdBcmFRLGFBQWE7OEZBQWIsYUFBYSxnREN6QjFCLG1oVEE4SU07MkZEckhPLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0ksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VVc2VyU2VydmljZSxcclxuICAgIERvbWFpbixcclxuICAgIERvbWFpblNlcnZpY2UsXHJcbiAgICBEb21haW5UeXBlLFxyXG4gICAgZmlsdGVyVW5pcXVlQXJyYXlCeUlELFxyXG4gICAgTWlzc2lvbixcclxuICAgIE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgT3JnYW5pc2F0aW9uLFxyXG4gICAgT3JnYW5pc2F0aW9uU2VydmljZSxcclxuICAgIFByb2ZpbGUsXHJcbiAgICBQcm9maWxlRW50aXR5LFxyXG4gICAgd2FpdFVudGlsLFxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHdWVzdExpbmtDb21wb25lbnQgfSBmcm9tICcuLi9ndWVzdC1saW5rL2d1ZXN0LWxpbmsuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLXVzZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdXNlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyczogQXJyYXk8TWlzc2lvbiAmIHsgbmFtZTogc3RyaW5nOyB9PjtcclxuXHJcbiAgICBkZXRhaWxzVXNlciA9ICctMSc7XHJcblxyXG4gICAgZGV0YWlsc09yZyA9ICctMSc7XHJcblxyXG4gICAgcXVlcnkgPSAnJztcclxuXHJcbiAgICBjcmVhdGUgPSBmYWxzZTtcclxuXHJcbiAgICBlZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgd29ya2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGNyZWF0ZUZvckV4aXN0aW5nVXNlciA9IGZhbHNlO1xyXG5cclxuICAgIGlzQWRkaW5nT3JnID0gZmFsc2U7XHJcblxyXG4gICAgaXNBZGRpbmdUb0V4aXN0aW5nT3JnID0gZmFsc2U7XHJcblxyXG4gICAgdXNlckZvckFkZGluZ01pc3Npb246IFByb2ZpbGVFbnRpdHk7XHJcblxyXG4gICAgY3VycmVudE9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIG1lOiBQcm9maWxlRW50aXR5O1xyXG5cclxuICAgIGlzTWFuYWdlciA9IGZhbHNlO1xyXG5cclxuICAgIGhpZGVMaXN0ID0gZmFsc2U7XHJcblxyXG4gICAgb3Jnc1VzZXJzTWlzc2lvbnM6IEFycmF5PHtcclxuICAgICAgICBvcmc6IE9yZ2FuaXNhdGlvbjtcclxuICAgICAgICB1c2VyczogQXJyYXk8e1xyXG4gICAgICAgICAgICBtaXNzaW9uczogTWlzc2lvbltdO1xyXG4gICAgICAgICAgICB1c2VyOiBQcm9maWxlRW50aXR5O1xyXG4gICAgICAgIH0+O1xyXG4gICAgfT4gPSBbXTtcclxuXHJcbiAgICBtaXNzaW9uVG9FZGl0OiBNaXNzaW9uO1xyXG5cclxuICAgIGlzU1AgPSBmYWxzZTtcclxuXHJcbiAgICBpc0d1aWRlID0gZmFsc2U7XHJcblxyXG4gICAgY2xpZW50c1NQOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHByZXN0YXRhaXJlQ2xpZW50czogQXJyYXk8eyBvcmdPd25lcjogc3RyaW5nOyBwcmVzdGF0YWlyZTogc3RyaW5nOyB9PiA9IFtdO1xyXG5cclxuICAgIGRvbWFpbnM6IERvbWFpbltdO1xyXG5cclxuICAgIGFkZFRvT3JnOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgb3JnU2VsZWN0ZWREZXRhaWxzOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgZmlsdGVyZWRPcmdzVXNlcnNNaXNzaW9uczogQXJyYXk8e1xyXG4gICAgICAgIG9yZzogT3JnYW5pc2F0aW9uO1xyXG4gICAgICAgIHVzZXJzOiBBcnJheTx7XHJcbiAgICAgICAgICAgIG1pc3Npb25zOiBNaXNzaW9uW107XHJcbiAgICAgICAgICAgIHVzZXI6IFByb2ZpbGVFbnRpdHk7XHJcbiAgICAgICAgfT47XHJcbiAgICB9PjtcclxuXHJcbiAgICBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZG9tYWluU2VydmljZTogRG9tYWluU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG9yZ2FuaXNhdGlvblNlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIC8vIEB0b2RvIGxpc3QgbXkgb3JnIGFuZCBzdWIgb3Jnc1xyXG5cclxuXHJcblxyXG4gICAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5pbml0SW5mbygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZXNldExpc3QgZmV0Y2hlcyBhIGZyZXNoIHVzZXIgbGlzdCBmcm9tIHNlcnZlclxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNldExpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5vcmdzVXNlcnNNaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgIGxldCBhbGxNaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTUCkge1xyXG4gICAgICAgICAgICB0aGlzLm9yZ3NVc2Vyc01pc3Npb25zID0gYXdhaXQgdGhpcy5pbml0TGlzdEZvclNQKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcmdzVXNlcnNNaXNzaW9ucyA9IHRoaXMub3Jnc1VzZXJzTWlzc2lvbnM7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0d1aWRlKSB7XHJcbiAgICAgICAgICAgIC8vIGd1aWRlIHNlZXMgb25seSBpdHMgb3duIG9yZ2FuaXNhdGlvblxyXG4gICAgICAgICAgICBhbGxNaXNzaW9ucyA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zQnlPcmdhbmlzYXRpb24odGhpcy5jdXJyZW50T3JnLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGxNaXNzaW9ucyA9IGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmcuaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudE9yZ01pc3Npb25zID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZ2FuaXNhdGlvbih0aGlzLmN1cnJlbnRPcmcuaWQpO1xyXG4gICAgICAgICAgICBhbGxNaXNzaW9ucyA9IFsuLi5hbGxNaXNzaW9ucywgLi4uY3VycmVudE9yZ01pc3Npb25zXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFsbE1pc3Npb25zID0gYWxsTWlzc2lvbnMuZmlsdGVyKChtaXNzaW9uKSA9PiBtaXNzaW9uLnVzZXIgJiYgIW1pc3Npb24udXNlci5kZWxldGVkQXQpO1xyXG4gICAgICAgIGFsbE1pc3Npb25zID0gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFsbE1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgaWYgKGFsbE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yZ3MgPSBhbGxNaXNzaW9ucy5tYXAoKG1pcykgPT4gbWlzLm9yZ2FuaXNhdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2ZpbGVzID0gYWxsTWlzc2lvbnMubWFwKChtaXMpID0+IG1pcy51c2VyKTtcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlT3JnID0gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKG9yZ3MpO1xyXG4gICAgICAgICAgICBjb25zdCB1bmlxdWVVc2VycyA9IGZpbHRlclVuaXF1ZUFycmF5QnlJRChwcm9maWxlcyk7XHJcbiAgICAgICAgICAgIHVuaXF1ZU9yZy5tYXAoKG9yZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JnTWlzc2lvbnMgPSBhbGxNaXNzaW9ucy5maWx0ZXIoKG1pcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaXMub3JnYW5pc2F0aW9uSUQgPT09IG9yZy5pZDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gdGhpcy5nZXRVc2Vyc0Zvck9yZ01pc3Npb25zKHVuaXF1ZVVzZXJzLCBvcmdNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICB1c2VycyA9IHVzZXJzLnNvcnQoKHVzZXIpID0+ICh1c2VyLnVzZXIuZW1haWwgPyAwIDogLTEpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcmcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmdzVXNlcnNNaXNzaW9ucy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3Jnc1VzZXJzTWlzc2lvbnMgPSB0aGlzLm9yZ3NVc2Vyc01pc3Npb25zO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRJbmZvKCkge1xyXG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmN1ICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMubWUgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1O1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9yZyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuaXNNYW5hZ2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNNYW5hZ2VyUm9sZUluQW55TWlzc2lvbigpO1xyXG4gICAgICAgIHRoaXMuaXNTUCA9IHRoaXMudXNlclNlcnZpY2UuaXNTUEFkbWluKCk7XHJcbiAgICAgICAgdGhpcy5pc0d1aWRlID0gdGhpcy51c2VyU2VydmljZS5pc0d1aWRlKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB0aGlzLnNldERvbWFpbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0TGlzdEZvclNQKCk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XHJcbiAgICAgICAgbGV0IGFsbE1pc3Npb25zID0gW107XHJcbiAgICAgICAgbGV0IGFsbE9yZ3MgPSBbXTtcclxuICAgICAgICBhbGxPcmdzID0gYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLmxpc3RPcmdhbmlzYXRpb25zKCk7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIGFsbE9yZ3MubWFwKGFzeW5jIChvcmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25zID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZy5pZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGFsbE1pc3Npb25zID0gWy4uLmFsbE1pc3Npb25zLCAuLi5taXNzaW9uc107XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvZmlsZXMgPSBhbGxNaXNzaW9uc1xyXG4gICAgICAgICAgICAubWFwKChtaXMpID0+IG1pcy51c2VyKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh1c2VyKSA9PiAhdXNlci5kZWxldGVkQXQpO1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZVVzZXJzID0gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFxyXG4gICAgICAgICAgICBwcm9maWxlcy5maWx0ZXIoKHByb2ZpbGUpID0+IHByb2ZpbGUgIT09IG51bGwpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhbGxPcmdzLm1hcCgob3JnKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yZ01pc3Npb25zID0gYWxsTWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXMub3JnYW5pc2F0aW9uSUQgPT09IG9yZy5pZDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAob3JnTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZ01pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZGVyZWRPcmdhbmlzYXRpb25JRCA9PT0gJzZlMjgyMDFmLTQ2NzktNGMyOS05ZDJkLThhMzI1ZjU3Y2VlOSdcclxuICAgICAgICAgICAgICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50c1NQLnB1c2gob3JnLmlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzdGF0YWlyZUNsaWVudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ093bmVyOiBvcmdNaXNzaW9uc1swXS5vcmRlcmVkT3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXN0YXRhaXJlOiBvcmcuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdXNlcnMgPSB0aGlzLmdldFVzZXJzRm9yT3JnTWlzc2lvbnModW5pcXVlVXNlcnMsIG9yZ01pc3Npb25zKTtcclxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgb3JnLFxyXG4gICAgICAgICAgICAgICAgdXNlcnMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXHJcbiAgICBnZXRVc2Vyc0Zvck9yZ01pc3Npb25zKFxyXG4gICAgICAgIHVuaXF1ZVVzZXJzOiBQcm9maWxlW10sXHJcbiAgICAgICAgb3JnTWlzc2lvbnM6IE1pc3Npb25bXVxyXG4gICAgKTogQXJyYXk8e1xyXG4gICAgICAgIG1pc3Npb25zOiBNaXNzaW9uW107XHJcbiAgICAgICAgdXNlcjogUHJvZmlsZUVudGl0eTtcclxuICAgIH0+IHtcclxuICAgICAgICBjb25zdCB1c2VycyA9IHVuaXF1ZVVzZXJzLm1hcCgodXNlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyTWlzc2lvbnMgPSBvcmdNaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0udXNlcklEID09PSB1c2VyLmlkKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyUHJvZmlsZSA9IG5ldyBQcm9maWxlRW50aXR5KHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgLy8gb25jZSB3ZSBnb3QgdGhlIHVzZXIgd2UgY2hlY2sgZmlsdGVyIG9ubHkgYWN0aXZlIG1pc3Npb25zIChub3QgZGVsZXRlZClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU1pc3Npb25zID0gdXNlck1pc3Npb25zLmZpbHRlcigobWlzKSA9PiAhbWlzLmRlbGV0ZWRBdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pc3Npb25zOiBhY3RpdmVNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiB1c2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJzLmZpbHRlcigodXMpID0+IHVzICE9PSBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXREb21haW5zKCkge1xyXG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBhd2FpdCB0aGlzLmRvbWFpblNlcnZpY2UuZ2V0RG9tYWluc0Zvck9yZ0V4Y2x1ZGluZ1R5cGVzKFxyXG4gICAgICAgICAgICBbRG9tYWluVHlwZS5GRUFUVVJFLCBEb21haW5UeXBlLkJPT0tJTkddLFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmcuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZG9tYWlucyA9IGRvbWFpbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBvblRvZ2dsZURldGFpbCBmb2xkcy91bmZvbGRzIGRldGFpbHMgZm9yIGEgZ2l2ZW4gb3JnYW5pc2F0aW9uXHJcbiAgICAgKiBAcGFyYW0gaSBpbmRleCBvZiB0aGUgb3JnYW5pc2F0aW9uIHRvIGJlIHRvZ2dsZWRcclxuICAgICAqL1xyXG4gICAgb25Ub2dnbGVEZXRhaWxPcmcoaW5kZXgsIG9yZykge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsc09yZyA9IGluZGV4ID09PSB0aGlzLmRldGFpbHNPcmcgPyAnLTEnIDogaW5kZXg7XHJcbiAgICAgICAgdGhpcy5vcmdTZWxlY3RlZERldGFpbHMgPSB0aGlzLmRldGFpbHNPcmcgPT09ICctMScgPyBudWxsIDogb3JnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9nZ2xlRGV0YWlsVXNlcihpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsc1VzZXIgPSBpbmRleCA9PT0gdGhpcy5kZXRhaWxzVXNlciA/ICctMScgOiBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFkZChvcmc6IE9yZ2FuaXNhdGlvbikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFkZFRvT3JnID0gb3JnO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRWRpdChtOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1pc3Npb25Ub0VkaXQgPSBtO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvckV4aXN0aW5nVXNlciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkRm9yVXNlcihvcmc6IE9yZ2FuaXNhdGlvbiwgdXNlcjogUHJvZmlsZUVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuaGlkZUxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9yRXhpc3RpbmdVc2VyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVzZXJGb3JBZGRpbmdNaXNzaW9uID0gdXNlcjtcclxuICAgICAgICB0aGlzLmFkZFRvT3JnID0gb3JnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkT3JnKCkge1xyXG4gICAgICAgIHRoaXMuaGlkZUxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdPcmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9yZ0FkZGVkKGlzQWRkZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0FkZGluZ09yZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdUb0V4aXN0aW5nT3JnID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGlzQWRkZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXNlckFkZGVkKGlzQWRkZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFkZFRvT3JnID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvckV4aXN0aW5nVXNlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlckZvckFkZGluZ01pc3Npb24gPSBudWxsO1xyXG4gICAgICAgIGlmIChpc0FkZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTWlzc2lvbkVkaXRlZChtaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0ID0gbnVsbDtcclxuICAgICAgICBpZiAobWlzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZU9yVXBkYXRlTWlzc2lvbkZvck9yZ1dpdGhQcm9wZXJ0eShcclxuICAgICAgICAgICAgICAgIG1pc3Npb24sXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLm9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oaWRlTGlzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTWlzc2lvbkNyZWF0ZWQobWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9yRXhpc3RpbmdVc2VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51c2VyRm9yQWRkaW5nTWlzc2lvbiA9IG51bGw7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVPclVwZGF0ZU1pc3Npb25Gb3JPcmdXaXRoUHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbi5vcmdhbmlzYXRpb25JRFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JkZXJlZE9yZyhvcmdJRDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgdGhpcy5wcmVzdGF0YWlyZUNsaWVudHMubWFwKGFzeW5jIChwcmVzdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKHByZXN0YS5wcmVzdGF0YWlyZSA9PT0gb3JnSUQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9yZyA9IHRoaXMub3Jnc1VzZXJzTWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgIChvYmplY3QpID0+IG9iamVjdC5vcmcuaWQgPT09IHByZXN0YS5vcmdPd25lclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChvcmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBvcmdbMF0ub3JnLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBkb21haW5JZHNUb1N0cmluZ0Zvck1pc3Npb24obWlzc2lvbjogTWlzc2lvbik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG5hbWVzID0gJyc7XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5JRCBvZiBtaXNzaW9uLmRvbWFpbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgZG9tYWluID0gdGhpcy5kb21haW5zLmZpbmQoKGRvbSkgPT4gZG9tLmlkID09PSBkb21haW5JRCk7XHJcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcclxuICAgICAgICAgICAgICAgIG5hbWVzID0gYCR7bmFtZXN9ICR7ZG9tYWluLm5hbWV9LGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5hbWVzLnNsaWNlKDAsIC0xKTsgLy8gdG8gcmVtb3ZlIGxhc3QgY29tbWFcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRlbGV0ZU1pc3Npb24obWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdjb25maXJtLmRlbGV0ZU1pc3Npb24nKTtcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25EZWxldGVVc2VyKHVzZXIpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnY29uZmlybS5kZWxldGVVc2VyJyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJNaXNzaW9ucyA9IGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNGcm9tVXNlcklEKFxyXG4gICAgICAgICAgICAgICAgdXNlci5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodXNlck1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdERlbGV0ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlck1pc3Npb25zLm1hcChhc3luYyAobWlzc2lvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLm9yZGVyZWRPcmdhbmlzYXRpb25JRCA9PT0gdGhpcy5jdXJyZW50T3JnLmlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU1BcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVkTWlzc2lvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVkTWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdERlbGV0ZS5wdXNoKGRlbGV0ZWRNaXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdERlbGV0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5zb2Z0RGVsZXRlVXNlcih1c2VyLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5zb2Z0RGVsZXRlVXNlcih1c2VyLmlkKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRMaXN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlSZXN1bHRzU2VhcmNoQmFyKHJlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLm9yZ1NlbGVjdGVkRGV0YWlscyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9yZ3NVc2Vyc01pc3Npb25zID0gcmVzdWx0cyB8fCB0aGlzLm9yZ3NVc2Vyc01pc3Npb25zO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkSW5FeGlzdGluZ09yZygpIHtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzQWRkaW5nVG9FeGlzdGluZ09yZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGVuY3lwdGVkIGxpbmsgYW5kIHNldHMgaXQgZm9yIGd1ZXN0TGluayBmb3IgU3BhY2UuXHJcbiAgICAgKiBAcGFyYW0gbWlzXHJcbiAgICAgKi9cclxuICAgIG9uU2V0Rm9yU2hhcmVhYmxlTGluayh1c2VyOiBQcm9maWxlRW50aXR5LCBtaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWZlcmVuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEd1ZXN0TGlua0NvbXBvbmVudCk7XHJcbiAgICAgICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2UudXNlcm5hbWUgPSB1c2VyLmVtYWlsO1xyXG4gICAgICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnNwYWNlSUQgPSBtaXNzaW9uLnNwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25DbGVhclRva2VuKHVzZXIpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNsZWFyVXNlclRva2VuKHVzZXIudXNlci5pZCk7XHJcbiAgICAgICAgY29uc3QgZmlyc3RNZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZmlyc3RUb2tlbk1lc3NhZ2UnKTtcclxuICAgICAgICBjb25zdCBzZWNvbmRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Vjb25kVG9rZW5NZXNzYWdlJyk7XHJcbiAgICAgICAgYWxlcnQoZmlyc3RNZXNzYWdlICsgdXNlci51c2VyLmRpc3BsYXlOYW1lICsgc2Vjb25kTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nTm9TcGFjZShkYXRhKTpzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvXFxzL2csJycpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtdGFiXCI+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1kYXNoYm9hcmQtdGFiXCI+XHJcbiAgICA8aDM+e3snVXNlcnMnIHwgdHJhbnNsYXRlfX08L2gzPlxyXG4gICAgPCEtLSA8YXBwLXNlYXJjaC1iYXIgKm5nSWY9XCIhaGlkZUxpc3RcIiBbc2VhcmNoYWJsZV09XCJvcmdzVXNlcnNNaXNzaW9uc1wiIG9iamVjdFR5cGU9XCJVU0VSXCJcclxuICAgICAgICAoc2VhcmNoRXZlbnQpPVwiYXBwbHlSZXN1bHRzU2VhcmNoQmFyKCRldmVudClcIj5cclxuICAgICAgPC9hcHAtc2VhcmNoLWJhcj4gLS0+XHJcbiAgICA8aHI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWwtMCBtYi0yXCIgKm5nSWY9XCIhaGlkZUxpc3RcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFkZC1idXR0b25cIiAqbmdJZj1cImlzTWFuYWdlciAmJiAhaXNHdWlkZVwiIChjbGljayk9XCJvbkFkZE9yZygpXCI+XHJcbiAgICAgICAgICB7eydBZGQgdXNlciB0byBuZXcgb3JnYW5pc2F0aW9uJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVMaXN0XCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCIgKm5nSWY9XCJmaWx0ZXJlZE9yZ3NVc2Vyc01pc3Npb25zXCIgZGF0YS10ZXN0aWQ9XCJtaXNzaW9uLW9yZ2FuaXNhdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBvIG9mIGZpbHRlcmVkT3Jnc1VzZXJzTWlzc2lvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZm9udC13ZWlnaHQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlNlZSBkZXRhaWxzIGFuZCB1c2Vyc1wiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJvblRvZ2dsZURldGFpbE9yZyhvLm9yZy5pZCwgby5vcmcpXCI+XHJcbiAgICAgICAgICAgICAge3tvLm9yZy5uYW1lfX0gPHNtYWxsICpuZ0lmPVwiby5vcmcuaWQgPT0gY3VycmVudE9yZy5pZFwiPih7eydNeSBvcmdhbmlzYXRpb24nIHwgdHJhbnNsYXRlfX0pPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJpc1NQICYmIGNsaWVudHNTUC5pbmNsdWRlcyhvLm9yZy5pZClcIj4oe3snQ2xpZW50IG9mIFNtYXJ0ZXJQbGFuJyB8IHRyYW5zbGF0ZX19KTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiaXNTUCAmJiBnZXRPcmRlcmVkT3JnKG8ub3JnLmlkKVwiPih7eydDbGllbnQgb2YgJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICB7e2dldE9yZGVyZWRPcmcoby5vcmcuaWQpfX0pPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiZGV0YWlsc09yZz09by5vcmcuaWRcIiAgW25nQ2xhc3NdPVwiW2dldFN0cmluZ05vU3BhY2Uoby5vcmcubmFtZSldXCI+PC9saWItY2hldnJvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaXNzaW9uc1wiICpuZ0lmPVwiZGV0YWlsc09yZz09by5vcmcuaWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWZsZXgnPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtdC0zIG1iLTNcIiAoY2xpY2spPVwib25BZGQoby5vcmcpXCI+e3snQWRkIHVzZXInIHxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCIgZGF0YS10ZXN0aWQ9XCJtaXNzaW9uLXVzZXItbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIiAqbmdGb3I9XCJsZXQgYSBvZiBvLnVzZXJzXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsVXNlcihhLnVzZXIuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3thLnVzZXIuZGlzcGxheU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJkZXRhaWxzVXNlcj09YS51c2VyLmlkXCIgW25nQ2xhc3NdPVwiW2dldFN0cmluZ05vU3BhY2UoYS51c2VyLmRpc3BsYXlOYW1lKV1cIj48L2xpYi1jaGV2cm9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkZXRhaWxzVXNlcj09YS51c2VyLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snRW1haWwnIHwgdHJhbnNsYXRlfX06IHt7YS51c2VyLmVtYWlsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgZGF0YS10ZXN0aWQ9XCJtaXNzaW9uLW5ldy1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZEZvclVzZXIoby5vcmcsIGEudXNlcilcIj57eydBZGQgbmV3IG1pc3Npb24nIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uQ2xlYXJUb2tlbihhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NsZWFyIFRva2VuJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlVXNlcihhLnVzZXIpXCI+e3snRGVsZXRlIHVzZXInIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhLm1pc3Npb25zLmxlbmd0aCA+IDAgPyAoJ0N1cnJlbnQgTWlzc2lvbnMnIHwgdHJhbnNsYXRlKSA6ICgnTm8gbWlzc2lvbnMnIHwgdHJhbnNsYXRlKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiICpuZ0Zvcj1cImxldCBtaXMgb2YgYS5taXNzaW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIm1pcy5kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlfX06IHt7bWlzLmRlc2NyaXB0aW9ufX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwibWlzLnRlbXBsYXRlTWlzc2lvbklEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBdHRlbmRlZSBvZiB0b3VyJyB8IHRyYW5zbGF0ZX19OiB7e21pcy50ZW1wbGF0ZU1pc3Npb24udGl0bGV9fTwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1JvbGUnIHwgdHJhbnNsYXRlfX06IHt7IG1pcy5yb2xlIH19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIm1pcy5oYXNodGFncyAmJiBtaXMuaGFzaHRhZ3MubGVuZ3RoPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydIYXNodGFncycgfCB0cmFuc2xhdGV9fTogPHVsIGNsYXNzPVwia2V5d29yZHNEaXNwbGF5IG5vLWJvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5d29yZHNkaXNwbGF5Q29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwia2V5d29yZHNJdGVtXCIgKm5nRm9yPVwibGV0IGhhc2h0YWcgb2YgbWlzLmhhc2h0YWdzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBoYXNodGFnIHwgaGFzaHRhZ0Zyb21JRCB8IGFzeW5jIH19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snTGFuZ3VhZ2UnIHwgdHJhbnNsYXRlIH19OiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzLmxvY2FsZSA/IG1pcy5sb2NhbGUgOiAoJ05vdCBhcHBsaWNhYmxlJyB8IHRyYW5zbGF0ZSl9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWNjZXNzIGxldmVsJyB8IHRyYW5zbGF0ZSB9fToge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcy5sZXZlbH19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydPcmRlcmVkIGJ5JyB8IHRyYW5zbGF0ZSB9fToge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcy5vcmRlcmVkT3JnYW5pc2F0aW9uLm5hbWV9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCJtaXMuZG9tYWluc1wiPnt7J0RvbWFpbnMnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttaXMuZG9tYWlucyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5JZHNUb1N0cmluZ0Zvck1pc3Npb24obWlzKSA6IChcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZSkgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0F1dGhvcml6ZWQgbG9jYXRpb24nIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWlzLnNwYWNlID8gbWlzLnNwYWNlLm5hbWUgOiBcIk5vIGxvY2F0aW9uXCIgfCB0cmFuc2xhdGV9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQXV0aG9yaXplZCB6b25lJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1pcy56b25lID8gbWlzLnpvbmUubmFtZSA6IFwiQWxsIHpvbmVzIGFsbG93ZWRcIiB8IHRyYW5zbGF0ZX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydTdGFydHMnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWlzLnN0YXJ0RGF0ZVRpbWUgPyAobWlzLnN0YXJ0RGF0ZVRpbWUgfCB0aW1lRGF0ZVN0cmluZzogXCJkYXlfdGltZV96b25lXCIgfCBhc3luYykgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fSwge3snRW5kcycgfCB0cmFuc2xhdGV9fToge3sgbWlzLmVuZERhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChtaXMuZW5kRGF0ZVRpbWUgfCB0aW1lRGF0ZVN0cmluZzogXCJkYXlfdGltZV96b25lXCIgfCBhc3luYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS10ZXN0aWQ9XCJlZGl0LW1pc3Npb24tYnRuXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXItMiBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQobWlzKVwiPnt7J0VkaXQnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJtaXMucm9sZSA9PT0gJ1ZJU0lUT1InIHx8IG1pcy5yb2xlID09PSAnVklTSVRPUl9NVVNFVU0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1yLTIgYWN0aW9uLWJ1dHRvbiBzaGFyZS12aXNpdG9yLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZXRGb3JTaGFyZWFibGVMaW5rKGEudXNlciwgbWlzKVwiPnt7J0dlbmVyYXRlIFNoYXJlYWJsZSBMaW5rJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlTWlzc2lvbihtaXMpXCI+e3snRGVsZXRlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImNyZWF0ZVwiPlxyXG4gICAgICAgIDxsaWItdXNlci1taXNzaW9uLWZvcm0gW2FkZFRvT3JnYW5pc2F0aW9uXT1cImFkZFRvT3JnXCIgW2N1cnJlbnRPcmddPVwiY3VycmVudE9yZ1wiIFtpc1NQXT1cImlzU1BcIlxyXG4gICAgICAgICAgKGFkZGVkKT1cInVzZXJBZGRlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9saWItdXNlci1taXNzaW9uLWZvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZWRpdFwiPlxyXG4gICAgICAgIDxsaWItZm9ybS1taXNzaW9uIFttaXNzaW9uVG9FZGl0XT1cIm1pc3Npb25Ub0VkaXRcIiBbY3VycmVudFVzZXJPcmdhbmlzYXRpb25dPVwiY3VycmVudE9yZ1wiIFtpc1NQXT1cImlzU1BcIlxyXG4gICAgICAgICAgKGFkZGVkTWlzc2lvbklucHV0KT1cIm9uTWlzc2lvbkVkaXRlZCgkZXZlbnQpXCI+PC9saWItZm9ybS1taXNzaW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImNyZWF0ZUZvckV4aXN0aW5nVXNlclwiPlxyXG4gICAgICAgIDxsaWItZm9ybS1taXNzaW9uIFtvcmdhbmlzYXRpb25Gb3JNaXNzaW9uXT1cImFkZFRvT3JnXCIgW2N1cnJlbnRVc2VyT3JnYW5pc2F0aW9uXT1cImN1cnJlbnRPcmdcIiBbaXNTUF09XCJpc1NQXCJcclxuICAgICAgICAgIFt1c2VyRm9yTWlzc2lvbklEXT1cInVzZXJGb3JBZGRpbmdNaXNzaW9uLmlkXCIgKGFkZGVkTWlzc2lvbklucHV0KT1cIm9uTWlzc2lvbkNyZWF0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDwvbGliLWZvcm0tbWlzc2lvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0FkZGluZ09yZyB8fCBpc0FkZGluZ1RvRXhpc3RpbmdPcmdcIj5cclxuICAgICAgICA8bGliLWZvcm0tb3JnYW5pc2F0aW9uIFtjdXJyZW50T3JnXT1cImN1cnJlbnRPcmdcIiBbY3VycmVudFVzZXJdPVwibWVcIiBbZXhpc3RpbmddPVwiaXNBZGRpbmdUb0V4aXN0aW5nT3JnXCJcclxuICAgICAgICAgIChhZGRlZCk9XCJvcmdBZGRlZCgkZXZlbnQpXCI+PC9saWItZm9ybS1vcmdhbmlzYXRpb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC1sZy02XCIgKm5nSWY9XCJvcmdTZWxlY3RlZERldGFpbHMgJiYgIWlzR3VpZGVcIj5cclxuICAgICAgPGxpYi1kZXRhaWwtb3JnYW5pc2F0aW9uIFtvcmddPVwib3JnU2VsZWN0ZWREZXRhaWxzXCIgW2N1cnJlbnRPcmddPVwiY3VycmVudE9yZ1wiIFtpc1NQXT1cImlzU1BcIlxyXG4gICAgICAgIChvcmdDaGFuZ2VkKT0nb3JnQWRkZWQoJGV2ZW50KSc+PC9saWItZGV0YWlsLW9yZ2FuaXNhdGlvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL3VzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdXNlci91c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUlILFVBQVUsRUFDVixxQkFBcUIsRUFNckIsYUFBYSxFQUNiLFNBQVMsR0FDWixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7O0FBUXhFLE1BQU0sT0FBTyxhQUFhO0lBbUV0QixZQUNZLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxZQUFzQixFQUN0QixTQUEyQjtRQUwzQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUF0RXZDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFbEIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFOUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBUTlCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixzQkFBaUIsR0FNWixFQUFFLENBQUM7UUFJUixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBRXpCLHVCQUFrQixHQUFzRCxFQUFFLENBQUM7UUFnQjNFLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFUixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVM3QixDQUFDO0lBRUwsaUNBQWlDO0lBSWpDLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUztRQUNYLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLHVDQUF1QztZQUN2QyxXQUFXO2dCQUNQLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9FO2FBQU07WUFDSCxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGdDQUFnQyxDQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDckIsQ0FBQztZQUNGLE1BQU0sa0JBQWtCLEdBQ3BCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLFdBQVcsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztTQUN6RDtRQUVELFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RixXQUFXLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakQsSUFBSSxXQUFXLEVBQUU7WUFDYixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUMzQyxPQUFPLEdBQUcsQ0FBQyxjQUFjLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDbEUsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLE1BQU0sR0FBRztvQkFDWCxHQUFHO29CQUNILEtBQUs7aUJBQ1IsQ0FBQztnQkFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNmLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN0QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQ2hFLEdBQUcsQ0FBQyxFQUFFLENBQ1QsQ0FBQztZQUNGLFdBQVcsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLFdBQVc7YUFDdkIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2FBQ3RCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQ3JDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FDakQsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzNDLE9BQU8sR0FBRyxDQUFDLGNBQWMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEIsSUFDSSxXQUFXLENBQUMsTUFBTSxDQUNkLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDRixDQUFDLENBQUMscUJBQXFCLEtBQUssc0NBQXNDLENBQ3pFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDZDtvQkFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQy9CO3FCQUFNO29CQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO3dCQUM5QyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUU7cUJBQ3RCLENBQUMsQ0FBQztpQkFDTjthQUNKO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRSxNQUFNLE1BQU0sR0FBRztnQkFDWCxHQUFHO2dCQUNILEtBQUs7YUFDUixDQUFDO1lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsc0JBQXNCLENBQ2xCLFdBQXNCLEVBQ3RCLFdBQXNCO1FBS3RCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsMEVBQTBFO2dCQUMxRSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEUsT0FBTztvQkFDSCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFLFdBQVc7aUJBQ3BCLENBQUM7YUFDTDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ1osTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUNuRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQWlCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQVU7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBaUIsRUFBRSxJQUFtQjtRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWdCO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWdCO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQWdCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksT0FBTyxFQUFFO1lBQ1QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHVDQUF1QyxDQUMxRCxPQUFPLEVBQ1AsT0FBTyxDQUFDLGNBQWMsRUFDdEIsS0FBSyxDQUNSLENBQUM7WUFDRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQWdCO1FBQ25DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLE9BQU8sRUFBRTtZQUNULE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyx1Q0FBdUMsQ0FDMUQsT0FBTyxFQUNQLE9BQU8sQ0FBQyxjQUFjLENBQ3pCLENBQUM7WUFDRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDdkIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFO2dCQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUNyQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FDaEQsQ0FBQztnQkFDRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQzFCO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxPQUFnQjtRQUN4QyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLE1BQU0sUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDL0QsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQzthQUN0QztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQWdCO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSTtRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQ2hFLElBQUksQ0FBQyxFQUFFLENBQ1YsQ0FBQztZQUNGLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUMvQixJQUNJLE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQ3BELElBQUksQ0FBQyxJQUFJLEVBQ1g7d0JBQ0UsTUFBTSxjQUFjLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzVELElBQUksY0FBYyxFQUFFOzRCQUNoQixZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUNyQztxQkFDSjtnQkFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO2dCQUNGLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMvQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztpQkFDMUI7YUFDSjtpQkFBTTtnQkFDSCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDMUI7U0FDSjtJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFPO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdkUsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLElBQW1CLEVBQUUsT0FBZ0I7UUFDdkQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSxjQUFjLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkQsY0FBYyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUk7UUFDbkIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MEdBcmFRLGFBQWE7OEZBQWIsYUFBYSxnREN6QjFCLGdqVEE4SU07MkZEckhPLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0ksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VVc2VyU2VydmljZSxcclxuICAgIERvbWFpbixcclxuICAgIERvbWFpblNlcnZpY2UsXHJcbiAgICBEb21haW5UeXBlLFxyXG4gICAgZmlsdGVyVW5pcXVlQXJyYXlCeUlELFxyXG4gICAgTWlzc2lvbixcclxuICAgIE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgT3JnYW5pc2F0aW9uLFxyXG4gICAgT3JnYW5pc2F0aW9uU2VydmljZSxcclxuICAgIFByb2ZpbGUsXHJcbiAgICBQcm9maWxlRW50aXR5LFxyXG4gICAgd2FpdFVudGlsLFxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHdWVzdExpbmtDb21wb25lbnQgfSBmcm9tICcuLi9ndWVzdC1saW5rL2d1ZXN0LWxpbmsuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLXVzZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdXNlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyczogQXJyYXk8TWlzc2lvbiAmIHsgbmFtZTogc3RyaW5nOyB9PjtcclxuXHJcbiAgICBkZXRhaWxzVXNlciA9ICctMSc7XHJcblxyXG4gICAgZGV0YWlsc09yZyA9ICctMSc7XHJcblxyXG4gICAgcXVlcnkgPSAnJztcclxuXHJcbiAgICBjcmVhdGUgPSBmYWxzZTtcclxuXHJcbiAgICBlZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgd29ya2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGNyZWF0ZUZvckV4aXN0aW5nVXNlciA9IGZhbHNlO1xyXG5cclxuICAgIGlzQWRkaW5nT3JnID0gZmFsc2U7XHJcblxyXG4gICAgaXNBZGRpbmdUb0V4aXN0aW5nT3JnID0gZmFsc2U7XHJcblxyXG4gICAgdXNlckZvckFkZGluZ01pc3Npb246IFByb2ZpbGVFbnRpdHk7XHJcblxyXG4gICAgY3VycmVudE9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIG1lOiBQcm9maWxlRW50aXR5O1xyXG5cclxuICAgIGlzTWFuYWdlciA9IGZhbHNlO1xyXG5cclxuICAgIGhpZGVMaXN0ID0gZmFsc2U7XHJcblxyXG4gICAgb3Jnc1VzZXJzTWlzc2lvbnM6IEFycmF5PHtcclxuICAgICAgICBvcmc6IE9yZ2FuaXNhdGlvbjtcclxuICAgICAgICB1c2VyczogQXJyYXk8e1xyXG4gICAgICAgICAgICBtaXNzaW9uczogTWlzc2lvbltdO1xyXG4gICAgICAgICAgICB1c2VyOiBQcm9maWxlRW50aXR5O1xyXG4gICAgICAgIH0+O1xyXG4gICAgfT4gPSBbXTtcclxuXHJcbiAgICBtaXNzaW9uVG9FZGl0OiBNaXNzaW9uO1xyXG5cclxuICAgIGlzU1AgPSBmYWxzZTtcclxuXHJcbiAgICBpc0d1aWRlID0gZmFsc2U7XHJcblxyXG4gICAgY2xpZW50c1NQOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHByZXN0YXRhaXJlQ2xpZW50czogQXJyYXk8eyBvcmdPd25lcjogc3RyaW5nOyBwcmVzdGF0YWlyZTogc3RyaW5nOyB9PiA9IFtdO1xyXG5cclxuICAgIGRvbWFpbnM6IERvbWFpbltdO1xyXG5cclxuICAgIGFkZFRvT3JnOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgb3JnU2VsZWN0ZWREZXRhaWxzOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgZmlsdGVyZWRPcmdzVXNlcnNNaXNzaW9uczogQXJyYXk8e1xyXG4gICAgICAgIG9yZzogT3JnYW5pc2F0aW9uO1xyXG4gICAgICAgIHVzZXJzOiBBcnJheTx7XHJcbiAgICAgICAgICAgIG1pc3Npb25zOiBNaXNzaW9uW107XHJcbiAgICAgICAgICAgIHVzZXI6IFByb2ZpbGVFbnRpdHk7XHJcbiAgICAgICAgfT47XHJcbiAgICB9PjtcclxuXHJcbiAgICBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZG9tYWluU2VydmljZTogRG9tYWluU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG9yZ2FuaXNhdGlvblNlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIC8vIEB0b2RvIGxpc3QgbXkgb3JnIGFuZCBzdWIgb3Jnc1xyXG5cclxuXHJcblxyXG4gICAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5pbml0SW5mbygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZXNldExpc3QgZmV0Y2hlcyBhIGZyZXNoIHVzZXIgbGlzdCBmcm9tIHNlcnZlclxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNldExpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5vcmdzVXNlcnNNaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgIGxldCBhbGxNaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTUCkge1xyXG4gICAgICAgICAgICB0aGlzLm9yZ3NVc2Vyc01pc3Npb25zID0gYXdhaXQgdGhpcy5pbml0TGlzdEZvclNQKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcmdzVXNlcnNNaXNzaW9ucyA9IHRoaXMub3Jnc1VzZXJzTWlzc2lvbnM7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0d1aWRlKSB7XHJcbiAgICAgICAgICAgIC8vIGd1aWRlIHNlZXMgb25seSBpdHMgb3duIG9yZ2FuaXNhdGlvblxyXG4gICAgICAgICAgICBhbGxNaXNzaW9ucyA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zQnlPcmdhbmlzYXRpb24odGhpcy5jdXJyZW50T3JnLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGxNaXNzaW9ucyA9IGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmcuaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudE9yZ01pc3Npb25zID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZ2FuaXNhdGlvbih0aGlzLmN1cnJlbnRPcmcuaWQpO1xyXG4gICAgICAgICAgICBhbGxNaXNzaW9ucyA9IFsuLi5hbGxNaXNzaW9ucywgLi4uY3VycmVudE9yZ01pc3Npb25zXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFsbE1pc3Npb25zID0gYWxsTWlzc2lvbnMuZmlsdGVyKChtaXNzaW9uKSA9PiBtaXNzaW9uLnVzZXIgJiYgIW1pc3Npb24udXNlci5kZWxldGVkQXQpO1xyXG4gICAgICAgIGFsbE1pc3Npb25zID0gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFsbE1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgaWYgKGFsbE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yZ3MgPSBhbGxNaXNzaW9ucy5tYXAoKG1pcykgPT4gbWlzLm9yZ2FuaXNhdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2ZpbGVzID0gYWxsTWlzc2lvbnMubWFwKChtaXMpID0+IG1pcy51c2VyKTtcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlT3JnID0gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKG9yZ3MpO1xyXG4gICAgICAgICAgICBjb25zdCB1bmlxdWVVc2VycyA9IGZpbHRlclVuaXF1ZUFycmF5QnlJRChwcm9maWxlcyk7XHJcbiAgICAgICAgICAgIHVuaXF1ZU9yZy5tYXAoKG9yZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JnTWlzc2lvbnMgPSBhbGxNaXNzaW9ucy5maWx0ZXIoKG1pcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaXMub3JnYW5pc2F0aW9uSUQgPT09IG9yZy5pZDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gdGhpcy5nZXRVc2Vyc0Zvck9yZ01pc3Npb25zKHVuaXF1ZVVzZXJzLCBvcmdNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICB1c2VycyA9IHVzZXJzLnNvcnQoKHVzZXIpID0+ICh1c2VyLnVzZXIuZW1haWwgPyAwIDogLTEpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcmcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmdzVXNlcnNNaXNzaW9ucy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3Jnc1VzZXJzTWlzc2lvbnMgPSB0aGlzLm9yZ3NVc2Vyc01pc3Npb25zO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRJbmZvKCkge1xyXG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmN1ICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMubWUgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1O1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9yZyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuaXNNYW5hZ2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNNYW5hZ2VyUm9sZUluQW55TWlzc2lvbigpO1xyXG4gICAgICAgIHRoaXMuaXNTUCA9IHRoaXMudXNlclNlcnZpY2UuaXNTUEFkbWluKCk7XHJcbiAgICAgICAgdGhpcy5pc0d1aWRlID0gdGhpcy51c2VyU2VydmljZS5pc0d1aWRlKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB0aGlzLnNldERvbWFpbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0TGlzdEZvclNQKCk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XHJcbiAgICAgICAgbGV0IGFsbE1pc3Npb25zID0gW107XHJcbiAgICAgICAgbGV0IGFsbE9yZ3MgPSBbXTtcclxuICAgICAgICBhbGxPcmdzID0gYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLmxpc3RPcmdhbmlzYXRpb25zKCk7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIGFsbE9yZ3MubWFwKGFzeW5jIChvcmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25zID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZy5pZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGFsbE1pc3Npb25zID0gWy4uLmFsbE1pc3Npb25zLCAuLi5taXNzaW9uc107XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvZmlsZXMgPSBhbGxNaXNzaW9uc1xyXG4gICAgICAgICAgICAubWFwKChtaXMpID0+IG1pcy51c2VyKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh1c2VyKSA9PiAhdXNlci5kZWxldGVkQXQpO1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZVVzZXJzID0gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFxyXG4gICAgICAgICAgICBwcm9maWxlcy5maWx0ZXIoKHByb2ZpbGUpID0+IHByb2ZpbGUgIT09IG51bGwpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhbGxPcmdzLm1hcCgob3JnKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yZ01pc3Npb25zID0gYWxsTWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXMub3JnYW5pc2F0aW9uSUQgPT09IG9yZy5pZDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAob3JnTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZ01pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZGVyZWRPcmdhbmlzYXRpb25JRCA9PT0gJzZlMjgyMDFmLTQ2NzktNGMyOS05ZDJkLThhMzI1ZjU3Y2VlOSdcclxuICAgICAgICAgICAgICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50c1NQLnB1c2gob3JnLmlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzdGF0YWlyZUNsaWVudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ093bmVyOiBvcmdNaXNzaW9uc1swXS5vcmRlcmVkT3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXN0YXRhaXJlOiBvcmcuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdXNlcnMgPSB0aGlzLmdldFVzZXJzRm9yT3JnTWlzc2lvbnModW5pcXVlVXNlcnMsIG9yZ01pc3Npb25zKTtcclxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgb3JnLFxyXG4gICAgICAgICAgICAgICAgdXNlcnMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXHJcbiAgICBnZXRVc2Vyc0Zvck9yZ01pc3Npb25zKFxyXG4gICAgICAgIHVuaXF1ZVVzZXJzOiBQcm9maWxlW10sXHJcbiAgICAgICAgb3JnTWlzc2lvbnM6IE1pc3Npb25bXVxyXG4gICAgKTogQXJyYXk8e1xyXG4gICAgICAgIG1pc3Npb25zOiBNaXNzaW9uW107XHJcbiAgICAgICAgdXNlcjogUHJvZmlsZUVudGl0eTtcclxuICAgIH0+IHtcclxuICAgICAgICBjb25zdCB1c2VycyA9IHVuaXF1ZVVzZXJzLm1hcCgodXNlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyTWlzc2lvbnMgPSBvcmdNaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0udXNlcklEID09PSB1c2VyLmlkKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyUHJvZmlsZSA9IG5ldyBQcm9maWxlRW50aXR5KHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgLy8gb25jZSB3ZSBnb3QgdGhlIHVzZXIgd2UgY2hlY2sgZmlsdGVyIG9ubHkgYWN0aXZlIG1pc3Npb25zIChub3QgZGVsZXRlZClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU1pc3Npb25zID0gdXNlck1pc3Npb25zLmZpbHRlcigobWlzKSA9PiAhbWlzLmRlbGV0ZWRBdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pc3Npb25zOiBhY3RpdmVNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiB1c2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJzLmZpbHRlcigodXMpID0+IHVzICE9PSBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXREb21haW5zKCkge1xyXG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBhd2FpdCB0aGlzLmRvbWFpblNlcnZpY2UuZ2V0RG9tYWluc0Zvck9yZ0V4Y2x1ZGluZ1R5cGVzKFxyXG4gICAgICAgICAgICBbRG9tYWluVHlwZS5GRUFUVVJFLCBEb21haW5UeXBlLkJPT0tJTkddLFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmcuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZG9tYWlucyA9IGRvbWFpbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBvblRvZ2dsZURldGFpbCBmb2xkcy91bmZvbGRzIGRldGFpbHMgZm9yIGEgZ2l2ZW4gb3JnYW5pc2F0aW9uXHJcbiAgICAgKiBAcGFyYW0gaSBpbmRleCBvZiB0aGUgb3JnYW5pc2F0aW9uIHRvIGJlIHRvZ2dsZWRcclxuICAgICAqL1xyXG4gICAgb25Ub2dnbGVEZXRhaWxPcmcoaW5kZXgsIG9yZykge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsc09yZyA9IGluZGV4ID09PSB0aGlzLmRldGFpbHNPcmcgPyAnLTEnIDogaW5kZXg7XHJcbiAgICAgICAgdGhpcy5vcmdTZWxlY3RlZERldGFpbHMgPSB0aGlzLmRldGFpbHNPcmcgPT09ICctMScgPyBudWxsIDogb3JnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9nZ2xlRGV0YWlsVXNlcihpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsc1VzZXIgPSBpbmRleCA9PT0gdGhpcy5kZXRhaWxzVXNlciA/ICctMScgOiBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFkZChvcmc6IE9yZ2FuaXNhdGlvbikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFkZFRvT3JnID0gb3JnO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRWRpdChtOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1pc3Npb25Ub0VkaXQgPSBtO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvckV4aXN0aW5nVXNlciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkRm9yVXNlcihvcmc6IE9yZ2FuaXNhdGlvbiwgdXNlcjogUHJvZmlsZUVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuaGlkZUxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9yRXhpc3RpbmdVc2VyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVzZXJGb3JBZGRpbmdNaXNzaW9uID0gdXNlcjtcclxuICAgICAgICB0aGlzLmFkZFRvT3JnID0gb3JnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkT3JnKCkge1xyXG4gICAgICAgIHRoaXMuaGlkZUxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdPcmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9yZ0FkZGVkKGlzQWRkZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0FkZGluZ09yZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdUb0V4aXN0aW5nT3JnID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGlzQWRkZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXNlckFkZGVkKGlzQWRkZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFkZFRvT3JnID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvckV4aXN0aW5nVXNlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlckZvckFkZGluZ01pc3Npb24gPSBudWxsO1xyXG4gICAgICAgIGlmIChpc0FkZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTWlzc2lvbkVkaXRlZChtaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0ID0gbnVsbDtcclxuICAgICAgICBpZiAobWlzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZU9yVXBkYXRlTWlzc2lvbkZvck9yZ1dpdGhQcm9wZXJ0eShcclxuICAgICAgICAgICAgICAgIG1pc3Npb24sXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLm9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oaWRlTGlzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTWlzc2lvbkNyZWF0ZWQobWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9yRXhpc3RpbmdVc2VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51c2VyRm9yQWRkaW5nTWlzc2lvbiA9IG51bGw7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVPclVwZGF0ZU1pc3Npb25Gb3JPcmdXaXRoUHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbi5vcmdhbmlzYXRpb25JRFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JkZXJlZE9yZyhvcmdJRDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgdGhpcy5wcmVzdGF0YWlyZUNsaWVudHMubWFwKGFzeW5jIChwcmVzdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKHByZXN0YS5wcmVzdGF0YWlyZSA9PT0gb3JnSUQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9yZyA9IHRoaXMub3Jnc1VzZXJzTWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgIChvYmplY3QpID0+IG9iamVjdC5vcmcuaWQgPT09IHByZXN0YS5vcmdPd25lclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChvcmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBvcmdbMF0ub3JnLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBkb21haW5JZHNUb1N0cmluZ0Zvck1pc3Npb24obWlzc2lvbjogTWlzc2lvbik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG5hbWVzID0gJyc7XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5JRCBvZiBtaXNzaW9uLmRvbWFpbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgZG9tYWluID0gdGhpcy5kb21haW5zLmZpbmQoKGRvbSkgPT4gZG9tLmlkID09PSBkb21haW5JRCk7XHJcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcclxuICAgICAgICAgICAgICAgIG5hbWVzID0gYCR7bmFtZXN9ICR7ZG9tYWluLm5hbWV9LGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5hbWVzLnNsaWNlKDAsIC0xKTsgLy8gdG8gcmVtb3ZlIGxhc3QgY29tbWFcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRlbGV0ZU1pc3Npb24obWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdjb25maXJtLmRlbGV0ZU1pc3Npb24nKTtcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25EZWxldGVVc2VyKHVzZXIpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnY29uZmlybS5kZWxldGVVc2VyJyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJNaXNzaW9ucyA9IGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNGcm9tVXNlcklEKFxyXG4gICAgICAgICAgICAgICAgdXNlci5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodXNlck1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdERlbGV0ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlck1pc3Npb25zLm1hcChhc3luYyAobWlzc2lvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLm9yZGVyZWRPcmdhbmlzYXRpb25JRCA9PT0gdGhpcy5jdXJyZW50T3JnLmlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU1BcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVkTWlzc2lvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVkTWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdERlbGV0ZS5wdXNoKGRlbGV0ZWRNaXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdERlbGV0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5zb2Z0RGVsZXRlVXNlcih1c2VyLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5zb2Z0RGVsZXRlVXNlcih1c2VyLmlkKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRMaXN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlSZXN1bHRzU2VhcmNoQmFyKHJlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLm9yZ1NlbGVjdGVkRGV0YWlscyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9yZ3NVc2Vyc01pc3Npb25zID0gcmVzdWx0cyB8fCB0aGlzLm9yZ3NVc2Vyc01pc3Npb25zO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkSW5FeGlzdGluZ09yZygpIHtcclxuICAgICAgICB0aGlzLmhpZGVMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzQWRkaW5nVG9FeGlzdGluZ09yZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGVuY3lwdGVkIGxpbmsgYW5kIHNldHMgaXQgZm9yIGd1ZXN0TGluayBmb3IgU3BhY2UuXHJcbiAgICAgKiBAcGFyYW0gbWlzXHJcbiAgICAgKi9cclxuICAgIG9uU2V0Rm9yU2hhcmVhYmxlTGluayh1c2VyOiBQcm9maWxlRW50aXR5LCBtaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWZlcmVuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEd1ZXN0TGlua0NvbXBvbmVudCk7XHJcbiAgICAgICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2UudXNlcm5hbWUgPSB1c2VyLmVtYWlsO1xyXG4gICAgICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnNwYWNlSUQgPSBtaXNzaW9uLnNwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25DbGVhclRva2VuKHVzZXIpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNsZWFyVXNlclRva2VuKHVzZXIudXNlci5pZCk7XHJcbiAgICAgICAgY29uc3QgZmlyc3RNZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZmlyc3RUb2tlbk1lc3NhZ2UnKTtcclxuICAgICAgICBjb25zdCBzZWNvbmRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Vjb25kVG9rZW5NZXNzYWdlJyk7XHJcbiAgICAgICAgYWxlcnQoZmlyc3RNZXNzYWdlICsgdXNlci51c2VyLmRpc3BsYXlOYW1lICsgc2Vjb25kTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nTm9TcGFjZShkYXRhKTpzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvXFxzL2csJycpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtdGFiXCI+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1kYXNoYm9hcmQtdGFiXCI+XHJcbiAgICA8aDM+e3snVXNlcnMnIHwgdHJhbnNsYXRlfX08L2gzPlxyXG4gICAgPCEtLSA8YXBwLXNlYXJjaC1iYXIgKm5nSWY9XCIhaGlkZUxpc3RcIiBbc2VhcmNoYWJsZV09XCJvcmdzVXNlcnNNaXNzaW9uc1wiIG9iamVjdFR5cGU9XCJVU0VSXCJcclxuICAgICAgICAoc2VhcmNoRXZlbnQpPVwiYXBwbHlSZXN1bHRzU2VhcmNoQmFyKCRldmVudClcIj5cclxuICAgICAgPC9hcHAtc2VhcmNoLWJhcj4gLS0+XHJcbiAgICA8aHI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWwtMCBtYi0yXCIgKm5nSWY9XCIhaGlkZUxpc3RcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFkZC1idXR0b25cIiAqbmdJZj1cImlzTWFuYWdlciAmJiAhaXNHdWlkZVwiIChjbGljayk9XCJvbkFkZE9yZygpXCI+XHJcbiAgICAgICAgICB7eydBZGQgdXNlciB0byBuZXcgb3JnYW5pc2F0aW9uJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVMaXN0XCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCIgKm5nSWY9XCJmaWx0ZXJlZE9yZ3NVc2Vyc01pc3Npb25zXCIgZGF0YS10ZXN0aWQ9XCJtaXNzaW9uLW9yZ2FuaXNhdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBvIG9mIGZpbHRlcmVkT3Jnc1VzZXJzTWlzc2lvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZm9udC13ZWlnaHQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlNlZSBkZXRhaWxzIGFuZCB1c2Vyc1wiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJvblRvZ2dsZURldGFpbE9yZyhvLm9yZy5pZCwgby5vcmcpXCI+XHJcbiAgICAgICAgICAgICAge3tvLm9yZy5uYW1lfX0gPHNtYWxsICpuZ0lmPVwiby5vcmcuaWQgPT0gY3VycmVudE9yZy5pZFwiPih7eydNeSBvcmdhbmlzYXRpb24nIHwgdHJhbnNsYXRlfX0pPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJpc1NQICYmIGNsaWVudHNTUC5pbmNsdWRlcyhvLm9yZy5pZClcIj4oe3snQ2xpZW50IG9mIFNtYXJ0ZXJQbGFuJyB8IHRyYW5zbGF0ZX19KTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiaXNTUCAmJiBnZXRPcmRlcmVkT3JnKG8ub3JnLmlkKVwiPih7eydDbGllbnQgb2YgJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICB7e2dldE9yZGVyZWRPcmcoby5vcmcuaWQpfX0pPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiZGV0YWlsc09yZz09by5vcmcuaWRcIiAgW25nQ2xhc3NdPVwiW2dldFN0cmluZ05vU3BhY2Uoby5vcmcubmFtZSldXCI+PC9saWItY2hldnJvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaXNzaW9uc1wiICpuZ0lmPVwiZGV0YWlsc09yZz09by5vcmcuaWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWZsZXgnPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cInVzZXItbmV3LWJ0blwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG10LTMgbWItM1wiIChjbGljayk9XCJvbkFkZChvLm9yZylcIj57eydBZGQgdXNlcicgfFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIiBkYXRhLXRlc3RpZD1cIm1pc3Npb24tdXNlci1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBhIG9mIG8udXNlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWxVc2VyKGEudXNlci5pZClcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2EudXNlci5kaXNwbGF5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1jaGV2cm9uIFtjb25kaXRpb25TaG93aW5nXT1cImRldGFpbHNVc2VyPT1hLnVzZXIuaWRcIiBbbmdDbGFzc109XCJbZ2V0U3RyaW5nTm9TcGFjZShhLnVzZXIuZGlzcGxheU5hbWUpXVwiPjwvbGliLWNoZXZyb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRldGFpbHNVc2VyPT1hLnVzZXIuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydFbWFpbCcgfCB0cmFuc2xhdGV9fToge3thLnVzZXIuZW1haWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGxcIiBkYXRhLXRlc3RpZD1cIm1pc3Npb24tbmV3LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRm9yVXNlcihvLm9yZywgYS51c2VyKVwiPnt7J0FkZCBuZXcgbWlzc2lvbicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25DbGVhclRva2VuKGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ2xlYXIgVG9rZW4nIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVVc2VyKGEudXNlcilcIj57eydEZWxldGUgdXNlcicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGEubWlzc2lvbnMubGVuZ3RoID4gMCA/ICgnQ3VycmVudCBNaXNzaW9ucycgfCB0cmFuc2xhdGUpIDogKCdObyBtaXNzaW9ucycgfCB0cmFuc2xhdGUpfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgKm5nRm9yPVwibGV0IG1pcyBvZiBhLm1pc3Npb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwibWlzLmRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydEZXNjcmlwdGlvbicgfCB0cmFuc2xhdGV9fToge3ttaXMuZGVzY3JpcHRpb259fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCJtaXMudGVtcGxhdGVNaXNzaW9uSURcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0F0dGVuZGVlIG9mIHRvdXInIHwgdHJhbnNsYXRlfX06IHt7bWlzLnRlbXBsYXRlTWlzc2lvbi50aXRsZX19PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snUm9sZScgfCB0cmFuc2xhdGV9fToge3sgbWlzLnJvbGUgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwibWlzLmhhc2h0YWdzICYmIG1pcy5oYXNodGFncy5sZW5ndGg+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0hhc2h0YWdzJyB8IHRyYW5zbGF0ZX19OiA8dWwgY2xhc3M9XCJrZXl3b3Jkc0Rpc3BsYXkgbm8tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXl3b3Jkc2Rpc3BsYXlDb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJrZXl3b3Jkc0l0ZW1cIiAqbmdGb3I9XCJsZXQgaGFzaHRhZyBvZiBtaXMuaGFzaHRhZ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhhc2h0YWcgfCBoYXNodGFnRnJvbUlEIHwgYXN5bmMgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMYW5ndWFnZScgfCB0cmFuc2xhdGUgfX06IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXMubG9jYWxlID8gbWlzLmxvY2FsZSA6ICgnTm90IGFwcGxpY2FibGUnIHwgdHJhbnNsYXRlKX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydBY2Nlc3MgbGV2ZWwnIHwgdHJhbnNsYXRlIH19OiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzLmxldmVsfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J09yZGVyZWQgYnknIHwgdHJhbnNsYXRlIH19OiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzLm9yZGVyZWRPcmdhbmlzYXRpb24ubmFtZX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIm1pcy5kb21haW5zXCI+e3snRG9tYWlucycgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21pcy5kb21haW5zID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbklkc1RvU3RyaW5nRm9yTWlzc2lvbihtaXMpIDogKFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlKSB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQXV0aG9yaXplZCBsb2NhdGlvbicgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtaXMuc3BhY2UgPyBtaXMuc3BhY2UubmFtZSA6IFwiTm8gbG9jYXRpb25cIiB8IHRyYW5zbGF0ZX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydBdXRob3JpemVkIHpvbmUnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWlzLnpvbmUgPyBtaXMuem9uZS5uYW1lIDogXCJBbGwgem9uZXMgYWxsb3dlZFwiIHwgdHJhbnNsYXRlfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1N0YXJ0cycgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtaXMuc3RhcnREYXRlVGltZSA/IChtaXMuc3RhcnREYXRlVGltZSB8IHRpbWVEYXRlU3RyaW5nOiBcImRheV90aW1lX3pvbmVcIiB8IGFzeW5jKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19LCB7eydFbmRzJyB8IHRyYW5zbGF0ZX19OiB7eyBtaXMuZW5kRGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKG1pcy5lbmREYXRlVGltZSB8IHRpbWVEYXRlU3RyaW5nOiBcImRheV90aW1lX3pvbmVcIiB8IGFzeW5jKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXRlc3RpZD1cImVkaXQtbWlzc2lvbi1idG5cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtci0yIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdChtaXMpXCI+e3snRWRpdCcgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIm1pcy5yb2xlID09PSAnVklTSVRPUicgfHwgbWlzLnJvbGUgPT09ICdWSVNJVE9SX01VU0VVTSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXItMiBhY3Rpb24tYnV0dG9uIHNoYXJlLXZpc2l0b3ItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNldEZvclNoYXJlYWJsZUxpbmsoYS51c2VyLCBtaXMpXCI+e3snR2VuZXJhdGUgU2hhcmVhYmxlIExpbmsnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVNaXNzaW9uKG1pcylcIj57eydEZWxldGUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3JlYXRlXCI+XHJcbiAgICAgICAgPGxpYi11c2VyLW1pc3Npb24tZm9ybSBbYWRkVG9PcmdhbmlzYXRpb25dPVwiYWRkVG9PcmdcIiBbY3VycmVudE9yZ109XCJjdXJyZW50T3JnXCIgW2lzU1BdPVwiaXNTUFwiXHJcbiAgICAgICAgICAoYWRkZWQpPVwidXNlckFkZGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2xpYi11c2VyLW1pc3Npb24tZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJlZGl0XCI+XHJcbiAgICAgICAgPGxpYi1mb3JtLW1pc3Npb24gW21pc3Npb25Ub0VkaXRdPVwibWlzc2lvblRvRWRpdFwiIFtjdXJyZW50VXNlck9yZ2FuaXNhdGlvbl09XCJjdXJyZW50T3JnXCIgW2lzU1BdPVwiaXNTUFwiXHJcbiAgICAgICAgICAoYWRkZWRNaXNzaW9uSW5wdXQpPVwib25NaXNzaW9uRWRpdGVkKCRldmVudClcIj48L2xpYi1mb3JtLW1pc3Npb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3JlYXRlRm9yRXhpc3RpbmdVc2VyXCI+XHJcbiAgICAgICAgPGxpYi1mb3JtLW1pc3Npb24gW29yZ2FuaXNhdGlvbkZvck1pc3Npb25dPVwiYWRkVG9PcmdcIiBbY3VycmVudFVzZXJPcmdhbmlzYXRpb25dPVwiY3VycmVudE9yZ1wiIFtpc1NQXT1cImlzU1BcIlxyXG4gICAgICAgICAgW3VzZXJGb3JNaXNzaW9uSURdPVwidXNlckZvckFkZGluZ01pc3Npb24uaWRcIiAoYWRkZWRNaXNzaW9uSW5wdXQpPVwib25NaXNzaW9uQ3JlYXRlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9saWItZm9ybS1taXNzaW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzQWRkaW5nT3JnIHx8IGlzQWRkaW5nVG9FeGlzdGluZ09yZ1wiPlxyXG4gICAgICAgIDxsaWItZm9ybS1vcmdhbmlzYXRpb24gW2N1cnJlbnRPcmddPVwiY3VycmVudE9yZ1wiIFtjdXJyZW50VXNlcl09XCJtZVwiIFtleGlzdGluZ109XCJpc0FkZGluZ1RvRXhpc3RpbmdPcmdcIlxyXG4gICAgICAgICAgKGFkZGVkKT1cIm9yZ0FkZGVkKCRldmVudClcIj48L2xpYi1mb3JtLW9yZ2FuaXNhdGlvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLWxnLTZcIiAqbmdJZj1cIm9yZ1NlbGVjdGVkRGV0YWlscyAmJiAhaXNHdWlkZVwiPlxyXG4gICAgICA8bGliLWRldGFpbC1vcmdhbmlzYXRpb24gW29yZ109XCJvcmdTZWxlY3RlZERldGFpbHNcIiBbY3VycmVudE9yZ109XCJjdXJyZW50T3JnXCIgW2lzU1BdPVwiaXNTUFwiXHJcbiAgICAgICAgKG9yZ0NoYW5nZWQpPSdvcmdBZGRlZCgkZXZlbnQpJz48L2xpYi1kZXRhaWwtb3JnYW5pc2F0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|