@bnsights/bbsf-admin-portal 1.0.3 → 1.0.4

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 (132) hide show
  1. package/bundles/bnsights-bbsf-admin-portal.umd.js +19591 -20432
  2. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  3. package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
  4. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +407 -421
  5. package/esm2015/lib/Pages/departments/department/department.component.js +45 -83
  6. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
  7. package/esm2015/lib/Pages/departments/departments.module.js +4 -1
  8. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
  9. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
  10. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
  11. package/esm2015/lib/Pages/home/home.component.js +32 -26
  12. package/esm2015/lib/Pages/home/home.module.js +5 -10
  13. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
  14. package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
  15. package/esm2015/lib/Pages/license/license/license.component.js +68 -99
  16. package/esm2015/lib/Pages/localizations/localizations.component.js +379 -341
  17. package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
  18. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
  19. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
  20. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
  21. package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
  22. package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
  23. package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
  24. package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
  25. package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
  26. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
  27. package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
  28. package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
  29. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
  30. package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
  31. package/esm2015/lib/Pages/providers/provider/provider.component.js +53 -52
  32. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
  33. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
  34. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
  35. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +219 -254
  36. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
  37. package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
  38. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
  39. package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
  40. package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
  41. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +4 -5
  42. package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
  43. package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
  44. package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
  45. package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
  46. package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
  47. package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
  48. package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
  49. package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
  50. package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
  51. package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
  52. package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
  53. package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
  54. package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
  55. package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
  56. package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
  57. package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
  58. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
  59. package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
  60. package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
  61. package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
  62. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
  63. package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
  64. package/esm2015/lib/Pages/users/users.component.js +397 -409
  65. package/esm2015/lib/masterlayout-routing.module.js +5 -4
  66. package/esm2015/lib/masterlayout.component.js +23 -32
  67. package/esm2015/lib/masterlayout.module.js +25 -19
  68. package/fesm2015/bnsights-bbsf-admin-portal.js +17328 -17584
  69. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  70. package/lib/Pages/configurations/configuration/configuration.component.d.ts +31 -27
  71. package/lib/Pages/departments/department/department.component.d.ts +12 -11
  72. package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
  73. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
  74. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
  75. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
  76. package/lib/Pages/home/home.component.d.ts +4 -4
  77. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
  78. package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
  79. package/lib/Pages/license/license/license.component.d.ts +25 -23
  80. package/lib/Pages/localizations/localizations.component.d.ts +77 -65
  81. package/lib/Pages/logs/log/log.component.d.ts +7 -11
  82. package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
  83. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
  84. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
  85. package/lib/Pages/notifications/add/add.component.d.ts +13 -11
  86. package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
  87. package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
  88. package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
  89. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
  90. package/lib/Pages/notifications/notifications.module.d.ts +15 -16
  91. package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
  92. package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
  93. package/lib/Pages/providers/provider/provider.component.d.ts +13 -12
  94. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
  95. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
  96. package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
  97. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
  98. package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
  99. package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
  100. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
  101. package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
  102. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
  103. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -2
  104. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
  105. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
  106. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
  107. package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
  108. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
  109. package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
  110. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
  111. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
  112. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +2 -2
  113. package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
  114. package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
  115. package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
  116. package/lib/Pages/shared/Services/provider.service.d.ts +1 -1
  117. package/lib/Pages/shared/Services/userService.service.d.ts +2 -0
  118. package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
  119. package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
  120. package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
  121. package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
  122. package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
  123. package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
  124. package/lib/Pages/users/users.component.d.ts +54 -68
  125. package/lib/masterlayout.component.d.ts +4 -5
  126. package/lib/masterlayout.module.d.ts +8 -9
  127. package/package.json +3 -3
  128. package/src/lib/assets/sass/custom-styles.scss +115 -0
  129. package/src/lib/assets/sass/style-rtl.scss +2 -0
  130. package/src/lib/assets/sass/style.scss +2 -2
  131. package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
  132. package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
@@ -1,37 +1,34 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Component, Input, ViewChild } from '@angular/core';
2
+ import { Component } from '@angular/core';
3
3
  import { BehaviorSubject } from 'rxjs';
4
- import { FileUploadOptions } from '@bnsights/bbsf-controls';
4
+ import { FileType, FileUploadOptions, FormOptions } from '@bnsights/bbsf-controls';
5
5
  import { FormGroup } from '@angular/forms';
6
6
  import { LicenseModel } from '../../shared/models/LicenseModel/LicenseModel';
7
7
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
8
8
  import * as i0 from "@angular/core";
9
- import * as i1 from "@bnsights/bbsf-utilities";
10
- import * as i2 from "../../../_metronic/core/services/page-info.service";
9
+ import * as i1 from "../../../_metronic/core/services/page-info.service";
10
+ import * as i2 from "@bnsights/bbsf-utilities";
11
11
  import * as i3 from "./../../shared/Services/LicenseService.service";
12
12
  import * as i4 from "@ng-bootstrap/ng-bootstrap";
13
13
  import * as i5 from "ng-block-ui";
14
14
  import * as i6 from "@bnsights/bbsf-controls";
15
15
  import * as i7 from "@angular/common";
16
16
  import * as i8 from "ng-inline-svg";
