@tuki-io/tuki-widgets 0.0.197 → 0.0.199

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.
Files changed (49) hide show
  1. package/esm2020/di2mt/shared/components/stat-card/stat-card.component.mjs +2 -2
  2. package/esm2020/user-creation/src/app.constants.mjs +2 -16
  3. package/esm2020/user-creation/src/shared/material.module.mjs +7 -35
  4. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +19 -43
  5. package/esm2020/user-creation/src/shared/shared.module.mjs +4 -27
  6. package/esm2020/user-creation/src/user-creation.module.mjs +7 -40
  7. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +20 -512
  8. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.mjs +3 -3
  9. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +34 -80
  10. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +19 -83
  11. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +124 -594
  12. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +1 -1
  13. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  14. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +325 -1913
  15. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  16. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +1 -1
  17. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  18. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +313 -1868
  19. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  20. package/package.json +1 -1
  21. package/user-creation/src/app.constants.d.ts +0 -10
  22. package/user-creation/src/shared/material.module.d.ts +1 -5
  23. package/user-creation/src/shared/services/user-creation-api.service.d.ts +2 -8
  24. package/user-creation/src/shared/shared.module.d.ts +1 -3
  25. package/user-creation/src/user-creation.module.d.ts +10 -17
  26. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +7 -83
  27. package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +4 -11
  28. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.d.ts +0 -18
  29. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +56 -71
  30. package/esm2020/user-creation/src/classes/notification.mjs +0 -32
  31. package/esm2020/user-creation/src/environments/environment.mjs +0 -11
  32. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +0 -19
  33. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +0 -38
  34. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +0 -30
  35. package/esm2020/user-creation/src/shared/services/notification.service.mjs +0 -62
  36. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +0 -14
  37. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +0 -147
  38. package/esm2020/user-creation/src/utils/device-name-validation.mjs +0 -23
  39. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +0 -26
  40. package/user-creation/src/classes/notification.d.ts +0 -18
  41. package/user-creation/src/environments/environment.d.ts +0 -9
  42. package/user-creation/src/interfaces/user-creation-wizard.interfaces.d.ts +0 -502
  43. package/user-creation/src/shared/components/notification/notification.component.d.ts +0 -19
  44. package/user-creation/src/shared/pipes/truncate.pipe.d.ts +0 -7
  45. package/user-creation/src/shared/services/notification.service.d.ts +0 -18
  46. package/user-creation/src/utils/app-loader/app-loader.d.ts +0 -6
  47. package/user-creation/src/utils/build-savable-end-user.d.ts +0 -23
  48. package/user-creation/src/utils/device-name-validation.d.ts +0 -6
  49. package/user-creation/src/utils/parse-device-name-rule.d.ts +0 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuki-io/tuki-widgets",
3
- "version": "0.0.197",
3
+ "version": "0.0.199",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.2.0",
6
6
  "@angular/core": "^15.2.0",
@@ -5,21 +5,11 @@ export declare const API: {
5
5
  DEVICE_TYPES: string;
6
6
  SITE_SETTINGS: string;
7
7
  VM_USER_TEMPLATES: string;
8
- EXISTING_USERS: string;
9
8
  USER_TEMPLATES_UPLOAD_LIST: string;
10
9
  USER_TEMPLATE_TOKEN: string;
11
- AVAILABLE_DN_IN_RANGES: string;
12
- USER_CHECK_ID_EXISTING: string;
13
- LDAP_USERS: string;
14
- USERS: string;
15
- CREATE_NEW_USER_FROM_TEMPLATE: string;
16
- DEVICE_DEFAULTS: string;
17
10
  };
18
11
  export declare const USER_CREATION_TYPES: {
19
12
  CUCM: string;
20
13
  MT: string;
21
14
  };
22
15
  export declare const MAX_INTEGER = 2147483647;
23
- export declare const CUTTING_SYMBOLS: string[];
24
- export declare const BREADCRUMB_LENGTH_LIMIT = 20;
25
- export declare const DEFAULT_CUTTING_LENGTH = 15;
@@ -8,12 +8,8 @@ import * as i6 from "@angular/material/icon";
8
8
  import * as i7 from "@angular/material/form-field";
9
9
  import * as i8 from "@angular/material/input";
10
10
  import * as i9 from "@angular/material/select";
11
- import * as i10 from "@angular/material/autocomplete";
12
- import * as i11 from "@angular/material/progress-spinner";
13
- import * as i12 from "@angular/material/paginator";
14
- import * as i13 from "@angular/material/chips";
15
11
  export declare class MaterialModule {
16
12
  static ɵfac: i0.ɵɵFactoryDeclaration<MaterialModule, never>;
17
- static ɵmod: i0.ɵɵNgModuleDeclaration<MaterialModule, never, [typeof i1.MatProgressBarModule, typeof i2.MatTooltipModule, typeof i3.MatTableModule, typeof i4.MatCheckboxModule, typeof i5.MatButtonModule, typeof i6.MatIconModule, typeof i7.MatFormFieldModule, typeof i8.MatInputModule, typeof i9.MatSelectModule, typeof i10.MatAutocompleteModule, typeof i11.MatProgressSpinnerModule, typeof i12.MatPaginatorModule, typeof i13.MatChipsModule], [typeof i1.MatProgressBarModule, typeof i2.MatTooltipModule, typeof i3.MatTableModule, typeof i4.MatCheckboxModule, typeof i5.MatButtonModule, typeof i6.MatIconModule, typeof i7.MatFormFieldModule, typeof i8.MatInputModule, typeof i9.MatSelectModule, typeof i10.MatAutocompleteModule, typeof i11.MatProgressSpinnerModule, typeof i12.MatPaginatorModule, typeof i13.MatChipsModule]>;
13
+ static ɵmod: i0.ɵɵNgModuleDeclaration<MaterialModule, never, [typeof i1.MatProgressBarModule, typeof i2.MatTooltipModule, typeof i3.MatTableModule, typeof i4.MatCheckboxModule, typeof i5.MatButtonModule, typeof i6.MatIconModule, typeof i7.MatFormFieldModule, typeof i8.MatInputModule, typeof i9.MatSelectModule], [typeof i1.MatProgressBarModule, typeof i2.MatTooltipModule, typeof i3.MatTableModule, typeof i4.MatCheckboxModule, typeof i5.MatButtonModule, typeof i6.MatIconModule, typeof i7.MatFormFieldModule, typeof i8.MatInputModule, typeof i9.MatSelectModule]>;
18
14
  static ɵinj: i0.ɵɵInjectorDeclaration<MaterialModule>;
19
15
  }
@@ -1,6 +1,5 @@
1
1
  import { Observable } from "rxjs";
