@c8y/ngx-components 1017.0.510 → 1017.0.512
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/core/bootstrap/cookie-banner/cookie-banner.service.d.ts +1 -1
- package/core/common/ApplicationOptions.d.ts +2 -0
- package/core/header/right-drawer/right-drawer.component.d.ts +22 -0
- package/core/product-experience/gainsight.service.d.ts +86 -28
- package/core/product-experience/index.d.ts +1 -0
- package/core/product-experience/product-experience.module.d.ts +18 -5
- package/core/product-experience/user-engagements.service.d.ts +109 -0
- package/core/shared/core.model.d.ts +22 -0
- package/core/user/user-edit-modal.component.d.ts +33 -6
- package/core/user/user-edit.component.d.ts +8 -13
- package/device-grid/device-grid.service.d.ts +3 -4
- package/esm2020/core/action-bar/action-bar.component.mjs +10 -7
- package/esm2020/core/bootstrap/cookie-banner/cookie-banner.service.mjs +2 -2
- package/esm2020/core/common/ApplicationOptions.mjs +1 -1
- package/esm2020/core/header/right-drawer/right-drawer.component.mjs +5 -3
- package/esm2020/core/product-experience/gainsight.service.mjs +157 -76
- package/esm2020/core/product-experience/index.mjs +2 -1
- package/esm2020/core/product-experience/product-experience.module.mjs +42 -24
- package/esm2020/core/product-experience/user-engagements.service.mjs +174 -0
- package/esm2020/core/shared/core.model.mjs +15 -0
- package/esm2020/core/user/user-edit-modal.component.mjs +68 -33
- package/esm2020/core/user/user-edit.component.mjs +36 -45
- package/esm2020/device-grid/device-grid.service.mjs +6 -15
- package/esm2020/sensor-phone/sensor-phone-modal.component.mjs +26 -15
- package/esm2020/sensor-phone/sensor-phone.model.mjs +13 -0
- package/esm2020/sensor-phone/sensor-phone.service.mjs +5 -7
- package/esm2020/sub-assets/delete-assets-modal/delete-assets-modal.component.mjs +13 -3
- package/esm2020/sub-assets/shared/sub-assets.model.mjs +11 -0
- package/fesm2015/c8y-ngx-components-device-grid.mjs +4 -15
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sensor-phone.mjs +40 -19
- package/fesm2015/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.mjs +22 -2
- package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +481 -167
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +4 -13
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sensor-phone.mjs +40 -19
- package/fesm2020/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sub-assets.mjs +22 -2
- package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +472 -161
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +2 -2
- package/package.json +2 -2
- package/sensor-phone/sensor-phone.model.d.ts +18 -0
- package/sensor-phone/sensor-phone.service.d.ts +2 -3
- package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts +1 -0
- package/sub-assets/shared/sub-assets.model.d.ts +15 -0
|
@@ -4,9 +4,7 @@ import { clone } from 'lodash-es';
|
|
|
4
4
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
5
5
|
import { AlertService } from '../alert/alert.service';
|
|
6
6
|
import { AppStateService } from '../common/ui-state.service';
|
|
7
|
-
import { UserPreferencesService } from '../common/user-preferences/user-preferences.service';
|
|
8
7
|
import { TranslateService } from '../i18n/translate.service';
|
|
9
|
-
import { GainsightService } from '../product-experience/gainsight.service';
|
|
10
8
|
import { UserTotpSetupComponent } from './user-totp-setup.component';
|
|
11
9
|
import * as i0 from "@angular/core";
|
|
12
10
|
import * as i1 from "../common/ui-state.service";
|
|
@@ -14,19 +12,17 @@ import * as i2 from "../i18n/translate.service";
|
|
|
14
12
|
import * as i3 from "ngx-bootstrap/modal";
|
|
15
13
|
import * as i4 from "../alert/alert.service";
|
|
16
14
|
import * as i5 from "@c8y/client";
|
|
17
|
-
import * as i6 from "../
|
|
18
|
-
import * as i7 from "../
|
|
19
|
-
import * as i8 from "
|
|
20
|
-
import * as i9 from "../forms/
|
|
21
|
-
import * as i10 from "
|
|
22
|
-
import * as i11 from "../
|
|
23
|
-
import * as i12 from "
|
|
24
|
-
import * as i13 from "../
|
|
25
|
-
import * as i14 from "
|
|
26
|
-
import * as i15 from "../authentication/new-password.component";
|
|
27
|
-
import * as i16 from "../i18n/c8y-translate.pipe";
|
|
15
|
+
import * as i6 from "../forms/phone-validation.directive";
|
|
16
|
+
import * as i7 from "../forms/default-validation.directive";
|
|
17
|
+
import * as i8 from "@angular/forms";
|
|
18
|
+
import * as i9 from "../forms/form-group.component";
|
|
19
|
+
import * as i10 from "../forms/required-input-placeholder.directive";
|
|
20
|
+
import * as i11 from "../i18n/c8y-translate.directive";
|
|
21
|
+
import * as i12 from "@angular/common";
|
|
22
|
+
import * as i13 from "../authentication/new-password.component";
|
|
23
|
+
import * as i14 from "../i18n/c8y-translate.pipe";
|
|
28
24
|
export class UserEditComponent {
|
|
29
|
-
constructor(state, translate, bsModalService, alert, userService, tenantLoginOptionsService, tenantService
|
|
25
|
+
constructor(state, translate, bsModalService, alert, userService, tenantLoginOptionsService, tenantService) {
|
|
30
26
|
this.state = state;
|
|
31
27
|
this.translate = translate;
|
|
32
28
|
this.bsModalService = bsModalService;
|
|
@@ -34,17 +30,15 @@ export class UserEditComponent {
|
|
|
34
30
|
this.userService = userService;
|
|
35
31
|
this.tenantLoginOptionsService = tenantLoginOptionsService;
|
|
36
32
|
this.tenantService = tenantService;
|
|
37
|
-
this.userPreferencesService = userPreferencesService;
|
|
38
|
-
this.gainsightService = gainsightService;
|
|
39
33
|
this.loading = false;
|
|
40
|
-
this.
|
|
34
|
+
this.showProductExperienceOptions = false;
|
|
41
35
|
this.isUsageTrackingEnabled = true;
|
|
42
|
-
this.
|
|
36
|
+
this.isUserEngagementPreferenceEnabled = true;
|
|
43
37
|
this.onUser = new EventEmitter();
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
this.onGainsightEngagements = new EventEmitter();
|
|
38
|
+
this.onUsageTrackingChange = new EventEmitter();
|
|
39
|
+
this.onUserEngagementPreferenceChange = new EventEmitter();
|
|
47
40
|
this.onCancel = new EventEmitter();
|
|
41
|
+
this.onLanguage = new EventEmitter();
|
|
48
42
|
this.userHasActiveTotp = false;
|
|
49
43
|
this.userCanSetupTotp = false;
|
|
50
44
|
this.isPhoneRequired = false;
|
|
@@ -68,16 +62,6 @@ export class UserEditComponent {
|
|
|
68
62
|
this.isPhoneRequired = true;
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
|
-
async onEnablingProductUsageTracking(isUsageTrackingEnabled) {
|
|
72
|
-
if (isUsageTrackingEnabled && this.isGainsightEngagementsEnabled === undefined) {
|
|
73
|
-
this.isGainsightEngagementsEnabled = await this.userPreferencesService
|
|
74
|
-
.get(this.gainsightService.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY)
|
|
75
|
-
.toPromise();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
get langs() {
|
|
79
|
-
return this.state.state.langs;
|
|
80
|
-
}
|
|
81
65
|
setupTotp() {
|
|
82
66
|
this.bsModalService.show(UserTotpSetupComponent, {
|
|
83
67
|
class: 'modal-sm',
|
|
@@ -93,15 +77,22 @@ export class UserEditComponent {
|
|
|
93
77
|
if (this.loading) {
|
|
94
78
|
return;
|
|
95
79
|
}
|
|
96
|
-
if (this.
|
|
97
|
-
this.
|
|
98
|
-
|
|
80
|
+
if (this.showProductExperienceOptions) {
|
|
81
|
+
this.onUsageTrackingChange.emit(this.isUsageTrackingEnabled);
|
|
82
|
+
/**
|
|
83
|
+
* Emits a user engagement preference change event.
|
|
84
|
+
* If usage tracking is disabled, it emits `false`. Otherwise, it emits the current state of the user engagement preference.
|
|
85
|
+
*/
|
|
86
|
+
this.onUserEngagementPreferenceChange.emit(this.isUsageTrackingEnabled === false ? false : this.isUserEngagementPreferenceEnabled);
|
|
99
87
|
}
|
|
100
88
|
this.onUser.emit(this._user);
|
|
101
89
|
}
|
|
102
90
|
onNewPasswordChanged(newPassword) {
|
|
103
91
|
this._user.password = newPassword.password;
|
|
104
92
|
}
|
|
93
|
+
get langs() {
|
|
94
|
+
return this.state.state.langs;
|
|
95
|
+
}
|
|
105
96
|
async initializeTotpSettings() {
|
|
106
97
|
try {
|
|
107
98
|
this.userCanSetupTotp = await this.canUserSetupTotp();
|
|
@@ -120,32 +111,32 @@ export class UserEditComponent {
|
|
|
120
111
|
return loginOptions.some(({ tfaStrategy = '' }) => tfaStrategy.toLowerCase() === 'totp');
|
|
121
112
|
}
|
|
122
113
|
}
|
|
123
|
-
UserEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslateService }, { token: i3.BsModalService }, { token: i4.AlertService }, { token: i5.UserService }, { token: i5.TenantLoginOptionsService }, { token: i5.TenantService }
|
|
124
|
-
UserEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditComponent, selector: "c8y-user-edit", inputs: { lang: "lang", loading: "loading", user: "user", showProductUsageSetting: "showProductUsageSetting", isUsageTrackingEnabled: "isUsageTrackingEnabled", isGainsightEngagementsEnabled: "isGainsightEngagementsEnabled" }, outputs: { onUser: "onUser", onLanguage: "onLanguage", onProductExperience: "onProductExperience", onGainsightEngagements: "onGainsightEngagements", onCancel: "onCancel" }, ngImport: i0, template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductUsageSetting\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n (change)=\"onEnablingProductUsageTracking(isUsageTrackingEnabled)\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable tracking to enhance the product experience' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"gainsightEngagements\">\n <input\n id=\"gainsightEngagements\"\n name=\"gainsightEngagements\"\n type=\"checkbox\"\n [(ngModel)]=\"isGainsightEngagementsEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i8.PhoneValidationDirective, selector: "[c8yPhoneValidation]" }, { kind: "directive", type: i9.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i10.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i10.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i10.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i11.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i12.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i13.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i15.NewPasswordComponent, selector: "c8y-new-password", outputs: ["password"] }, { kind: "pipe", type: i16.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i14.AsyncPipe, name: "async" }] });
|
|
114
|
+
UserEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslateService }, { token: i3.BsModalService }, { token: i4.AlertService }, { token: i5.UserService }, { token: i5.TenantLoginOptionsService }, { token: i5.TenantService }], target: i0.ɵɵFactoryTarget.Component });
|
|
115
|
+
UserEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditComponent, selector: "c8y-user-edit", inputs: { lang: "lang", loading: "loading", user: "user", showProductExperienceOptions: "showProductExperienceOptions", isUsageTrackingEnabled: "isUsageTrackingEnabled", isUserEngagementPreferenceEnabled: "isUserEngagementPreferenceEnabled" }, outputs: { onUser: "onUser", onUsageTrackingChange: "onUsageTrackingChange", onUserEngagementPreferenceChange: "onUserEngagementPreferenceChange", onCancel: "onCancel", onLanguage: "onLanguage" }, ngImport: i0, template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable personalized product experience tracking' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n <input\n id=\"userEngagementPreference\"\n name=\"userEngagementPreference\"\n type=\"checkbox\"\n [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i6.PhoneValidationDirective, selector: "[c8yPhoneValidation]" }, { kind: "directive", type: i7.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i10.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i11.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i13.NewPasswordComponent, selector: "c8y-new-password", outputs: ["password"] }, { kind: "pipe", type: i14.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }] });
|
|
125
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, decorators: [{
|
|
126
117
|
type: Component,
|
|
127
|
-
args: [{ selector: 'c8y-user-edit', template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n
|
|
128
|
-
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.TranslateService }, { type: i3.BsModalService }, { type: i4.AlertService }, { type: i5.UserService }, { type: i5.TenantLoginOptionsService }, { type: i5.TenantService }
|
|
118
|
+
args: [{ selector: 'c8y-user-edit', template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable personalized product experience tracking' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n <input\n id=\"userEngagementPreference\"\n name=\"userEngagementPreference\"\n type=\"checkbox\"\n [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
119
|
+
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.TranslateService }, { type: i3.BsModalService }, { type: i4.AlertService }, { type: i5.UserService }, { type: i5.TenantLoginOptionsService }, { type: i5.TenantService }]; }, propDecorators: { lang: [{
|
|
129
120
|
type: Input
|
|
130
121
|
}], loading: [{
|
|
131
122
|
type: Input
|
|
132
123
|
}], user: [{
|
|
133
124
|
type: Input
|
|
134
|
-
}],
|
|
125
|
+
}], showProductExperienceOptions: [{
|
|
135
126
|
type: Input
|
|
136
127
|
}], isUsageTrackingEnabled: [{
|
|
137
128
|
type: Input
|
|
138
|
-
}],
|
|
129
|
+
}], isUserEngagementPreferenceEnabled: [{
|
|
139
130
|
type: Input
|
|
140
131
|
}], onUser: [{
|
|
141
132
|
type: Output
|
|
142
|
-
}],
|
|
133
|
+
}], onUsageTrackingChange: [{
|
|
143
134
|
type: Output
|
|
144
|
-
}],
|
|
145
|
-
type: Output
|
|
146
|
-
}], onGainsightEngagements: [{
|
|
135
|
+
}], onUserEngagementPreferenceChange: [{
|
|
147
136
|
type: Output
|
|
148
137
|
}], onCancel: [{
|
|
149
138
|
type: Output
|
|
139
|
+
}], onLanguage: [{
|
|
140
|
+
type: Output
|
|
150
141
|
}] } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBUyx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlyRSxNQUFNLE9BQU8saUJBQWlCO0lBNkI1QixZQUNTLEtBQXNCLEVBQ3RCLFNBQTJCLEVBQzFCLGNBQThCLEVBQzlCLEtBQW1CLEVBQ25CLFdBQXdCLEVBQ3hCLHlCQUFvRCxFQUNwRCxhQUE0QixFQUM1QixzQkFBOEMsRUFDOUMsZ0JBQWtDO1FBUm5DLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLG1CQUFjLEdB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SUFBSSxDQUFDO1FBQ3hGLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDM0YsQ0FBQzs7OEdBaEhVLGlCQUFpQjtrR0FBakIsaUJBQWlCLG9jQ3RCOUIsdWlOQXVNQTsyRkRqTGEsaUJBQWlCO2tCQUo3QixTQUFTOytCQUNFLGVBQWU7K1ZBSWhCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ08sSUFBSTtzQkFBaEIsS0FBSztnQkFVRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVXNlciwgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSwgVGVuYW50U2VydmljZSwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBOZXdQYXNzd29yZCB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL3Bhc3N3b3JkLm1vZGVsJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL2kxOG4vdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2FpbnNpZ2h0U2VydmljZSB9IGZyb20gJy4uL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyVG90cFNldHVwQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXRvdHAtc2V0dXAuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgSVVzZXIge1xuICBwaG9uZTogc3RyaW5nO1xuICBzZW5kUGFzc3dvcmRSZXNldEVtYWlsOiBib29sZWFuO1xuICBuZXdzbGV0dGVyPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVzZXItZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWVkaXQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbGFuZzogc3RyaW5nO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCB1c2VyKHU6IFVzZXIpIHtcbiAgICBpZiAodSkge1xuICAgICAgdGhpcy5fdXNlciA9IGNsb25lKHUpO1xuICAgICAgdGhpcy51c2VySXNFeHRlcm5hbCA9IHUuY3VzdG9tUHJvcGVydGllcy51c2VyT3JpZ2luID09PSAnT0FVVEgyJztcbiAgICAgIHRoaXMuaXNQaG9uZVJlcXVpcmVkID0gdGhpcy5pc1Bob25lUmVxdWlyZWQgJiYgdS50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQ7XG4gICAgfVxuICB9XG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VyO1xuICB9XG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0VXNhZ2VTZXR0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpc0dhaW5zaWdodEVuZ2FnZW1lbnRzRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKSBvblVzZXI6IEV2ZW50RW1pdHRlcjxVc2VyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uTGFuZ3VhZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25Qcm9kdWN0RXhwZXJpZW5jZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25HYWluc2lnaHRFbmdhZ2VtZW50czogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgdXNlckhhc0FjdGl2ZVRvdHAgPSBmYWxzZTtcbiAgdXNlckNhblNldHVwVG90cCA9IGZhbHNlO1xuICBpc1Bob25lUmVxdWlyZWQgPSBmYWxzZTtcbiAgdXNlcklzRXh0ZXJuYWw6IGJvb2xlYW47XG4gIGlzVGZhRW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIF91c2VyOiBVc2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IChhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IHsgZW5hYmxlZE9uU3lzdGVtTGV2ZWwsIGVuYWJsZWRPblRlbmFudExldmVsIH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZ2V0VGZhU2V0dGluZ3MoXG4gICAgICBjdXJyZW50VGVuYW50XG4gICAgKTtcbiAgICB0aGlzLmlzVGZhRW5hYmxlZCA9IGVuYWJsZWRPblN5c3RlbUxldmVsIHx8IGVuYWJsZWRPblRlbmFudExldmVsO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplVG90cFNldHRpbmdzKCk7XG4gICAgaWYgKHRoaXMudXNlci50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQgJiYgIXRoaXMudXNlckNhblNldHVwVG90cCkge1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRW5hYmxpbmdQcm9kdWN0VXNhZ2VUcmFja2luZyhpc1VzYWdlVHJhY2tpbmdFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQgJiYgdGhpcy5pc0dhaW5zaWdodEVuZ2FnZW1lbnRzRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzR2FpbnNpZ2h0RW5nYWdlbWVudHNFbmFibGVkID0gYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgIC5nZXQodGhpcy5nYWluc2lnaHRTZXJ2aWNlLlVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0VOR0FHRU1FTlRTX0tFWSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZS5sYW5ncztcbiAgfVxuXG4gIHNldHVwVG90cCgpIHtcbiAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXNlclRvdHBTZXR1cENvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWwoKTsgLy8gdG8gY2xvc2UgdGhlIHVzZXIgZWRpdCBtb2RhbCBhbmQgcHJldmVudCBjb25zb2xlIGVycm9ycyBvbiBsb2dvdXRcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0VXNhZ2VTZXR0aW5nKSB7XG4gICAgICB0aGlzLm9uUHJvZHVjdEV4cGVyaWVuY2UuZW1pdCh0aGlzLmlzVXNhZ2VUcmFja2luZ0VuYWJsZWQpO1xuICAgICAgdGhpcy5vbkdhaW5zaWdodEVuZ2FnZW1lbnRzLmVtaXQodGhpcy5pc0dhaW5zaWdodEVuZ2FnZW1lbnRzRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5vblVzZXIuZW1pdCh0aGlzLl91c2VyKTtcbiAgfVxuXG4gIG9uTmV3UGFzc3dvcmRDaGFuZ2VkKG5ld1Bhc3N3b3JkOiBOZXdQYXNzd29yZCkge1xuICAgIHRoaXMuX3VzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZC5wYXNzd29yZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51c2VyQ2FuU2V0dXBUb3RwID0gYXdhaXQgdGhpcy5jYW5Vc2VyU2V0dXBUb3RwKCk7XG4gICAgICBpZiAodGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdG90cEFjdGl2aXR5IH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjdGl2aXR5VG90cCgpO1xuICAgICAgICB0aGlzLnVzZXJIYXNBY3RpdmVUb3RwID0gdG90cEFjdGl2aXR5LmlzQWN0aXZlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhblVzZXJTZXR1cFRvdHAoKSB7XG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgZm9yIHRlbmFudCBvcHRpb25zIGhlcmUgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9uIHRoYXQgZW5kLXBvaW50XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHJldHVybiBsb2dpbk9wdGlvbnMuc29tZSgoeyB0ZmFTdHJhdGVneSA9ICcnIH0pID0+IHRmYVN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgPT09ICd0b3RwJyk7XG4gIH1cbn1cbiIsIjxmb3JtICN1c2VyRm9ybT1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJ1c2VyRm9ybS5mb3JtLnZhbGlkICYmIHNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBwLTI0IHAtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cInVzZXJJc0V4dGVybmFsXCIgdHJhbnNsYXRlPlxuICAgICAgU29tZSBvZiB0aGUgdXNlciBzZXR0aW5ncyBhcmUgbm90IGVkaXRhYmxlIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBtYW5hZ2VkIHZpYSB5b3VyXG4gICAgICBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJOYW1lXCI+VXNlcm5hbWUgKGZvciBleGFtcGxlLCBlbWFpbCk8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlck5hbWVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidXNlci51c2VyTmFtZVwiXG4gICAgICAgIG5hbWU9XCJ1c2VyTmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIuaWRcIlxuICAgICAgICBjOHlEZWZhdWx0VmFsaWRhdGlvbj1cInVzZXJcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJkaXNwbGF5TmFtZVwiPkxvZ2luIGFsaWFzPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZGlzcGxheU5hbWVcIlxuICAgICAgICBuYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGpvZS5kb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwibG9naW5BbGlhc1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgW2hhc1dhcm5pbmddPVwiIXVzZXIuZW1haWxcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlckVtYWlsXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIjI1NFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLmVtYWlsXCJcbiAgICAgICAgZW1haWxcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJGaXJzdE5hbWVcIj5GaXJzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckZpcnN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZmlyc3ROYW1lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJMYXN0TmFtZVwiPkxhc3QgbmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInVzZXJMYXN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5sYXN0TmFtZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlclRlbGVwaG9uZVwiPlRlbGVwaG9uZTwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9XCJ1c2VyVGVsZXBob25lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBuYW1lPVwicGhvbmVcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIucGhvbmVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuICs0OSA5IDg3NiA1NDMgMjEwYExPQ0FMSVpFYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjOHlQaG9uZVZhbGlkYXRpb25cbiAgICAgICAgW3JlcXVpcmVkXT1cImlzUGhvbmVSZXF1aXJlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJMYW5nXCI+TGFuZ3VhZ2U8L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgaWQ9XCJ1c2VyTGFuZ1wiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICNzZWxlY3RMYW5nXG4gICAgICAgICAgbmFtZT1cImxhbmdcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGFuZ1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkxhbmd1YWdlLmVtaXQoc2VsZWN0TGFuZy52YWx1ZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbGFuZyBvZiBsYW5nc1wiIFt2YWx1ZV09XCJsYW5nXCI+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGUuZ2V0TmF0aXZlTGFuZ3VhZ2UobGFuZykgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLXQtMTYgc2VwYXJhdG9yLXRvcFwiICpuZ0lmPVwic2hvd1Byb2R1Y3RVc2FnZVNldHRpbmdcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+UHJvZHVjdCBleHBlcmllbmNlPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2hcIiBmb3I9XCJwcm9kdWN0VXNhZ2VUcmFja2luZ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cInByb2R1Y3RVc2FnZVRyYWNraW5nXCJcbiAgICAgICAgICBuYW1lPVwicHJvZHVjdFVzYWdlVHJhY2tpbmdcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkVuYWJsaW5nUHJvZHVjdFVzYWdlVHJhY2tpbmcoaXNVc2FnZVRyYWNraW5nRW5hYmxlZClcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNVc2FnZVRyYWNraW5nRW5hYmxlZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAge3sgJ0VuYWJsZSB0cmFja2luZyB0byBlbmhhbmNlIHRoZSBwcm9kdWN0IGV4cGVyaWVuY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xhYmVsPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXNhZ2VUcmFja2luZ0VuYWJsZWRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaCBtLWwtMFwiIGZvcj1cImdhaW5zaWdodEVuZ2FnZW1lbnRzXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImdhaW5zaWdodEVuZ2FnZW1lbnRzXCJcbiAgICAgICAgICAgIG5hbWU9XCJnYWluc2lnaHRFbmdhZ2VtZW50c1wiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpc0dhaW5zaWdodEVuZ2FnZW1lbnRzRW5hYmxlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAge3sgJ0VuYWJsZSBpbi1wcm9kdWN0IGluZm9ybWF0aW9uICYgY29tbXVuaWNhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBwLXQtMTYgc2VwYXJhdG9yLXRvcFwiICpuZ0lmPVwiIXVzZXJJc0V4dGVybmFsXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ0xvZ2luIG9wdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgIDxjOHktbmV3LXBhc3N3b3JkIChwYXNzd29yZCk9XCJvbk5ld1Bhc3N3b3JkQ2hhbmdlZCgkZXZlbnQpXCI+PC9jOHktbmV3LXBhc3N3b3JkPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdTZXQgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2V0dXBUb3RwKClcIlxuICAgICAgICAqbmdJZj1cInVzZXJDYW5TZXR1cFRvdHAgJiYgIXVzZXJIYXNBY3RpdmVUb3RwICYmIGlzVGZhRW5hYmxlZFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdTZXQgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwiISEoc3RhdGUuc3RhdGUkIHwgYXN5bmMpLm5ld3NsZXR0ZXJcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TmV3c2xldHRlcjwvbGFiZWw+XG4gICAgICA8bGFiZWxcbiAgICAgICAgdGl0bGU9XCJ7eyAnU2VuZCBtZSBpbmZvcm1hdGlvbiBhYm91dCBvdXRhZ2VzLCBtYWludGVuYW5jZSBvciB1cGRhdGVzLicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgbmFtZT1cIm5ld3NsZXR0ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5uZXdzbGV0dGVyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHt7ICdTZW5kIG1lIGluZm9ybWF0aW9uIGFib3V0IG91dGFnZXMsIG1haW50ZW5hbmNlIG9yIHVwZGF0ZXMuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIHNlcGFyYXRvci10b3AgYmctbGV2ZWwtMCBzdGlja3ktYm90dG9tXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIFtkaXNhYmxlZF09XCIhdXNlckZvcm0uZm9ybS52YWxpZCB8fCB1c2VyRm9ybS5mb3JtLnByaXN0aW5lIHx8IGxvYWRpbmdcIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBUyx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZckUsTUFBTSxPQUFPLGlCQUFpQjtJQTZCNUIsWUFDUyxLQUFzQixFQUN0QixTQUEyQixFQUMxQixjQUE4QixFQUM5QixLQUFtQixFQUNuQixXQUF3QixFQUN4Qix5QkFBb0QsRUFDcEQsYUFBNEI7UUFON0IsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCxrQkFBYSxHQUFiLGFB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O2dCQUNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGdDQUFnQztzQkFBekMsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVXNlciwgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSwgVGVuYW50U2VydmljZSwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBOZXdQYXNzd29yZCB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL3Bhc3N3b3JkLm1vZGVsJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9pMThuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJUb3RwU2V0dXBDb21wb25lbnQgfSBmcm9tICcuL3VzZXItdG90cC1zZXR1cC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBJVXNlciB7XG4gIHBob25lOiBzdHJpbmc7XG4gIHNlbmRQYXNzd29yZFJlc2V0RW1haWw6IGJvb2xlYW47XG4gIG5ld3NsZXR0ZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdXNlci1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlckVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBsYW5nOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IHVzZXIodTogVXNlcikge1xuICAgIGlmICh1KSB7XG4gICAgICB0aGlzLl91c2VyID0gY2xvbmUodSk7XG4gICAgICB0aGlzLnVzZXJJc0V4dGVybmFsID0gdS5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gPT09ICdPQVVUSDInO1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0aGlzLmlzUGhvbmVSZXF1aXJlZCAmJiB1LnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRW5hYmxlZDtcbiAgICB9XG4gIH1cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cbiAgQElucHV0KCkgc2hvd1Byb2R1Y3RFeHBlcmllbmNlT3B0aW9ucyA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1VzYWdlVHJhY2tpbmdFbmFibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNVc2VyRW5nYWdlbWVudFByZWZlcmVuY2VFbmFibGVkID0gdHJ1ZTtcbiAgQE91dHB1dCgpIG9uVXNlcjogRXZlbnRFbWl0dGVyPFVzZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25Vc2FnZVRyYWNraW5nQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uTGFuZ3VhZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB1c2VySGFzQWN0aXZlVG90cCA9IGZhbHNlO1xuICB1c2VyQ2FuU2V0dXBUb3RwID0gZmFsc2U7XG4gIGlzUGhvbmVSZXF1aXJlZCA9IGZhbHNlO1xuICB1c2VySXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3VzZXI6IFVzZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IChhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IHsgZW5hYmxlZE9uU3lzdGVtTGV2ZWwsIGVuYWJsZWRPblRlbmFudExldmVsIH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZ2V0VGZhU2V0dGluZ3MoXG4gICAgICBjdXJyZW50VGVuYW50XG4gICAgKTtcbiAgICB0aGlzLmlzVGZhRW5hYmxlZCA9IGVuYWJsZWRPblN5c3RlbUxldmVsIHx8IGVuYWJsZWRPblRlbmFudExldmVsO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplVG90cFNldHRpbmdzKCk7XG4gICAgaWYgKHRoaXMudXNlci50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQgJiYgIXRoaXMudXNlckNhblNldHVwVG90cCkge1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVG90cCgpIHtcbiAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXNlclRvdHBTZXR1cENvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWwoKTsgLy8gdG8gY2xvc2UgdGhlIHVzZXIgZWRpdCBtb2RhbCBhbmQgcHJldmVudCBjb25zb2xlIGVycm9ycyBvbiBsb2dvdXRcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMub25Vc2FnZVRyYWNraW5nQ2hhbmdlLmVtaXQodGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkKTtcbiAgICAgIC8qKlxuICAgICAgICogRW1pdHMgYSB1c2VyIGVuZ2FnZW1lbnQgcHJlZmVyZW5jZSBjaGFuZ2UgZXZlbnQuXG4gICAgICAgKiBJZiB1c2FnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgaXQgZW1pdHMgYGZhbHNlYC4gT3RoZXJ3aXNlLCBpdCBlbWl0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdXNlciBlbmdhZ2VtZW50IHByZWZlcmVuY2UuXG4gICAgICAgKi9cbiAgICAgIHRoaXMub25Vc2VyRW5nYWdlbWVudFByZWZlcmVuY2VDaGFuZ2UuZW1pdChcbiAgICAgICAgdGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkID09PSBmYWxzZSA/IGZhbHNlIDogdGhpcy5pc1VzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUVuYWJsZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vblVzZXIuZW1pdCh0aGlzLl91c2VyKTtcbiAgfVxuXG4gIG9uTmV3UGFzc3dvcmRDaGFuZ2VkKG5ld1Bhc3N3b3JkOiBOZXdQYXNzd29yZCkge1xuICAgIHRoaXMuX3VzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZC5wYXNzd29yZDtcbiAgfVxuXG4gIGdldCBsYW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZS5sYW5ncztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51c2VyQ2FuU2V0dXBUb3RwID0gYXdhaXQgdGhpcy5jYW5Vc2VyU2V0dXBUb3RwKCk7XG4gICAgICBpZiAodGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdG90cEFjdGl2aXR5IH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjdGl2aXR5VG90cCgpO1xuICAgICAgICB0aGlzLnVzZXJIYXNBY3RpdmVUb3RwID0gdG90cEFjdGl2aXR5LmlzQWN0aXZlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhblVzZXJTZXR1cFRvdHAoKSB7XG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgZm9yIHRlbmFudCBvcHRpb25zIGhlcmUgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9uIHRoYXQgZW5kLXBvaW50XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHJldHVybiBsb2dpbk9wdGlvbnMuc29tZSgoeyB0ZmFTdHJhdGVneSA9ICcnIH0pID0+IHRmYVN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgPT09ICd0b3RwJyk7XG4gIH1cbn1cbiIsIjxmb3JtICN1c2VyRm9ybT1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJ1c2VyRm9ybS5mb3JtLnZhbGlkICYmIHNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBwLTI0IHAtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cInVzZXJJc0V4dGVybmFsXCIgdHJhbnNsYXRlPlxuICAgICAgU29tZSBvZiB0aGUgdXNlciBzZXR0aW5ncyBhcmUgbm90IGVkaXRhYmxlIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBtYW5hZ2VkIHZpYSB5b3VyXG4gICAgICBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJOYW1lXCI+VXNlcm5hbWUgKGZvciBleGFtcGxlLCBlbWFpbCk8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlck5hbWVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidXNlci51c2VyTmFtZVwiXG4gICAgICAgIG5hbWU9XCJ1c2VyTmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIuaWRcIlxuICAgICAgICBjOHlEZWZhdWx0VmFsaWRhdGlvbj1cInVzZXJcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJkaXNwbGF5TmFtZVwiPkxvZ2luIGFsaWFzPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZGlzcGxheU5hbWVcIlxuICAgICAgICBuYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGpvZS5kb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwibG9naW5BbGlhc1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgW2hhc1dhcm5pbmddPVwiIXVzZXIuZW1haWxcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlckVtYWlsXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIjI1NFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLmVtYWlsXCJcbiAgICAgICAgZW1haWxcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJGaXJzdE5hbWVcIj5GaXJzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckZpcnN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZmlyc3ROYW1lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJMYXN0TmFtZVwiPkxhc3QgbmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInVzZXJMYXN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5sYXN0TmFtZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlclRlbGVwaG9uZVwiPlRlbGVwaG9uZTwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9XCJ1c2VyVGVsZXBob25lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBuYW1lPVwicGhvbmVcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIucGhvbmVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuICs0OSA5IDg3NiA1NDMgMjEwYExPQ0FMSVpFYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjOHlQaG9uZVZhbGlkYXRpb25cbiAgICAgICAgW3JlcXVpcmVkXT1cImlzUGhvbmVSZXF1aXJlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckxhbmdcIj5MYW5ndWFnZTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBpZD1cInVzZXJMYW5nXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgI3NlbGVjdExhbmdcbiAgICAgICAgICBuYW1lPVwibGFuZ1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsYW5nXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uTGFuZ3VhZ2UuZW1pdChzZWxlY3RMYW5nLnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsYW5nIG9mIGxhbmdzXCIgW3ZhbHVlXT1cImxhbmdcIj5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZS5nZXROYXRpdmVMYW5ndWFnZShsYW5nKSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtdC0xNiBzZXBhcmF0b3ItdG9wXCIgKm5nSWY9XCJzaG93UHJvZHVjdEV4cGVyaWVuY2VPcHRpb25zXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPlByb2R1Y3QgZXhwZXJpZW5jZTwvbGFiZWw+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCIgZm9yPVwicHJvZHVjdFVzYWdlVHJhY2tpbmdcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgaWQ9XCJwcm9kdWN0VXNhZ2VUcmFja2luZ1wiXG4gICAgICAgICAgbmFtZT1cInByb2R1Y3RVc2FnZVRyYWNraW5nXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNVc2FnZVRyYWNraW5nRW5hYmxlZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAge3sgJ0VuYWJsZSBwZXJzb25hbGl6ZWQgcHJvZHVjdCBleHBlcmllbmNlIHRyYWNraW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1VzYWdlVHJhY2tpbmdFbmFibGVkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2ggbS1sLTBcIiBmb3I9XCJ1c2VyRW5nYWdlbWVudFByZWZlcmVuY2VcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckVuZ2FnZW1lbnRQcmVmZXJlbmNlXCJcbiAgICAgICAgICAgIG5hbWU9XCJ1c2VyRW5nYWdlbWVudFByZWZlcmVuY2VcIlxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNVc2VyRW5nYWdlbWVudFByZWZlcmVuY2VFbmFibGVkXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICB7eyAnRW5hYmxlIGluLXByb2R1Y3QgaW5mb3JtYXRpb24gJiBjb21tdW5pY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHAtdC0xNiBzZXBhcmF0b3ItdG9wXCIgKm5nSWY9XCIhdXNlcklzRXh0ZXJuYWxcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57eyAnTG9naW4gb3B0aW9ucycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGM4eS1uZXctcGFzc3dvcmQgKHBhc3N3b3JkKT1cIm9uTmV3UGFzc3dvcmRDaGFuZ2VkKCRldmVudClcIj48L2M4eS1uZXctcGFzc3dvcmQ+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ1NldCB1cCB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJzZXR1cFRvdHAoKVwiXG4gICAgICAgICpuZ0lmPVwidXNlckNhblNldHVwVG90cCAmJiAhdXNlckhhc0FjdGl2ZVRvdHAgJiYgaXNUZmFFbmFibGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ1NldCB1cCB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgKm5nSWY9XCIhIShzdGF0ZS5zdGF0ZSQgfCBhc3luYykubmV3c2xldHRlclwiPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5OZXdzbGV0dGVyPC9sYWJlbD5cbiAgICAgIDxsYWJlbFxuICAgICAgICB0aXRsZT1cInt7ICdTZW5kIG1lIGluZm9ybWF0aW9uIGFib3V0IG91dGFnZXMsIG1haW50ZW5hbmNlIG9yIHVwZGF0ZXMuJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBuYW1lPVwibmV3c2xldHRlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLm5ld3NsZXR0ZXJcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgJ1NlbmQgbWUgaW5mb3JtYXRpb24gYWJvdXQgb3V0YWdlcywgbWFpbnRlbmFuY2Ugb3IgdXBkYXRlcy4nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgc2VwYXJhdG9yLXRvcCBiZy1sZXZlbC0wIHN0aWNreS1ib3R0b21cIj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIiF1c2VyRm9ybS5mb3JtLnZhbGlkIHx8IHVzZXJGb3JtLmZvcm0ucHJpc3RpbmUgfHwgbG9hZGluZ1wiXG4gICAgPlxuICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Injectable
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
2
|
import { InventoryService, UserService } from '@c8y/client';
|
|
3
|
-
import { AlertService, DataGridService,
|
|
3
|
+
import { AlertService, DataGridService, gettext, ModalService, Status, UserPreferencesService } from '@c8y/ngx-components';
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
5
|
import { AlarmsDeviceGridColumn } from './columns/alarms.device-grid-column';
|
|
6
6
|
import { ColumnUtilService } from './columns/column-util.service';
|
|
@@ -18,7 +18,7 @@ import * as i2 from "@ngx-translate/core";
|
|
|
18
18
|
import * as i3 from "@c8y/ngx-components";
|
|
19
19
|
import * as i4 from "./columns/column-util.service";
|
|
20
20
|
export class DeviceGridService extends DataGridService {
|
|
21
|
-
constructor(inventoryService, userService, translateService, alertService, modal, columnUtilService, userPreferencesService
|
|
21
|
+
constructor(inventoryService, userService, translateService, alertService, modal, columnUtilService, userPreferencesService) {
|
|
22
22
|
super(userPreferencesService);
|
|
23
23
|
this.inventoryService = inventoryService;
|
|
24
24
|
this.userService = userService;
|
|
@@ -27,7 +27,6 @@ export class DeviceGridService extends DataGridService {
|
|
|
27
27
|
this.modal = modal;
|
|
28
28
|
this.columnUtilService = columnUtilService;
|
|
29
29
|
this.userPreferencesService = userPreferencesService;
|
|
30
|
-
this.gainsightService = gainsightService;
|
|
31
30
|
this.GRID_CONFIG_DEFAULT_STORAGE_KEY = 'device-grid-config';
|
|
32
31
|
}
|
|
33
32
|
getDefaultColumns() {
|
|
@@ -129,16 +128,10 @@ export class DeviceGridService extends DataGridService {
|
|
|
129
128
|
});
|
|
130
129
|
await this.inventoryService.delete(device, modalResult.confirmOptions);
|
|
131
130
|
this.alertService.success(gettext('Device deleted.'));
|
|
132
|
-
if (this.gainsightService) {
|
|
133
|
-
this.gainsightService.triggerEvent('deviceGrid:EntryDeleted');
|
|
134
|
-
}
|
|
135
131
|
return Promise.resolve();
|
|
136
132
|
}
|
|
137
133
|
catch (ex) {
|
|
138
134
|
// only if not cancel from modal
|
|
139
|
-
if (this.gainsightService && !ex) {
|
|
140
|
-
this.gainsightService.triggerEvent('deviceGrid:EntryDeletionCancelled');
|
|
141
|
-
}
|
|
142
135
|
if (ex) {
|
|
143
136
|
this.alertService.addServerFailure(ex);
|
|
144
137
|
}
|
|
@@ -234,14 +227,12 @@ export class DeviceGridService extends DataGridService {
|
|
|
234
227
|
};
|
|
235
228
|
}
|
|
236
229
|
}
|
|
237
|
-
DeviceGridService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, deps: [{ token: i1.InventoryService }, { token: i1.UserService }, { token: i2.TranslateService }, { token: i3.AlertService }, { token: i3.ModalService }, { token: i4.ColumnUtilService }, { token: i3.UserPreferencesService }
|
|
230
|
+
DeviceGridService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, deps: [{ token: i1.InventoryService }, { token: i1.UserService }, { token: i2.TranslateService }, { token: i3.AlertService }, { token: i3.ModalService }, { token: i4.ColumnUtilService }, { token: i3.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
238
231
|
DeviceGridService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, providedIn: 'root' });
|
|
239
232
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, decorators: [{
|
|
240
233
|
type: Injectable,
|
|
241
234
|
args: [{
|
|
242
235
|
providedIn: 'root'
|
|
243
236
|
}]
|
|
244
|
-
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i1.UserService }, { type: i2.TranslateService }, { type: i3.AlertService }, { type: i3.ModalService }, { type: i4.ColumnUtilService }, { type: i3.UserPreferencesService }
|
|
245
|
-
type: Optional
|
|
246
|
-
}] }]; } });
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1ncmlkL2RldmljZS1ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFrQixnQkFBZ0IsRUFBUyxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUVMLFlBQVksRUFHWixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFHUCxZQUFZLEVBR1osTUFBTSxFQUNOLHNCQUFzQixFQUN2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7QUFNbEYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFHcEQsWUFDWSxn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QUFDO0lBRUQsV0FBVyxDQUNULE1BQWtCLEVBQ2xCLE1BQWMsSUFBSSxDQUFDLCtCQUErQjtRQUVsRCxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsT0FBaUIsRUFDakIsVUFBc0IsRUFDdEIsS0FBVSxFQUNWLGtCQUE0QixFQUM1QixJQUFhO1FBRWIsT0FBTztZQUNMLEdBQUcsQ0FBQyxrQkFBa0I7Z0JBQ3BCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUN0RCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNyQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLFlBQVksRUFBRSxLQUFLO1lBQ25CLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7SUFDSixDQUFDOzs4R0FsU1UsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFZSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJVXNlciwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkU2VydmljZSxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgR3JpZENvbmZpZyxcbiAgSGVhZGVyQWN0aW9uQ29udHJvbCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBSb3csXG4gIFN0YXR1cyxcbiAgVXNlclByZWZlcmVuY2VzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFsYXJtc0RldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvYWxhcm1zLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBDb2x1bW5VdGlsU2VydmljZSB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4tdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyb3VwRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9ncm91cC5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgSW1laURldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvaW1laS5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgTW9kZWxEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL21vZGVsLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBOYW1lRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9uYW1lLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9yZWdpc3RyYXRpb24tZGF0ZS5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9zZXJpYWwtbnVtYmVyLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTdGF0dXNEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3N0YXR1cy5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3N5c3RlbS1pZC5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgRGV2aWNlR3JpZEFjdGlvblR5cGUgfSBmcm9tICcuL2RldmljZS1ncmlkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlR3JpZFNlcnZpY2UgZXh0ZW5kcyBEYXRhR3JpZFNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSA9ICdkZXZpY2UtZ3JpZC1jb25maWcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb2x1bW5VdGlsU2VydmljZTogQ29sdW1uVXRpbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGdhaW5zaWdodFNlcnZpY2U/OiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHVzZXJQcmVmZXJlbmNlc1NlcnZpY2UpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW1xuICAgICAgbmV3IFN0YXR1c0RldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBOYW1lRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IE1vZGVsRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBHcm91cERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEltZWlEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgQWxhcm1zRGV2aWNlR3JpZENvbHVtbigpXG4gICAgXTtcblxuICAgIHJldHVybiBkZWZhdWx0Q29sdW1ucztcbiAgfVxuXG4gIGdldENoaWxkRGV2aWNlR3JpZENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIGNvbnN0IGNoaWxkRGV2aWNlR3JpZENvbHVtbiA9IFtcbiAgICAgIG5ldyBTdGF0dXNEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgTmFtZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBNb2RlbERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBJbWVpRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEFsYXJtc0RldmljZUdyaWRDb2x1bW4oKVxuICAgIF07XG5cbiAgICByZXR1cm4gY2hpbGREZXZpY2VHcmlkQ29sdW1uO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldEluZmluaXRlU2Nyb2xsUGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDUwLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRGV2aWNlR3JpZEFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgICBjYWxsYmFjazogKGl0ZW06IFJvdykgPT4gdGhpcy5kZWxldGUoaXRlbSBhcyBJTWFuYWdlZE9iamVjdClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXREZWZhdWx0SGVhZGVyQWN0aW9uQ29udHJvbHMoKTogSGVhZGVyQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRQcm9wZXJOYW1lKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldFByb3Blck5hbWUoZGV2aWNlKTtcbiAgfVxuXG4gIGdldE1vZGVsKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldE1vZGVsKGRldmljZSk7XG4gIH1cblxuICBnZXRTZXJpYWxOdW1iZXIoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0U2VyaWFsTnVtYmVyKGRldmljZSk7XG4gIH1cblxuICBnZXRQYXJlbnRzTmFtZXMoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgZmVhdHVyZWRQYXJlbnRJZD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0UGFyZW50c05hbWVzKGRldmljZSwgZmVhdHVyZWRQYXJlbnRJZCk7XG4gIH1cblxuICBnZXRIcmVmKGdyb3VwT3JEZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBwcmVmaXggPSAnIy8nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlsU2VydmljZS5nZXRIcmVmKGdyb3VwT3JEZXZpY2UsIHByZWZpeCk7XG4gIH1cblxuICBnZXRBbGFybXNIcmVmKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldEFsYXJtc0hyZWYoZGV2aWNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRldmljZVdpdGhDaGlsZHJlbiA9IGF3YWl0IChcbiAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChkZXZpY2UsIHsgd2l0aENoaWxkcmVuOiB0cnVlIH0pXG4gICAgICApLmRhdGE7XG4gICAgICBjb25zdCBoYXNDaGlsZERldmljZXMgPSBkZXZpY2VXaXRoQ2hpbGRyZW4uY2hpbGREZXZpY2VzPy5yZWZlcmVuY2VzPy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzQ2hpbGRBZGRpdGlvbnMgPSBkZXZpY2VXaXRoQ2hpbGRyZW4uY2hpbGRBZGRpdGlvbnM/LnJlZmVyZW5jZXM/Lmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBoYXNDaGlsZEFzc2V0cyA9IGRldmljZVdpdGhDaGlsZHJlbi5jaGlsZEFzc2V0cz8ucmVmZXJlbmNlcz8ubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IHNob3dEZWxldGVDaGlsZHJlbiA9ICgpID0+IGhhc0NoaWxkQWRkaXRpb25zIHx8IGhhc0NoaWxkRGV2aWNlcyB8fCBoYXNDaGlsZEFzc2V0cztcbiAgICAgIGNvbnN0IG1vZGFsUmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgZGV2aWNlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGRldmljZSBcInt7IG5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gKSxcbiAgICAgICAgICBkZXZpY2VcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNhc2NhZGU6IHtcbiAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0Fsc28gZGVsZXRlIGNoaWxkIGhpZXJhcmNoeSBvZiB0aGlzIGRldmljZS4nKSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IHNob3dEZWxldGVDaGlsZHJlbigpLFxuICAgICAgICAgICAgc2hvd0lmOiBzaG93RGVsZXRlQ2hpbGRyZW4sXG4gICAgICAgICAgICBkaXNhYmxlZEJ5S2V5OiAnd2l0aERldmljZVVzZXInXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aXRoRGV2aWNlVXNlcjoge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgIGdldHRleHQoJ0Fsc28gZGVsZXRlIGFzc29jaWF0ZWQgZGV2aWNlIG93bmVyIFwie3sgb3duZXIgfX1cIi4nKSxcbiAgICAgICAgICAgICAgZGV2aWNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICBzaG93SWY6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNSb290RGV2aWNlID0gZGV2aWNlLmM4eV9Jc0RldmljZTtcbiAgICAgICAgICAgICAgY29uc3QgaGFzRGV2aWNlVXNlckFzT3duZXIgPVxuICAgICAgICAgICAgICAgIGRldmljZS5vd25lciAmJlxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNEZXZpY2VVc2VyKHsgaWQ6IGRldmljZS5vd25lciB9IGFzIHVua25vd24gYXMgSVVzZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGlzUm9vdERldmljZSAmJiBoYXNEZXZpY2VVc2VyQXNPd25lcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzYWJsZWRCeUtleTogJ2Nhc2NhZGUnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICAobW9kYWxSZXN1bHQgYXMgeyBjb25maXJtT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB9KS5jb25maXJtT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnRGV2aWNlIGRlbGV0ZWQuJykpO1xuICAgICAgaWYgKHRoaXMuZ2FpbnNpZ2h0U2VydmljZSkge1xuICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KCdkZXZpY2VHcmlkOkVudHJ5RGVsZXRlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBvbmx5IGlmIG5vdCBjYW5jZWwgZnJvbSBtb2RhbFxuICAgICAgaWYgKHRoaXMuZ2FpbnNpZ2h0U2VydmljZSAmJiAhZXgpIHtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnZGV2aWNlR3JpZDpFbnRyeURlbGV0aW9uQ2FuY2VsbGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXREYXRhKFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcXVlcnk6IGFueSA9IHt9LFxuICAgIHdpdGhDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnksIGZhbHNlLCB0ZXh0KSxcbiAgICAgIHdpdGhHcm91cHM6IHRydWUsXG4gICAgICB3aXRoQ2hpbGRyZW5cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGdldENoaWxkRGV2aWNlRGF0YShcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnkgPSB7fSxcbiAgICB3aXRoQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGNoaWxkRGV2aWNlRmlsdGVycyA9IHRydWU7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnksIGNoaWxkRGV2aWNlRmlsdGVycyksXG4gICAgICB3aXRoR3JvdXBzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkRGV2aWNlc0xpc3QoaWQsIGZpbHRlcnMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnQoY29sdW1uczogQ29sdW1uW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24sIHF1ZXJ5OiBhbnkgPSB7fSwgdGV4dDogc3RyaW5nID0gbnVsbCkge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5LCBmYWxzZSwgdGV4dCksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0KGZpbHRlcnMpKS5wYWdpbmcudG90YWxQYWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldENvdW50Q2hpbGREZXZpY2VzKFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcXVlcnk6IGFueSA9IHt9LFxuICAgIGlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgY2hpbGREZXZpY2VGaWx0ZXJzID0gdHJ1ZTtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXREZXZpY2VzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBxdWVyeSwgY2hpbGREZXZpY2VGaWx0ZXJzKSxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkRGV2aWNlc0xpc3QoaWQsIGZpbHRlcnMpKS5wYWdpbmcudG90YWxQYWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldFRvdGFsQ2hpbGREZXZpY2VzKHF1ZXJ5OiBhbnkgPSB7fSwgaWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIHE6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShxdWVyeSksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZERldmljZXNMaXN0KGlkLCBmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRUb3RhbChxdWVyeTogYW55ID0ge30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBxOiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnkpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBnZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zOiBDb2x1bW5bXSwgcXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IGZ1bGxRdWVyeSA9IHRoaXMuZ2V0UXVlcnlPYmooY29sdW1ucyk7XG4gICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCBxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmdWxsUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRDb25maWckKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0Q29uZmlnKGtleTogc3RyaW5nID0gdGhpcy5HUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZKTogR3JpZENvbmZpZyB7XG4gICAgcmV0dXJuIHN1cGVyLmdldENvbmZpZyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzYXZlQ29uZmlnJChjb25maWc6IEdyaWRDb25maWcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxHcmlkQ29uZmlnPiBpbnN0ZWFkLlxuICAgKi9cbiAgc2F2ZUNvbmZpZyhjb25maWc6IEdyaWRDb25maWcsIGtleTogc3RyaW5nID0gdGhpcy5HUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZKSB7XG4gICAgc3VwZXIuc2F2ZUNvbmZpZyhjb25maWcsIGtleSk7XG4gIH1cblxuICBjbGVhckNvbmZpZyhrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIHN1cGVyLmNsZWFyQ29uZmlnKGtleSk7XG4gIH1cblxuICBnZXRDb25maWckKGtleTogc3RyaW5nID0gdGhpcy5HUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZKTogT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldENvbmZpZyQoa2V5KTtcbiAgfVxuXG4gIHNhdmVDb25maWckKFxuICAgIGNvbmZpZzogR3JpZENvbmZpZyxcbiAgICBrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWVxuICApOiBPYnNlcnZhYmxlPEdyaWRDb25maWc+IHtcbiAgICByZXR1cm4gc3VwZXIuc2F2ZUNvbmZpZyQoY29uZmlnLCBrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXZpY2VzRmlsdGVycyhcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnksXG4gICAgY2hpbGREZXZpY2VGaWx0ZXJzPzogYm9vbGVhbixcbiAgICB0ZXh0Pzogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4oY2hpbGREZXZpY2VGaWx0ZXJzXG4gICAgICAgID8geyBxdWVyeTogdGhpcy5nZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zLCBxdWVyeSkgfVxuICAgICAgICA6IHsgcTogdGhpcy5nZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zLCBxdWVyeSkgfSksXG4gICAgICAuLi4odGV4dCAmJiB7IHRleHQgfSksXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i1.UserService }, { type: i2.TranslateService }, { type: i3.AlertService }, { type: i3.ModalService }, { type: i4.ColumnUtilService }, { type: i3.UserPreferencesService }]; } });
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1ncmlkL2RldmljZS1ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGdCQUFnQixFQUFTLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRixPQUFPLEVBRUwsWUFBWSxFQUdaLGVBQWUsRUFDZixPQUFPLEVBR1AsWUFBWSxFQUdaLE1BQU0sRUFDTixzQkFBc0IsRUFDdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBTWxGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUFlO0lBR3BELFlBQ1ksZ0JBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hC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Q0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckQsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsWUFBWSxFQUFFLEtBQUs7WUFDbkIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztJQUNKLENBQUM7OzhHQTNSVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVVzZXIsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEdyaWRDb25maWcsXG4gIEhlYWRlckFjdGlvbkNvbnRyb2wsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFnaW5hdGlvbixcbiAgUm93LFxuICBTdGF0dXMsXG4gIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGFybXNEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2FsYXJtcy5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgQ29sdW1uVXRpbFNlcnZpY2UgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLXV0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBHcm91cERldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvZ3JvdXAuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IEltZWlEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2ltZWkuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IE1vZGVsRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9tb2RlbC5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgTmFtZURldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvbmFtZS5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvcmVnaXN0cmF0aW9uLWRhdGUuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvc2VyaWFsLW51bWJlci5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU3RhdHVzRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9zdGF0dXMuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9zeXN0ZW0taWQuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IERldmljZUdyaWRBY3Rpb25UeXBlIH0gZnJvbSAnLi9kZXZpY2UtZ3JpZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZUdyaWRTZXJ2aWNlIGV4dGVuZHMgRGF0YUdyaWRTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIEdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSAnZGV2aWNlLWdyaWQtY29uZmlnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29sdW1uVXRpbFNlcnZpY2U6IENvbHVtblV0aWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHVzZXJQcmVmZXJlbmNlc1NlcnZpY2UpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW1xuICAgICAgbmV3IFN0YXR1c0RldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBOYW1lRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IE1vZGVsRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBHcm91cERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEltZWlEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgQWxhcm1zRGV2aWNlR3JpZENvbHVtbigpXG4gICAgXTtcblxuICAgIHJldHVybiBkZWZhdWx0Q29sdW1ucztcbiAgfVxuXG4gIGdldENoaWxkRGV2aWNlR3JpZENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIGNvbnN0IGNoaWxkRGV2aWNlR3JpZENvbHVtbiA9IFtcbiAgICAgIG5ldyBTdGF0dXNEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgTmFtZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBNb2RlbERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBJbWVpRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEFsYXJtc0RldmljZUdyaWRDb2x1bW4oKVxuICAgIF07XG5cbiAgICByZXR1cm4gY2hpbGREZXZpY2VHcmlkQ29sdW1uO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldEluZmluaXRlU2Nyb2xsUGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDUwLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRGV2aWNlR3JpZEFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgICBjYWxsYmFjazogKGl0ZW06IFJvdykgPT4gdGhpcy5kZWxldGUoaXRlbSBhcyBJTWFuYWdlZE9iamVjdClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXREZWZhdWx0SGVhZGVyQWN0aW9uQ29udHJvbHMoKTogSGVhZGVyQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRQcm9wZXJOYW1lKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldFByb3Blck5hbWUoZGV2aWNlKTtcbiAgfVxuXG4gIGdldE1vZGVsKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldE1vZGVsKGRldmljZSk7XG4gIH1cblxuICBnZXRTZXJpYWxOdW1iZXIoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0U2VyaWFsTnVtYmVyKGRldmljZSk7XG4gIH1cblxuICBnZXRQYXJlbnRzTmFtZXMoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgZmVhdHVyZWRQYXJlbnRJZD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0UGFyZW50c05hbWVzKGRldmljZSwgZmVhdHVyZWRQYXJlbnRJZCk7XG4gIH1cblxuICBnZXRIcmVmKGdyb3VwT3JEZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBwcmVmaXggPSAnIy8nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlsU2VydmljZS5nZXRIcmVmKGdyb3VwT3JEZXZpY2UsIHByZWZpeCk7XG4gIH1cblxuICBnZXRBbGFybXNIcmVmKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldEFsYXJtc0hyZWYoZGV2aWNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRldmljZVdpdGhDaGlsZHJlbiA9IGF3YWl0IChcbiAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChkZXZpY2UsIHsgd2l0aENoaWxkcmVuOiB0cnVlIH0pXG4gICAgICApLmRhdGE7XG4gICAgICBjb25zdCBoYXNDaGlsZERldmljZXMgPSBkZXZpY2VXaXRoQ2hpbGRyZW4uY2hpbGREZXZpY2VzPy5yZWZlcmVuY2VzPy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzQ2hpbGRBZGRpdGlvbnMgPSBkZXZpY2VXaXRoQ2hpbGRyZW4uY2hpbGRBZGRpdGlvbnM/LnJlZmVyZW5jZXM/Lmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBoYXNDaGlsZEFzc2V0cyA9IGRldmljZVdpdGhDaGlsZHJlbi5jaGlsZEFzc2V0cz8ucmVmZXJlbmNlcz8ubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IHNob3dEZWxldGVDaGlsZHJlbiA9ICgpID0+IGhhc0NoaWxkQWRkaXRpb25zIHx8IGhhc0NoaWxkRGV2aWNlcyB8fCBoYXNDaGlsZEFzc2V0cztcbiAgICAgIGNvbnN0IG1vZGFsUmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgZGV2aWNlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGRldmljZSBcInt7IG5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gKSxcbiAgICAgICAgICBkZXZpY2VcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNhc2NhZGU6IHtcbiAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0Fsc28gZGVsZXRlIGNoaWxkIGhpZXJhcmNoeSBvZiB0aGlzIGRldmljZS4nKSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IHNob3dEZWxldGVDaGlsZHJlbigpLFxuICAgICAgICAgICAgc2hvd0lmOiBzaG93RGVsZXRlQ2hpbGRyZW4sXG4gICAgICAgICAgICBkaXNhYmxlZEJ5S2V5OiAnd2l0aERldmljZVVzZXInXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aXRoRGV2aWNlVXNlcjoge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgIGdldHRleHQoJ0Fsc28gZGVsZXRlIGFzc29jaWF0ZWQgZGV2aWNlIG93bmVyIFwie3sgb3duZXIgfX1cIi4nKSxcbiAgICAgICAgICAgICAgZGV2aWNlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICBzaG93SWY6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNSb290RGV2aWNlID0gZGV2aWNlLmM4eV9Jc0RldmljZTtcbiAgICAgICAgICAgICAgY29uc3QgaGFzRGV2aWNlVXNlckFzT3duZXIgPVxuICAgICAgICAgICAgICAgIGRldmljZS5vd25lciAmJlxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNEZXZpY2VVc2VyKHsgaWQ6IGRldmljZS5vd25lciB9IGFzIHVua25vd24gYXMgSVVzZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGlzUm9vdERldmljZSAmJiBoYXNEZXZpY2VVc2VyQXNPd25lcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzYWJsZWRCeUtleTogJ2Nhc2NhZGUnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICAobW9kYWxSZXN1bHQgYXMgeyBjb25maXJtT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB9KS5jb25maXJtT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnRGV2aWNlIGRlbGV0ZWQuJykpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBvbmx5IGlmIG5vdCBjYW5jZWwgZnJvbSBtb2RhbFxuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0RGF0YShcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnkgPSB7fSxcbiAgICB3aXRoQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB0ZXh0OiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5LCBmYWxzZSwgdGV4dCksXG4gICAgICB3aXRoR3JvdXBzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3QoZmlsdGVycyk7XG4gIH1cblxuICBhc3luYyBnZXRDaGlsZERldmljZURhdGEoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55ID0ge30sXG4gICAgd2l0aENoaWxkcmVuOiBib29sZWFuID0gZmFsc2UsXG4gICAgaWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBjaGlsZERldmljZUZpbHRlcnMgPSB0cnVlO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5LCBjaGlsZERldmljZUZpbHRlcnMpLFxuICAgICAgd2l0aEdyb3VwczogdHJ1ZSxcbiAgICAgIHdpdGhDaGlsZHJlblxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZERldmljZXNMaXN0KGlkLCBmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvdW50KGNvbHVtbnM6IENvbHVtbltdLCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLCBxdWVyeTogYW55ID0ge30sIHRleHQ6IHN0cmluZyA9IG51bGwpIHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXREZXZpY2VzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBxdWVyeSwgZmFsc2UsIHRleHQpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRDb3VudENoaWxkRGV2aWNlcyhcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnkgPSB7fSxcbiAgICBpZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGNoaWxkRGV2aWNlRmlsdGVycyA9IHRydWU7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnksIGNoaWxkRGV2aWNlRmlsdGVycyksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZERldmljZXNMaXN0KGlkLCBmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRUb3RhbENoaWxkRGV2aWNlcyhxdWVyeTogYW55ID0ge30sIGlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBxOiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnkpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuY2hpbGREZXZpY2VzTGlzdChpZCwgZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG90YWwocXVlcnk6IGFueSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgcTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3QoZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgZ2V0RGV2aWNlUXVlcnlTdHJpbmcoY29sdW1uczogQ29sdW1uW10sIHF1ZXJ5OiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBmdWxsUXVlcnkgPSB0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMpO1xuICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgcXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZnVsbFF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0Q29uZmlnJChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8R3JpZENvbmZpZz4gaW5zdGVhZC5cbiAgICovXG4gIGdldENvbmZpZyhrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSk6IEdyaWRDb25maWcge1xuICAgIHJldHVybiBzdXBlci5nZXRDb25maWcoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc2F2ZUNvbmZpZyQoY29uZmlnOiBHcmlkQ29uZmlnLCBrZXk6IHN0cmluZyk6IFByb21pc2U8R3JpZENvbmZpZz4gaW5zdGVhZC5cbiAgICovXG4gIHNhdmVDb25maWcoY29uZmlnOiBHcmlkQ29uZmlnLCBrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIHN1cGVyLnNhdmVDb25maWcoY29uZmlnLCBrZXkpO1xuICB9XG5cbiAgY2xlYXJDb25maWcoa2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpIHtcbiAgICBzdXBlci5jbGVhckNvbmZpZyhrZXkpO1xuICB9XG5cbiAgZ2V0Q29uZmlnJChrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSk6IE9ic2VydmFibGU8R3JpZENvbmZpZz4ge1xuICAgIHJldHVybiBzdXBlci5nZXRDb25maWckKGtleSk7XG4gIH1cblxuICBzYXZlQ29uZmlnJChcbiAgICBjb25maWc6IEdyaWRDb25maWcsXG4gICAga2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVlcbiAgKTogT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiB7XG4gICAgcmV0dXJuIHN1cGVyLnNhdmVDb25maWckKGNvbmZpZywga2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGV2aWNlc0ZpbHRlcnMoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55LFxuICAgIGNoaWxkRGV2aWNlRmlsdGVycz86IGJvb2xlYW4sXG4gICAgdGV4dD86IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGNoaWxkRGV2aWNlRmlsdGVyc1xuICAgICAgICA/IHsgcXVlcnk6IHRoaXMuZ2V0RGV2aWNlUXVlcnlTdHJpbmcoY29sdW1ucywgcXVlcnkpIH1cbiAgICAgICAgOiB7IHE6IHRoaXMuZ2V0RGV2aWNlUXVlcnlTdHJpbmcoY29sdW1ucywgcXVlcnkpIH0pLFxuICAgICAgLi4uKHRleHQgJiYgeyB0ZXh0IH0pLFxuICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50UGFnZSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2UsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|