@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,7 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component, ViewChild } from '@angular/core';
3
3
  import { FormGroup } from '@angular/forms';
4
- import { CheckBoxOptions, ControlLayout, DropdownOptions, FilterItem, FilterType, InputType, PagingOptions, TextAreaOptions, IconPosition, TextBoxOptions, ImageUploadOptions, ImageType, MultiLingualTextBoxOptions, MultiLingualTextAreaOptions, EnglishArabicDTO } from '@bnsights/bbsf-controls';
4
+ import { CheckBoxOptions, ControlLayout, DropdownOptions, FilterItem, FilterType, InputType, PagingOptions, TextAreaOptions, TextBoxOptions, ImageUploadOptions, ImageType, MultiLingualTextBoxOptions, MultiLingualTextAreaOptions, EnglishArabicDTO, FormOptions, ConfirmationModalOptions, PagingActionMode } from '@bnsights/bbsf-controls';
5
5
  import { HelpCenterItemModel } from '../../shared/models/HelpCenterModels/HelpCenterItemModel';
6
6
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
7
7
  import * as i0 from "@angular/core";
@@ -18,143 +18,40 @@ import * as i10 from "@angular/forms";
18
18
  import * as i11 from "@angular/router";
19
19
  import * as i12 from "ng-inline-svg";