2
- import { Site, SiteDefaults, SiteInterface } from "../../classes/site";
3
- import { DeviceDefaultsInterface, UserTemplateInterface } from "../../interfaces/user-creation-wizard.interfaces";
2
+ import { Site, SiteDefaults, SiteInterface, UserTemplateInterface } from "../../classes/site";
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class UserCreationApiService {
6
5
  private _allSites;
@@ -13,18 +12,13 @@ export declare class UserCreationApiService {
13
12
  getSitesList(): void;
14
13
  checkControlHubIntegration(customerId: string): Observable<any>;
15
14
  getAllCustomerSites(customerId: string, onlySitesWithLocation?: boolean): Observable<Site[]>;
16
- getSiteAllData(siteId: number): Observable<any>;
15
+ getSiteData(siteId: number): Observable<[SiteInterface, string[], SiteDefaults, void]>;
17
16
  getSite(siteId: number, isEdit?: boolean): Observable<SiteInterface>;
18
17
  getDeviceTypes(siteId: number | string): Observable<string[]>;
19
18
  getSiteDefaults(siteId: number, directAccess: boolean, sharedLineSiteIds?: string): Observable<SiteDefaults>;
20
19
  getVoiceMailUserTemplates(siteId: number): Observable<void>;
21
20
  fetchAllUserTemplates(siteId: number): Observable<UserTemplateInterface[]>;
22
21
  getUserTemplateToken(id: string, customerId: string): Observable<any>;
23
- getAvailableDnInRanges(siteId: string, params: any): any;
24
- getLdapUsers(siteId: string, params: any): Observable<any>;
25
- checkUserIdExisting(siteId: string, userId: string): Observable<any>;
26
- saveTemplateUser(user: any, templateId: string, siteId: string): Observable<any>;
27
- getDeviceDefaults(siteId: string, deviceType: string): Observable<DeviceDefaultsInterface>;
28
22
  static ɵfac: i0.ɵɵFactoryDeclaration<UserCreationApiService, never>;
29
23
  static ɵprov: i0.ɵɵInjectableDeclaration<UserCreationApiService>;
30
24
  }
@@ -3,10 +3,8 @@ import * as i1 from "@angular/common";
3
3
  import * as i2 from "./material.module";
4
4
  import * as i3 from "ng-apexcharts";
5
5
  import * as i4 from "@angular/common/http";
6
- import * as i5 from "@angular/forms";
7
- import * as i6 from "@angular/material/table";
8
6
  export declare class SharedModule {
9
7
  static ɵfac: i0.ɵɵFactoryDeclaration<SharedModule, never>;
10
- static ɵmod: i0.ɵɵNgModuleDeclaration<SharedModule, never, [typeof i1.CommonModule, typeof i2.MaterialModule, typeof i3.NgApexchartsModule, typeof i4.HttpClientModule, typeof i5.ReactiveFormsModule, typeof i5.FormsModule], [typeof i2.MaterialModule, typeof i5.ReactiveFormsModule, typeof i5.FormsModule, typeof i6.MatTableModule, typeof i3.NgApexchartsModule, typeof i4.HttpClientModule]>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SharedModule, never, [typeof i1.CommonModule, typeof i2.MaterialModule, typeof i3.NgApexchartsModule, typeof i4.HttpClientModule], [typeof i2.MaterialModule]>;
11
9
  static ɵinj: i0.ɵɵInjectorDeclaration<SharedModule>;
12
10
  }
@@ -1,24 +1,17 @@
1
- import { HttpClient } from "@angular/common/http";
2
- import { TranslateHttpLoader } from '@ngx-translate/http-loader';
3
1
  import * as i0 from "@angular/core";
4
2
  import * as i1 from "./widgets/user-creation-wizard/user-creation-wizard.component";
5
3
  import * as i2 from "./widgets/user-creation-wizard/components/user-template-step/user-template-step.component";
6
- import * as i3 from "./shared/components/notification/notification.component";
7
- import * as i4 from "./widgets/user-creation-wizard/components/user-details-step/user-details-step.component";
8
- import * as i5 from "./widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component";
9
- import * as i6 from "./utils/app-loader/app-loader";
10
- import * as i7 from "./shared/pipes/truncate.pipe";
11
- import * as i8 from "@angular/common";
12
- import * as i9 from "./shared/shared.module";
13
- import * as i10 from "./shared/material.module";
14
- import * as i11 from "@angular/material/stepper";
15
- import * as i12 from "@angular/material/expansion";
16
- import * as i13 from "@angular/forms";
17
- import * as i14 from "@angular/material/radio";
18
- import * as i15 from "@ngx-translate/core";
19
- export declare function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader;
4
+ import * as i3 from "./widgets/user-creation-wizard/components/user-details-step/user-details-step.component";
5
+ import * as i4 from "./widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component";
6
+ import * as i5 from "@angular/common";
7
+ import * as i6 from "./shared/shared.module";
8
+ import * as i7 from "./shared/material.module";
9
+ import * as i8 from "@angular/material/stepper";
10
+ import * as i9 from "@angular/material/expansion";
11
+ import * as i10 from "@angular/forms";
12
+ import * as i11 from "@angular/material/radio";
20
13
  export declare class UserCreationModule {
21
14
  static ɵfac: i0.ɵɵFactoryDeclaration<UserCreationModule, never>;
22
- static ɵmod: i0.ɵɵNgModuleDeclaration<UserCreationModule, [typeof i1.UserCreationWizardComponent, typeof i2.UserTemplateStepComponent, typeof i3.NotificationsComponent, typeof i4.UserDetailsStepComponent, typeof i5.UserOverviewStepComponent, typeof i6.AppLoaderComponent, typeof i7.TruncatePipe], [typeof i8.CommonModule, typeof i9.SharedModule, typeof i10.MaterialModule, typeof i11.MatStepperModule, typeof i12.MatExpansionModule, typeof i13.FormsModule, typeof i13.ReactiveFormsModule, typeof i14.MatRadioModule, typeof i15.TranslateModule], [typeof i1.UserCreationWizardComponent]>;
15
+ static ɵmod: i0.ɵɵNgModuleDeclaration<UserCreationModule, [typeof i1.UserCreationWizardComponent, typeof i2.UserTemplateStepComponent, typeof i3.UserDetailsStepComponent, typeof i4.UserOverviewStepComponent], [typeof i5.CommonModule, typeof i6.SharedModule, typeof i7.MaterialModule, typeof i8.MatStepperModule, typeof i9.MatExpansionModule, typeof i10.FormsModule, typeof i10.ReactiveFormsModule, typeof i11.MatRadioModule], [typeof i1.UserCreationWizardComponent]>;
23
16
  static ɵinj: i0.ɵɵInjectorDeclaration<UserCreationModule>;
24
17
  }
@@ -1,86 +1,10 @@
1
- import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
- import { FormArray, FormBuilder, FormGroup } from '@angular/forms';
3
- import { PageEvent } from '@angular/material/paginator';
4
- import { LdapQueryType, ListUserInterface } from '../../../../interfaces/user-creation-wizard.interfaces';
5
- import { UserCreationApiService } from '../../../../shared/services/user-creation-api.service';
6
- import { UserCreationWizardService } from '../../user-creation-wizard.service';
1
+ import { LdapUserRow, UserCreationWizardService } from "../../user-creation-wizard.service";
7
2
  import * as i0 from "@angular/core";
8
- export declare class UserDetailsStepComponent implements OnInit, OnDestroy {
9
- private readonly fb;
10
- private readonly userCreationApiService;
11
- readonly userCreationWizardService: UserCreationWizardService;
12
- validityChange: EventEmitter<boolean>;
13
- userDetailsForm: FormGroup;
14
- ldapSearchForm: FormGroup;
15
- userIdCheckPending: boolean;
16
- loadingAvailableNumbers: boolean;
17
- ldapLoading: boolean;
18
- ldapSearchAttempted: boolean;
19
- readonly ldapPageSize = 10;
20
- ldapPageIndex: number;
21
- readonly ldapQueryTypeOptions: {
22
- label: string;
23
- value: LdapQueryType;
24
- }[];
25
- filteredAvailableNumbersByLine: string[][];
26
- filteredRoutePartitionsByLine: string[][];
27
- private readonly destroy$;
28
- private readonly userIdAsyncValidator;
29
- get linesFormArray(): FormArray;
30
- get devicesFormArray(): FormArray;
31
- get deviceProfilesFormArray(): FormArray;
32
- get selectedLdapUser(): ListUserInterface | null;
33
- get ldapTotalCount(): number;
34
- get hasLdapUsers(): boolean;
35
- constructor(fb: FormBuilder, userCreationApiService: UserCreationApiService, userCreationWizardService: UserCreationWizardService);
36
- ngOnInit(): void;
37
- ngOnDestroy(): void;
38
- isStepValid(): boolean;
39
- markAllAsTouched(): void;
40
- syncToService(): void;
41
- getLineGroup(index: number): FormGroup;
42
- getDeviceGroup(index: number): FormGroup;
43
- getDeviceProfileGroup(index: number): FormGroup;
44
- getDeviceNamePrefix(index: number): string | null;
45
- getDeviceProfileNamePrefix(index: number): string | null;
46
- getDeviceNameValidationCaption(index: number): string;
47
- getDeviceProfileNameValidationCaption(index: number): string;
48
- getFilteredNumbers(lineIndex: number): string[];
49
- getFilteredRoutePartitions(lineIndex: number): string[];
50
- filterAvailableNumbers(lineIndex: number, event: Event): void;
51
- filterRoutePartitions(lineIndex: number, event: Event): void;
52
- onRoutePartitionSelected(lineIndex: number, routePartition: string): void;
53
- onNumberSelected(lineIndex: number, number: string): void;
54
- searchLdapUsers(pageIndex?: number): void;
55
- onLdapPageChange(event: PageEvent): void;
56
- onAddLdapUser(row: ListUserInterface): void;
57
- onDeleteLdapUser(row: ListUserInterface): void;
58
- onRemoveLdapTag(): void;
59
- isLdapUserRowSelected(row: ListUserInterface): boolean;
60
- private clearLdapSelection;
61
- private applyLdapIntegratedFormState;
62
- private restoreManualEntryFormState;
63
- private setUserIdentityFieldsReadonly;
64
- private toggleUserIdAsyncValidator;
65
- private setupValidityEmitter;
66
- private emitValidity;
67
- private buildDynamicFormArrays;
68
- private buildDeviceNameValidators;
69
- private applyDeviceNameValidators;
70
- private resetLdapSearchForm;
71
- private patchUserFieldsFromSavedValue;
72
- private patchUserFieldsFromService;
73
- private setupLineListeners;
74
- private initLineFilters;
75
- private setupFormSync;
76
- private fetchInitialAvailableNumbers;
77
- private loadAvailableNumbersForLine;
78
- private refreshNumberFilters;
79
- private applyNumberFilter;
80
- private applyRoutePartitionFilter;
81
- private filterOptions;
82
- private extractDirectoryNumber;
83
- private createUserIdAsyncValidator;
3
+ export declare class UserDetailsStepComponent {
4
+ userCreationWizardService: UserCreationWizardService;
5
+ constructor(userCreationWizardService: UserCreationWizardService);
6
+ onAddUser(row: LdapUserRow): void;
7
+ getDeviceName(index: number): string;
84
8
  static ɵfac: i0.ɵɵFactoryDeclaration<UserDetailsStepComponent, never>;
85
- static ɵcmp: i0.ɵɵComponentDeclaration<UserDetailsStepComponent, "tk-user-details-step", never, {}, { "validityChange": "validityChange"; }, never, never, false, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserDetailsStepComponent, "tk-user-details-step", never, {}, {}, never, never, false, never>;
86
10
  }
@@ -1,16 +1,13 @@
1
- import { EventEmitter } from "@angular/core";
2
1
  import { UserCreationWizardService } from "../../user-creation-wizard.service";
3
2
  import { FormBuilder, FormControl } from "@angular/forms";
4
3
  import { UserCreationApiService } from "../../../../shared/services/user-creation-api.service";
5
- import { Site } from "../../../../classes/site";
6
- import { UserTemplateInterface } from "../../../../interfaces/user-creation-wizard.interfaces";
4
+ import { Site, UserTemplateInterface } from "../../../../classes/site";
7
5
  import * as i0 from "@angular/core";
8
6
  export declare class UserTemplateStepComponent {
9
7
  userCreationWizardService: UserCreationWizardService;
10
8
  private readonly userCreationService;
11
9
  private readonly fb;
12
10
  customerId: number;
13
- validityChange: EventEmitter<boolean>;
14
11
  formGroup: import("@angular/forms").FormGroup<{
15
12
  userType: FormControl<string | null>;
16
13
  siteId: FormControl<null>;
@@ -21,15 +18,14 @@ export declare class UserTemplateStepComponent {
21
18
  CUCM: string;
22
19
  MT: string;
23
20
  };
21
+ readonly defaultTemplateName = "User 8851 Office";
22
+ readonly fallbackTemplateId = "-1";
24
23
  private readonly destroy$;
25
24
  private sitesList;
26
25
  readonly sitesList$: import("rxjs").Observable<Site[]>;
27
26
  readonly templatesList$: import("rxjs").Observable<UserTemplateInterface[]>;
28
27
  isTemplateSelectable: boolean;
29
28
  templates: UserTemplateInterface[];
30
- loadingSites: boolean;
31
- loadingSiteData: boolean;
32
- get isLoading(): boolean;
33
29
  readonly templateToggleFormControl: FormControl<boolean | null>;
34
30
  constructor(userCreationWizardService: UserCreationWizardService, userCreationService: UserCreationApiService, fb: FormBuilder);
35
31
  ngOnInit(): void;
@@ -38,10 +34,7 @@ export declare class UserTemplateStepComponent {
38
34
  private getSites;
39
35
  isCUCM(site: Site): boolean;
40
36
  getSelectedSiteName(): string;
41
- getSelectedTemplateName(): string;
42
- isStepValid(): boolean;
43
- markStepTouched(): void;
44
37
  ngOnDestroy(): void;
45
38
  static ɵfac: i0.ɵɵFactoryDeclaration<UserTemplateStepComponent, never>;
46
- static ɵcmp: i0.ɵɵComponentDeclaration<UserTemplateStepComponent, "tk-user-template-step", never, { "customerId": "customerId"; }, { "validityChange": "validityChange"; }, never, never, false, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserTemplateStepComponent, "tk-user-template-step", never, { "customerId": "customerId"; }, {}, never, never, false, never>;
47
40
  }
@@ -1,15 +1,7 @@
1
1
  import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
- import { StepperSelectionEvent } from '@angular/cdk/stepper';
3
- import { MatStepper } from '@angular/material/stepper';
4
- import { NotificationService } from '../../shared/services/notification.service';
5
- import { UserDetailsStepComponent } from './components/user-details-step/user-details-step.component';
6
- import { UserTemplateStepComponent } from './components/user-template-step/user-template-step.component';
7
2
  import * as i0 from "@angular/core";
8
- export declare const USER_CREATED_SUCCESSFLLY = "User created successfully";
9
3
  export declare class UserCreationWizardComponent implements OnInit, OnDestroy {
10
- private notificationService;
11
4
  private readonly apiService;
12
- private readonly userCreationWizardService;
13
5
  title: string;
14
6
  host: string;
15
7
  token: string;
@@ -18,20 +10,10 @@ export declare class UserCreationWizardComponent implements OnInit, OnDestroy {
18
10
  submit: EventEmitter<void>;
19
11
  isSubmitting: boolean;
20
12
  private submitTimerId;
21
- selectedIndex: number;
22
- templateStepValid: boolean;
23
- detailsStepValid: boolean;
24
- templateStep?: UserTemplateStepComponent;
25
- detailsStep?: UserDetailsStepComponent;
26
- isLoading: boolean;
27
- constructor(notificationService: NotificationService);
28
13
  ngOnInit(): void;
29
14
  onCancel(): void;
30
- onStepSelectionChange(event: StepperSelectionEvent): void;
31
- onStepperNext(stepper: MatStepper): void;
32
15
  onSubmit(): void;
33
16
  ngOnDestroy(): void;
34
- private _saveChanges;
35
17
  static ɵfac: i0.ɵɵFactoryDeclaration<UserCreationWizardComponent, never>;
36
18
  static ɵcmp: i0.ɵɵComponentDeclaration<UserCreationWizardComponent, "tk-user-creation-wizard", never, { "title": "title"; "host": "host"; "token": "token"; "customerId": "customerId"; }, { "cancel": "cancel"; "submit": "submit"; }, never, never, false, never>;
37
19
  }
@@ -1,106 +1,91 @@
1
- import { Observable } from "rxjs";
2
- import { SiteDefaults } from "../../classes/site";
3
- import { Site } from "../../classes/site";
4
- import { DeviceEntry, EndUserInterface, LineOption, OverviewDeviceRow, OverviewLineRow, OverviewUserRow, SelectedLineRow, TemplateDeviceLike, TemplateEndUserLike, TemplateLineLike, UserCreationType, UserDetailsForm, UserDetailsFormValue, UserTemplateInterface, LineInterface, DeviceInterface, AvailableRangeInterface, ListUserInterface } from "../../interfaces/user-creation-wizard.interfaces";
5
1
  import * as i0 from "@angular/core";
2
+ export interface LdapUserRow {
3
+ userId: string;
4
+ firstName: string;
5
+ lastName: string;
6
+ email: string;
7
+ }
8
+ export interface OverviewUserRow extends LdapUserRow {
9
+ userTemplate: string;
10
+ }
11
+ export interface OverviewLineRow {
12
+ number: string;
13
+ did: string;
14
+ routePartitionName: string;
15
+ css: string;
16
+ description: string;
17
+ }
18
+ export interface OverviewDeviceRow {
19
+ name: string;
20
+ deviceType: string;
21
+ lines: string;
22
+ description: string;
23
+ }
24
+ export type UserCreationType = 'CUCM' | 'MT';
25
+ export interface UserDetailsForm {
26
+ userId: string;
27
+ firstName: string;
28
+ lastName: string;
29
+ email: string;
30
+ }
31
+ export interface LineOption {
32
+ number: string;
33
+ did: string;
34
+ css: string;
35
+ description: string;
36
+ }
37
+ export interface SelectedLineRow {
38
+ lineNumber: string | null;
39
+ routePartitionName: string | null;
40
+ }
41
+ export interface DeviceEntry {
42
+ deviceType: string;
43
+ protocol: string;
44
+ buttonTemplate: string;
45
+ name: string;
46
+ }
6
47
  export declare class UserCreationWizardService {
7
- private readonly userCreationApiService;
48
+ private readonly api;
8
49
  readonly ldapTableColumns: string[];
9
50
  readonly userCreationTypes: UserCreationType[];
10
- private template;
11
- endUser: EndUserInterface | null;
12
- lines: LineInterface[];
13
- devices: DeviceInterface[];
14
- deviceProfiles: DeviceInterface[];
15
- private templateLinesSnapshot;
16
- private _currentSite;
17
- get currentSite(): Site | null;
18
51
  siteOptions: string[];
19
52
  templateOptions: string[];
20
53
  lineOptions: LineOption[];
21
54
  routePartitionOptions: string[];
22
55
  deviceRows: number[];
23
- ldapUsers: ListUserInterface[];
56
+ ldapUsers: LdapUserRow[];
24
57
  overviewUsers: OverviewUserRow[];
25
58
  overviewLines: OverviewLineRow[];
26
59
  overviewDevices: OverviewDeviceRow[];
27
- overviewDeviceProfiles: OverviewDeviceRow[];
28
- userDetailsFormValue: UserDetailsFormValue | null;
29
60
  userDetailsForm: UserDetailsForm;
30
61
  lineSelections: SelectedLineRow[];
31
62
  deviceEntries: DeviceEntry[];
32
- availableNumbers: string[];
33
- deviceTypes: string[];
34
- siteDefaults: SiteDefaults | null;
35
- originalSiteDefaults: SiteDefaults | null;
36
- templateLines: TemplateLineLike[];
37
- templateDevices: TemplateDeviceLike[];
38
- templateUserDetails: TemplateEndUserLike;
39
- selectedSite: number | null;
40
- selectedTemplateName: string | null;
41
- selectedTemplateId: number | null;
63
+ selectedSite: string | null;
64
+ selectedTemplate: string | null;
42
65
  selectedUserCreationType: UserCreationType;
43
- availableDidPatternsMappedToDn: any;
44
- private readonly deviceDefaultsLoadedSubject;
45
- readonly deviceDefaultsLoaded$: Observable<void>;
46
- get firstLineRoutePartition(): string;
47
- get siteDefaultRoutePartition(): string;
48
- get routePartitionNamesList(): string[];
49
- selectedLdapUser: ListUserInterface | null;
50
- ldapUsersTotal: number;
66
+ private readonly addedLdapUserIds;
51
67
  constructor();
52
- get isLdapIntegrated(): boolean;
53
- selectLdapUser(user: ListUserInterface): void;
54
- clearLdapUserSelection(): void;
55
- isLdapUserRowSelected(row: ListUserInterface): boolean;
56
- setLdapUsersResult(users: ListUserInterface[], total: number): void;
57
- setSelectedSite(site: number | null): void;
58
- setSelectedTemplate(template?: UserTemplateInterface | undefined): void;
59
- setCurrentSite(site: Site): void;
68
+ addLdapUser(row: LdapUserRow): void;
69
+ isLdapUserAdded(row: LdapUserRow): boolean;
70
+ setSelectedSite(site: string | null): void;
71
+ setSelectedTemplate(template: string | null): void;
60
72
  resetTemplateDrivenData(): void;
61
- applyTemplateTokenPayload(payload: UserTemplateInterface): void;
73
+ applyTemplateTokenPayload(payload: any): void;
62
74
  setSelectedUserCreationType(type: UserCreationType): void;
63
- resetUserDetailsStepState(): void;
64
- private captureTemplateLinesSnapshot;
65
75
  setUserDetailsField(field: keyof UserDetailsForm, value: string): void;
66
- applyUserDetailsFormValue(formValue: UserDetailsFormValue): void;
67
76
  setLineSelection(index: number, lineNumber: string | null): void;
68
77
  setRoutePartitionSelection(index: number, routePartitionName: string | null): void;
69
78
  setDeviceName(index: number, name: string): void;
70
79
  getDeviceDisplayName(index: number): string;
71
- getSiteAllData(siteId: number): Observable<any>;
72
- loadDeviceDefaultsForDevices(siteId: number): Observable<void>;
73
- private getUniqueDeviceTypes;
74
- private applyDeviceDefaultsToType;
75
- getDeviceNamePrefix(deviceIndex: number, isProfile?: boolean): string | null;
76
- getDeviceNameValidationCaption(deviceIndex: number, isProfile?: boolean): string;
77
- getDeviceNameValidationOptions(deviceIndex: number, isProfile?: boolean): {
78
- regex: string;
79
- caption: string;
80
- } | null;
81
- getNumberRange(siteId: string, routePartition: string): Observable<AvailableRangeInterface>;
80
+ loadPlaceholderData(): void;
82
81
  private rebuildOverviewUsers;
83
82
  private rebuildOverviewLines;
84
83
  private rebuildOverviewDevices;
85
- private rebuildOverviewDeviceProfiles;
86
84
  private extractTemplateFromTokenPayload;
87
85
  private uniqueByNumber;
88
86
  private uniqueStrings;
89
87
  private valueToString;
90
- private getUnwrapNumberRange;
91
- private unwrapNumberRange;
92
- setAvailableDidMappedToDn(availableNumber: any): void;
93
88
  loadDataFromApi(): void;
94
- private initLineWithSiteInfo;
95
- private setLineAssociationsForDevice;
96
- private initDeviceWithSiteInfo;
97
- private replaceDynamicValueSiteInfo;
98
- private replaceDynamicValueFormat;
99
- mutliStringReplace(object: any, input: string, directoryNumber?: string, user?: any): string;
100
- private initTemplateDnsNamesForLines;
101
- buildSavableEndUser(): EndUserInterface;
102
- private resolveDeviceNameForSave;
103
- saveNewUser(): Observable<any>;
104
89
  static ɵfac: i0.ɵɵFactoryDeclaration<UserCreationWizardService, never>;
105
90
  static ɵprov: i0.ɵɵInjectableDeclaration<UserCreationWizardService>;
106
91
  }
@@ -1,32 +0,0 @@
1
- import { environment } from '../environments/environment';
2
- const TTL_DEFAULT = environment.notificationsLifetime;
3
- const TTL_LONG_DEFAULT = environment.longNotificationsLifetime;
4
- export var NotificationType;
5
- (function (NotificationType) {
6
- NotificationType["info"] = "info";
7
- NotificationType["error"] = "error";
8
- NotificationType["success"] = "success";
9
- NotificationType["warning"] = "warning";
10
- })(NotificationType || (NotificationType = {}));
11
- export class Notification {
12
- constructor(data) {
13
- this.ttl = TTL_DEFAULT;
14
- Object.assign(this, data || {});
15
- if (this.ttl === undefined) {
16
- this.ttl = this.message && this.message.length && this.message.length < 80 ? TTL_DEFAULT : TTL_LONG_DEFAULT;
17
- }
18
- }
19
- isInfo() {
20
- return this.type === NotificationType.info;
21
- }
22
- isError() {
23
- return this.type === NotificationType.error;
24
- }
25
- isSuccess() {
26
- return this.type === NotificationType.success;
27
- }
28
- isWarning() {
29
- return this.type === NotificationType.warning;
30
- }
31
- }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItY3JlYXRpb24vc3JjL2NsYXNzZXMvbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUM7QUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUM7QUFFL0QsTUFBTSxDQUFOLElBQVksZ0JBS1g7QUFMRCxXQUFZLGdCQUFnQjtJQUN4QixpQ0FBYSxDQUFBO0lBQ2IsbUNBQWUsQ0FBQTtJQUNmLHVDQUFtQixDQUFBO0lBQ25CLHVDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFBWSxJQUFTO1FBSHJCLFFBQUcsR0FBVyxXQUFXLENBQUM7UUFJeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLElBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztTQUM3RztJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUNELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFDRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUNoRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5cbmNvbnN0IFRUTF9ERUZBVUxUID0gZW52aXJvbm1lbnQubm90aWZpY2F0aW9uc0xpZmV0aW1lO1xuY29uc3QgVFRMX0xPTkdfREVGQVVMVCA9IGVudmlyb25tZW50LmxvbmdOb3RpZmljYXRpb25zTGlmZXRpbWU7XG5cbmV4cG9ydCBlbnVtIE5vdGlmaWNhdGlvblR5cGUge1xuICAgIGluZm8gPSAnaW5mbycsXG4gICAgZXJyb3IgPSAnZXJyb3InLFxuICAgIHN1Y2Nlc3MgPSAnc3VjY2VzcycsXG4gICAgd2FybmluZyA9ICd3YXJuaW5nJ1xufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uIHtcbiAgaWQ/OiBudW1iZXI7XG4gIHR5cGU/OiBOb3RpZmljYXRpb25UeXBlO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICB0dGw6IG51bWJlciA9IFRUTF9ERUZBVUxUO1xuICB0aW1lcklkPzogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IGFueSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGF0YSB8fCB7fSk7XG5cbiAgICBpZih0aGlzLnR0bCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnR0bCA9IHRoaXMubWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2UubGVuZ3RoICYmIHRoaXMubWVzc2FnZS5sZW5ndGggPCA4MCA/IFRUTF9ERUZBVUxUIDogVFRMX0xPTkdfREVGQVVMVDtcbiAgICB9XG4gIH1cblxuICBpc0luZm8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gTm90aWZpY2F0aW9uVHlwZS5pbmZvO1xuICB9XG4gIGlzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gTm90aWZpY2F0aW9uVHlwZS5lcnJvcjtcbiAgfVxuICBpc1N1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gTm90aWZpY2F0aW9uVHlwZS5zdWNjZXNzO1xuICB9XG4gIGlzV2FybmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBOb3RpZmljYXRpb25UeXBlLndhcm5pbmc7XG4gIH1cbn1cbiJdfQ==
@@ -1,11 +0,0 @@
1
- export const environment = {
2
- production: false,
3
- // apiUrl: 'http://localhost:4200',
4
- apiUrl: 'http://192.168.0.191:8080',
5
- notificationsLifetime: 30000,
6
- longNotificationsLifetime: 45000,
7
- cashCleanTimer: 900000,
8
- cashArrayLength: 10000,
9
- matomoUrl: 'http://192.168.0.136/matomo/',
10
- };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixVQUFVLEVBQUUsS0FBSztJQUNqQixtQ0FBbUM7SUFDbkMsTUFBTSxFQUFFLDJCQUEyQjtJQUNuQyxxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLHlCQUF5QixFQUFFLEtBQUs7SUFDaEMsY0FBYyxFQUFFLE1BQU07SUFDdEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsU0FBUyxFQUFFLDhCQUE4QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudmlyb25tZW50ID0ge1xuICBwcm9kdWN0aW9uOiBmYWxzZSxcbiAgLy8gYXBpVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJyxcbiAgYXBpVXJsOiAnaHR0cDovLzE5Mi4xNjguMC4xOTE6ODA4MCcsXG4gIG5vdGlmaWNhdGlvbnNMaWZldGltZTogMzAwMDAsXG4gIGxvbmdOb3RpZmljYXRpb25zTGlmZXRpbWU6IDQ1MDAwLFxuICBjYXNoQ2xlYW5UaW1lcjogOTAwMDAwLFxuICBjYXNoQXJyYXlMZW5ndGg6IDEwMDAwLFxuICBtYXRvbW9Vcmw6ICdodHRwOi8vMTkyLjE2OC4wLjEzNi9tYXRvbW8vJyxcbn07XG4iXX0=
@@ -1,19 +0,0 @@
1
- export var DnRangeType;
2
- (function (DnRangeType) {
3
- DnRangeType["extension"] = "EXTENSION";
4
- DnRangeType["cpg"] = "CPG";
5
- DnRangeType["callpark"] = "CALLPARK";
6
- DnRangeType["huntgroup"] = "HUNTGROUP";
7
- DnRangeType["meetme"] = "MEETME";
8
- DnRangeType["did"] = "DID";
9
- })(DnRangeType || (DnRangeType = {}));
10
- export var UserViewType;
11
- (function (UserViewType) {
12
- UserViewType[UserViewType["details"] = 0] = "details";
13
- UserViewType[UserViewType["devices"] = 1] = "devices";
14
- UserViewType[UserViewType["lines"] = 2] = "lines";
15
- UserViewType[UserViewType["snr"] = 3] = "snr";
16
- UserViewType[UserViewType["features"] = 4] = "features";
17
- UserViewType[UserViewType["overview"] = 5] = "overview";
18
- })(UserViewType || (UserViewType = {}));
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jcmVhdGlvbi13aXphcmQuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy9pbnRlcmZhY2VzL3VzZXItY3JlYXRpb24td2l6YXJkLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNmVBLE1BQU0sQ0FBTixJQUFZLFdBT1g7QUFQRCxXQUFZLFdBQVc7SUFDckIsc0NBQXVCLENBQUE7SUFDdkIsMEJBQVcsQ0FBQTtJQUNYLG9DQUFxQixDQUFBO0lBQ3JCLHNDQUF1QixDQUFBO0lBQ3ZCLGdDQUFpQixDQUFBO0lBQ2pCLDBCQUFXLENBQUE7QUFDYixDQUFDLEVBUFcsV0FBVyxLQUFYLFdBQVcsUUFPdEI7QUFzQkQsTUFBTSxDQUFOLElBQVksWUFPWDtBQVBELFdBQVksWUFBWTtJQUN0QixxREFBVyxDQUFBO0lBQ1gscURBQVcsQ0FBQTtJQUNYLGlEQUFTLENBQUE7SUFDVCw2Q0FBTyxDQUFBO0lBQ1AsdURBQVksQ0FBQTtJQUNaLHVEQUFZLENBQUE7QUFDZCxDQUFDLEVBUFcsWUFBWSxLQUFaLFlBQVksUUFPdkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIExkYXBVc2VyUm93IHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBmaXJzdE5hbWU6IHN0cmluZztcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIExkYXBRdWVyeVR5cGUgPSAndXNlcklkJyB8ICdmaXJzdE5hbWUnIHwgJ2xhc3ROYW1lJztcblxuZXhwb3J0IGludGVyZmFjZSBPdmVydmlld1VzZXJSb3cgZXh0ZW5kcyBMZGFwVXNlclJvdyB7XG4gICAgdXNlclRlbXBsYXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnZpZXdMaW5lUm93IHtcbiAgICBudW1iZXI6IHN0cmluZztcbiAgICBkaWQ6IHN0cmluZztcbiAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZztcbiAgICBjc3M6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJ2aWV3RGV2aWNlUm93IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGV2aWNlVHlwZTogc3RyaW5nO1xuICAgIGxpbmVzOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVXNlckNyZWF0aW9uVHlwZSA9ICdDVUNNJyB8ICdNVCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRldGFpbHNGb3JtIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBmaXJzdE5hbWU6IHN0cmluZztcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRldGFpbHNMaW5lRm9ybVZhbHVlIHtcbiAgICBsaW5lTnVtYmVyOiBzdHJpbmc7XG4gICAgbnVtYmVyOiBzdHJpbmc7XG4gICAgcm91dGVQYXJ0aXRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRGV0YWlsc0RldmljZUZvcm1WYWx1ZSB7XG4gICAgZGV2aWNlVHlwZTogc3RyaW5nO1xuICAgIHByb3RvY29sOiBzdHJpbmc7XG4gICAgYnV0dG9uVGVtcGxhdGU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRldGFpbHNGb3JtVmFsdWUge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICAgIGxhc3ROYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBsaW5lczogVXNlckRldGFpbHNMaW5lRm9ybVZhbHVlW107XG4gICAgZGV2aWNlczogVXNlckRldGFpbHNEZXZpY2VGb3JtVmFsdWVbXTtcbiAgICBkZXZpY2VQcm9maWxlczogVXNlckRldGFpbHNEZXZpY2VGb3JtVmFsdWVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW5lT3B0aW9uIHtcbiAgICBudW1iZXI6IHN0cmluZztcbiAgICBkaWQ6IHN0cmluZztcbiAgICBjc3M6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkTGluZVJvdyB7XG4gICAgbGluZU51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlRW50cnkge1xuICAgIGRldmljZVR5cGU6IHN0cmluZztcbiAgICBwcm90b2NvbDogc3RyaW5nO1xuICAgIGJ1dHRvblRlbXBsYXRlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlTGluZUxpa2Uge1xuICAgIGRpcmVjdG9yeU51bWJlcj86IHtcbiAgICAgICAgZGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nO1xuICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGw7XG4gICAgY2FsbGluZ1NlYXJjaFNwYWNlPzogc3RyaW5nIHwgeyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbiAgICBkaWRQYXR0ZXJucz86IEFycmF5PHsgcGF0dGVybj86IHN0cmluZyB8IG51bGwgfT4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlRGV2aWNlTGlrZSB7XG4gICAgZGV2aWNlVHlwZT86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvdG9jb2w/OiBzdHJpbmcgfCBudWxsO1xuICAgIGJ1dHRvblRlbXBsYXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBsaW5lQXNzb2NpYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBkaXJlY3RvcnlOdW1iZXI/OiB7XG4gICAgICAgICAgICBkaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgdGVtcGxhdGVEaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9IHwgbnVsbDtcbiAgICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUVuZFVzZXJMaWtlIHtcbiAgICB1c2VyaWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIGZpcnN0TmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdE5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVtYWlsPzogc3RyaW5nIHwgbnVsbDtcbiAgICBsaW5lcz86IFRlbXBsYXRlTGluZUxpa2VbXSB8IG51bGw7XG4gICAgZGV2aWNlcz86IFRlbXBsYXRlRGV2aWNlTGlrZVtdIHwgbnVsbDtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUZW1wbGF0ZUludGVyZmFjZSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgY3JlYXRlT3JVcGxvYWQ6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJUZW1wbGF0ZVNldHRpbmdzOiBVc2VyVGVtcGxhdGVTZXR0aW5nW107XG4gIGN1c3RvbWVySWQ6IG51bWJlcjtcbiAgdXNlclJlcXVpcmVkRmllbGRzOiBzdHJpbmdbXTtcbiAgZGV2aWNlUmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdO1xuICB1ZHBSZXF1aXJlZEZpZWxkczogc3RyaW5nW107XG4gIGxpbmVSZXF1aXJlZEZpZWxkczogc3RyaW5nW107XG4gIGVuZFVzZXI6IEVuZFVzZXJJbnRlcmZhY2U7XG4gIHR5cGU6IHN0cmluZztcbiAgZ2xvYmFsVGVtcGxhdGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclRlbXBsYXRlU2V0dGluZyB7XG4gIC8vIEFkZCBmaWVsZHMgaWYgbmVlZGVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5kVXNlckludGVyZmFjZSB7XG4gIHVzZXJpZDogc3RyaW5nIHwgbnVsbDtcbiAgZW1haWw6IHN0cmluZyB8IG51bGw7XG4gIGZpcnN0TmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgbGFzdE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGRvbWFpbjogc3RyaW5nIHwgbnVsbDtcbiAgY3VzdG9tZXJJZDogbnVtYmVyIHwgbnVsbDtcbiAgZGVwYXJ0bWVudDogc3RyaW5nIHwgbnVsbDtcbiAgdXNlclByb2ZpbGU6IHN0cmluZyB8IG51bGw7XG4gIG1hbmFnZXI6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzOiBib29sZWFuIHwgbnVsbDtcbiAgYXNzb2NpYXRlZFBjOiBzdHJpbmcgfCBudWxsO1xuICB1c2VyTG9jYWxlOiBzdHJpbmcgfCBudWxsO1xuICBkaWdlc3RDcmVkZW50aWFsczogc3RyaW5nIHwgbnVsbDtcbiAgbWlkZGxlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgaG9tZU51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgbW9iaWxlTnVtYmVyOiBzdHJpbmcgfCBudWxsO1xuICBwYWdlck51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGRpcmVjdG9yeVVyaTogc3RyaW5nIHwgbnVsbDtcbiAgcHJlc2VuY2VHcm91cDogc3RyaW5nIHwgbnVsbDtcbiAgc3Vic2NyaWJlQ3NzOiBzdHJpbmcgfCBudWxsO1xuICBhbGxvd0RldmljZUNvbnRyb2xGcm9tQ3RpOiBib29sZWFuIHwgbnVsbDtcbiAgZW5hYmxlQ3Jvc3NDbHVzdGVyRW06IGJvb2xlYW4gfCBudWxsO1xuICBtbHBwVXNlcklkTnVtYmVyOiBzdHJpbmcgfCBudWxsO1xuICBtbHBwUHJlY2VkZW5jZVBhdHRlcm46IHN0cmluZyB8IG51bGw7XG4gIGNyZWF0ZVVzZXJNb2RlOiBib29sZWFuO1xuICBlbmFibGVNb2JpbGl0eTogYm9vbGVhbiB8IG51bGw7XG4gIGRldmljZXM6IERldmljZUludGVyZmFjZVtdO1xuICBkZXZpY2VQcm9maWxlczogRGV2aWNlSW50ZXJmYWNlW107XG4gIGxpbmVzOiBMaW5lSW50ZXJmYWNlW107XG4gIHNpbmdsZU51bWJlclJlYWNoPzoge1xuICAgIGFzc29jaWF0ZWRMaW5lcz86IExpbmVJbnRlcmZhY2VbXSB8IG51bGw7XG4gICAgcmVtb3RlRGVzdGluYXRpb25zPzoge1xuICAgICAgbGluZUFzc29jaWF0aW9ucz86IExpbmVJbnRlcmZhY2VbXSB8IG51bGw7XG4gICAgfVtdIHwgbnVsbDtcbiAgICByZW1vdGVEZXN0aW5hdGlvblByb2ZpbGVOYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgfSB8IG51bGw7XG4gIHByaW1hcnlMaW5lUmVmZXJlbmNlOiB1bmtub3duIHwgbnVsbDtcbiAgdm9pY2VtYWlsOiB1bmtub3duIHwgbnVsbDtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgbWlncmF0aW9uVm1VbmNoYW5nZWQ6IGJvb2xlYW4gfCBudWxsO1xuICBtaWdyYXRpb25JbVBVbmNoYW5nZWQ6IGJvb2xlYW4gfCBudWxsO1xuICB1Y1NlcnZpY2VQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICB0ZWxlY29tTWFuYWdlclJ1bGU6IGJvb2xlYW47XG4gIHVzZXJUZW1wbGF0ZVVkcERldmljZVR5cGVzUnVsZXM6IFVzZXJUZW1wbGF0ZVVkcERldmljZVR5cGVzUnVsZVtdO1xuICBsZGFwSW50ZWdyYXRlZD86IGJvb2xlYW4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxJbmZvRGlzcGxheSB7XG4gIGNhbGxlck5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBjYWxsZXJOdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xuICByZWRpcmVjdGVkTnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcbiAgZGlhbGVkTnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWRQYXR0ZXJuIHtcbiAgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s/OiBzdHJpbmcgfCBudWxsO1xuICBwYXR0ZXJuPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm90b2NvbFNwZWNpZmljRGVmYXVsdHMge1xuICBidXR0b25UZW1wbGF0ZXM6IHN0cmluZ1tdO1xuICBzZWN1cml0eVByb2ZpbGVzOiBzdHJpbmdbXTtcbiAgc3VwcG9ydGVkRXhwYW5zaW9uTW9kdWxlczogc3RyaW5nW107XG4gIHN1cHBvcnRzU29mdGtleVRlbXBsYXRlczogYm9vbGVhbjtcbiAgc3VwcG9ydHNCTEY6IGJvb2xlYW47XG4gIHN1cHBvcnRzRU06IGJvb2xlYW47XG4gIHN1cHBvcnRzTXVsdGlwbGVDYWxsRGlzcGxheTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VEZWZhdWx0c0ludGVyZmFjZSB7XG4gIGRldmljZVR5cGU6IHN0cmluZztcbiAgZGV2aWNlTmFtZVJlZ2V4OiBzdHJpbmc7XG4gIGRldmljZU5hbWVFeHBsYWluZWQ6IHN0cmluZztcbiAgbmV0d29ya0xvY2FsZXM6IHN0cmluZ1tdO1xuICBwcm90b2NvbFByb3RvY29sU3BlY2lmaWNEZWZhdWx0OiBSZWNvcmQ8c3RyaW5nLCBQcm90b2NvbFNwZWNpZmljRGVmYXVsdHM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUludGVyZmFjZSB7XG4gIGRldmljZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIHByb3RvY29sOiBzdHJpbmcgfCBudWxsO1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICBuZXdOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwcmVmaXg6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgYnV0dG9uVGVtcGxhdGU6IHN0cmluZyB8IG51bGw7XG4gIGxvY2F0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBkZXZpY2VQb29sTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgc29mdGtleVRlbXBsYXRlOiBzdHJpbmcgfCBudWxsO1xuICBlbnRpdHlDaGFuZ2VUeXBlOiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVEZXZpY2VNb2RlPzogYm9vbGVhbjtcbiAgY2FsbGluZ1NlYXJjaFNwYWNlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgY29tbW9uUGhvbmVDb25maWdOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzZWN1cml0eVByb2ZpbGU6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJMb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gIG5ldHdvcmtMb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eTogYm9vbGVhbiB8IG51bGw7XG4gIGZpcnN0RXhwYW5zaW9uTW9kdWxlOiBzdHJpbmcgfCBudWxsO1xuICBzZWNvbmRFeHBhbnNpb25Nb2R1bGU6IHN0cmluZyB8IG51bGw7XG4gIHdpdGhVZHA6IGJvb2xlYW47XG4gIGxpbmVBc3NvY2lhdGlvbnM6IExpbmVBc3NvY2lhdGlvbltdO1xuICBzaXBQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBzdWJzY3JpYmVDYWxsaW5nU2VhcmNoU3BhY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBleHRyYU9wdGlvbnM6IERldmljZUV4dHJhT3B0aW9ucztcbiAgdXNlckRldmljZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWx0SW5CcmlkZ2U6IHN0cmluZyB8IG51bGw7XG4gIHNlcnZpY2VzOiBTZXJ2aWNlW107XG4gIHNwZWVkRGlhbHM6IFNwZWVkRGlhbFtdO1xuICBidXN5TGFtcEZpZWxkczogQnVzeUxhbXBGaWVsZFtdO1xuICB3ZWJleFVVSUQ6IHN0cmluZyB8IG51bGw7XG4gIHBraWQ6IHN0cmluZyB8IG51bGw7XG4gIGRldmljZURlZmF1bHRzPzogRGV2aWNlRGVmYXVsdHNJbnRlcmZhY2UgfCBudWxsO1xuICBuYW1lVmFsaWRhdGlvblJlZ2V4Pzogc3RyaW5nIHwgbnVsbDtcbiAgbmFtZVZhbGlkYXRpb25DYXB0aW9uPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW5lQXNzb2NpYXRpb24ge1xuICBsaW5lUGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgaW5kZXg6IG51bWJlcjtcbiAgcG9zaXRpb246IHN0cmluZyB8IG51bGw7XG4gIGRpcmVjdG9yeU51bWJlcjogRGlyZWN0b3J5TnVtYmVyO1xuICBlMTY0TWFzazogc3RyaW5nIHwgbnVsbDtcbiAgdGV4dExhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBkaXNwbGF5TGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGRpc3BsYXlMYWJlbEFzY2lpOiBzdHJpbmcgfCBudWxsO1xuICBtYXhOdW1iZXJPZkNhbGxzOiBudW1iZXIgfCBudWxsO1xuICBidXN5VHJpZ2dlcjogbnVtYmVyIHwgbnVsbDtcbiAgcmVjb3JkaW5nT3B0aW9uOiBzdHJpbmcgfCBudWxsO1xuICByZWNvcmRpbmdQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICByZWNvcmRpbmdNZWRpYVNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgdmlzdWFsTVdJOiBib29sZWFuIHwgbnVsbDtcbiAgYXVkaWJsZU1XSTogYm9vbGVhbiB8IG51bGw7XG4gIHJpbmdTZXR0aW5nX2lkbGU6IHN0cmluZyB8IG51bGw7XG4gIHJpbmdTZXR0aW5nX2FjdGl2ZTogc3RyaW5nIHwgbnVsbDtcbiAgcGlja3VwQUFTX2lkbGU6IHN0cmluZyB8IG51bGw7XG4gIHBpY2t1cEFBU19hY3RpdmU6IHN0cmluZyB8IG51bGw7XG4gIG1vbml0b3JDU1M6IHN0cmluZyB8IG51bGw7XG4gIGxvZ01pc3NlZENhbGw6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsO1xuICBjYWxsSW5mb0Rpc3BsYXk6IENhbGxJbmZvRGlzcGxheSB8IHN0cmluZyB8IG51bGw7XG4gIGxpbmVMb2NhbElkOiBzdHJpbmc7XG4gIGRpZFBhdHRlcm46IERpZFBhdHRlcm4gfCBzdHJpbmcgfCBudWxsO1xuICBlbnRpdHlDaGFuZ2VUeXBlPzogc3RyaW5nIHwgbnVsbDtcbiAgc2hhcmVkRGV2aWNlczogU2hhcmVkRGV2aWNlW107XG4gIHNoYXJlZFVzZXJzOiBTaGFyZWRVc2VyW107XG4gIG93bmVyVXNlcklkOiBzdHJpbmdbXTtcbiAgYXNzb2NpYXRlZDogYm9vbGVhbjtcbiAgcGF0dGVyblVzYWdlOiBzdHJpbmcgfCBudWxsO1xuICBhbGVydGluZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIHBvcHVsYXRlV2l0aERpZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlOdW1iZXIge1xuICAvLyBkaXJlY3RvcnlOdW1iZXI6IHN0cmluZyB8IG51bGw7XG4gIC8vIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gcGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgLy8gZG5UeXBlOiBzdHJpbmcgfCBudWxsO1xuICAvLyBzdWJUeXBlOiBzdHJpbmcgfCBudWxsO1xuXG4gIGRpcmVjdG9yeU51bWJlcjogc3RyaW5nO1xuICB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlcj86IHN0cmluZztcbiAgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmc7XG4gIHBraWQ/OiBzdHJpbmcgfCBudWxsO1xuICBkblR5cGU/OiBzdHJpbmcgfCBudWxsO1xuICBzdWJUeXBlPzogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheVZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUV4dHJhT3B0aW9ucyB7XG4gIG1lZGlhUmVzb3VyY2VHcm91cExpc3Q6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJIb2xkTU9IQXVkaW9Tb3VyY2VJZDogc3RyaW5nIHwgbnVsbDtcbiAgdXNlckhvbGRNT0hBdWRpb1NvdXJjZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5ldHdvcmtNT0hBdWRpb1NvdXJjZUlkOiBzdHJpbmcgfCBudWxsO1xuICBuZXR3b3JrTU9IQXVkaW9Tb3VyY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBhYXJDc3M6IHN0cmluZyB8IG51bGw7XG4gIGFhckdyb3VwOiBzdHJpbmcgfCBudWxsO1xuICBwcml2YWN5OiBzdHJpbmcgfCBudWxsO1xuICBkZXZpY2VNb2JpbGl0eU1vZGU6IHN0cmluZyB8IG51bGw7XG4gIG1vYmlsaXR5VXNlcklkOiBzdHJpbmcgfCBudWxsO1xuICBwaG9uZVBlcnNvbmFsaXphdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgc2VydmljZXNQcm92aXNpb25pbmc6IHN0cmluZyB8IG51bGw7XG4gIHBob25lTG9hZE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHBob25lSWRsZUJMRkFsZXJ0U2V0dGluZzogc3RyaW5nIHwgbnVsbDtcbiAgcGhvbmVCdXN5QkxGQWxlcnRTZXR0aW5nOiBzdHJpbmcgfCBudWxsO1xuICB1c2VUcnVzdGVkUmVsYXlQb2ludDogYm9vbGVhbiB8IG51bGw7XG4gIGFsd2F5c1VzZVByaW1lTGluZTogYm9vbGVhbiB8IG51bGw7XG4gIGFsd2F5c1VzZVByaW1lTGluZUZvclZvaWNlTWVzc2FnZTogYm9vbGVhbiB8IG51bGw7XG4gIGdlb2xvY2F0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBpZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzOiBib29sZWFuIHwgbnVsbDtcbiAgbG9nZ2VkSW50b0h1bnRHcm91cDogYm9vbGVhbiB8IG51bGw7XG4gIGVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eTogYm9vbGVhbiB8IG51bGw7XG4gIHJlbW90ZURldmljZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJvdGVjdGVkRGV2aWNlOiBib29sZWFuIHwgbnVsbDtcbiAgaG90bGluZURldmljZTogYm9vbGVhbjtcbiAgY29tbW9uRGV2aWNlQ29uZmlnTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE46IGJvb2xlYW4gfCBudWxsO1xuICBjZ3BuSW5ncmVzc0ROOiBzdHJpbmcgfCBudWxsO1xuICB1c2VEZXZpY2VQb29sQ2dwblRyYW5zZm9ybUNzczogYm9vbGVhbiB8IG51bGw7XG4gIGNncG5UcmFuc2Zvcm1hdGlvbkNzczogc3RyaW5nIHwgbnVsbDtcbiAgcGFja2V0Q2FwdHVyZU1vZGU6IHN0cmluZyB8IG51bGw7XG4gIHBhY2tldENhcHR1cmVEdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgYmxmUHJlc2VuY2VHcm91cDogc3RyaW5nIHwgbnVsbDtcbiAgc2lwRGlhbFJ1bGVzOiBzdHJpbmcgfCBudWxsO1xuICBtdHBQcmVmZXJyZWRPcmlnaW5hdGluZ0NvZGVjOiBzdHJpbmcgfCBudWxsO1xuICByZXJvdXRlQ3NzOiBzdHJpbmcgfCBudWxsO1xuICBzdWJzY3JpYmVDc3M6IHN0cmluZyB8IG51bGw7XG4gIGRpZ2VzdFVzZXI6IHN0cmluZyB8IG51bGw7XG4gIG10cFJlcXVpcmVkOiBib29sZWFuIHwgbnVsbDtcbiAgdW5hdHRlbmRlZFBvcnQ6IGJvb2xlYW4gfCBudWxsO1xuICByZXF1aXJlRHRtZlJlY2VwdGlvbjogYm9vbGVhbiB8IG51bGw7XG4gIGluZm9ybWF0aW9uVXJsOiBzdHJpbmcgfCBudWxsO1xuICBkaXJlY3RvcnlVcmw6IHN0cmluZyB8IG51bGw7XG4gIG1lc3NhZ2VzVXJsOiBzdHJpbmcgfCBudWxsO1xuICBzZXJ2aWNlc1VybDogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aGVudGljYXRpb25Vcmw6IHN0cmluZyB8IG51bGw7XG4gIHByb3h5U2VydmVyVXJsOiBzdHJpbmcgfCBudWxsO1xuICBpZGxlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBpZGxlVGltZW91dDogbnVtYmVyIHwgbnVsbDtcbiAgc2VjdXJlQXV0aGVudGljYXRpb25Vcmw6IHN0cmluZyB8IG51bGw7XG4gIHNlY3VyZURpcmVjdG9yeVVybDogc3RyaW5nIHwgbnVsbDtcbiAgc2VjdXJlSWRsZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgc2VjdXJlSW5mb3JtYXRpb25Vcmw6IHN0cmluZyB8IG51bGw7XG4gIHNlY3VyZU1lc3NhZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHNlY3VyZVNlcnZpY2VzVXJsOiBzdHJpbmcgfCBudWxsO1xuICBtbHBwRG9tYWluOiBzdHJpbmcgfCBudWxsO1xuICBtbHBwSW5kaWNhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgbWxwcFByZWVtcHRpb246IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZGVudGlhbEFjY2Vzc01vZGU6IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZGVudGlhbEFjY2Vzc0xldmVsOiBzdHJpbmcgfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGRvTm90RGlzdHVyYjogYm9vbGVhbiB8IG51bGw7XG4gIGRuZE9wdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgZG5kSW5jb21pbmdDYWxsQWxlcnQ6IHN0cmluZyB8IG51bGw7XG4gIGRpc2FibGVTcGVha2VycGhvbmU6IGJvb2xlYW4gfCBudWxsO1xuICBkaXNhYmxlU3BlYWtlcnBob25lQW5kSGVhZHNldDogYm9vbGVhbiB8IG51bGw7XG4gIGZvcndhcmRpbmdEZWxheTogbnVtYmVyIHwgbnVsbDtcbiAgcGNQb3J0OiBib29sZWFuIHwgbnVsbDtcbiAgc2V0dGluZ3NBY2Nlc3M6IHN0cmluZyB8IG51bGw7XG4gIGdyYXR1aXRvdXNBUlA6IGJvb2xlYW4gfCBudWxsO1xuICBwY1ZvaWNlVmxhbkFjY2Vzczogc3RyaW5nIHwgbnVsbDtcbiAgdmlkZW9DYXBhYmlsaXRpZXM6IHN0cmluZyB8IG51bGw7XG4gIHdlYkFjY2VzczogYm9vbGVhbiB8IG51bGw7XG4gIGRheXNEaXNwbGF5Tm90QWN0aXZlOiBudW1iZXIgfCBudWxsO1xuICBkaXNwbGF5T25UaW1lOiBzdHJpbmcgfCBudWxsO1xuICBkaXNwbGF5T25EdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgZGlzcGxheUlkbGVUaW1lb3V0OiBudW1iZXIgfCBudWxsO1xuICB3aXJlbGVzc0hlYWRzZXRIb29rc3dpdGNoQ29udHJvbDogYm9vbGVhbiB8IG51bGw7XG4gIG1pblJpbmdWb2x1bWU6IG51bWJlciB8IG51bGw7XG4gIHNob3dBbGxDYWxsc09uUEw6IGJvb2xlYW4gfCBudWxsO1xuICBsaW5lTW9kZTogc3RyaW5nIHwgbnVsbDtcbiAgbGF0ZW50Q2FwYWJpbGl0eVJlZ2lzdHJhdGlvbjogYm9vbGVhbiB8IG51bGw7XG4gIGFjdGlvbmFibGVBbGVydDogYm9vbGVhbiB8IG51bGw7XG4gIHJldmVydFRvQWxsQ2FsbHM6IGJvb2xlYW4gfCBudWxsO1xuICB3aWRlYmFuZEhlYWRzZXRVSUNvbnRyb2w6IGJvb2xlYW4gfCBudWxsO1xuICB3aWRlYmFuZEhlYWRzZXQ6IGJvb2xlYW4gfCBudWxsO1xuICBhdXRoZW50aWNhdGlvbjgwMjogYm9vbGVhbiB8IG51bGw7XG4gIHNwYW5Ub1BjUG9ydDogYm9vbGVhbiB8IG51bGw7XG4gIGhlYWRzZXRNb25pdG9yOiBib29sZWFuIHwgbnVsbDtcbiAgaGVhZHNldFJlY29yZGluZzogYm9vbGVhbiB8IG51bGw7XG4gIHVwZGF0ZWRGaWVsZHM6IHN0cmluZ1tdO1xuICBlbmFibGVDZHBTd1BvcnQ6IGJvb2xlYW4gfCBudWxsO1xuICBlbmFibGVDZHBQY1BvcnQ6IGJvb2xlYW4gfCBudWxsO1xuICBlbmFibGVMbGRwUGNQb3J0OiBib29sZWFuIHwgbnVsbDtcbiAgZGVmYXVsdFdhbGxwYXBlckZpbGU6IHN0cmluZyB8IG51bGw7XG4gIGFuYWxvZ0dhdGV3YXlQb3J0SW5mb3JtYXRpb246IHN0cmluZyB8IG51bGw7XG4gIGxvYWRTZXJ2ZXI6IHN0cmluZyB8IG51bGw7XG4gIHBlZXJGaXJtd2FyZVNoYXJpbmc6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUludGVyZmFjZSB7XG4gIGRpcmVjdG9yeU51bWJlcjogRGlyZWN0b3J5TnVtYmVyO1xuICBjYWxsaW5nU2VhcmNoU3BhY2U6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBsb2NhbElkOiBzdHJpbmc7XG4gIGVudGl0eUNoYW5nZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIGFsZXJ0aW5nTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYXNjaWlBbGVydGluZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGNhbGxGb3J3YXJkQWxsOiBDYWxsRm9yd2FyZDtcbiAgY2FsbEZvcndhcmRBbGxTZWNvbmRhcnlDU1M6IENhbGxGb3J3YXJkO1xuICBjYWxsRm9yd2FyZEJ1c3lJbnRlcm5hbDogQ2FsbEZvcndhcmQ7XG4gIGNhbGxGb3J3YXJkQnVzeUV4dGVybmFsOiBDYWxsRm9yd2FyZDtcbiAgY2FsbEZvcndhcmROb0Fuc3dlckludGVybmFsOiBDYWxsRm9yd2FyZDtcbiAgY2FsbEZvcndhcmROb0Fuc3dlckV4dGVybmFsOiBDYWxsRm9yd2FyZDtcbiAgY2FsbEZvcndhcmROb0NvdmVyYWdlSW50ZXJuYWw6IENhbGxGb3J3YXJkO1xuICBjYWxsRm9yd2FyZE5vQ292ZXJhZ2VFeHRlcm5hbDogQ2FsbEZvcndhcmQ7XG4gIGNhbGxGb3J3YXJkT25DVElGYWlsdXJlOiBDYWxsRm9yd2FyZDtcbiAgY2FsbEZvcndhcmRVbnJlZ2lzdGVyZWRJbnRlcm5hbDogQ2FsbEZvcndhcmQ7XG4gIGNhbGxGb3J3YXJkVW5yZWdpc3RlcmVkRXh0ZXJuYWw6IENhbGxGb3J3YXJkO1xuICB2b2ljZU1haWxQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBub0Fuc3dlclJpbmdEdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgYXV0b0Fuc3dlcjogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbFBpY2t1cEdyb3VwOiBzdHJpbmcgfCBudWxsO1xuICBhYXJTZXR0aW5nczogQWFyU2V0dGluZ3M7XG4gIHBhcmtNb25pdG9yaW5nSW50ZXJuYWw6IHN0cmluZyB8IG51bGw7XG4gIHBhcmtNb25pdG9yaW5nRXh0ZXJuYWw6IHN0cmluZyB8IG51bGw7XG4gIHVyZ2VudFByaW9yaXR5OiBzdHJpbmcgfCBudWxsO1xuICBibGZQcmVzZW5jZUdyb3VwOiBzdHJpbmcgfCBudWxsO1xuICB1c2VySG9sZE1PSEF1ZGlvU291cmNlSWQ6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJIb2xkTU9IQXVkaW9Tb3VyY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBuZXR3b3JrTU9IQXVkaW9Tb3VyY2VJZDogc3RyaW5nIHwgbnVsbDtcbiAgbmV0d29ya01PSEF1ZGlvU291cmNlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcmVqZWN0QW5vbnltb3VzQ2FsbDogYm9vbGVhbiB8IG51bGw7XG4gIGVudGVycHJpc2VBbHROdW06IHN0cmluZyB8IG51bGw7XG4gIGUxNjRBbHROdW06IHN0cmluZyB8IG51bGw7XG4gIGRpcmVjdG9yeVVyaXM6IHN0cmluZ1tdO1xuICBjYWxsRm9yd2FyZEFsdGVybmF0ZVBhcnR5OiBDYWxsRm9yd2FyZDtcbiAgbWxwcE5vQW5zd2VyUmluZ0R1cmF0aW9uOiBudW1iZXIgfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiBzdHJpbmcgfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbDogc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlkZW50aWFsQWNjZXNzTGV2ZWxOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsQ29udHJvbEFnZW50UHJvZmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgaG9sZFJldmVyc2lvblJpbmdEdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgaG9sZFJldmVyc2lvbk5vdGlmaWNhdGlvbkludGVydmFsOiBudW1iZXIgfCBudWxsO1xuICBwYXJ0eUVudHJhbmNlVG9uZTogc3RyaW5nIHwgbnVsbDtcbiAgcHN0bkZhaWxvdmVyOiBzdHJpbmcgfCBudWxsO1xuICBuZXdUb1VzZXI6IGJvb2xlYW4gfCBudWxsO1xuICBkaWRQYXR0ZXJuczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEZvcndhcmQge1xuICBmb3J3YXJkVG9Wb2ljZU1haWw6IGJvb2xlYW4gfCBudWxsO1xuICBkZXN0aW5hdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbGluZ1NlYXJjaFNwYWNlOiBzdHJpbmcgfCBudWxsO1xuICBkdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBYXJTZXR0aW5ncyB7XG4gIGFhckRlc3RpbmF0aW9uTWFzazogc3RyaW5nIHwgbnVsbDtcbiAgYWFyR3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIGFhclZvaWNlTWFpbEVuYWJsZWQ6IGJvb2xlYW4gfCBudWxsO1xuICBhYXJLZWVwQ2FsbEhpc3Rvcnk6IGJvb2xlYW4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVByb2ZpbGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUZW1wbGF0ZVVkcERldmljZVR5cGVzUnVsZSB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkRGV2aWNlIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZWRVc2VyIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcGVlZERpYWwge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c3lMYW1wRmllbGQge1xufVxuXG5leHBvcnQgZW51bSBEblJhbmdlVHlwZSB7XG4gIGV4dGVuc2lvbiA9ICdFWFRFTlNJT04nLFxuICBjcGcgPSAnQ1BHJyxcbiAgY2FsbHBhcmsgPSAnQ0FMTFBBUksnLFxuICBodW50Z3JvdXAgPSAnSFVOVEdST1VQJyxcbiAgbWVldG1lID0gJ01FRVRNRScsXG4gIGRpZCA9ICdESUQnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG5SYW5nZUludGVyZmFjZSB7XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgcHJlZml4OiBzdHJpbmc7XG4gIHJvdXRlUGFydGl0aW9uOiBzdHJpbmc7XG4gIGRuVHlwZTogRG5SYW5nZVR5cGU7XG4gIHRlbXBJZHg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFibGVQaG9uZU51bWJlclJhbmdlSW50ZXJmYWNlIHtcbiAgcGhvbmVOdW1iZXJSYW5nZTogRG5SYW5nZUludGVyZmFjZTtcbiAgdXNlZE51bWJlcnM6IHN0cmluZ1tdO1xuICByZXF1ZXN0ZWROdW1iZXI6IHN0cmluZztcbiAgdW5Vc2VkTnVtYmVyc1dpdGhEaWRzOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFibGVSYW5nZUludGVyZmFjZSB7XG4gIGF2YWlsYWJsZU51bWJlckxpc3Q6IEF2YWlsYWJsZVBob25lTnVtYmVyUmFuZ2VJbnRlcmZhY2VbXTtcbn1cblxuZXhwb3J0IGVudW0gVXNlclZpZXdUeXBlIHtcbiAgZGV0YWlscyA9IDAsXG4gIGRldmljZXMgPSAxLFxuICBsaW5lcyA9IDIsXG4gIHNuciA9IDMsXG4gIGZlYXR1cmVzID0gNCxcbiAgb3ZlcnZpZXcgPSA1XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFVzZXJJbnRlcmZhY2Uge1xuICB1c2VyaWQ6IHN0cmluZztcbiAgZmlyc3ROYW1lPzogc3RyaW5nO1xuICBsYXN0TmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIHRlbGVwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdmlld01vZGU/OiBVc2VyVmlld1R5cGU7XG4gIGRldmljZXM6IERldmljZUludGVyZmFjZVtdO1xuICBkZXZpY2VQcm9maWxlczogRGV2aWNlSW50ZXJmYWNlW107XG4gIGxpbmVzPzogTGluZUludGVyZmFjZVtdO1xuICBzaXRlSWQ/OiBudW1iZXI7XG4gIHNpdGVOYW1lPzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZGFwVXNlcnNUYWJsZVJlc3BvbnNlIHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFnZURhdGE6IExpc3RVc2VySW50ZXJmYWNlW107XG59Il19