17
- import * as i9 from "@angular/forms";
18
17
  export class LicenseComponent {
19
- constructor(authService, pageInfoService, utilityService, bbsfTranslateService, environmentService, LicenseService, modalService) {
20
- this.authService = authService;
18
+ constructor(pageInfoService, utilityService, environmentService, licenseService, modalService, requestHandlerService) {
21
19
  this.pageInfoService = pageInfoService;
22
20
  this.utilityService = utilityService;
23
- this.bbsfTranslateService = bbsfTranslateService;
24
21
  this.environmentService = environmentService;
25
- this.LicenseService = LicenseService;
22
+ this.licenseService = licenseService;
26
23
  this.modalService = modalService;
24
+ this.requestHandlerService = requestHandlerService;
27
25
  this.ShowPageContent = false;
28
26
  this.change = false;
29
27
  this.showShadow = [];
30
28
  this.noLicenseFound = false;
31
- this.Name = "";
32
- this.language = "";
33
- this.ProductionMode = false;
34
- this.DateInMinutes = 0;
29
+ this.name = "";
30
+ this.productionMode = false;
31
+ this.dateInMinutes = 0;
35
32
  this.seconds = 0;
36
33
  this.minutes = 0;
37
34
  this.hours = 0;
@@ -39,20 +36,33 @@ export class LicenseComponent {
39
36
  this.weeks = 0;
40
37
  this.months = 0;
41
38
  this.years = 0;
42
- this.ShowTimer = false;
39
+ this.showTimer = false;
43
40
  //Upload Model Controls
44
- this.UploadFileForm = new FormGroup({});
45
- // Decorator wires up blockUI instance
41
+ this.uploadFileForm = new FormGroup({});
46
42
  this.initialMinutes$ = new BehaviorSubject(24 * 60 * 30);
47
- // set minutes(val) {
48
- // this.initialMinutes$.next(val);
49
- // }
50
43
  this.value = 0;
44
+ this.getAddLicenseModel = () => {
45
+ let paramArray = [];
46
+ let ResultModel = this.uploadFileForm.value;
47
+ let Model = new LicenseModel();
48
+ Model.appendExisting = this.appendExisting;
49
+ Model.LicenseFile = {
50
+ FileBase64: ResultModel["LicenseFileInput"].File.FileBase64,
51
+ FileName: ResultModel["LicenseFileInput"].File.FileName,
52
+ FileSizeInMB: ResultModel["LicenseFileInput"].File.FileSizeInMB,
53
+ FileType: ResultModel["LicenseFileInput"].File.FileType
54
+ };
55
+ paramArray.push(Model);
56
+ return paramArray;
57
+ };
58
+ this.getAddLicenseFunction = (Model) => {
59
+ return this.licenseService.uploadLicense(Model);
60
+ };
51
61
  }
52
62
  ;
53
63
  ngOnInit() {
54
64
  return __awaiter(this, void 0, void 0, function* () {
55
- this.ShowPageContent = true;
65
+ //Page header (breadcrumb and title)
56
66
  PageInfoService.PageTitle = this.utilityService.getResourceValue("License");
57
67
  PageInfoService.PageBreadcrumbs = [
58
68
  { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
@@ -60,32 +70,28 @@ export class LicenseComponent {
60
70
  ];
61
71
  this.pageInfoService.calculateTitle();
62
72
  this.pageInfoService.calculateBreadcrumbs();
63
- this.bbsfTranslateService.onLangChange.subscribe((event) => {
64
- this.language = event.lang;
65
- this.ngOnInit();
66
- });
67
- this.language = yield this.utilityService.getCurrentLanguage();
68
- this.ProductionMode = this.environmentService.getProductionMode();
69
- this.GetOrganizationLicense();
73
+ this.productionMode = this.environmentService.getProductionMode();
74
+ //initialize page
75
+ this.initializePage();
70
76
  });
71
77
  }
72
- GetOrganizationLicense() {
73
- this.LicenseService.GetOrganizationLicense().subscribe((result) => {
78
+ initializePage() {
79
+ this.licenseService.getOrganizationLicense().subscribe((result) => {
74
80
  let Model = result;
75
81
  if (Model != null) {
76
82
  let startDate = new Date(Model.val.licenseStartDate);
77
83
  let endDate = new Date(Model.val.licenseEndDate);
78
84
  let activationDate = new Date(Model.val.activationDate);
79
- this.ActivationDate = activationDate.toLocaleDateString();
80
- this.LicenseStartDate = startDate.toLocaleDateString();
81
- this.LicenseEndDate = endDate.toLocaleDateString();
82
- this.Name = Model.val.name.current;
85
+ this.activationDate = activationDate.toLocaleDateString();
86
+ this.licenseStartDate = startDate.toLocaleDateString();
87
+ this.licenseEndDate = endDate.toLocaleDateString();
88
+ this.name = Model.val.name.current;
83
89
  let CurrentDate = new Date();
84
- if ((activationDate.toLocaleDateString() == CurrentDate.toLocaleDateString()))
90
+ if ((endDate.toLocaleDateString() == CurrentDate.toLocaleDateString()))
85
91
  this.noLicenseFound = true;
86
92
  else
87
93
  this.noLicenseFound = false;
88
- this.DateInMinutes = this.getDifferenceInMinutes(CurrentDate, endDate);
94
+ this.dateInMinutes = this.getDifferenceInMinutes(CurrentDate, endDate);
89
95
  setInterval(() => {
90
96
  this.date_future = endDate;
91
97
  this.date_now = new Date();
@@ -102,85 +108,48 @@ export class LicenseComponent {
102
108
  this.months = this.months - (this.years * 12);
103
109
  }, 1000);
104
110
  }
105
- setTimeout(() => {
106
- this.ShowTimer = true;
107
- }, 1000);
111
+ this.showTimer = true;
108
112
  });
109
113
  }
110
114
  getDifferenceInMinutes(date1, date2) {
111
115
  const diffInMs = Math.abs(date2 - date1);
112
116
  return diffInMs / (1000 * 60);
113
117
  }
114
- ShowUploadModal(UploadFileModa) {
118
+ ///////////// Start add License Part//////////////////////
119
+ showUploadModal(uploadFileModal) {
115
120
  this.utilityService.startBlockUI();
116
- this.UploadFileForm.reset();
117
- this.LicenseFileInput = new FileUploadOptions();
118
- this.LicenseFileInput.Name = "LicenseFileInput";
119
- this.LicenseFileInput.LabelKey = "UploadFile";
120
- this.LicenseFileInput.IsMultipleFile = false;
121
- this.LicenseFileInput.IsRequired = true;
122
- this.modalService.open(UploadFileModa);
121
+ this.uploadFileForm = new FormGroup({});
122
+ this.uploadFileForm.reset();
123
+ this.uploadFileFormOptions = new FormOptions();
124
+ this.uploadFileFormOptions.FormGroup = this.uploadFileForm;
125
+ this.uploadFileFormOptions.GetModelFunction = this.getAddLicenseModel;
126
+ this.uploadFileFormOptions.ServiceSubmitFunction = this.getAddLicenseFunction;
127
+ this.licenseFileInput = new FileUploadOptions();
128
+ this.licenseFileInput.Name = "LicenseFileInput";
129
+ this.licenseFileInput.LabelKey = "UploadFile";
130
+ this.licenseFileInput.IsMultipleFile = false;
131
+ this.licenseFileInput.IsRequired = true;
132
+ this.licenseFileInput.FileUploadAcceptsTypes = [FileType.License];
133
+ this.modalService.open(uploadFileModal);
123
134
  this.utilityService.stopBlockUI();
124
135
  }
125
- UploadFiles(appendExisting) {
126
- if (this.UploadFileForm.invalid) {
127
- return;
128
- }
129
- else {
130
- let ResultModel = this.UploadFileForm.value;
131
- let Model = new LicenseModel();
132
- Model.appendExisting = appendExisting;
133
- Model.LicenseFile = {
134
- FileBase64: ResultModel["LicenseFileInput"][0].FileBase64,
135
- FileName: ResultModel["LicenseFileInput"][0].FileName,
136
- FileSizeInMB: ResultModel["LicenseFileInput"][0].FileSizeInMB,
137
- FileType: ResultModel["LicenseFileInput"][0].FileType
138
- };
139
- this.LicenseService.UploadLicense(Model).subscribe((result) => {
140
- let Result = result;
141
- this.UploadFileForm.reset();
142
- this.modalService.dismissAll();
143
- }, (error) => {
144
- });
145
- }
136
+ //////////// End of add License part///////////////////////
137
+ isAppendExisting(appendExisting) {
138
+ this.appendExisting = appendExisting;
139
+ }
140
+ ///////////Destroy Observable //////////////////////
141
+ ngOnDestroy() {
142
+ this.requestHandlerService.destroyHandler();
146
143
  }
147
144
  }
148
- LicenseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: LicenseComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.LicenseService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
149
- LicenseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: LicenseComponent, selector: "lib-license", inputs: { value: "value" }, viewQueries: [{ propertyName: "CloseLicenseFileModal", first: true, predicate: ["CloseLicenseFileModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n <!--Begin::Section-->\r\n <div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <h3 *ngIf=\"!noLicenseFound\" class=\"\">{{Name}}</h3>\r\n <span *ngIf=\"!noLicenseFound\" class=\"badge badge-light-success m-3 badge-lg\">\r\n {{utilityService.getResourceValue(\"LicenseActivatedSuccessfully\")}}\r\n </span>\r\n </div>\r\n\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"ShowUploadModal(UploadFileModal)\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ShowTimer\">\r\n <div class=\"main_Timer\">\r\n <div class=\"clock\">\r\n <div class=\"time row\">\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Years\")}}</div>\r\n <span class=\"years fs-2hx fw-bolder text-gray-900\">{{years}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Months\")}}</div>\r\n <span class=\"months fs-2hx fw-bolder text-gray-900\">{{months}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Days\")}}</div>\r\n <span class=\"days fs-2hx fw-bolder text-gray-900\">{{days}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded d-none d-md-block\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Hours\")}}</div>\r\n <span class=\"hours fs-2hx fw-bolder text-gray-900\">{{hours}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded d-none d-md-block\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Minutes\")}}</div>\r\n <span class=\"min fs-2hx fw-bolder text-gray-900\">{{minutes}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded d-none d-md-block\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Seconds\")}}</div>\r\n <span class=\"sec fs-2hx fw-bolder text-gray-900\">{{seconds}}</span>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center license-head\" *ngIf=\"noLicenseFound\">\r\n <h3 class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"LicenseNotFound\")}}\r\n </h3>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!noLicenseFound\" class=\"card-footer border-0 d-flex justify-content-between\">\r\n <div class=\"mb-4\">\r\n <span class=\"badge badge-light-primary fs-7 fw-bolder me-2 min-w-150px\">{{utilityService.getResourceValue(\"LicenseStartDate\")}}:</span>\r\n <span class=\"font-weight-500\">{{LicenseStartDate | date:'dd-MM-y'}}</span>\r\n </div>\r\n <div>\r\n <span class=\"badge badge-light-danger fs-7 fw-bolder me-2 min-w-150px\">{{utilityService.getResourceValue(\"LicenseExpiryDate\")}}:</span>\r\n <span class=\"font-weight-500\">{{LicenseEndDate | date:'dd-MM-y'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- activate-->\r\n <ng-template #UploadFileModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'.././src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\"> {{utilityService.getResourceValue(\"UploadLicense\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"UploadFileForm\">\r\n <BBSF-FileUplaod [options]=\"LicenseFileInput\" [group]=\"UploadFileForm\">\r\n </BBSF-FileUplaod>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseLicenseFileModal id=\"CloseLicenseFileModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"UploadFiles(false)\" class=\"btn btn-light-primary me-3 btn-sm\">{{utilityService.getResourceValue(\"Replace\")}}</button>\r\n <button type=\"button\" (click)=\"UploadFiles(true)\" class=\"btn btn-primary me-3 btn-sm\">{{utilityService.getResourceValue(\"Append\")}}</button>\r\n\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n", styles: [".counter-item{padding:50px 5px;margin:0 10px}\n"], components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵb, selector: "BBSF-FileUplaod", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], pipes: { "date": i7.DatePipe } });
145
+ LicenseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: LicenseComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.EnvironmentService }, { token: i3.LicenseService }, { token: i4.NgbModal }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
146
+ LicenseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: LicenseComponent, selector: "lib-license", ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n <!--Begin::Section-->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <h3 *ngIf=\"!noLicenseFound\" class=\"\">{{name}}</h3>\r\n <span *ngIf=\"!noLicenseFound\" class=\"badge badge-light-success m-3 badge-lg\">\r\n {{utilityService.getResourceValue(\"LicenseActivatedSuccessfully\")}}\r\n </span>\r\n </div>\r\n\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"showUploadModal(uploadFileModal)\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body d-flex align-items-center justify-content-center\" *ngIf=\"!noLicenseFound\">\r\n <ng-container *ngIf=\"showTimer\">\r\n <div class=\"main_Timer\">\r\n <div class=\"clock\">\r\n <div class=\"time row\">\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Years\")}}</div>\r\n <span class=\"years fs-2hx fw-bolder text-gray-900\">{{years}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Months\")}}</div>\r\n <span class=\"months fs-2hx fw-bolder text-gray-900\">{{months}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Days\")}}</div>\r\n <span class=\"days fs-2hx fw-bolder text-gray-900\">{{days}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded d-none d-md-block\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Hours\")}}</div>\r\n <span class=\"hours fs-2hx fw-bolder text-gray-900\">{{hours}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded d-none d-md-block\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Minutes\")}}</div>\r\n <span class=\"min fs-2hx fw-bolder text-gray-900\">{{minutes}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-lg-2 col-md-4 mb-4 d-flex justify-content-center\">\r\n <div class=\"counter-item border bg-light-primary border-primary notice text-center min-w-150px rounded d-none d-md-block\">\r\n <div class=\"counter-title fs-3 fw-bold text-primary d-block\">{{utilityService.getResourceValue(\"Seconds\")}}</div>\r\n <span class=\"sec fs-2hx fw-bolder text-gray-900\">{{seconds}}</span>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center license-head\" *ngIf=\"noLicenseFound\">\r\n <h3 class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"LicenseNotFound\")}}\r\n </h3>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!noLicenseFound\" class=\"card-footer border-0 d-flex justify-content-between\">\r\n <div class=\"mb-4\">\r\n <span class=\"badge badge-light-primary fs-7 fw-bolder me-2 min-w-150px\">{{utilityService.getResourceValue(\"LicenseStartDate\")}}:</span>\r\n <span class=\"font-weight-500\">{{licenseStartDate | date:'dd-MM-y'}}</span>\r\n </div>\r\n <div>\r\n <span class=\"badge badge-light-danger fs-7 fw-bolder me-2 min-w-150px\">{{utilityService.getResourceValue(\"LicenseExpiryDate\")}}:</span>\r\n <span class=\"font-weight-500\">{{licenseEndDate | date:'dd-MM-y'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- activate-->\r\n <ng-template #uploadFileModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'.././src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\"> {{utilityService.getResourceValue(\"UploadLicense\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"uploadFileFormOptions\">\r\n <BBSF-FileUplaod [options]=\"licenseFileInput\" [group]=\"uploadFileForm\">\r\n </BBSF-FileUplaod>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseLicenseFileModal id=\"CloseLicenseFileModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" (click)=\"isAppendExisting(false)\" class=\"btn btn-light-primary me-3 btn-sm\">{{utilityService.getResourceValue(\"Replace\")}}</button>\r\n <button type=\"submit\" (click)=\"isAppendExisting(true)\" class=\"btn btn-primary me-3 btn-sm\">{{utilityService.getResourceValue(\"Append\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n", styles: [".counter-item{padding:50px 5px;margin:0 10px}\n"], components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.ɵb, selector: "BBSF-FileUplaod", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }], pipes: { "date": i7.DatePipe } });
150
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: LicenseComponent, decorators: [{
151
148
  type: Component,
152
149
  args: [{
153
150
  selector: 'lib-license',
154
151
  templateUrl: './license.component.html',
155
152
  styleUrls: ['./license.component.css'],
156
- //animations: [
157
- // trigger('flip', [
158
- // transition('*=>*', [
159
- // animate(
160
- // '.6s',
161
- // keyframes([
162
- // style({ transform: 'rotateX(130deg)', offset: 0 }),
163
- // style({ transform: 'rotateX(0deg)', offset: 0.45 }),
164
- // style({ transform: 'rotateX(7deg)', offset: 0.5 }),
165
- // style({ transform: 'rotateX(0deg)', offset: 0.53 }),
166
- // style({ transform: 'rotateX(5deg)', offset: 0.56 }),
167
- // style({ transform: 'rotateX(0deg)', offset: 0.6 }),
168
- // style({ transform: 'rotateX(0deg)', offset: 0.95 }),
169
- // style({ transform: 'rotateX(0deg)', offset: 1 })
170
- // ])
171
- // )
172
- // ])
173
- // ])
174
- //]
175
153
  }]
176
- }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.PageInfoService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i3.LicenseService }, { type: i4.NgbModal }]; }, propDecorators: { CloseLicenseFileModal: [{
177
- type: ViewChild,
178
- args: ['CloseLicenseFileModal', { static: false }]
179
- }],
180
- // set minutes(val) {
181
- // this.initialMinutes$.next(val);
182
- // }
183
- value: [{
184
- type: Input
185
- }] } });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2xpY2Vuc2UvbGljZW5zZS9saWNlbnNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbGljZW5zZS9saWNlbnNlL2xpY2Vuc2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFtQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7QUE0QnJGLE1BQU0sT0FBTyxnQkFBZ0I7SUFzQzNCLFlBQW9CLFdBQXVCLEVBQVMsZUFBK0IsRUFBUyxjQUE2QixFQUFTLG9CQUF5QyxFQUFTLGtCQUFxQyxFQUFXLGNBQThCLEVBQVUsWUFBc0I7UUFBOVEsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBUyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFBUyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQVcsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQVU7UUFwQ2xTLG9C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RCxnRUFBZ0U7b0JBQ2hFLDREQUE0RDtvQkFDNUQsWUFBWTtvQkFDWixTQUFTO29CQUNULFFBQVE7b0JBQ1IsTUFBTTtvQkFDTixHQUFHO2lCQUNKO3FSQTRCMEQscUJBQXFCO3NCQUEzRSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7UUFNdkQscUJBQXFCO1FBQ3JCLG9DQUFvQztRQUNwQyxJQUFJO1FBQ0osS0FBSztzQkFKSixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWRVJTSU9OLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBMaWNlbnNlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL0xpY2Vuc2VTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IExpY2Vuc2VNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvTGljZW5zZU1vZGVsL0xpY2Vuc2VNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1saWNlbnNlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGljZW5zZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGljZW5zZS5jb21wb25lbnQuY3NzJ10sXHJcbiAgLy9hbmltYXRpb25zOiBbXHJcbiAgLy8gIHRyaWdnZXIoJ2ZsaXAnLCBbXHJcbiAgLy8gICAgdHJhbnNpdGlvbignKj0+KicsIFtcclxuICAvLyAgICAgIGFuaW1hdGUoXHJcbiAgLy8gICAgICAgICcuNnMnLFxyXG4gIC8vICAgICAgICBrZXlmcmFtZXMoW1xyXG4gIC8vICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAncm90YXRlWCgxMzBkZWcpJywgb2Zmc2V0OiAwIH0pLFxyXG4gIC8vICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAncm90YXRlWCgwZGVnKScsIG9mZnNldDogMC40NSB9KSxcclxuICAvLyAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3JvdGF0ZVgoN2RlZyknLCBvZmZzZXQ6IDAuNSB9KSxcclxuICAvLyAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3JvdGF0ZVgoMGRlZyknLCBvZmZzZXQ6IDAuNTMgfSksXHJcbiAgLy8gICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdyb3RhdGVYKDVkZWcpJywgb2Zmc2V0OiAwLjU2IH0pLFxyXG4gIC8vICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAncm90YXRlWCgwZGVnKScsIG9mZnNldDogMC42IH0pLFxyXG4gIC8vICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAncm90YXRlWCgwZGVnKScsIG9mZnNldDogMC45NSB9KSxcclxuICAvLyAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3JvdGF0ZVgoMGRlZyknLCBvZmZzZXQ6IDEgfSlcclxuICAvLyAgICAgICAgXSlcclxuICAvLyAgICAgIClcclxuICAvLyAgICBdKVxyXG4gIC8vICBdKVxyXG4gIC8vXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGljZW5zZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiBcclxuICBTaG93UGFnZUNvbnRlbnQgPSBmYWxzZTtcclxuICBjaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2hhZG93ID0gW107XHJcbiAgbm9MaWNlbnNlRm91bmQ6Ym9vbGVhbj1mYWxzZTtcclxuICBBY3RpdmF0aW9uRGF0ZTpzdHJpbmc7XHJcbiAgTGljZW5zZVN0YXJ0RGF0ZTpzdHJpbmc7XHJcbiAgTGljZW5zZUVuZERhdGU6c3RyaW5nOyBcclxuICBOYW1lOnN0cmluZz1cIlwiOyBcclxuICBsYW5ndWFnZTpzdHJpbmc9XCJcIlxyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRGF0ZUluTWludXRlczpudW1iZXI9MFxyXG5cclxuICBzZWNvbmRzOm51bWJlcj0wO1xyXG4gIG1pbnV0ZXM6bnVtYmVyPTA7XHJcbiAgaG91cnMgOm51bWJlcj0wO1xyXG4gIGRheXMgOm51bWJlcj0wO1xyXG4gIHdlZWtzOm51bWJlcj0wO1xyXG4gIG1vbnRoczpudW1iZXI9MDtcclxuICB5ZWFyczpudW1iZXI9MDtcclxuICBkYXRlX2Z1dHVyZTphbnk7XHJcbiAgZGF0ZV9ub3c6YW55O1xyXG4gIFNob3dUaW1lcjpib29sZWFuPWZhbHNlO1xyXG4gICAgLy9VcGxvYWQgTW9kZWwgQ29udHJvbHNcclxuICAgIFVwbG9hZEZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICBMaWNlbnNlRmlsZUlucHV0OiBGaWxlVXBsb2FkT3B0aW9ucztcclxuICAgIEBWaWV3Q2hpbGQoJ0Nsb3NlTGljZW5zZUZpbGVNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZUxpY2Vuc2VGaWxlTW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAgLy8gRGVjb3JhdG9yIHdpcmVzIHVwIGJsb2NrVUkgaW5zdGFuY2VcclxuICBpbml0aWFsTWludXRlcyQgPW5ldyBCZWhhdmlvclN1YmplY3QoMjQqNjAqMzApOyA7XHJcbiAgQElucHV0KClcclxuICAvLyBzZXQgbWludXRlcyh2YWwpIHtcclxuICAvLyAgIHRoaXMuaW5pdGlhbE1pbnV0ZXMkLm5leHQodmFsKTtcclxuICAvLyB9XHJcbiAgdmFsdWUgPSAwO1xyXG4gIHRpbWVyJDphbnlcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlLHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOlBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6QkJTRlRyYW5zbGF0ZVNlcnZpY2UscHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6RW52aXJvbm1lbnRTZXJ2aWNlLCAgcHJpdmF0ZSBMaWNlbnNlU2VydmljZTogTGljZW5zZVNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbClcclxuICAgeyBcclxuICAgICBcclxuICAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PXRydWU7XHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlPXRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkxpY2Vuc2VcIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnM9W1xyXG4gICAgICAge3RpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpICwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAge3RpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2V9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy5sYW5ndWFnZSA9IGV2ZW50Lmxhbmc7XHJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmxhbmd1YWdlID0gYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICB0aGlzLkdldE9yZ2FuaXphdGlvbkxpY2Vuc2UoKTtcclxuXHJcbiAgIH1cclxuICBcclxuICBcclxuIFxyXG4gIEdldE9yZ2FuaXphdGlvbkxpY2Vuc2UoKSB7XHJcbiAgICB0aGlzLkxpY2Vuc2VTZXJ2aWNlLkdldE9yZ2FuaXphdGlvbkxpY2Vuc2UoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgTW9kZWwgPSByZXN1bHQgYXMgYW55IFxyXG4gICAgICBpZihNb2RlbCE9IG51bGwpICB7XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZT0gbmV3IERhdGUoTW9kZWwudmFsLmxpY2Vuc2VTdGFydERhdGUpO1xyXG4gICAgICAgIGxldCBlbmREYXRlPSBuZXcgRGF0ZShNb2RlbC52YWwubGljZW5zZUVuZERhdGUpO1xyXG4gICAgICAgIGxldCBhY3RpdmF0aW9uRGF0ZT1uZXcgRGF0ZShNb2RlbC52YWwuYWN0aXZhdGlvbkRhdGUpO1xyXG4gICAgICAgIHRoaXMuQWN0aXZhdGlvbkRhdGU9YWN0aXZhdGlvbkRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy5MaWNlbnNlU3RhcnREYXRlPXN0YXJ0RGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKVxyXG4gICAgICAgIHRoaXMuTGljZW5zZUVuZERhdGU9ZW5kRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKVxyXG4gICAgICAgIHRoaXMuTmFtZT1Nb2RlbC52YWwubmFtZS5jdXJyZW50XHJcbiAgICAgICBsZXQgQ3VycmVudERhdGU9bmV3IERhdGUoKTtcclxuICAgICAgICBpZigoYWN0aXZhdGlvbkRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgPT0gQ3VycmVudERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkpKVxyXG4gICAgICAgICAgdGhpcy5ub0xpY2Vuc2VGb3VuZD10cnVlXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5ub0xpY2Vuc2VGb3VuZD1mYWxzZVxyXG5cclxuICAgICAgICAgIHRoaXMuRGF0ZUluTWludXRlcz10aGlzLmdldERpZmZlcmVuY2VJbk1pbnV0ZXMoQ3VycmVudERhdGUsZW5kRGF0ZSk7XHJcblxyXG4gICAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5kYXRlX2Z1dHVyZSA9IGVuZERhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZV9ub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kcyA9IE1hdGguZmxvb3IoKHRoaXMuZGF0ZV9mdXR1cmUgLSAodGhpcy5kYXRlX25vdykpLzEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLm1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMuc2Vjb25kcy82MCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG91cnMgICA9IE1hdGguZmxvb3IodGhpcy5taW51dGVzLzYwKTtcclxuICAgICAgICAgICAgdGhpcy5kYXlzICAgID0gTWF0aC5mbG9vcih0aGlzLmhvdXJzLzI0KTtcclxuICAgICAgICAgICAgdGhpcy5tb250aHMgPSBNYXRoLmZsb29yKHRoaXMuZGF5cy8zMSk7XHJcbiAgICAgICAgICAgIHRoaXMueWVhcnMgPSBNYXRoLmZsb29yKHRoaXMubW9udGhzLzEyKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMtKHRoaXMuZGF5cyoyNCk7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlcyA9IHRoaXMubWludXRlcy0odGhpcy5kYXlzKjI0KjYwKS0gICAodGhpcy5ob3Vycyo2MCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kcyA9IHRoaXMuc2Vjb25kcy0odGhpcy5kYXlzKjI0KjYwKjYwKS0odGhpcy5ob3Vycyo2MCo2MCktKHRoaXMubWludXRlcyo2MCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF5cz10aGlzLmRheXMtKHRoaXMubW9udGhzKjMxKTtcclxuICAgICAgICAgICAgdGhpcy5tb250aHM9dGhpcy5tb250aHMtKHRoaXMueWVhcnMqMTIpO1xyXG4gICAgICAgIH0sMTAwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgfVxyXG4gICAgIFxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLlNob3dUaW1lcj10cnVlXHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuIGdldERpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZTEsIGRhdGUyKSB7XHJcbiAgICBjb25zdCBkaWZmSW5NcyA9IE1hdGguYWJzKGRhdGUyIC0gZGF0ZTEpO1xyXG4gICAgcmV0dXJuIGRpZmZJbk1zIC8gKDEwMDAgKiA2MCk7XHJcbiAgfVxyXG5cclxuICBcclxuICBTaG93VXBsb2FkTW9kYWwoVXBsb2FkRmlsZU1vZGEpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlVwbG9hZEZpbGVGb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLkxpY2Vuc2VGaWxlSW5wdXQgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgIHRoaXMuTGljZW5zZUZpbGVJbnB1dC5OYW1lID0gXCJMaWNlbnNlRmlsZUlucHV0XCJcclxuICAgIHRoaXMuTGljZW5zZUZpbGVJbnB1dC5MYWJlbEtleSA9IFwiVXBsb2FkRmlsZVwiXHJcbiAgICB0aGlzLkxpY2Vuc2VGaWxlSW5wdXQuSXNNdWx0aXBsZUZpbGUgPSBmYWxzZVxyXG4gICAgdGhpcy5MaWNlbnNlRmlsZUlucHV0LklzUmVxdWlyZWQgPSB0cnVlXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFVwbG9hZEZpbGVNb2RhKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgVXBsb2FkRmlsZXMoYXBwZW5kRXhpc3RpbmcpIHtcclxuICAgIGlmICh0aGlzLlVwbG9hZEZpbGVGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuVXBsb2FkRmlsZUZvcm0udmFsdWU7XHJcbiAgXHJcbiAgICAgIGxldCBNb2RlbCA9IG5ldyBMaWNlbnNlTW9kZWwoKTtcclxuXHJcbiAgICAgIE1vZGVsLmFwcGVuZEV4aXN0aW5nID0gYXBwZW5kRXhpc3Rpbmc7XHJcbiAgICAgIE1vZGVsLkxpY2Vuc2VGaWxlID0ge1xyXG4gICAgICAgIEZpbGVCYXNlNjQ6UmVzdWx0TW9kZWxbXCJMaWNlbnNlRmlsZUlucHV0XCJdWzBdLkZpbGVCYXNlNjQsXHJcbiAgICAgICAgRmlsZU5hbWU6UmVzdWx0TW9kZWxbXCJMaWNlbnNlRmlsZUlucHV0XCJdWzBdLkZpbGVOYW1lLFxyXG4gICAgICAgIEZpbGVTaXplSW5NQjpSZXN1bHRNb2RlbFtcIkxpY2Vuc2VGaWxlSW5wdXRcIl1bMF0uRmlsZVNpemVJbk1CLFxyXG4gICAgICAgIEZpbGVUeXBlOlJlc3VsdE1vZGVsW1wiTGljZW5zZUZpbGVJbnB1dFwiXVswXS5GaWxlVHlwZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBcclxuXHJcblxyXG4gICAgICB0aGlzLkxpY2Vuc2VTZXJ2aWNlLlVwbG9hZExpY2Vuc2UoTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IFJlc3VsdD0gcmVzdWx0IGFzIGFueVxyXG4gICAgICAgIHRoaXMuVXBsb2FkRmlsZUZvcm0ucmVzZXQoKVxyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuXHJcblxyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcblxyXG4gIDwhLS1CZWdpbjo6U2VjdGlvbi0tPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgPGgzICpuZ0lmPVwiIW5vTGljZW5zZUZvdW5kXCIgY2xhc3M9XCJcIj57e05hbWV9fTwvaDM+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFub0xpY2Vuc2VGb3VuZFwiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBtLTMgYmFkZ2UtbGdcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGljZW5zZUFjdGl2YXRlZFN1Y2Nlc3NmdWxseVwiKX19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiU2hvd1VwbG9hZE1vZGFsKFVwbG9hZEZpbGVNb2RhbClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZhdGVcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dUaW1lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5fVGltZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb2NrXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTIgY29sLW1kLTQgbWItNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1pdGVtIGJvcmRlciBiZy1saWdodC1wcmltYXJ5IGJvcmRlci1wcmltYXJ5IG5vdGljZSB0ZXh0LWNlbnRlciBtaW4tdy0xNTBweCByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItdGl0bGUgZnMtMyBmdy1ib2xkIHRleHQtcHJpbWFyeSBkLWJsb2NrXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiWWVhcnNcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwieWVhcnMgZnMtMmh4IGZ3LWJvbGRlciB0ZXh0LWdyYXktOTAwXCI+e3t5ZWFyc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMiBjb2wtbWQtNCBtYi00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWl0ZW0gYm9yZGVyIGJnLWxpZ2h0LXByaW1hcnkgYm9yZGVyLXByaW1hcnkgbm90aWNlIHRleHQtY2VudGVyIG1pbi13LTE1MHB4IHJvdW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci10aXRsZSBmcy0zIGZ3LWJvbGQgdGV4dC1wcmltYXJ5IGQtYmxvY2tcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNb250aHNcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9udGhzIGZzLTJoeCBmdy1ib2xkZXIgdGV4dC1ncmF5LTkwMFwiPnt7bW9udGhzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yIGNvbC1tZC00IG1iLTQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItaXRlbSBib3JkZXIgYmctbGlnaHQtcHJpbWFyeSBib3JkZXItcHJpbWFyeSBub3RpY2UgdGV4dC1jZW50ZXIgbWluLXctMTUwcHggcm91bmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLXRpdGxlIGZzLTMgZnctYm9sZCB0ZXh0LXByaW1hcnkgZC1ibG9ja1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRheXNcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF5cyBmcy0yaHggZnctYm9sZGVyIHRleHQtZ3JheS05MDBcIj57e2RheXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTIgY29sLW1kLTQgbWItNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1pdGVtIGJvcmRlciBiZy1saWdodC1wcmltYXJ5IGJvcmRlci1wcmltYXJ5IG5vdGljZSB0ZXh0LWNlbnRlciBtaW4tdy0xNTBweCByb3VuZGVkIGQtbm9uZSBkLW1kLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItdGl0bGUgZnMtMyBmdy1ib2xkIHRleHQtcHJpbWFyeSBkLWJsb2NrXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG91cnNcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaG91cnMgZnMtMmh4IGZ3LWJvbGRlciB0ZXh0LWdyYXktOTAwXCI+e3tob3Vyc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMiBjb2wtbWQtNCBtYi00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWl0ZW0gYm9yZGVyIGJnLWxpZ2h0LXByaW1hcnkgYm9yZGVyLXByaW1hcnkgbm90aWNlIHRleHQtY2VudGVyIG1pbi13LTE1MHB4IHJvdW5kZWQgZC1ub25lIGQtbWQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci10aXRsZSBmcy0zIGZ3LWJvbGQgdGV4dC1wcmltYXJ5IGQtYmxvY2tcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNaW51dGVzXCIpfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1pbiBmcy0yaHggZnctYm9sZGVyIHRleHQtZ3JheS05MDBcIj57e21pbnV0ZXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTIgY29sLW1kLTQgbWItNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1pdGVtIGJvcmRlciBiZy1saWdodC1wcmltYXJ5IGJvcmRlci1wcmltYXJ5IG5vdGljZSAgdGV4dC1jZW50ZXIgbWluLXctMTUwcHggcm91bmRlZCBkLW5vbmUgZC1tZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLXRpdGxlIGZzLTMgZnctYm9sZCB0ZXh0LXByaW1hcnkgZC1ibG9ja1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlY29uZHNcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjIGZzLTJoeCBmdy1ib2xkZXIgdGV4dC1ncmF5LTkwMFwiPnt7c2Vjb25kc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBsaWNlbnNlLWhlYWRcIiAqbmdJZj1cIm5vTGljZW5zZUZvdW5kXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGljZW5zZU5vdEZvdW5kXCIpfX1cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFub0xpY2Vuc2VGb3VuZFwiIGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBmcy03IGZ3LWJvbGRlciBtZS0yIG1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGljZW5zZVN0YXJ0RGF0ZVwiKX19Ojwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtNTAwXCI+e3tMaWNlbnNlU3RhcnREYXRlIHwgZGF0ZTonZGQtTU0teSd9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXIgZnMtNyBmdy1ib2xkZXIgbWUtMiBtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkxpY2Vuc2VFeHBpcnlEYXRlXCIpfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC01MDBcIj57e0xpY2Vuc2VFbmREYXRlIHwgZGF0ZTonZGQtTU0teSd9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8IS0tIGFjdGl2YXRlLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNVcGxvYWRGaWxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi4vLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVXBsb2FkTGljZW5zZVwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXBsb2FkRmlsZUZvcm1cIj5cclxuICAgICAgICA8QkJTRi1GaWxlVXBsYW9kIFtvcHRpb25zXT1cIkxpY2Vuc2VGaWxlSW5wdXRcIiBbZ3JvdXBdPVwiVXBsb2FkRmlsZUZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtRmlsZVVwbGFvZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VMaWNlbnNlRmlsZU1vZGFsIGlkPVwiQ2xvc2VMaWNlbnNlRmlsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiVXBsb2FkRmlsZXMoZmFsc2UpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LXByaW1hcnkgbWUtMyBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZXBsYWNlXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJVcGxvYWRGaWxlcyh0cnVlKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTMgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQXBwZW5kXCIpfX08L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuIl19
154
+ }], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.EnvironmentService }, { type: i3.LicenseService }, { type: i4.NgbModal }, { type: i2.RequestHandlerService }]; } });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2xpY2Vuc2UvbGljZW5zZS9saWNlbnNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbGljZW5zZS9saWNlbnNlL2xpY2Vuc2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0FBU3JGLE1BQU0sT0FBTyxnQkFBZ0I7SUE4QjNCLFlBQ1UsZUFBZ0MsRUFDakMsY0FBOEIsRUFDN0Isa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLFlBQXNCLEVBQ3RCLHFCQUE0QztRQUw1QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3RCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFsQ3RELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLFdBQU0s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QixDQUFDO1FBRTlFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQTtRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7UUFHakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUVwQyxDQUFDO0lBc0JELDREQUE0RDtJQUU1RCxnQkFBZ0IsQ0FBQyxjQUFjO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzs4R0FuS1UsZ0JBQWdCO2tHQUFoQixnQkFBZ0IsbURDZjdCLG8xTkE0SEE7NEZEN0dhLGdCQUFnQjtrQkFMNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7aUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbGVUeXBlLCBGaWxlVXBsb2FkT3B0aW9ucywgRm9ybU9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IExpY2Vuc2VTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvU2VydmljZXMvTGljZW5zZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTGljZW5zZU1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9MaWNlbnNlTW9kZWwvTGljZW5zZU1vZGVsJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxpY2Vuc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saWNlbnNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saWNlbnNlLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpY2Vuc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBTaG93UGFnZUNvbnRlbnQgPSBmYWxzZTtcclxuICBjaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2hhZG93ID0gW107XHJcbiAgbm9MaWNlbnNlRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhY3RpdmF0aW9uRGF0ZTogc3RyaW5nO1xyXG4gIGxpY2Vuc2VTdGFydERhdGU6IHN0cmluZztcclxuICBsaWNlbnNlRW5kRGF0ZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHJvZHVjdGlvbk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkYXRlSW5NaW51dGVzOiBudW1iZXIgPSAwXHJcbiAgc2Vjb25kczogbnVtYmVyID0gMDtcclxuICBtaW51dGVzOiBudW1iZXIgPSAwO1xyXG4gIGhvdXJzOiBudW1iZXIgPSAwO1xyXG4gIGRheXM6IG51bWJlciA9IDA7XHJcbiAgd2Vla3M6IG51bWJlciA9IDA7XHJcbiAgbW9udGhzOiBudW1iZXIgPSAwO1xyXG4gIHllYXJzOiBudW1iZXIgPSAwO1xyXG4gIGRhdGVfZnV0dXJlOiBhbnk7XHJcbiAgZGF0ZV9ub3c6IGFueTtcclxuICBzaG93VGltZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvL1VwbG9hZCBNb2RlbCBDb250cm9sc1xyXG4gIHVwbG9hZEZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgdXBsb2FkRmlsZUZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIGxpY2Vuc2VGaWxlSW5wdXQ6IEZpbGVVcGxvYWRPcHRpb25zO1xyXG4gIGFwcGVuZEV4aXN0aW5nOiBib29sZWFuO1xyXG4gIGluaXRpYWxNaW51dGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMjQgKiA2MCAqIDMwKTs7XHJcbiAgdmFsdWUgPSAwO1xyXG4gIHRpbWVyJDogYW55XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxpY2Vuc2VTZXJ2aWNlOiBMaWNlbnNlU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2VcclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vUGFnZSBoZWFkZXIgKGJyZWFkY3J1bWIgYW5kIHRpdGxlKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkxpY2Vuc2VcIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5wcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIHRoaXMubGljZW5zZVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uTGljZW5zZSgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBNb2RlbCA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgaWYgKE1vZGVsICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgc3RhcnREYXRlID0gbmV3IERhdGUoTW9kZWwudmFsLmxpY2Vuc2VTdGFydERhdGUpO1xyXG4gICAgICAgIGxldCBlbmREYXRlID0gbmV3IERhdGUoTW9kZWwudmFsLmxpY2Vuc2VFbmREYXRlKTtcclxuICAgICAgICBsZXQgYWN0aXZhdGlvbkRhdGUgPSBuZXcgRGF0ZShNb2RlbC52YWwuYWN0aXZhdGlvbkRhdGUpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGlvbkRhdGUgPSBhY3RpdmF0aW9uRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuICAgICAgICB0aGlzLmxpY2Vuc2VTdGFydERhdGUgPSBzdGFydERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKClcclxuICAgICAgICB0aGlzLmxpY2Vuc2VFbmREYXRlID0gZW5kRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKVxyXG4gICAgICAgIHRoaXMubmFtZSA9IE1vZGVsLnZhbC5uYW1lLmN1cnJlbnRcclxuICAgICAgICBsZXQgQ3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGlmICgoZW5kRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKSA9PSBDdXJyZW50RGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKSkpXHJcbiAgICAgICAgICB0aGlzLm5vTGljZW5zZUZvdW5kID0gdHJ1ZVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMubm9MaWNlbnNlRm91bmQgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmRhdGVJbk1pbnV0ZXMgPSB0aGlzLmdldERpZmZlcmVuY2VJbk1pbnV0ZXMoQ3VycmVudERhdGUsIGVuZERhdGUpO1xyXG5cclxuICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGVfZnV0dXJlID0gZW5kRGF0ZTtcclxuICAgICAgICAgIHRoaXMuZGF0ZV9ub3cgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2Vjb25kcyA9IE1hdGguZmxvb3IoKHRoaXMuZGF0ZV9mdXR1cmUgLSAodGhpcy5kYXRlX25vdykpIC8gMTAwMCk7XHJcbiAgICAgICAgICB0aGlzLm1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMuc2Vjb25kcyAvIDYwKTtcclxuICAgICAgICAgIHRoaXMuaG91cnMgPSBNYXRoLmZsb29yKHRoaXMubWludXRlcyAvIDYwKTtcclxuICAgICAgICAgIHRoaXMuZGF5cyA9IE1hdGguZmxvb3IodGhpcy5ob3VycyAvIDI0KTtcclxuICAgICAgICAgIHRoaXMubW9udGhzID0gTWF0aC5mbG9vcih0aGlzLmRheXMgLyAzMSk7XHJcbiAgICAgICAgICB0aGlzLnllYXJzID0gTWF0aC5mbG9vcih0aGlzLm1vbnRocyAvIDEyKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmhvdXJzID0gdGhpcy5ob3VycyAtICh0aGlzLmRheXMgKiAyNCk7XHJcbiAgICAgICAgICB0aGlzLm1pbnV0ZXMgPSB0aGlzLm1pbnV0ZXMgLSAodGhpcy5kYXlzICogMjQgKiA2MCkgLSAodGhpcy5ob3VycyAqIDYwKTtcclxuICAgICAgICAgIHRoaXMuc2Vjb25kcyA9IHRoaXMuc2Vjb25kcyAtICh0aGlzLmRheXMgKiAyNCAqIDYwICogNjApIC0gKHRoaXMuaG91cnMgKiA2MCAqIDYwKSAtICh0aGlzLm1pbnV0ZXMgKiA2MCk7XHJcbiAgICAgICAgICB0aGlzLmRheXMgPSB0aGlzLmRheXMgLSAodGhpcy5tb250aHMgKiAzMSk7XHJcbiAgICAgICAgICB0aGlzLm1vbnRocyA9IHRoaXMubW9udGhzIC0gKHRoaXMueWVhcnMgKiAxMik7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dUaW1lciA9IHRydWVcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIGdldERpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZTEsIGRhdGUyKSB7XHJcbiAgICBjb25zdCBkaWZmSW5NcyA9IE1hdGguYWJzKGRhdGUyIC0gZGF0ZTEpO1xyXG4gICAgcmV0dXJuIGRpZmZJbk1zIC8gKDEwMDAgKiA2MCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLyBTdGFydCBhZGQgTGljZW5zZSBQYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dVcGxvYWRNb2RhbCh1cGxvYWRGaWxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVGb3JtLnJlc2V0KCk7XHJcblxyXG4gICAgdGhpcy51cGxvYWRGaWxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMudXBsb2FkRmlsZUZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMudXBsb2FkRmlsZUZvcm1cclxuICAgIHRoaXMudXBsb2FkRmlsZUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZExpY2Vuc2VNb2RlbDtcclxuICAgIHRoaXMudXBsb2FkRmlsZUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkTGljZW5zZUZ1bmN0aW9uO1xyXG5cclxuICAgIHRoaXMubGljZW5zZUZpbGVJbnB1dCA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgdGhpcy5saWNlbnNlRmlsZUlucHV0Lk5hbWUgPSBcIkxpY2Vuc2VGaWxlSW5wdXRcIlxyXG4gICAgdGhpcy5saWNlbnNlRmlsZUlucHV0LkxhYmVsS2V5ID0gXCJVcGxvYWRGaWxlXCJcclxuICAgIHRoaXMubGljZW5zZUZpbGVJbnB1dC5Jc011bHRpcGxlRmlsZSA9IGZhbHNlXHJcbiAgICB0aGlzLmxpY2Vuc2VGaWxlSW5wdXQuSXNSZXF1aXJlZCA9IHRydWVcclxuICAgIHRoaXMubGljZW5zZUZpbGVJbnB1dC5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gW0ZpbGVUeXBlLkxpY2Vuc2VdXHJcblxyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odXBsb2FkRmlsZU1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWRkTGljZW5zZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLnVwbG9hZEZpbGVGb3JtLnZhbHVlO1xyXG4gICAgbGV0IE1vZGVsID0gbmV3IExpY2Vuc2VNb2RlbCgpO1xyXG5cclxuICAgIE1vZGVsLmFwcGVuZEV4aXN0aW5nID0gdGhpcy5hcHBlbmRFeGlzdGluZztcclxuICAgIE1vZGVsLkxpY2Vuc2VGaWxlID0ge1xyXG4gICAgICBGaWxlQmFzZTY0OiBSZXN1bHRNb2RlbFtcIkxpY2Vuc2VGaWxlSW5wdXRcIl0uRmlsZS5GaWxlQmFzZTY0LFxyXG4gICAgICBGaWxlTmFtZTogUmVzdWx0TW9kZWxbXCJMaWNlbnNlRmlsZUlucHV0XCJdLkZpbGUuRmlsZU5hbWUsXHJcbiAgICAgIEZpbGVTaXplSW5NQjogUmVzdWx0TW9kZWxbXCJMaWNlbnNlRmlsZUlucHV0XCJdLkZpbGUuRmlsZVNpemVJbk1CLFxyXG4gICAgICBGaWxlVHlwZTogUmVzdWx0TW9kZWxbXCJMaWNlbnNlRmlsZUlucHV0XCJdLkZpbGUuRmlsZVR5cGVcclxuICAgIH1cclxuICAgIHBhcmFtQXJyYXkucHVzaChNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZExpY2Vuc2VGdW5jdGlvbiA9IChNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5saWNlbnNlU2VydmljZS51cGxvYWRMaWNlbnNlKE1vZGVsKTtcclxuICB9XHJcbiAgLy8vLy8vLy8vLy8vIEVuZCBvZiBhZGQgTGljZW5zZSAgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGlzQXBwZW5kRXhpc3RpbmcoYXBwZW5kRXhpc3RpbmcpIHtcclxuICAgIHRoaXMuYXBwZW5kRXhpc3RpbmcgPSBhcHBlbmRFeGlzdGluZ1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy9EZXN0cm95IE9ic2VydmFibGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG5cclxuICA8IS0tQmVnaW46OlNlY3Rpb24tLT5cclxuICA8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgPGgzICpuZ0lmPVwiIW5vTGljZW5zZUZvdW5kXCIgY2xhc3M9XCJcIj57e25hbWV9fTwvaDM+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFub0xpY2Vuc2VGb3VuZFwiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBtLTMgYmFkZ2UtbGdcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGljZW5zZUFjdGl2YXRlZFN1Y2Nlc3NmdWxseVwiKX19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2hvd1VwbG9hZE1vZGFsKHVwbG9hZEZpbGVNb2RhbClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZhdGVcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCIhbm9MaWNlbnNlRm91bmRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RpbWVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbl9UaW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvY2tcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZSByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMiBjb2wtbWQtNCBtYi00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWl0ZW0gYm9yZGVyIGJnLWxpZ2h0LXByaW1hcnkgYm9yZGVyLXByaW1hcnkgbm90aWNlIHRleHQtY2VudGVyIG1pbi13LTE1MHB4IHJvdW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci10aXRsZSBmcy0zIGZ3LWJvbGQgdGV4dC1wcmltYXJ5IGQtYmxvY2tcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJZZWFyc1wiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ5ZWFycyBmcy0yaHggZnctYm9sZGVyIHRleHQtZ3JheS05MDBcIj57e3llYXJzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yIGNvbC1tZC00IG1iLTQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItaXRlbSBib3JkZXIgYmctbGlnaHQtcHJpbWFyeSBib3JkZXItcHJpbWFyeSBub3RpY2UgdGV4dC1jZW50ZXIgbWluLXctMTUwcHggcm91bmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLXRpdGxlIGZzLTMgZnctYm9sZCB0ZXh0LXByaW1hcnkgZC1ibG9ja1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1vbnRoc1wiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb250aHMgZnMtMmh4IGZ3LWJvbGRlciB0ZXh0LWdyYXktOTAwXCI+e3ttb250aHN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTIgY29sLW1kLTQgbWItNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1pdGVtIGJvcmRlciBiZy1saWdodC1wcmltYXJ5IGJvcmRlci1wcmltYXJ5IG5vdGljZSB0ZXh0LWNlbnRlciBtaW4tdy0xNTBweCByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItdGl0bGUgZnMtMyBmdy1ib2xkIHRleHQtcHJpbWFyeSBkLWJsb2NrXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGF5c1wiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXlzIGZzLTJoeCBmdy1ib2xkZXIgdGV4dC1ncmF5LTkwMFwiPnt7ZGF5c319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMiBjb2wtbWQtNCBtYi00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWl0ZW0gYm9yZGVyIGJnLWxpZ2h0LXByaW1hcnkgYm9yZGVyLXByaW1hcnkgbm90aWNlIHRleHQtY2VudGVyIG1pbi13LTE1MHB4IHJvdW5kZWQgZC1ub25lIGQtbWQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci10aXRsZSBmcy0zIGZ3LWJvbGQgdGV4dC1wcmltYXJ5IGQtYmxvY2tcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb3Vyc1wiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJob3VycyBmcy0yaHggZnctYm9sZGVyIHRleHQtZ3JheS05MDBcIj57e2hvdXJzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yIGNvbC1tZC00IG1iLTQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItaXRlbSBib3JkZXIgYmctbGlnaHQtcHJpbWFyeSBib3JkZXItcHJpbWFyeSBub3RpY2UgdGV4dC1jZW50ZXIgbWluLXctMTUwcHggcm91bmRlZCBkLW5vbmUgZC1tZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLXRpdGxlIGZzLTMgZnctYm9sZCB0ZXh0LXByaW1hcnkgZC1ibG9ja1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1pbnV0ZXNcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWluIGZzLTJoeCBmdy1ib2xkZXIgdGV4dC1ncmF5LTkwMFwiPnt7bWludXRlc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMiBjb2wtbWQtNCBtYi00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWl0ZW0gYm9yZGVyIGJnLWxpZ2h0LXByaW1hcnkgYm9yZGVyLXByaW1hcnkgbm90aWNlICB0ZXh0LWNlbnRlciBtaW4tdy0xNTBweCByb3VuZGVkIGQtbm9uZSBkLW1kLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItdGl0bGUgZnMtMyBmdy1ib2xkIHRleHQtcHJpbWFyeSBkLWJsb2NrXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2Vjb25kc1wiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWMgZnMtMmh4IGZ3LWJvbGRlciB0ZXh0LWdyYXktOTAwXCI+e3tzZWNvbmRzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGxpY2Vuc2UtaGVhZFwiICpuZ0lmPVwibm9MaWNlbnNlRm91bmRcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMaWNlbnNlTm90Rm91bmRcIil9fVxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIW5vTGljZW5zZUZvdW5kXCIgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IGZzLTcgZnctYm9sZGVyIG1lLTIgbWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMaWNlbnNlU3RhcnREYXRlXCIpfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC01MDBcIj57e2xpY2Vuc2VTdGFydERhdGUgfCBkYXRlOidkZC1NTS15J319PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBmcy03IGZ3LWJvbGRlciBtZS0yIG1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGljZW5zZUV4cGlyeURhdGVcIil9fTo8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LTUwMFwiPnt7bGljZW5zZUVuZERhdGUgfCBkYXRlOidkZC1NTS15J319PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gYWN0aXZhdGUtLT5cclxuICA8bmctdGVtcGxhdGUgI3VwbG9hZEZpbGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuLi8uL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVcGxvYWRMaWNlbnNlXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJ1cGxvYWRGaWxlRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8QkJTRi1GaWxlVXBsYW9kIFtvcHRpb25zXT1cImxpY2Vuc2VGaWxlSW5wdXRcIiBbZ3JvdXBdPVwidXBsb2FkRmlsZUZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtRmlsZVVwbGFvZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VMaWNlbnNlRmlsZU1vZGFsIGlkPVwiQ2xvc2VMaWNlbnNlRmlsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwiaXNBcHBlbmRFeGlzdGluZyhmYWxzZSlcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeSBtZS0zIGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlcGxhY2VcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImlzQXBwZW5kRXhpc3RpbmcodHJ1ZSlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZS0zIGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFwcGVuZFwiKX19PC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4iXX0=