20
20
  export class HelpCenterComponent {
21
- constructor(authService, pageInfoService, utilityService, bbsfTranslateService, environmentService, HelpCenterService, modalService) {
21
+ constructor(authService, pageInfoService, utilityService, bbsfTranslateService, HelpCenterService, modalService, requestHandlerService) {
22
22
  this.authService = authService;
23
23
  this.pageInfoService = pageInfoService;
24
24
  this.utilityService = utilityService;
25
25
  this.bbsfTranslateService = bbsfTranslateService;
26
- this.environmentService = environmentService;
27
26
  this.HelpCenterService = HelpCenterService;
28
27
  this.modalService = modalService;
28
+ this.requestHandlerService = requestHandlerService;
29
+ //Page requirements
30
+ this.ShowPageContent = false;
29
31
  this.ApiUrl = "/api/admin/HelpCenter/";
30
- this.PermissionSetsList = [];
31
32
  this.HelpCenterForm = new FormGroup({});
32
- this.showFilter = false;
33
33
  this.HelpCenterPagingResult = [];
34
+ this.clientSidePagingResult = [];
34
35
  this.IsFilterLoaded = false;
35
- this.ProductionMode = false;
36
- this.language = "";
37
- this.ShowPageContent = false;
36
+ //Required lists
37
+ this.PermissionSetsList = [];
38
38
  //Add Model Controls
39
39
  this.AddHelpCenterForm = new FormGroup({});
40
- this.IsAddHelpCenterFormLoaded = false;
40
+ this.AddHelpCenterFormOptions = new FormOptions;
41
41
  //Edit Model Controls
42
42
  this.EditHelpCenterForm = new FormGroup({});
43
- this.IsEditHelpCenterModalLoaded = false;
43
+ this.EditHelpCenterFormOptions = new FormOptions;
44
+ this.deleteControlLoaded = false;
44
45
  //Generate code modal
45
46
  this.GenerateCodeForm = new FormGroup({});
46
- }
47
- ngOnInit() {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- this.ShowPageContent = true;
50
- PageInfoService.PageTitle = this.utilityService.getResourceValue("HelpCenter");
51
- PageInfoService.PageBreadcrumbs = [
52
- { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
53
- { title: '', path: '', isSeparator: true, isActive: false }
54
- ];
55
- this.pageInfoService.calculateTitle();
56
- this.pageInfoService.calculateBreadcrumbs();
57
- this.bbsfTranslateService.onLangChange.subscribe((event) => {
58
- this.ShowPageContent = false;
59
- this.language = event.lang;
60
- this.ngOnInit();
61
- });
62
- this.language = yield this.utilityService.getCurrentLanguage();
63
- this.ProductionMode = this.environmentService.getProductionMode();
64
- this.LoadList();
65
- });
66
- }
67
- //initialize filters and load any drop down list
68
- LoadList() {
69
- this.HelpCenterService.Loaddropdowns().subscribe((result) => {
70
- let DropdownLists = result;
71
- this.PermissionSetsList = DropdownLists.permissionSets;
72
- // TextBox inti
73
- this.searchTextBox = new TextBoxOptions();
74
- this.searchTextBox.Name = "searchTextBox";
75
- this.searchTextBox.Type = InputType.Text;
76
- this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
77
- this.searchTextBox.HideLabel = true,
78
- this.searchTextBox.Icon = "./src/assets/images/gen021.svg";
79
- this.searchTextBox.IconPosition = IconPosition.left;
80
- this.TextInputFilter = new FilterItem();
81
- this.TextInputFilter.FormControlName = "searchTextBox";
82
- this.TextInputFilter.ActionParameterName = "searchText";
83
- this.TextInputFilter.IsFormControl = true;
84
- this.TextInputFilter.FilterType = FilterType.TextBox;
85
- this.HelpCenterPaging = new PagingOptions();
86
- this.HelpCenterPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ApiUrl + 'GetHelpCenterItemsByFilter';
87
- this.HelpCenterPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
88
- this.HelpCenterPaging.Filters = [this.TextInputFilter];
89
- this.HelpCenterPaging.ValidationToken = this.authService.authorizationHeaderValue();
90
- this.IsFilterLoaded = true;
91
- });
92
- }
93
- ReinitializeHelpCenterPaging() {
94
- let element = this.input;
95
- element.ReinitializePaging();
96
- }
97
- UpdateHelpCenterPaging() {
98
- let element = this.input;
99
- element.UpdatePaging();
100
- }
101
- setHelpCenterItemListResult(result) {
102
- this.HelpCenterPagingResult = result;
103
- this.ShowPageContent = true;
104
- this.utilityService.stopBlockUI();
105
- }
106
- resetFilters() {
107
- this.HelpCenterForm.controls["searchTextBox"].setValue(null);
108
- let element = this.input;
109
- element.ReinitializePaging();
110
- }
111
- showAddHelpCenterModal(AddHelpCenterModal) {
112
- this.utilityService.startBlockUI();
113
- this.AddHelpCenterForm = new FormGroup({});
114
- this.MultiLingualTitle = new MultiLingualTextBoxOptions();
115
- this.MultiLingualTitle.Name = "Title";
116
- this.MultiLingualTitle.ArabicLabelKey = "TitleInArabic";
117
- this.MultiLingualTitle.EnglishLabelKey = "TitleInEnglish";
118
- this.MultiLingualTitle.IsRequired = true;
119
- this.MultiLingualTitle.Value = null;
120
- this.MultiLingualDescription = new MultiLingualTextAreaOptions();
121
- this.MultiLingualDescription.Name = "Description";
122
- this.MultiLingualDescription.ArabicLabelKey = "DescriptionInArabic";
123
- this.MultiLingualDescription.EnglishLabelKey = "DescriptionInEnglish";
124
- this.MultiLingualDescription.Value = null;
125
- this.MultiLingualDescription.MultiControlPlacementType = ControlLayout.Vertical;
126
- this.AddPermissionSetsOptions = new DropdownOptions();
127
- this.AddPermissionSetsOptions.Name = "AddPermissionSetsOptions";
128
- this.AddPermissionSetsOptions.LabelKey = "PermissionSets";
129
- this.AddPermissionSetsOptions.DataSource = this.PermissionSetsList;
130
- this.AddPermissionSetsOptions.SingleSelection = false;
131
- this.AddPermissionSetsOptions.AllowSearchFilter = true;
132
- this.AddPermissionSetsOptions.Placeholder = "";
133
- this.AddPermissionSetsOptions.IsRequired = true;
134
- this.AddIsHidden = new CheckBoxOptions();
135
- this.AddIsHidden.Name = "AddIsHidden";
136
- this.AddIsHidden.LabelKey = "Hidden";
137
- this.AddIsHidden.Value = false;
138
- this.AddLogo = new ImageUploadOptions();
139
- this.AddLogo.Name = "AddLogo";
140
- this.AddLogo.LabelKey = "Logo";
141
- this.AddLogo.ViewType = ControlLayout.Vertical;
142
- this.AddLogo.FileUploadAcceptsTypes = [ImageType.ImageTypes];
143
- this.modalService.open(AddHelpCenterModal);
144
- this.utilityService.stopBlockUI();
145
- }
146
- addHelpCenterItem() {
147
- if (this.AddHelpCenterForm.invalid) {
148
- return;
149
- }
150
- else {
47
+ this.getAddHelpCenterModel = () => {
48
+ let paramArray = [];
151
49
  let ResultModel = this.AddHelpCenterForm.value;
152
- //console.log(ResultModel);
153
50
  let AddModel = new HelpCenterItemModel();
154
- AddModel.Title.Arabic = ResultModel.Title.ArabicValue;
155
- AddModel.Title.English = ResultModel.Title.EnglishValue;
156
- AddModel.Description.Arabic = ResultModel.Description.ArabicTextAreaValue;
157
- AddModel.Description.English = ResultModel.Description.EnglishTextAreaValue;
51
+ AddModel.Title.Arabic = ResultModel.AddTitle.ArabicValue;
52
+ AddModel.Title.English = ResultModel.AddTitle.EnglishValue;
53
+ AddModel.Description.Arabic = ResultModel.AddDescription.ArabicTextAreaValue;
54
+ AddModel.Description.English = ResultModel.AddDescription.EnglishTextAreaValue;
158
55
  let arr = ResultModel.AddPermissionSetsOptions;
159
56
  let permissionSets = [];
160
57
  const toNumbers = arr => arr.map(Number);
@@ -163,115 +60,225 @@ export class HelpCenterComponent {
163
60
  AddModel.IsHidden = ResultModel.AddIsHidden;
164
61
  AddModel.LogoFileDTO = {
165
62
  FileBase64: ResultModel["AddLogo"].FileBase64,
63
+ NameWithExtension: ResultModel["AddLogo"].FileName,
166
64
  FileName: ResultModel["AddLogo"].FileName,
167
65
  FileSizeInMB: ResultModel["AddLogo"].FileSizeInMB,
168
66
  FileType: ResultModel["AddLogo"].FileType
169
67
  };
170
- this.HelpCenterService.AddHelpCenter(AddModel).subscribe((result) => {
171
- this.modalService.dismissAll();
172
- let element = this.input;
173
- element.ReinitializePaging();
174
- }, (error) => {
175
- });
176
- }
177
- }
178
- showEditHelpCenterModal(HelpCenter, EditHelpCenterModal) {
179
- this.utilityService.startBlockUI();
180
- this.EditHelpCenterForm = new FormGroup({});
181
- this.HelpCenterItemId = HelpCenter.id;
182
- let Title = new EnglishArabicDTO();
183
- Title.Arabic = HelpCenter.title.arabic;
184
- Title.English = HelpCenter.title.english;
185
- this.EditMultiLingualTitle = new MultiLingualTextBoxOptions();
186
- this.EditMultiLingualTitle.Name = "Title";
187
- this.EditMultiLingualTitle.ArabicLabelKey = "TitleInArabic";
188
- this.EditMultiLingualTitle.EnglishLabelKey = "TitleInEnglish";
189
- this.EditMultiLingualTitle.IsRequired = true;
190
- this.EditMultiLingualTitle.Value = Title;
191
- this.EditMultiLingualTitle.Icon = "./src/assets/images/gen021.svg";
192
- this.EditMultiLingualTitle.IconPositionEN = IconPosition.left;
193
- this.EditMultiLingualTitle.IconPositionAR = IconPosition.right;
194
- let Description = new EnglishArabicDTO();
195
- Description.Arabic = HelpCenter.description.arabic;
196
- Description.English = HelpCenter.description.english;
197
- this.EditMultiLingualDescription = new MultiLingualTextAreaOptions();
198
- this.EditMultiLingualDescription.Name = "Description";
199
- this.EditMultiLingualDescription.ArabicLabelKey = "DescriptionInArabic";
200
- this.EditMultiLingualDescription.EnglishLabelKey = "DescriptionInEnglish";
201
- this.EditMultiLingualDescription.Value = Description;
202
- this.EditMultiLingualDescription.MultiControlPlacementType = ControlLayout.Vertical;
203
- let selectedPermissionList = [];
204
- for (let index = 0; index < HelpCenter.permissionSetIDs.length; index++) {
205
- const Permission = this.PermissionSetsList.filter((item) => { return parseInt(item.key) == HelpCenter.permissionSetIDs[index]; }).map((item) => item.key)[0];
206
- selectedPermissionList.push(Permission);
207
- }
208
- this.EditPermissionSetsOptions = new DropdownOptions();
209
- this.EditPermissionSetsOptions.Name = "EditPermissionSetsOptions";
210
- this.EditPermissionSetsOptions.LabelKey = "PermissionSets";
211
- this.EditPermissionSetsOptions.DataSource = this.PermissionSetsList;
212
- this.EditPermissionSetsOptions.SingleSelection = false;
213
- this.EditPermissionSetsOptions.AllowSearchFilter = true;
214
- this.EditPermissionSetsOptions.Placeholder = "";
215
- this.EditPermissionSetsOptions.SelectedItems = selectedPermissionList;
216
- this.EditIsHidden = new CheckBoxOptions();
217
- this.EditIsHidden.Name = "EditIsHidden";
218
- this.EditIsHidden.LabelKey = "Hidden";
219
- this.EditIsHidden.Value = HelpCenter.isHidden;
220
- this.EditLogo = new ImageUploadOptions();
221
- this.EditLogo.Name = "EditLogo";
222
- this.EditLogo.LabelKey = "Logo";
223
- this.EditLogo.IsRequired = false;
224
- this.EditLogo.FileUploadAcceptsTypes = [ImageType.ImageTypes];
225
- this.EditLogo.Value = HelpCenter.logoFileDTO;
226
- this.modalService.open(EditHelpCenterModal);
227
- this.utilityService.stopBlockUI();
228
- }
229
- editHelpCenter() {
230
- if (this.EditHelpCenterForm.invalid) {
231
- return;
232
- }
233
- else {
68
+ paramArray.push(AddModel);
69
+ return paramArray;
70
+ };
71
+ this.getAddHelpCenterFunction = (AddModel) => {
72
+ return this.HelpCenterService.AddHelpCenter(AddModel);
73
+ };
74
+ this.getEditHelpCenterModel = () => {
75
+ let paramArray = [];
234
76
  let ResultModel = this.EditHelpCenterForm.value;
235
77
  let EditModel = new HelpCenterItemModel();
236
78
  EditModel.ID = Number(this.HelpCenterItemId);
237
- EditModel.Title.English = ResultModel.Title.EnglishValue; //(##1)
238
- EditModel.Title.Arabic = ResultModel.Title.ArabicValue;
239
- EditModel.Description.English = ResultModel.Description.EnglishTextAreaValue;
240
- EditModel.Description.Arabic = ResultModel.Description.ArabicTextAreaValue;
79
+ EditModel.Title.English = ResultModel.EditTitle.EnglishValue; //(##1)
80
+ EditModel.Title.Arabic = ResultModel.EditTitle.ArabicValue;
81
+ EditModel.Description.English = ResultModel.EditDescription.EnglishTextAreaValue;
82
+ EditModel.Description.Arabic = ResultModel.EditDescription.ArabicTextAreaValue;
241
83
  EditModel.IsHidden = ResultModel.EditIsHidden;
242
- EditModel.LogoFileDTO = ResultModel.EditLogo;
84
+ EditModel.LogoFileDTO = ResultModel.EditLogo == "" ? null : ResultModel.EditLogo;
85
+ EditModel.LogoFileID = this.EditLogoFileID;
243
86
  let Ids = [];
244
87
  for (let index = 0; index < ResultModel.EditPermissionSetsOptions.length; index++) {
245
88
  const element = ResultModel.EditPermissionSetsOptions[index];
246
89
  Ids.push(Number(element));
247
90
  }
248
91
  EditModel.PermissionSetIDs = Ids;
249
- this.HelpCenterService.EditHelpCenter(EditModel).subscribe((result) => {
250
- this.modalService.dismissAll();
251
- let element = this.input;
252
- element.UpdatePaging();
253
- }, (error) => {
92
+ paramArray.push(EditModel);
93
+ return paramArray;
94
+ };
95
+ this.getEditHelpCenterFunction = (EditModel) => {
96
+ return this.HelpCenterService.EditHelpCenter(EditModel);
97
+ };
98
+ this.deleteHelpCenter = (id) => {
99
+ return this.HelpCenterService.DeleteHelpCenter(id);
100
+ };
101
+ }
102
+ ngOnInit() {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ this.ShowPageContent = true;
105
+ PageInfoService.PageTitle = this.utilityService.getResourceValue("HelpCenter");
106
+ PageInfoService.PageBreadcrumbs = [
107
+ { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
108
+ { title: '', path: '', isSeparator: true, isActive: false }
109
+ ];
110
+ this.pageInfoService.calculateTitle();
111
+ this.pageInfoService.calculateBreadcrumbs();
112
+ this.bbsfTranslateService.onLangChange.subscribe((event) => {
113
+ this.ShowPageContent = false;
114
+ this.ngOnInit();
254
115
  });
255
- }
116
+ this.initializePage();
117
+ });
256
118
  }
257
- showDeleteHelpCenterModal(Item, deleteHelpCenterItemModal) {
258
- this.deleteHelpCenterId = Item.idEncrypted;
259
- this.utilityService.startBlockUI();
260
- this.modalService.open(deleteHelpCenterItemModal);
119
+ //Initialize Page
120
+ initializePage() {
121
+ // TextBox init
122
+ this.searchTextBox = new TextBoxOptions();
123
+ this.searchTextBox.Name = "searchTextBox";
124
+ this.searchTextBox.Type = InputType.Text;
125
+ this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
126
+ this.searchTextBox.HideLabel = true;
127
+ this.TextInputFilter = new FilterItem();
128
+ this.TextInputFilter.FormControlName = "searchTextBox";
129
+ this.TextInputFilter.ActionParameterName = "searchText";
130
+ this.TextInputFilter.IsFormControl = true;
131
+ this.TextInputFilter.FilterType = FilterType.TextBox;
132
+ this.HelpCenterPaging = new PagingOptions();
133
+ this.HelpCenterPaging.ActionPostURL = this.ApiUrl + 'GetHelpCenterItemsByFilter';
134
+ this.HelpCenterPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
135
+ this.HelpCenterPaging.Filters = [this.TextInputFilter];
136
+ this.HelpCenterPaging.ValidationToken = this.authService.authorizationHeaderValue();
137
+ this.IsFilterLoaded = true;
138
+ }
139
+ //Paging functions
140
+ setHelpCenterItemListResult(result) {
141
+ this.HelpCenterPagingResult = result;
142
+ this.clientSidePagingResult = result;
143
+ this.ShowPageContent = true;
261
144
  this.utilityService.stopBlockUI();
262
145
  }
263
- deleteHelpCenter() {
264
- this.HelpCenterService.DeleteHelpCenter(this.deleteHelpCenterId).subscribe((result) => {
265
- this.deleteHelpCenterId = "";
266
- this.modalService.dismissAll();
267
- let element = this.input;
268
- element.ReinitializePaging();
269
- }, (error) => {
270
- });
146
+ searchClientSide(searchValue) {
147
+ if (searchValue)
148
+ this.clientSidePagingResult = this.clientSidePagingResult.filter(function (item) {
149
+ return (item.title.english.toLowerCase().includes(searchValue.toLowerCase())
150
+ || item.title.arabic.toLowerCase().includes(searchValue.toLowerCase()));
151
+ });
152
+ else
153
+ this.clientSidePagingResult = this.HelpCenterPagingResult;
271
154
  }
155
+ //Save HelpCenter Name for info page
272
156
  SaveName(name) {
273
157
  localStorage.setItem("ParentName", name);
274
158
  }
159
+ //Add helpcenter item
160
+ showAddHelpCenterModal(AddHelpCenterModal) {
161
+ this.utilityService.startBlockUI();
162
+ this.HelpCenterService.loadAddDropdowns().subscribe((result) => {
163
+ let DropdownLists = result;
164
+ this.PermissionSetsList = DropdownLists.permissionSets;
165
+ this.AddHelpCenterForm = new FormGroup({});
166
+ this.AddHelpCenterFormOptions = new FormOptions();
167
+ this.AddHelpCenterFormOptions.FormGroup = this.AddHelpCenterForm;
168
+ this.AddHelpCenterFormOptions.GetModelFunction = this.getAddHelpCenterModel;
169
+ this.AddHelpCenterFormOptions.ServiceSubmitFunction = this.getAddHelpCenterFunction;
170
+ this.AddHelpCenterFormOptions.PagingReference = this.pagingElement;
171
+ this.AddTitle = new MultiLingualTextBoxOptions();
172
+ this.AddTitle.Name = "AddTitle";
173
+ this.AddTitle.ArabicLabelKey = "TitleInArabic";
174
+ this.AddTitle.EnglishLabelKey = "TitleInEnglish";
175
+ this.AddTitle.IsRequired = true;
176
+ this.AddTitle.Value = null;
177
+ this.AddDescription = new MultiLingualTextAreaOptions();
178
+ this.AddDescription.Name = "AddDescription";
179
+ this.AddDescription.ArabicLabelKey = "DescriptionInArabic";
180
+ this.AddDescription.EnglishLabelKey = "DescriptionInEnglish";
181
+ this.AddDescription.Value = null;
182
+ this.AddDescription.MultiControlPlacementType = ControlLayout.Vertical;
183
+ this.AddPermissionSetsOptions = new DropdownOptions();
184
+ this.AddPermissionSetsOptions.Name = "AddPermissionSetsOptions";
185
+ this.AddPermissionSetsOptions.LabelKey = "PermissionSets";
186
+ this.AddPermissionSetsOptions.DataSource = this.PermissionSetsList;
187
+ this.AddPermissionSetsOptions.SingleSelection = false;
188
+ this.AddPermissionSetsOptions.AllowSearchFilter = true;
189
+ this.AddPermissionSetsOptions.Placeholder = "";
190
+ this.AddPermissionSetsOptions.IsRequired = true;
191
+ this.AddIsHidden = new CheckBoxOptions();
192
+ this.AddIsHidden.Name = "AddIsHidden";
193
+ this.AddIsHidden.LabelKey = "Hidden";
194
+ this.AddIsHidden.Value = false;
195
+ this.AddLogo = new ImageUploadOptions();
196
+ this.AddLogo.Name = "AddLogo";
197
+ this.AddLogo.LabelKey = "Logo";
198
+ this.AddLogo.ViewType = ControlLayout.Vertical;
199
+ this.AddLogo.FileUploadAcceptsTypes = [ImageType.ImageTypes];
200
+ this.modalService.open(AddHelpCenterModal);
201
+ this.utilityService.stopBlockUI();
202
+ });
203
+ }
204
+ //Edit HelpCenter Item
205
+ showEditHelpCenterModal(helpCenterID, helpCenterIDEnc, EditHelpCenterModal) {
206
+ this.utilityService.startBlockUI();
207
+ this.HelpCenterItemId = helpCenterID;
208
+ this.HelpCenterService.getEditHelpCenterData(helpCenterIDEnc).subscribe((result) => {
209
+ let resultObj = result;
210
+ let helpCenter = resultObj.model;
211
+ let lists = resultObj.lists;
212
+ this.PermissionSetsList = lists.permissionSets;
213
+ this.EditHelpCenterForm = new FormGroup({});
214
+ this.EditHelpCenterFormOptions = new FormOptions();
215
+ this.EditHelpCenterFormOptions.FormGroup = this.EditHelpCenterForm;
216
+ this.EditHelpCenterFormOptions.GetModelFunction = this.getEditHelpCenterModel;
217
+ this.EditHelpCenterFormOptions.ServiceSubmitFunction = this.getEditHelpCenterFunction;
218
+ this.EditHelpCenterFormOptions.PagingReference = this.pagingElement;
219
+ this.EditHelpCenterFormOptions.PagingActionMode = PagingActionMode.Update;
220
+ let Title = new EnglishArabicDTO();
221
+ Title.Arabic = helpCenter.title.arabic;
222
+ Title.English = helpCenter.title.english;
223
+ this.EditTitle = new MultiLingualTextBoxOptions();
224
+ this.EditTitle.Name = "EditTitle";
225
+ this.EditTitle.ArabicLabelKey = "TitleInArabic";
226
+ this.EditTitle.EnglishLabelKey = "TitleInEnglish";
227
+ this.EditTitle.IsRequired = true;
228
+ this.EditTitle.Value = Title;
229
+ let Description = new EnglishArabicDTO();
230
+ Description.Arabic = helpCenter.description.arabic;
231
+ Description.English = helpCenter.description.english;
232
+ this.EditDescription = new MultiLingualTextAreaOptions();
233
+ this.EditDescription.Name = "EditDescription";
234
+ this.EditDescription.ArabicLabelKey = "DescriptionInArabic";
235
+ this.EditDescription.EnglishLabelKey = "DescriptionInEnglish";
236
+ this.EditDescription.Value = Description;
237
+ this.EditDescription.MultiControlPlacementType = ControlLayout.Vertical;
238
+ let selectedPermissionList = [];
239
+ for (let index = 0; index < helpCenter.permissionSetIDs.length; index++) {
240
+ const Permission = this.PermissionSetsList.filter((item) => { return parseInt(item.key) == helpCenter.permissionSetIDs[index]; }).map((item) => item.key)[0];
241
+ selectedPermissionList.push(Permission);
242
+ }
243
+ this.EditPermissionSetsOptions = new DropdownOptions();
244
+ this.EditPermissionSetsOptions.Name = "EditPermissionSetsOptions";
245
+ this.EditPermissionSetsOptions.LabelKey = "PermissionSets";
246
+ this.EditPermissionSetsOptions.DataSource = this.PermissionSetsList;
247
+ this.EditPermissionSetsOptions.SingleSelection = false;
248
+ this.EditPermissionSetsOptions.AllowSearchFilter = true;
249
+ this.EditPermissionSetsOptions.Placeholder = "";
250
+ this.EditPermissionSetsOptions.SelectedItems = selectedPermissionList;
251
+ this.EditIsHidden = new CheckBoxOptions();
252
+ this.EditIsHidden.Name = "EditIsHidden";
253
+ this.EditIsHidden.LabelKey = "Hidden";
254
+ this.EditIsHidden.Value = helpCenter.isHidden;
255
+ this.EditLogo = new ImageUploadOptions();
256
+ this.EditLogo.Name = "EditLogo";
257
+ this.EditLogo.LabelKey = "Logo";
258
+ this.EditLogo.IsRequired = false;
259
+ this.EditLogo.FileUploadAcceptsTypes = [ImageType.ImageTypes];
260
+ this.EditLogo.Value = helpCenter.logoFileDTO;
261
+ this.EditLogoFileID = helpCenter.logoFileID;
262
+ this.modalService.open(EditHelpCenterModal);
263
+ this.utilityService.stopBlockUI();
264
+ });
265
+ }
266
+ //Delete HelpCenter
267
+ showDeleteHelpCenterModal(helpCenterID) {
268
+ this.deleteHelpCenterId = helpCenterID;
269
+ //array sent to service function
270
+ let paramArray = [];
271
+ paramArray.push(this.deleteHelpCenterId);
272
+ this.DeleteConfirmationOptions = new ConfirmationModalOptions();
273
+ this.DeleteConfirmationOptions.ServiceSubmitFunction = this.deleteHelpCenter;
274
+ this.DeleteConfirmationOptions.ServiceSubmitModel = paramArray;
275
+ this.DeleteConfirmationOptions.PagingReference = this.pagingElement;
276
+ this.deleteControlLoaded = true;
277
+ setTimeout(() => {
278
+ this.ConfirmationModalControl.showModal();
279
+ }, 200);
280
+ }
281
+ //Generate Code
275
282
  showGenerateCodeModal(GenerateCodeModal) {
276
283
  this.HelpCenterService.GenerateCode().subscribe((result) => {
277
284
  let Code = result;
@@ -283,32 +290,26 @@ export class HelpCenterComponent {
283
290
  this.GeneratedCodeOptions.EnableCopyToClipboard = true;
284
291
  this.GeneratedCodeOptions.AttributeList = [{ Key: "rows", value: "20" }];
285
292
  this.modalService.open(GenerateCodeModal);
286
- }, (error) => {
287
293
  });
288
294
  }
295
+ //On destroy
296
+ ngOnDestroy() {
297
+ this.requestHandlerService.destroyHandler();
298
+ }
289
299
  }
290
- HelpCenterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: HelpCenterComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.HelpCenterService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
291
- HelpCenterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: HelpCenterComponent, selector: "lib-help-center", viewQueries: [{ propertyName: "input", first: true, predicate: ["HelpCenterPagingViewElement"], descendants: true }, { propertyName: "CloseAddHelpCenterModal", first: true, predicate: ["CloseAddHelpCenterModal"], descendants: true }, { propertyName: "CloseEditHelpCenterModal", first: true, predicate: ["CloseEditHelpCenterModal"], descendants: true }, { propertyName: "CloseDeleteHelpCenterItemModal", first: true, predicate: ["CloseDeleteHelpCenterItemModal"], descendants: true }, { propertyName: "CloseGenerateCodeModal", first: true, predicate: ["CloseGenerateCodeModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n <!-- Page Content -->\r\n <div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"HelpCenterForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"HelpCenterForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button class=\"btn btn-sm btn-light-primary me-3\"(click)=\"showGenerateCodeModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-code\"></i> {{utilityService.getResourceValue(\"GenerateCode\")}}\r\n </button>\r\n <button class=\"btn btn-sm btn-light-primary me-3\" [routerLink]=\"['/Admin/HelpCenter/Preview']\"\r\n routerLinkActive=\"router-link-active\">\r\n <i class=\"fa fa-eye\"></i> {{utilityService.getResourceValue(\"Preview\")}}\r\n </button>\r\n <button class=\"btn btn-sm btn-primary me-3\" (click)=\"showAddHelpCenterModal(AddHelpCenterModal)\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <!--begin::ActiveDirectory list-->\r\n <div class=\"table-responsive\">\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Title\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Description\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"PermissionSets\")}}</th>\r\n <th class=\"min-w-150px text-center\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-50px text-center\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Item of HelpCenterPagingResult\">\r\n <td>\r\n\r\n <a *ngIf=\"language=='en'\" (click)=\"SaveName(Item.title.english)\"\r\n [routerLink]=\"['/Admin/HelpCenter/SecondLevel',Item.idEncrypted]\" routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{Item.title.english}}</a>\r\n\r\n <a *ngIf=\"language=='ar'\" (click)=\"SaveName(Item.title.arabic)\"\r\n [routerLink]=\"['/Admin/HelpCenter/SecondLevel',Item.idEncrypted]\" routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{Item.title.arabic}}</a>\r\n\r\n </td>\r\n <td>\r\n <div *ngIf=\"language=='en'\">{{Item.description.english}}</div>\r\n <div *ngIf=\"language=='ar'\">{{Item.description.arabic}}</div>\r\n </td>\r\n <td> {{Item.permissionsStr}} </td>\r\n <td class=\"text-center\">\r\n <span *ngIf=\"Item.isHidden;else other_content\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n <ng-template #other_content>\r\n <i class=\"fa fa-check\"></i>\r\n </ng-template>\r\n </td>\r\n <td class=\"text-center\">\r\n\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditHelpCenterModal(Item,EditHelpCenterModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\" (click)=\"showDeleteHelpCenterModal(Item,deleteHelpCenterItemModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"HelpCenterPagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setHelpCenterItemListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"HelpCenterPaging\"\r\n [group]=\"HelpCenterForm\" #HelpCenterPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n <!-- Filter Wrapper -->\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n\r\n <!--delete Modal-->\r\n <ng-template #deleteHelpCenterItemModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"Delete\")}} {{utilityService.getResourceValue(\"HelpCenter\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-danger rounded border-danger border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-danger me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"Delete_Question\")}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDeleteHelpCenterItemModal id=\"CloseDeleteHelpCenterItemModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"deleteHelpCenter()\"\r\n class=\"btn btn-light-danger btn-sm \">\r\n {{utilityService.getResourceValue(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <!--Generate code Modal-->\r\n <ng-template #GenerateCodeModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"GenerateCode\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"GenerateCodeForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"GeneratedCodeOptions\" [group]=\"GenerateCodeForm\" #GenerateCodeInput>\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseGenerateCodeModal id=\"CloseGenerateCodeModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <!-- <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"copyToClipboard()\">{{utilityService.getResourceValue(\"CopyToClipboard\")}}</button> -->\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n <!--Edit Modal-->\r\n <ng-template #EditHelpCenterModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"Edit\")}} {{utilityService.getResourceValue(\"HelpCenter\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"EditHelpCenterForm\" (ngSubmit)=\"editHelpCenter()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditMultiLingualTitle\" [group]=\"EditHelpCenterForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"EditMultiLingualDescription\" [group]=\"EditHelpCenterForm\"></BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditPermissionSetsOptions\" [group]=\"EditHelpCenterForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-ImageUpload [options]=\"EditLogo\" [group]=\"AddHelpCenterForm\">\r\n\r\n </BBSF-ImageUpload>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsHidden\" [group]=\"EditHelpCenterForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditHelpCenterModal id=\"CloseEditHelpCenterModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n <!--add Modal-->\r\n <ng-template #AddHelpCenterModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"Add\")}} {{utilityService.getResourceValue(\"HelpCenter\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"AddHelpCenterForm\"\r\n (ngSubmit)=\"addHelpCenterItem()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"MultiLingualTitle\" [group]=\"AddHelpCenterForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"MultiLingualDescription\" [group]=\"AddHelpCenterForm\"></BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddPermissionSetsOptions\" [group]=\"AddHelpCenterForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-ImageUpload [options]=\"AddLogo\" [group]=\"AddHelpCenterForm\">\r\n\r\n </BBSF-ImageUpload>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"AddIsHidden\" [group]=\"AddHelpCenterForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseHelpCenterModal id=\"CloseAddHelpCenterModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵe, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵf, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.ɵm, selector: "BBSF-ImageUpload", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i11.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["routerLink", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
300
+ HelpCenterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: HelpCenterComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i3.HelpCenterService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
301
+ HelpCenterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: HelpCenterComponent, selector: "lib-help-center", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["HelpCenterPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"HelpCenterForm\">\r\n <BBSF-TextBox (OnChange)=\"searchClientSide($event)\" [options]=\"searchTextBox\" [group]=\"HelpCenterForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button class=\"btn btn-sm btn-light-primary me-3\" (click)=\"showGenerateCodeModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-code\"></i> {{utilityService.getResourceValue(\"GenerateCode\")}}\r\n </button>\r\n <button class=\"btn btn-sm btn-light-primary me-3\" [routerLink]=\"['/Admin/HelpCenter/Preview']\"\r\n routerLinkActive=\"router-link-active\">\r\n <i class=\"fa fa-eye\"></i> {{utilityService.getResourceValue(\"Preview\")}}\r\n </button>\r\n <button class=\"btn btn-sm btn-primary me-3\" (click)=\"showAddHelpCenterModal(AddHelpCenterModal)\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <!--begin::ActiveDirectory list-->\r\n <div class=\"table-responsive\">\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Title\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Description\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"PermissionSets\")}}</th>\r\n <th class=\"min-w-150px text-center\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-50px text-center\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Item of clientSidePagingResult\">\r\n <td>\r\n <a (click)=\"SaveName(Item.titleStr)\" [routerLink]=\"['/Admin/HelpCenter/SecondLevel',Item.idEncrypted]\" routerLinkActive=\"router-link-active\" class=\"text-dark\">{{Item.titleStr}}</a>\r\n </td>\r\n <td>\r\n <div>{{Item.descriptionStr}}</div>\r\n </td>\r\n <td> {{Item.permissionsStr}} </td>\r\n <td class=\"text-center\">\r\n <span *ngIf=\"Item.isHidden;else other_content\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n <ng-template #other_content>\r\n <i class=\"fa fa-check\"></i>\r\n </ng-template>\r\n </td>\r\n <td class=\"text-center\">\r\n\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditHelpCenterModal(Item.id,Item.idEncrypted,EditHelpCenterModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\" (click)=\"showDeleteHelpCenterModal(Item.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setHelpCenterItemListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"HelpCenterPaging\"\r\n [group]=\"HelpCenterForm\" #HelpCenterPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n <!-- Filter Wrapper -->\r\n <!--end::Permission list-->\r\n</div>\r\n\r\n<!--Add Modal-->\r\n<ng-template #AddHelpCenterModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"Add\")}} {{utilityService.getResourceValue(\"HelpCenter\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddHelpCenterFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddTitle\" [group]=\"AddHelpCenterForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"AddDescription\" [group]=\"AddHelpCenterForm\"></BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddPermissionSetsOptions\" [group]=\"AddHelpCenterForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-ImageUpload [options]=\"AddLogo\" [group]=\"AddHelpCenterForm\">\r\n\r\n </BBSF-ImageUpload>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"AddIsHidden\" [group]=\"AddHelpCenterForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseHelpCenterModal id=\"CloseAddHelpCenterModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!--Edit Modal-->\r\n<ng-template #EditHelpCenterModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"Edit\")}} {{utilityService.getResourceValue(\"HelpCenter\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditHelpCenterFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditTitle\" [group]=\"EditHelpCenterForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"EditDescription\" [group]=\"EditHelpCenterForm\"></BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditPermissionSetsOptions\" [group]=\"EditHelpCenterForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-ImageUpload [options]=\"EditLogo\" [group]=\"EditHelpCenterForm\">\r\n\r\n </BBSF-ImageUpload>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsHidden\" [group]=\"EditHelpCenterForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditHelpCenterModal id=\"CloseEditHelpCenterModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n<!--Generate code Modal-->\r\n<ng-template #GenerateCodeModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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(\"GenerateCode\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"GenerateCodeForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"GeneratedCodeOptions\" [group]=\"GenerateCodeForm\" #GenerateCodeInput>\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseGenerateCodeModal id=\"CloseGenerateCodeModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <!-- <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"copyToClipboard()\">{{utilityService.getResourceValue(\"CopyToClipboard\")}}</button> -->\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵf, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.ɵm, selector: "BBSF-ImageUpload", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵw, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { type: i6.ɵe, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i11.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["routerLink", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
292
302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: HelpCenterComponent, decorators: [{
293
303
  type: Component,
294
304
  args: [{
295
305
  selector: 'lib-help-center',
296
306
  templateUrl: './help-center.component.html'
297
307
  }]
298
- }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.PageInfoService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i3.HelpCenterService }, { type: i4.NgbModal }]; }, propDecorators: { input: [{
308
+ }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.PageInfoService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i3.HelpCenterService }, { type: i4.NgbModal }, { type: i1.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
299
309
  type: ViewChild,
300
310
  args: ['HelpCenterPagingViewElement', { static: false }]
301
- }], CloseAddHelpCenterModal: [{
302
- type: ViewChild,
303
- args: ['CloseAddHelpCenterModal', { static: false }]
304
- }], CloseEditHelpCenterModal: [{
305
- type: ViewChild,
306
- args: ['CloseEditHelpCenterModal', { static: false }]
307
- }], CloseDeleteHelpCenterItemModal: [{
308
- type: ViewChild,
309
- args: ['CloseDeleteHelpCenterItemModal', { static: false }]
310
- }], CloseGenerateCodeModal: [{
311
+ }], ConfirmationModalControl: [{
311
312
  type: ViewChild,
312
- args: ['CloseGenerateCodeModal', { static: false }]
313
+ args: ['ConfirmationModalControl', { static: false }]
313
314
  }] } });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1jZW50ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9oZWxwQ2VudGVyL2hlbHAtY2VudGVyL2hlbHAtY2VudGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvaGVscENlbnRlci9oZWxwLWNlbnRlci9oZWxwLWNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFDdkUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQ2xMLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVFyRixNQUFNLE9BQU8sbUJBQW1CO0lBa0Q5QixZQUFvQixXQUF1QixFQUFTLGVBQStCLEVBQVMsY0FBNkIsRUFBUyxvQkFBeUMsRUFBUyxrQkFBcUMsRUFBVSxpQkFBb0MsRUFBVSxZQUFzQjtRQUFuUixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxD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QUUsS0FBSyxFQUFFO2dCQUtOLHNCQUFzQjtzQkFBN0UsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBDaGVja0JveE9wdGlvbnMsIENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSxcclxuICBJbnB1dFR5cGUsIFBhZ2luZ09wdGlvbnMsIFRleHRBcmVhT3B0aW9ucywgSWNvblBvc2l0aW9uICxUZXh0Qm94T3B0aW9ucywgSW1hZ2VVcGxvYWRPcHRpb25zLCBJbWFnZVR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMsIEVuZ2xpc2hBcmFiaWNEVE9cclxufSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEhlbHBDZW50ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL0hlbHBDZW50ZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIZWxwQ2VudGVySXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9IZWxwQ2VudGVyTW9kZWxzL0hlbHBDZW50ZXJJdGVtTW9kZWwnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGVscC1jZW50ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWxwLWNlbnRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlbHBDZW50ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9IZWxwQ2VudGVyL1wiXHJcbiAgLy8gU3ViaGVhZGVyVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0hlbHBDZW50ZXInKTtcclxuICAvLyBTaG93VG9vbGJhciA9IHRydWU7XHJcbiAgLy8gU2hvd2JyZWFkQ3J1bWIgPSBmYWxzZTtcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBQZXJtaXNzaW9uU2V0c0xpc3QgPSBbXTtcclxuICBIZWxwQ2VudGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBIZWxwQ2VudGVyUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEhlbHBDZW50ZXJQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdIZWxwQ2VudGVyUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGxhbmd1YWdlOiBzdHJpbmcgPSBcIlwiXHJcbiAgU2hvd1BhZ2VDb250ZW50OmJvb2xlYW49ZmFsc2U7XHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRIZWxwQ2VudGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIE11bHRpTGluZ3VhbFRpdGxlOk11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zXHJcbiAgTXVsdGlMaW5ndWFsRGVzY3JpcHRpb246TXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zXHJcbiAgQWRkUGVybWlzc2lvblNldHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkSXNIaWRkZW46IENoZWNrQm94T3B0aW9ucztcclxuICBBZGRMb2dvOiBJbWFnZVVwbG9hZE9wdGlvbnM7XHJcbiAgSXNBZGRIZWxwQ2VudGVyRm9ybUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3NlQWRkSGVscENlbnRlck1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlQWRkSGVscENlbnRlck1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0SGVscENlbnRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0TXVsdGlMaW5ndWFsVGl0bGU6TXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBFZGl0TXVsdGlMaW5ndWFsRGVzY3JpcHRpb246TXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zXHJcbiAgRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRJc0hpZGRlbjogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIEVkaXRMb2dvOiBJbWFnZVVwbG9hZE9wdGlvbnM7XHJcbiAgSGVscENlbnRlckl0ZW1JZDogbnVtYmVyO1xyXG5cclxuICBJc0VkaXRIZWxwQ2VudGVyTW9kYWxMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDbG9zZUVkaXRIZWxwQ2VudGVyTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VFZGl0SGVscENlbnRlck1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVIZWxwQ2VudGVySWQ6IHN0cmluZztcclxuICBAVmlld0NoaWxkKCdDbG9zZURlbGV0ZUhlbHBDZW50ZXJJdGVtTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VEZWxldGVIZWxwQ2VudGVySXRlbU1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0dlbmVyYXRlIGNvZGUgbW9kYWxcclxuICBHZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgR2VuZXJhdGVkQ29kZU9wdGlvbnM6IFRleHRBcmVhT3B0aW9ucztcclxuICBAVmlld0NoaWxkKCdDbG9zZUdlbmVyYXRlQ29kZU1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlR2VuZXJhdGVDb2RlTW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlLHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOlBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6QkJTRlRyYW5zbGF0ZVNlcnZpY2UscHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6RW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIEhlbHBDZW50ZXJTZXJ2aWNlOiBIZWxwQ2VudGVyU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7XHJcbiAgfSBcclxuICAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudD10cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZT10aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIZWxwQ2VudGVyXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzPVtcclxuICAgICAgIHt0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSAsIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlfSxcclxuICAgICAgIHt0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlfVxyXG5cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PWZhbHNlO1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSAgYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICBcclxuICAgIHRoaXMuTG9hZExpc3QoKTtcclxuICB9XHJcblxyXG4gXHJcbiAgLy9pbml0aWFsaXplIGZpbHRlcnMgYW5kIGxvYWQgYW55IGRyb3AgZG93biBsaXN0XHJcbiAgTG9hZExpc3QoKSB7XHJcbiAgICB0aGlzLkhlbHBDZW50ZXJTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgRHJvcGRvd25MaXN0cyA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0c0xpc3QgPSBEcm9wZG93bkxpc3RzLnBlcm1pc3Npb25TZXRzO1xyXG4gICAgICAgLy8gVGV4dEJveCBpbnRpXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlLFxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guSWNvbiA9XCIuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjAyMS5zdmdcIlxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guSWNvblBvc2l0aW9uID0gSWNvblBvc2l0aW9uLmxlZnRcclxuXHJcblxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgICB0aGlzLkhlbHBDZW50ZXJQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkhlbHBDZW50ZXJQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyAnR2V0SGVscENlbnRlckl0ZW1zQnlGaWx0ZXInO1xyXG4gICAgICB0aGlzLkhlbHBDZW50ZXJQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICAgIHRoaXMuSGVscENlbnRlclBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyXVxyXG4gICAgICB0aGlzLkhlbHBDZW50ZXJQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKTtcclxuICAgICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgUmVpbml0aWFsaXplSGVscENlbnRlclBhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlSGVscENlbnRlclBhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVscENlbnRlckl0ZW1MaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5IZWxwQ2VudGVyUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9dHJ1ZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVycygpIHtcclxuICAgIHRoaXMuSGVscENlbnRlckZvcm0uY29udHJvbHNbXCJzZWFyY2hUZXh0Qm94XCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuICBzaG93QWRkSGVscENlbnRlck1vZGFsKEFkZEhlbHBDZW50ZXJNb2RhbCl7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5BZGRIZWxwQ2VudGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbFRpdGxlID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbFRpdGxlLk5hbWUgPSBcIlRpdGxlXCI7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbFRpdGxlLkFyYWJpY0xhYmVsS2V5ID0gIFwiVGl0bGVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxUaXRsZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRpdGxlSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbFRpdGxlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxUaXRsZS5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbERlc2NyaXB0aW9uID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxEZXNjcmlwdGlvbi5OYW1lID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxEZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9ICBcIkRlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsRGVzY3JpcHRpb24uRW5nbGlzaExhYmVsS2V5ID0gXCJEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxEZXNjcmlwdGlvbi5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbERlc2NyaXB0aW9uLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5OYW1lID0gXCJBZGRQZXJtaXNzaW9uU2V0c09wdGlvbnNcIlxyXG4gICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnMuTGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCJcclxuICAgIHRoaXMuQWRkUGVybWlzc2lvblNldHNPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRzTGlzdFxyXG4gICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuQWRkSXNIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLkFkZElzSGlkZGVuLk5hbWUgPSBcIkFkZElzSGlkZGVuXCJcclxuICAgIHRoaXMuQWRkSXNIaWRkZW4uTGFiZWxLZXkgPSBcIkhpZGRlblwiXHJcbiAgICB0aGlzLkFkZElzSGlkZGVuLlZhbHVlID0gZmFsc2VcclxuICAgIHRoaXMuQWRkTG9nbyA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgIHRoaXMuQWRkTG9nby5OYW1lID0gXCJBZGRMb2dvXCJcclxuICAgIHRoaXMuQWRkTG9nby5MYWJlbEtleSA9IFwiTG9nb1wiXHJcbiAgICB0aGlzLkFkZExvZ28uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsXHJcbiAgICB0aGlzLkFkZExvZ28uRmlsZVVwbG9hZEFjY2VwdHNUeXBlcyA9IFtJbWFnZVR5cGUuSW1hZ2VUeXBlc11cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkSGVscENlbnRlck1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbn1cclxuXHJcbiAgYWRkSGVscENlbnRlckl0ZW0oKSB7XHJcbiAgICBpZiAodGhpcy5BZGRIZWxwQ2VudGVyRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZEhlbHBDZW50ZXJGb3JtLnZhbHVlO1xyXG4gICAgICAgLy9jb25zb2xlLmxvZyhSZXN1bHRNb2RlbCk7XHJcbiAgICAgIGxldCBBZGRNb2RlbDpIZWxwQ2VudGVySXRlbU1vZGVsPSBuZXcgSGVscENlbnRlckl0ZW1Nb2RlbCgpO1xyXG4gICAgICBBZGRNb2RlbC5UaXRsZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5UaXRsZS5BcmFiaWNWYWx1ZTtcclxuICAgICAgQWRkTW9kZWwuVGl0bGUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLlRpdGxlLkVuZ2xpc2hWYWx1ZTtcclxuICAgICAgQWRkTW9kZWwuRGVzY3JpcHRpb24uQXJhYmljID0gUmVzdWx0TW9kZWwuRGVzY3JpcHRpb24uQXJhYmljVGV4dEFyZWFWYWx1ZTtcclxuICAgICAgQWRkTW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkRlc2NyaXB0aW9uLkVuZ2xpc2hUZXh0QXJlYVZhbHVlO1xyXG4gICAgICBsZXQgYXJyID0gUmVzdWx0TW9kZWwuQWRkUGVybWlzc2lvblNldHNPcHRpb25zO1xyXG4gICAgICBsZXQgcGVybWlzc2lvblNldHM6IG51bWJlcltdID0gW107XHJcbiAgICAgIGNvbnN0IHRvTnVtYmVycyA9IGFyciA9PiBhcnIubWFwKE51bWJlcik7XHJcbiAgICAgIHBlcm1pc3Npb25TZXRzPXRvTnVtYmVycyhhcnIpO1xyXG4gICAgICBBZGRNb2RlbC5QZXJtaXNzaW9uU2V0SURzID0gUmVzdWx0TW9kZWwuQWRkUGVybWlzc2lvblNldHNPcHRpb25zICE9IG51bGwgPyBwZXJtaXNzaW9uU2V0czpudWxsO1xyXG4gICAgICBBZGRNb2RlbC5Jc0hpZGRlbiA9IFJlc3VsdE1vZGVsLkFkZElzSGlkZGVuO1xyXG4gICAgICBBZGRNb2RlbC5Mb2dvRmlsZURUTyA9IHtcclxuICAgICAgICBGaWxlQmFzZTY0OiBSZXN1bHRNb2RlbFtcIkFkZExvZ29cIl0uRmlsZUJhc2U2NCxcclxuICAgICAgICBGaWxlTmFtZTogUmVzdWx0TW9kZWxbXCJBZGRMb2dvXCJdLkZpbGVOYW1lLFxyXG4gICAgICAgIEZpbGVTaXplSW5NQjogUmVzdWx0TW9kZWxbXCJBZGRMb2dvXCJdLkZpbGVTaXplSW5NQixcclxuICAgICAgICBGaWxlVHlwZTogUmVzdWx0TW9kZWxbXCJBZGRMb2dvXCJdLkZpbGVUeXBlXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGlzLkhlbHBDZW50ZXJTZXJ2aWNlLkFkZEhlbHBDZW50ZXIoQWRkTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBzaG93RWRpdEhlbHBDZW50ZXJNb2RhbChIZWxwQ2VudGVyOiBhbnksIEVkaXRIZWxwQ2VudGVyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKClcclxuXHJcbiAgICB0aGlzLkVkaXRIZWxwQ2VudGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLkhlbHBDZW50ZXJJdGVtSWQgPSBIZWxwQ2VudGVyLmlkXHJcblxyXG4gICAgbGV0IFRpdGxlPW5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICBUaXRsZS5BcmFiaWM9IEhlbHBDZW50ZXIudGl0bGUuYXJhYmljO1xyXG4gICAgVGl0bGUuRW5nbGlzaD0gSGVscENlbnRlci50aXRsZS5lbmdsaXNoO1xyXG5cclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbFRpdGxlID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxUaXRsZS5OYW1lID0gXCJUaXRsZVwiO1xyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsVGl0bGUuQXJhYmljTGFiZWxLZXkgPSAgXCJUaXRsZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxUaXRsZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRpdGxlSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxUaXRsZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbFRpdGxlLlZhbHVlID0gVGl0bGU7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxUaXRsZS5JY29uID0gXCIuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjAyMS5zdmdcIjtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbFRpdGxlLkljb25Qb3NpdGlvbkVOID0gSWNvblBvc2l0aW9uLmxlZnQ7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxUaXRsZS5JY29uUG9zaXRpb25BUiA9IEljb25Qb3NpdGlvbi5yaWdodDtcclxuXHJcbiAgICBsZXQgRGVzY3JpcHRpb249bmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgIERlc2NyaXB0aW9uLkFyYWJpYz0gSGVscENlbnRlci5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICBEZXNjcmlwdGlvbi5FbmdsaXNoPSBIZWxwQ2VudGVyLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcblxyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsRGVzY3JpcHRpb24gPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxEZXNjcmlwdGlvbi5OYW1lID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsRGVzY3JpcHRpb24uQXJhYmljTGFiZWxLZXkgPSAgXCJEZXNjcmlwdGlvbkluQXJhYmljXCI7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxEZXNjcmlwdGlvbi5FbmdsaXNoTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxEZXNjcmlwdGlvbi5WYWx1ZSA9IERlc2NyaXB0aW9uO1xyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsRGVzY3JpcHRpb24uTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcblxyXG5cclxuICAgXHJcbiAgICBsZXQgc2VsZWN0ZWRQZXJtaXNzaW9uTGlzdCA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IEhlbHBDZW50ZXIucGVybWlzc2lvblNldElEcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgUGVybWlzc2lvbiA9IHRoaXMuUGVybWlzc2lvblNldHNMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IEhlbHBDZW50ZXIucGVybWlzc2lvblNldElEc1tpbmRleF07IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICBzZWxlY3RlZFBlcm1pc3Npb25MaXN0LnB1c2goUGVybWlzc2lvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMuTmFtZSA9IFwiRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9uc1wiXHJcbiAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMuTGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCJcclxuICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9ucy5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0c0xpc3RcclxuICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFBlcm1pc3Npb25MaXN0O1xyXG5cclxuICAgIHRoaXMuRWRpdElzSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0SXNIaWRkZW4uTmFtZSA9IFwiRWRpdElzSGlkZGVuXCJcclxuICAgIHRoaXMuRWRpdElzSGlkZGVuLkxhYmVsS2V5ID0gXCJIaWRkZW5cIlxyXG4gICAgdGhpcy5FZGl0SXNIaWRkZW4uVmFsdWUgPSBIZWxwQ2VudGVyLmlzSGlkZGVuXHJcblxyXG4gICAgdGhpcy5FZGl0TG9nbyA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRWRpdExvZ28uTmFtZSA9IFwiRWRpdExvZ29cIlxyXG4gICAgdGhpcy5FZGl0TG9nby5MYWJlbEtleSA9IFwiTG9nb1wiXHJcbiAgICB0aGlzLkVkaXRMb2dvLklzUmVxdWlyZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5FZGl0TG9nby5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gW0ltYWdlVHlwZS5JbWFnZVR5cGVzXVxyXG4gICAgdGhpcy5FZGl0TG9nby5WYWx1ZSA9IEhlbHBDZW50ZXIubG9nb0ZpbGVEVE9cclxuXHJcbiAgICBcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdEhlbHBDZW50ZXJNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGVkaXRIZWxwQ2VudGVyKCkge1xyXG4gICAgaWYgKHRoaXMuRWRpdEhlbHBDZW50ZXJGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdEhlbHBDZW50ZXJGb3JtLnZhbHVlO1xyXG4gICAgICBsZXQgRWRpdE1vZGVsID0gbmV3IEhlbHBDZW50ZXJJdGVtTW9kZWwoKTtcclxuICAgICAgRWRpdE1vZGVsLklEID0gTnVtYmVyKHRoaXMuSGVscENlbnRlckl0ZW1JZCk7XHJcbiAgICAgIEVkaXRNb2RlbC5UaXRsZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuVGl0bGUuRW5nbGlzaFZhbHVlOyAvLygjIzEpXHJcbiAgICAgIEVkaXRNb2RlbC5UaXRsZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5UaXRsZS5BcmFiaWNWYWx1ZTtcclxuICAgICAgRWRpdE1vZGVsLkRlc2NyaXB0aW9uLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5EZXNjcmlwdGlvbi5FbmdsaXNoVGV4dEFyZWFWYWx1ZVxyXG4gICAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24uQXJhYmljID0gUmVzdWx0TW9kZWwuRGVzY3JpcHRpb24uQXJhYmljVGV4dEFyZWFWYWx1ZVxyXG4gICAgICBFZGl0TW9kZWwuSXNIaWRkZW4gPSBSZXN1bHRNb2RlbC5FZGl0SXNIaWRkZW47XHJcbiAgICAgIEVkaXRNb2RlbC5Mb2dvRmlsZURUTyA9IFJlc3VsdE1vZGVsLkVkaXRMb2dvO1xyXG4gICAgICBsZXQgSWRzID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBSZXN1bHRNb2RlbC5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBSZXN1bHRNb2RlbC5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zW2luZGV4XTtcclxuICAgICAgICBJZHMucHVzaChOdW1iZXIoZWxlbWVudCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBFZGl0TW9kZWwuUGVybWlzc2lvblNldElEcyA9IElkcztcclxuXHJcbiAgICAgIHRoaXMuSGVscENlbnRlclNlcnZpY2UuRWRpdEhlbHBDZW50ZXIoRWRpdE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93RGVsZXRlSGVscENlbnRlck1vZGFsKEl0ZW06IGFueSwgZGVsZXRlSGVscENlbnRlckl0ZW1Nb2RhbCkge1xyXG4gICAgdGhpcy5kZWxldGVIZWxwQ2VudGVySWQgPSBJdGVtLmlkRW5jcnlwdGVkO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZGVsZXRlSGVscENlbnRlckl0ZW1Nb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGRlbGV0ZUhlbHBDZW50ZXIoKSB7XHJcbiAgICB0aGlzLkhlbHBDZW50ZXJTZXJ2aWNlLkRlbGV0ZUhlbHBDZW50ZXIodGhpcy5kZWxldGVIZWxwQ2VudGVySWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZGVsZXRlSGVscENlbnRlcklkID0gXCJcIjtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBTYXZlTmFtZShuYW1lKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIlBhcmVudE5hbWVcIiwgbmFtZSk7XHJcbiAgfVxyXG4gIHNob3dHZW5lcmF0ZUNvZGVNb2RhbChHZW5lcmF0ZUNvZGVNb2RhbCl7XHJcblxyXG4gIHRoaXMuSGVscENlbnRlclNlcnZpY2UuR2VuZXJhdGVDb2RlKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIGxldCBDb2RlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgdGhpcy5HZW5lcmF0ZWRDb2RlT3B0aW9ucyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuTmFtZSA9IFwiR2VuZXJhdGVkQ29kZU9wdGlvbnNcIjtcclxuICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuTWF4TGVuZ3RoID0gMTAwMDAwMDtcclxuICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuVmFsdWUgPSBDb2RlLnRleHQ7XHJcbiAgICB0aGlzLkdlbmVyYXRlZENvZGVPcHRpb25zLkVuYWJsZUNvcHlUb0NsaXBib2FyZCA9IHRydWU7XHJcbiAgICB0aGlzLkdlbmVyYXRlZENvZGVPcHRpb25zLkF0dHJpYnV0ZUxpc3QgPSBbeyBLZXk6IFwicm93c1wiLCB2YWx1ZTogXCIyMFwiIH1dO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUNvZGVNb2RhbCk7XHJcblxyXG4gIH0sIChlcnJvcikgPT4ge1xyXG4gICAgXHJcbiAgfSlcclxuXHJcblxyXG5cclxufVxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG4gIDwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJIZWxwQ2VudGVyRm9ybVwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiSGVscENlbnRlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIoY2xpY2spPVwic2hvd0dlbmVyYXRlQ29kZU1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZGVcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlQ29kZVwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9IZWxwQ2VudGVyL1ByZXZpZXcnXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWVcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByZXZpZXdcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtZS0zXCIgIChjbGljayk9XCJzaG93QWRkSGVscENlbnRlck1vZGFsKEFkZEhlbHBDZW50ZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpBY3RpdmVEaXJlY3RvcnkgbGlzdC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGl0bGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlc2NyaXB0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQZXJtaXNzaW9uU2V0c1wiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4IHRleHQtY2VudGVyXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmlzaWJsZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHggdGV4dC1jZW50ZXJcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBJdGVtIG9mIEhlbHBDZW50ZXJQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwibGFuZ3VhZ2U9PSdlbidcIiAoY2xpY2spPVwiU2F2ZU5hbWUoSXRlbS50aXRsZS5lbmdsaXNoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL0hlbHBDZW50ZXIvU2Vjb25kTGV2ZWwnLEl0ZW0uaWRFbmNyeXB0ZWRdXCIgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tJdGVtLnRpdGxlLmVuZ2xpc2h9fTwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwibGFuZ3VhZ2U9PSdhcidcIiAoY2xpY2spPVwiU2F2ZU5hbWUoSXRlbS50aXRsZS5hcmFiaWMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vSGVscENlbnRlci9TZWNvbmRMZXZlbCcsSXRlbS5pZEVuY3J5cHRlZF1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e0l0ZW0udGl0bGUuYXJhYmljfX08L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxhbmd1YWdlPT0nZW4nXCI+e3tJdGVtLmRlc2NyaXB0aW9uLmVuZ2xpc2h9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGFuZ3VhZ2U9PSdhcidcIj57e0l0ZW0uZGVzY3JpcHRpb24uYXJhYmljfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+IHt7SXRlbS5wZXJtaXNzaW9uc1N0cn19IDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIkl0ZW0uaXNIaWRkZW47ZWxzZSBvdGhlcl9jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVyX2NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRIZWxwQ2VudGVyTW9kYWwoSXRlbSxFZGl0SGVscENlbnRlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIiAoY2xpY2spPVwic2hvd0RlbGV0ZUhlbHBDZW50ZXJNb2RhbChJdGVtLGRlbGV0ZUhlbHBDZW50ZXJJdGVtTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkhlbHBDZW50ZXJQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldEhlbHBDZW50ZXJJdGVtTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIkhlbHBDZW50ZXJQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiSGVscENlbnRlckZvcm1cIiAjSGVscENlbnRlclBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIEZpbHRlciBXcmFwcGVyIC0tPlxyXG4gICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8IS0tZGVsZXRlIE1vZGFsLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNkZWxldGVIZWxwQ2VudGVySXRlbU1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSGVscENlbnRlclwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LWRhbmdlciByb3VuZGVkIGJvcmRlci1kYW5nZXIgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24tZGFuZ2VyIG1lLTRcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVfUXVlc3Rpb25cIil9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZURlbGV0ZUhlbHBDZW50ZXJJdGVtTW9kYWwgaWQ9XCJDbG9zZURlbGV0ZUhlbHBDZW50ZXJJdGVtTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gbWUtMyBcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAgKGNsaWNrKT1cImRlbGV0ZUhlbHBDZW50ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbSBcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tR2VuZXJhdGUgY29kZSBNb2RhbC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjR2VuZXJhdGVDb2RlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkdlbmVyYXRlQ29kZUZvcm1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkdlbmVyYXRlZENvZGVPcHRpb25zXCIgW2dyb3VwXT1cIkdlbmVyYXRlQ29kZUZvcm1cIiAjR2VuZXJhdGVDb2RlSW5wdXQ+XHJcbiAgICAgICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uICNDbG9zZUdlbmVyYXRlQ29kZU1vZGFsIGlkPVwiQ2xvc2VHZW5lcmF0ZUNvZGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtICBtZS0zXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDb3B5VG9DbGlwYm9hcmRcIil9fTwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tRWRpdCBNb2RhbC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjRWRpdEhlbHBDZW50ZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIZWxwQ2VudGVyXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJFZGl0SGVscENlbnRlckZvcm1cIiAobmdTdWJtaXQpPVwiZWRpdEhlbHBDZW50ZXIoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJFZGl0TXVsdGlMaW5ndWFsVGl0bGVcIiBbZ3JvdXBdPVwiRWRpdEhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJFZGl0TXVsdGlMaW5ndWFsRGVzY3JpcHRpb25cIiBbZ3JvdXBdPVwiRWRpdEhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9uc1wiIFtncm91cF09XCJFZGl0SGVscENlbnRlckZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtSW1hZ2VVcGxvYWQgW29wdGlvbnNdPVwiRWRpdExvZ29cIiBbZ3JvdXBdPVwiQWRkSGVscENlbnRlckZvcm1cIj5cclxuXHJcbiAgICAgICAgICAgIDwvQkJTRi1JbWFnZVVwbG9hZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiRWRpdElzSGlkZGVuXCIgW2dyb3VwXT1cIkVkaXRIZWxwQ2VudGVyRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VFZGl0SGVscENlbnRlck1vZGFsIGlkPVwiQ2xvc2VFZGl0SGVscENlbnRlck1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDwhLS1hZGQgTW9kYWwtLT5cclxuICA8bmctdGVtcGxhdGUgI0FkZEhlbHBDZW50ZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhlbHBDZW50ZXJcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCJcclxuICAgICAgICAgICAgKG5nU3VibWl0KT1cImFkZEhlbHBDZW50ZXJJdGVtKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiTXVsdGlMaW5ndWFsVGl0bGVcIiBbZ3JvdXBdPVwiQWRkSGVscENlbnRlckZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhIFtvcHRpb25zXT1cIk11bHRpTGluZ3VhbERlc2NyaXB0aW9uXCIgW2dyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFBlcm1pc3Npb25TZXRzT3B0aW9uc1wiIFtncm91cF09XCJBZGRIZWxwQ2VudGVyRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1JbWFnZVVwbG9hZCBbb3B0aW9uc109XCJBZGRMb2dvXCIgW2dyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCI+XHJcblxyXG4gICAgICAgICAgICA8L0JCU0YtSW1hZ2VVcGxvYWQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIkFkZElzSGlkZGVuXCIgW2dyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uICNDbG9zZUhlbHBDZW50ZXJNb2RhbCBpZD1cIkNsb3NlQWRkSGVscENlbnRlck1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuIl19
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1jZW50ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9oZWxwQ2VudGVyL2hlbHAtY2VudGVyL2hlbHAtY2VudGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvaGVscENlbnRlci9oZWxwLWNlbnRlci9oZWxwLWNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUN2RSxTQUFTLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBZ0IsY0FBYyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSwyQkFBMkIsRUFDL0osZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUMxRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFXckYsTUFBTSxPQUFPLG1CQUFtQjtJQWdEOUIsWUFBb0IsV0FBd0IsRUFBVSxlQUFnQyxFQUM3RSxjQUE4QixFQUFVLG9CQUEwQyxFQUNqRixpQkFBb0MsRUFBVSxZQUFzQixFQUNwRSxxQkFBNEM7UUFIbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxvQkFBZSxHQUFmLGVBQWUs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SUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsWUFBWTtJQUNaLFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7aUhBelZVLG1CQUFtQjtxR0FBbkIsbUJBQW1CLDRTQ3BCaEMsZzNXQTZPQTs0RkR6TmEsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFdBQVcsRUFBRSw4QkFBOEI7aUJBQzVDOzJSQWM4RCxhQUFhO3NCQUF6RSxTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkE2QkQsd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIENoZWNrQm94T3B0aW9ucywgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLFxyXG4gIElucHV0VHlwZSwgUGFnaW5nT3B0aW9ucywgVGV4dEFyZWFPcHRpb25zLCBJY29uUG9zaXRpb24sIFRleHRCb3hPcHRpb25zLCBJbWFnZVVwbG9hZE9wdGlvbnMsIEltYWdlVHlwZSwgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMsIE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucyxcclxuICBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zLCBQYWdpbmdBY3Rpb25Nb2RlXHJcbn0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBIZWxwQ2VudGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9IZWxwQ2VudGVyU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVscENlbnRlckl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvSGVscENlbnRlck1vZGVscy9IZWxwQ2VudGVySXRlbU1vZGVsJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGVscC1jZW50ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWxwLWNlbnRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlbHBDZW50ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBTaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vSGVscENlbnRlci9cIlxyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSGVscENlbnRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBIZWxwQ2VudGVyUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGNsaWVudFNpZGVQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgSGVscENlbnRlclBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBJc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0hlbHBDZW50ZXJQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ7XHJcblxyXG4gIC8vUmVxdWlyZWQgbGlzdHNcclxuICBQZXJtaXNzaW9uU2V0c0xpc3QgPSBbXTtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRIZWxwQ2VudGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZEhlbHBDZW50ZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGRUaXRsZTpNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG4gIEFkZERlc2NyaXB0aW9uOk11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9uc1xyXG4gIEFkZFBlcm1pc3Npb25TZXRzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZElzSGlkZGVuOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgQWRkTG9nbzogSW1hZ2VVcGxvYWRPcHRpb25zO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0SGVscENlbnRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0SGVscENlbnRlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEVkaXRUaXRsZTpNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG4gIEVkaXREZXNjcmlwdGlvbjpNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnNcclxuICBFZGl0UGVybWlzc2lvblNldHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdElzSGlkZGVuOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgRWRpdExvZ286IEltYWdlVXBsb2FkT3B0aW9ucztcclxuICBFZGl0TG9nb0ZpbGVJRDogbnVtYmVyO1xyXG4gIEhlbHBDZW50ZXJJdGVtSWQ6IG51bWJlcjtcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlSGVscENlbnRlcklkOiBzdHJpbmc7XHJcbiAgRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgLy9HZW5lcmF0ZSBjb2RlIG1vZGFsXHJcbiAgR2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEdlbmVyYXRlZENvZGVPcHRpb25zOiBUZXh0QXJlYU9wdGlvbnM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIEhlbHBDZW50ZXJTZXJ2aWNlOiBIZWxwQ2VudGVyU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gIH0gXHJcbiAgIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9dHJ1ZTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGU9dGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSGVscENlbnRlclwiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icz1bXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIikgLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX1cclxuXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KT0+e1xyXG4gICAgICB0aGlzLlNob3dQYWdlQ29udGVudD1mYWxzZTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIFxyXG4gICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vSW5pdGlhbGl6ZSBQYWdlXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lk5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5IZWxwQ2VudGVyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuSGVscENlbnRlclBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0SGVscENlbnRlckl0ZW1zQnlGaWx0ZXInO1xyXG4gICAgdGhpcy5IZWxwQ2VudGVyUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiXVxyXG4gICAgdGhpcy5IZWxwQ2VudGVyUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLkhlbHBDZW50ZXJQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9QYWdpbmcgZnVuY3Rpb25zXHJcbiAgc2V0SGVscENlbnRlckl0ZW1MaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5IZWxwQ2VudGVyUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9dHJ1ZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKVxyXG5cclxuICB9XHJcbiAgc2VhcmNoQ2xpZW50U2lkZShzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQuZmlsdGVyKFxyXG4gICAgICAgIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gKGl0ZW0udGl0bGUuZW5nbGlzaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGl0ZW0udGl0bGUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuSGVscENlbnRlclBhZ2luZ1Jlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vU2F2ZSBIZWxwQ2VudGVyIE5hbWUgZm9yIGluZm8gcGFnZVxyXG4gIFNhdmVOYW1lKG5hbWUpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiUGFyZW50TmFtZVwiLCBuYW1lKTtcclxuICB9XHJcbiAgLy9BZGQgaGVscGNlbnRlciBpdGVtXHJcbiAgc2hvd0FkZEhlbHBDZW50ZXJNb2RhbChBZGRIZWxwQ2VudGVyTW9kYWwpe1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuSGVscENlbnRlclNlcnZpY2UubG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBEcm9wZG93bkxpc3RzID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0c0xpc3QgPSBEcm9wZG93bkxpc3RzLnBlcm1pc3Npb25TZXRzO1xyXG5cclxuICAgICAgdGhpcy5BZGRIZWxwQ2VudGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICB0aGlzLkFkZEhlbHBDZW50ZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEhlbHBDZW50ZXJGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkFkZEhlbHBDZW50ZXJGb3JtXHJcbiAgICAgIHRoaXMuQWRkSGVscENlbnRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZEhlbHBDZW50ZXJNb2RlbDtcclxuICAgICAgdGhpcy5BZGRIZWxwQ2VudGVyRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRIZWxwQ2VudGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuQWRkSGVscENlbnRlckZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgICAgdGhpcy5BZGRUaXRsZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFRpdGxlLk5hbWUgPSBcIkFkZFRpdGxlXCI7XHJcbiAgICAgIHRoaXMuQWRkVGl0bGUuQXJhYmljTGFiZWxLZXkgPSBcIlRpdGxlSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5BZGRUaXRsZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRpdGxlSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuQWRkVGl0bGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVGl0bGUuVmFsdWUgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbiA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbi5OYW1lID0gXCJBZGREZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLkFyYWJpY0xhYmVsS2V5ID0gXCJEZXNjcmlwdGlvbkluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzY3JpcHRpb24uRW5nbGlzaExhYmVsS2V5ID0gXCJEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbi5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkUGVybWlzc2lvblNldHNPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5OYW1lID0gXCJBZGRQZXJtaXNzaW9uU2V0c09wdGlvbnNcIlxyXG4gICAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIlxyXG4gICAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0c0xpc3RcclxuICAgICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkUGVybWlzc2lvblNldHNPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXRzT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkSXNIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkSXNIaWRkZW4uTmFtZSA9IFwiQWRkSXNIaWRkZW5cIlxyXG4gICAgICB0aGlzLkFkZElzSGlkZGVuLkxhYmVsS2V5ID0gXCJIaWRkZW5cIlxyXG4gICAgICB0aGlzLkFkZElzSGlkZGVuLlZhbHVlID0gZmFsc2VcclxuXHJcbiAgICAgIHRoaXMuQWRkTG9nbyA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRMb2dvLk5hbWUgPSBcIkFkZExvZ29cIlxyXG4gICAgICB0aGlzLkFkZExvZ28uTGFiZWxLZXkgPSBcIkxvZ29cIlxyXG4gICAgICB0aGlzLkFkZExvZ28uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsXHJcbiAgICAgIHRoaXMuQWRkTG9nby5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gW0ltYWdlVHlwZS5JbWFnZVR5cGVzXVxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRIZWxwQ2VudGVyTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFkZEhlbHBDZW50ZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5BZGRIZWxwQ2VudGVyRm9ybS52YWx1ZTtcclxuXHJcbiAgICBsZXQgQWRkTW9kZWw6IEhlbHBDZW50ZXJJdGVtTW9kZWwgPSBuZXcgSGVscENlbnRlckl0ZW1Nb2RlbCgpO1xyXG4gICAgQWRkTW9kZWwuVGl0bGUuQXJhYmljID0gUmVzdWx0TW9kZWwuQWRkVGl0bGUuQXJhYmljVmFsdWU7XHJcbiAgICBBZGRNb2RlbC5UaXRsZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuQWRkVGl0bGUuRW5nbGlzaFZhbHVlO1xyXG4gICAgQWRkTW9kZWwuRGVzY3JpcHRpb24uQXJhYmljID0gUmVzdWx0TW9kZWwuQWRkRGVzY3JpcHRpb24uQXJhYmljVGV4dEFyZWFWYWx1ZTtcclxuICAgIEFkZE1vZGVsLkRlc2NyaXB0aW9uLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5BZGREZXNjcmlwdGlvbi5FbmdsaXNoVGV4dEFyZWFWYWx1ZTtcclxuICAgIGxldCBhcnIgPSBSZXN1bHRNb2RlbC5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnM7XHJcbiAgICBsZXQgcGVybWlzc2lvblNldHM6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCB0b051bWJlcnMgPSBhcnIgPT4gYXJyLm1hcChOdW1iZXIpO1xyXG4gICAgcGVybWlzc2lvblNldHMgPSB0b051bWJlcnMoYXJyKTtcclxuICAgIEFkZE1vZGVsLlBlcm1pc3Npb25TZXRJRHMgPSBSZXN1bHRNb2RlbC5BZGRQZXJtaXNzaW9uU2V0c09wdGlvbnMgIT0gbnVsbCA/IHBlcm1pc3Npb25TZXRzIDogbnVsbDtcclxuICAgIEFkZE1vZGVsLklzSGlkZGVuID0gUmVzdWx0TW9kZWwuQWRkSXNIaWRkZW47XHJcbiAgICBBZGRNb2RlbC5Mb2dvRmlsZURUTyA9IHtcclxuICAgICAgRmlsZUJhc2U2NDogUmVzdWx0TW9kZWxbXCJBZGRMb2dvXCJdLkZpbGVCYXNlNjQsXHJcbiAgICAgIE5hbWVXaXRoRXh0ZW5zaW9uOiBSZXN1bHRNb2RlbFtcIkFkZExvZ29cIl0uRmlsZU5hbWUsXHJcbiAgICAgIEZpbGVOYW1lOiBSZXN1bHRNb2RlbFtcIkFkZExvZ29cIl0uRmlsZU5hbWUsXHJcbiAgICAgIEZpbGVTaXplSW5NQjogUmVzdWx0TW9kZWxbXCJBZGRMb2dvXCJdLkZpbGVTaXplSW5NQixcclxuICAgICAgRmlsZVR5cGU6IFJlc3VsdE1vZGVsW1wiQWRkTG9nb1wiXS5GaWxlVHlwZVxyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEFkZE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkSGVscENlbnRlckZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkhlbHBDZW50ZXJTZXJ2aWNlLkFkZEhlbHBDZW50ZXIoQWRkTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL0VkaXQgSGVscENlbnRlciBJdGVtXHJcbiAgc2hvd0VkaXRIZWxwQ2VudGVyTW9kYWwoaGVscENlbnRlcklEOiBudW1iZXIsIGhlbHBDZW50ZXJJREVuYzogc3RyaW5nLCBFZGl0SGVscENlbnRlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLkhlbHBDZW50ZXJJdGVtSWQgPSBoZWxwQ2VudGVySUQ7XHJcbiAgICB0aGlzLkhlbHBDZW50ZXJTZXJ2aWNlLmdldEVkaXRIZWxwQ2VudGVyRGF0YShoZWxwQ2VudGVySURFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgaGVscENlbnRlciA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRzTGlzdCA9IGxpc3RzLnBlcm1pc3Npb25TZXRzO1xyXG5cclxuICAgICAgdGhpcy5FZGl0SGVscENlbnRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG4gICAgICB0aGlzLkVkaXRIZWxwQ2VudGVyRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SGVscENlbnRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRWRpdEhlbHBDZW50ZXJGb3JtXHJcbiAgICAgIHRoaXMuRWRpdEhlbHBDZW50ZXJGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0SGVscENlbnRlck1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRIZWxwQ2VudGVyRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0SGVscENlbnRlckZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkVkaXRIZWxwQ2VudGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcbiAgICAgIHRoaXMuRWRpdEhlbHBDZW50ZXJGb3JtT3B0aW9ucy5QYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGVcclxuXHJcbiAgICAgIGxldCBUaXRsZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIFRpdGxlLkFyYWJpYyA9IGhlbHBDZW50ZXIudGl0bGUuYXJhYmljO1xyXG4gICAgICBUaXRsZS5FbmdsaXNoID0gaGVscENlbnRlci50aXRsZS5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VGl0bGUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VGl0bGUuTmFtZSA9IFwiRWRpdFRpdGxlXCI7XHJcbiAgICAgIHRoaXMuRWRpdFRpdGxlLkFyYWJpY0xhYmVsS2V5ID0gXCJUaXRsZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuRWRpdFRpdGxlLkVuZ2xpc2hMYWJlbEtleSA9IFwiVGl0bGVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0VGl0bGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFRpdGxlLlZhbHVlID0gVGl0bGU7XHJcbiBcclxuXHJcbiAgICAgIGxldCBEZXNjcmlwdGlvbiA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIERlc2NyaXB0aW9uLkFyYWJpYyA9IGhlbHBDZW50ZXIuZGVzY3JpcHRpb24uYXJhYmljO1xyXG4gICAgICBEZXNjcmlwdGlvbi5FbmdsaXNoID0gaGVscENlbnRlci5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24gPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk5hbWUgPSBcIkVkaXREZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5FbmdsaXNoTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLlZhbHVlID0gRGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG5cclxuXHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWRQZXJtaXNzaW9uTGlzdCA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaGVscENlbnRlci5wZXJtaXNzaW9uU2V0SURzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFBlcm1pc3Npb24gPSB0aGlzLlBlcm1pc3Npb25TZXRzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBoZWxwQ2VudGVyLnBlcm1pc3Npb25TZXRJRHNbaW5kZXhdOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgICBzZWxlY3RlZFBlcm1pc3Npb25MaXN0LnB1c2goUGVybWlzc2lvbik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMuTmFtZSA9IFwiRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9uc1wiXHJcbiAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9ucy5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIlxyXG4gICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMuRGF0YVNvdXJjZSA9IHRoaXMuUGVybWlzc2lvblNldHNMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXRzT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFBlcm1pc3Npb25MaXN0O1xyXG5cclxuICAgICAgdGhpcy5FZGl0SXNIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdElzSGlkZGVuLk5hbWUgPSBcIkVkaXRJc0hpZGRlblwiXHJcbiAgICAgIHRoaXMuRWRpdElzSGlkZGVuLkxhYmVsS2V5ID0gXCJIaWRkZW5cIlxyXG4gICAgICB0aGlzLkVkaXRJc0hpZGRlbi5WYWx1ZSA9IGhlbHBDZW50ZXIuaXNIaWRkZW5cclxuXHJcbiAgICAgIHRoaXMuRWRpdExvZ28gPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdExvZ28uTmFtZSA9IFwiRWRpdExvZ29cIlxyXG4gICAgICB0aGlzLkVkaXRMb2dvLkxhYmVsS2V5ID0gXCJMb2dvXCJcclxuICAgICAgdGhpcy5FZGl0TG9nby5Jc1JlcXVpcmVkID0gZmFsc2VcclxuICAgICAgdGhpcy5FZGl0TG9nby5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gW0ltYWdlVHlwZS5JbWFnZVR5cGVzXVxyXG4gICAgICB0aGlzLkVkaXRMb2dvLlZhbHVlID0gaGVscENlbnRlci5sb2dvRmlsZURUT1xyXG4gICAgICB0aGlzLkVkaXRMb2dvRmlsZUlEID0gaGVscENlbnRlci5sb2dvRmlsZUlEO1xyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0SGVscENlbnRlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0SGVscENlbnRlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRIZWxwQ2VudGVyRm9ybS52YWx1ZTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgSGVscENlbnRlckl0ZW1Nb2RlbCgpO1xyXG4gICAgRWRpdE1vZGVsLklEID0gTnVtYmVyKHRoaXMuSGVscENlbnRlckl0ZW1JZCk7XHJcbiAgICBFZGl0TW9kZWwuVGl0bGUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkVkaXRUaXRsZS5FbmdsaXNoVmFsdWU7IC8vKCMjMSlcclxuICAgIEVkaXRNb2RlbC5UaXRsZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FZGl0VGl0bGUuQXJhYmljVmFsdWU7XHJcbiAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvbi5FbmdsaXNoVGV4dEFyZWFWYWx1ZVxyXG4gICAgRWRpdE1vZGVsLkRlc2NyaXB0aW9uLkFyYWJpYyA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvbi5BcmFiaWNUZXh0QXJlYVZhbHVlXHJcbiAgICBFZGl0TW9kZWwuSXNIaWRkZW4gPSBSZXN1bHRNb2RlbC5FZGl0SXNIaWRkZW47XHJcbiAgICBFZGl0TW9kZWwuTG9nb0ZpbGVEVE8gPSBSZXN1bHRNb2RlbC5FZGl0TG9nbyA9PSBcIlwiID8gbnVsbCA6IFJlc3VsdE1vZGVsLkVkaXRMb2dvO1xyXG4gICAgRWRpdE1vZGVsLkxvZ29GaWxlSUQgPSB0aGlzLkVkaXRMb2dvRmlsZUlEO1xyXG4gICAgbGV0IElkcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFJlc3VsdE1vZGVsLkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBSZXN1bHRNb2RlbC5FZGl0UGVybWlzc2lvblNldHNPcHRpb25zW2luZGV4XTtcclxuICAgICAgSWRzLnB1c2goTnVtYmVyKGVsZW1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBFZGl0TW9kZWwuUGVybWlzc2lvblNldElEcyA9IElkcztcclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0SGVscENlbnRlckZ1bmN0aW9uID0gKEVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5IZWxwQ2VudGVyU2VydmljZS5FZGl0SGVscENlbnRlcihFZGl0TW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL0RlbGV0ZSBIZWxwQ2VudGVyXHJcbiAgc2hvd0RlbGV0ZUhlbHBDZW50ZXJNb2RhbChoZWxwQ2VudGVySUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVIZWxwQ2VudGVySWQgPSBoZWxwQ2VudGVySUQ7XHJcblxyXG4gICAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKHRoaXMuZGVsZXRlSGVscENlbnRlcklkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVIZWxwQ2VudGVyO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSGVscENlbnRlciA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkhlbHBDZW50ZXJTZXJ2aWNlLkRlbGV0ZUhlbHBDZW50ZXIoaWQpO1xyXG4gIH1cclxuXHJcbiAgLy9HZW5lcmF0ZSBDb2RlXHJcbiAgc2hvd0dlbmVyYXRlQ29kZU1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKXtcclxuICAgIHRoaXMuSGVscENlbnRlclNlcnZpY2UuR2VuZXJhdGVDb2RlKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IENvZGUgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuTmFtZSA9IFwiR2VuZXJhdGVkQ29kZU9wdGlvbnNcIjtcclxuICAgICAgdGhpcy5HZW5lcmF0ZWRDb2RlT3B0aW9ucy5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlZENvZGVPcHRpb25zLk1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuVmFsdWUgPSBDb2RlLnRleHQ7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVkQ29kZU9wdGlvbnMuRW5hYmxlQ29weVRvQ2xpcGJvYXJkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5HZW5lcmF0ZWRDb2RlT3B0aW9ucy5BdHRyaWJ1dGVMaXN0ID0gW3sgS2V5OiBcInJvd3NcIiwgdmFsdWU6IFwiMjBcIiB9XTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUNvZGVNb2RhbCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vT24gZGVzdHJveVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcbjwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG48ZGl2ICpuZ0lmPVwiU2hvd1BhZ2VDb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWN1c3RvbS1oXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkhlbHBDZW50ZXJGb3JtXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IChPbkNoYW5nZSk9XCJzZWFyY2hDbGllbnRTaWRlKCRldmVudClcIiBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cIkhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiAoY2xpY2spPVwic2hvd0dlbmVyYXRlQ29kZU1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2RlXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9IZWxwQ2VudGVyL1ByZXZpZXcnXVwiXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV5ZVwiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJldmlld1wiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgbWUtM1wiIChjbGljayk9XCJzaG93QWRkSGVscENlbnRlck1vZGFsKEFkZEhlbHBDZW50ZXJNb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8IS0tYmVnaW46OkFjdGl2ZURpcmVjdG9yeSBsaXN0LS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRpdGxlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVzY3JpcHRpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQZXJtaXNzaW9uU2V0c1wiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweCB0ZXh0LWNlbnRlclwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZpc2libGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBweCB0ZXh0LWNlbnRlclwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBJdGVtIG9mIGNsaWVudFNpZGVQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiU2F2ZU5hbWUoSXRlbS50aXRsZVN0cilcIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9IZWxwQ2VudGVyL1NlY29uZExldmVsJyxJdGVtLmlkRW5jcnlwdGVkXVwiIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtZGFya1wiPnt7SXRlbS50aXRsZVN0cn19PC9hPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdj57e0l0ZW0uZGVzY3JpcHRpb25TdHJ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPiB7e0l0ZW0ucGVybWlzc2lvbnNTdHJ9fSA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIkl0ZW0uaXNIaWRkZW47ZWxzZSBvdGhlcl9jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVyX2NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdEhlbHBDZW50ZXJNb2RhbChJdGVtLmlkLEl0ZW0uaWRFbmNyeXB0ZWQsRWRpdEhlbHBDZW50ZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIGlkPVwiYnRuUmVzZXRQYXNzXCIgKGNsaWNrKT1cInNob3dEZWxldGVIZWxwQ2VudGVyTW9kYWwoSXRlbS5pZEVuY3J5cHRlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImNsaWVudFNpZGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRIZWxwQ2VudGVySXRlbUxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJIZWxwQ2VudGVyUGFnaW5nXCJcclxuICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJIZWxwQ2VudGVyRm9ybVwiICNIZWxwQ2VudGVyUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIEZpbHRlciBXcmFwcGVyIC0tPlxyXG4gIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG48L2Rpdj5cclxuXHJcbjwhLS1BZGQgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNBZGRIZWxwQ2VudGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhlbHBDZW50ZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiQWRkSGVscENlbnRlckZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkFkZFRpdGxlXCIgW2dyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhIFtvcHRpb25zXT1cIkFkZERlc2NyaXB0aW9uXCIgW2dyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkUGVybWlzc2lvblNldHNPcHRpb25zXCIgW2dyb3VwXT1cIkFkZEhlbHBDZW50ZXJGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUltYWdlVXBsb2FkIFtvcHRpb25zXT1cIkFkZExvZ29cIiBbZ3JvdXBdPVwiQWRkSGVscENlbnRlckZvcm1cIj5cclxuXHJcbiAgICAgICAgICA8L0JCU0YtSW1hZ2VVcGxvYWQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiQWRkSXNIaWRkZW5cIiBbZ3JvdXBdPVwiQWRkSGVscENlbnRlckZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VIZWxwQ2VudGVyTW9kYWwgaWQ9XCJDbG9zZUFkZEhlbHBDZW50ZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS1FZGl0IE1vZGFsLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdEhlbHBDZW50ZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhlbHBDZW50ZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdEhlbHBDZW50ZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VGl0bGVcIiBbZ3JvdXBdPVwiRWRpdEhlbHBDZW50ZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhIFtvcHRpb25zXT1cIkVkaXREZXNjcmlwdGlvblwiIFtncm91cF09XCJFZGl0SGVscENlbnRlckZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRQZXJtaXNzaW9uU2V0c09wdGlvbnNcIiBbZ3JvdXBdPVwiRWRpdEhlbHBDZW50ZXJGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUltYWdlVXBsb2FkIFtvcHRpb25zXT1cIkVkaXRMb2dvXCIgW2dyb3VwXT1cIkVkaXRIZWxwQ2VudGVyRm9ybVwiPlxyXG5cclxuICAgICAgICAgIDwvQkJTRi1JbWFnZVVwbG9hZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJFZGl0SXNIaWRkZW5cIiBbZ3JvdXBdPVwiRWRpdEhlbHBDZW50ZXJGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdEhlbHBDZW50ZXJNb2RhbCBpZD1cIkNsb3NlRWRpdEhlbHBDZW50ZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS1kZWxldGUgTW9kYWwtLT5cclxuPEJCU0YtQ29uZmlybWF0aW9uTW9kYWwgKm5nSWY9XCJkZWxldGVDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwiRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uc1wiIGlkPVwiQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCIgI0NvbmZpcm1hdGlvbk1vZGFsQ29udHJvbD48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcbjwhLS1HZW5lcmF0ZSBjb2RlIE1vZGFsLS0+XHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJhdGVDb2RlTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlQ29kZVwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJHZW5lcmF0ZUNvZGVGb3JtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJHZW5lcmF0ZWRDb2RlT3B0aW9uc1wiIFtncm91cF09XCJHZW5lcmF0ZUNvZGVGb3JtXCIgI0dlbmVyYXRlQ29kZUlucHV0PlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZUdlbmVyYXRlQ29kZU1vZGFsIGlkPVwiQ2xvc2VHZW5lcmF0ZUNvZGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29weVRvQ2xpcGJvYXJkXCIpfX08L2J1dHRvbj4gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4iXX0=