vcomply-workflow-engine 3.2.2 → 3.2.3

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 (38) hide show
  1. package/esm2020/lib/more-option/more-option.component.mjs +10 -11
  2. package/esm2020/lib/workflow/grc-object/grc-object-container/grc-object-container.component.mjs +78 -6
  3. package/esm2020/lib/workflow/shared/components/attributes/attributes-text-box/attributes-text-box.component.mjs +1 -1
  4. package/esm2020/lib/workflow/shared/components/attributes/attributes.component.mjs +1 -1
  5. package/esm2020/lib/workflow/shared/components/edit-mode/edit-mode.component.mjs +32 -10
  6. package/esm2020/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.mjs +18 -3
  7. package/esm2020/lib/workflow/shared/components/grc-responsibility-listing/grc-responsibility-listing.component.mjs +62 -60
  8. package/esm2020/lib/workflow/shared/components/grc-risk-listing/grc-risk-listing.component.mjs +191 -0
  9. package/esm2020/lib/workflow/shared/components/grc-sub-category-listing/grc-sub-category-listing.component.mjs +77 -11
  10. package/esm2020/lib/workflow/shared/components/list-popup/list-popup.component.mjs +24 -2
  11. package/esm2020/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.mjs +393 -0
  12. package/esm2020/lib/workflow/shared/components/risk-category-risk-listing/risk-category-risk-listing.component.mjs +5 -5
  13. package/esm2020/lib/workflow/shared/constants/field-text.constant.mjs +3 -1
  14. package/esm2020/lib/workflow/shared/constants/link-responsibility.constant.mjs +19 -0
  15. package/esm2020/lib/workflow/shared/interfaces/add-grc.mjs +1 -1
  16. package/esm2020/lib/workflow/shared/services/grc.service.mjs +83 -1
  17. package/esm2020/lib/workflow-engine.module.mjs +2 -5
  18. package/esm2020/lib/workflow-grc/workflow-grc.component.mjs +2 -2
  19. package/esm2020/lib/workflow-policy/workflow-policy.component.mjs +2 -2
  20. package/fesm2015/vcomply-workflow-engine.mjs +910 -57
  21. package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
  22. package/fesm2020/vcomply-workflow-engine.mjs +894 -55
  23. package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
  24. package/lib/workflow/grc-object/grc-object-container/grc-object-container.component.d.ts +8 -1
  25. package/lib/workflow/shared/components/attributes/attributes-text-box/attributes-text-box.component.d.ts +2 -0
  26. package/lib/workflow/shared/components/edit-mode/edit-mode.component.d.ts +2 -1
  27. package/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.d.ts +5 -1
  28. package/lib/workflow/shared/components/grc-responsibility-listing/grc-responsibility-listing.component.d.ts +11 -9
  29. package/lib/workflow/shared/components/grc-risk-listing/grc-risk-listing.component.d.ts +35 -0
  30. package/lib/workflow/shared/components/grc-sub-category-listing/grc-sub-category-listing.component.d.ts +17 -2
  31. package/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.d.ts +76 -0
  32. package/lib/workflow/shared/components/risk-category-risk-listing/risk-category-risk-listing.component.d.ts +2 -2
  33. package/lib/workflow/shared/constants/field-text.constant.d.ts +2 -0
  34. package/lib/workflow/shared/constants/link-responsibility.constant.d.ts +7 -0
  35. package/lib/workflow/shared/interfaces/add-grc.d.ts +3 -1
  36. package/lib/workflow/shared/services/grc.service.d.ts +10 -0
  37. package/lib/workflow-engine.module.d.ts +32 -33
  38. package/package.json +1 -1
@@ -0,0 +1,393 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, ViewChild, } from '@angular/core';
3
+ import { FloatingBarModule } from '../../../../sharedComponents/floating-bar/floating-bar.module';
4
+ import { FormgroupModule } from '../../../../ui-kit/formgroup/formgroup.module';
5
+ import { PaginationModule } from '../../../../ui-kit/pagination/pagination.module';
6
+ import { PopoverModule } from '../../../../ui-kit/popover/popover.module';
7
+ import { TooltipModule } from '../../../../ui-kit/tooltip/tooltip.module';
8
+ import { TableCardComponent } from '../table-card/table-card.component';
9
+ import { GrcCategoryListingComponent } from '../grc-category-listing/grc-category-listing.component';
10
+ import { GrcResponsibilityListingComponent } from '../grc-responsibility-listing/grc-responsibility-listing.component';
11
+ import { NoDataModule } from '../../../../ui-kit/no-data/no-data.module';
12
+ import { ListLoaderModule } from '../../../../sharedComponents/list-loader/list-loader.module';
13
+ import { GrcSubCategoryListingComponent } from '../grc-sub-category-listing/grc-sub-category-listing.component';
14
+ import { RESPONSIBILITY_TABLE_CARD } from '../../constants/link-responsibility.constant';
15
+ import { TableCardLoaderComponent } from '../../../../sharedComponents/table-card-loader/table-card-loader.component';
16
+ import { HttpParams } from '@angular/common/http';
17
+ import { LINKS } from '../../constants/cdn-link.constant';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "../../services/grc.service";
20
+ import * as i2 from "@angular/common";
21
+ import * as i3 from "../../../../sharedComponents/floating-bar/floating-bar.component";
22
+ import * as i4 from "../../../../sharedComponents/list-loader/list-loader.component";
23
+ import * as i5 from "../../../../ui-kit/no-data/no-data.component";
24
+ export class ProgramResponsibilityListingComponent {
25
+ constructor(grcService) {
26
+ this.grcService = grcService;
27
+ this.programTypes = RESPONSIBILITY_TABLE_CARD;
28
+ this.CDN_LINK = LINKS;
29
+ this.selectedTab = 1;
30
+ this.animation = false;
31
+ this.programLoader = false;
32
+ this.programCountLoader = false;
33
+ this.responsibilityLoader = false;
34
+ this.categoryLoader = false;
35
+ this.selectedProgramAndResp = [];
36
+ this.preSelectedProgramAndResp = [];
37
+ this.searchString = '';
38
+ this.programCurrentPage = 1;
39
+ this.categoryCurrentPage = 1;
40
+ this.responsibilityCurrentPage = 1;
41
+ this.responsibilityData = {
42
+ data: [],
43
+ };
44
+ this.selectedProgramIds = [];
45
+ this.selectedCategoryIds = [];
46
+ this.selectedResponsibilities = [];
47
+ this.closeList = new EventEmitter();
48
+ this.currentBusinessCycle = this.grcService?.getBusinessCycle();
49
+ }
50
+ set getSelectedProgramAndResp(data) {
51
+ this.selectedProgramAndResp = data || [];
52
+ this.preSelectedProgramAndResp = JSON.parse(JSON.stringify(data));
53
+ this.getSelectedProgramIds(this.selectedProgramAndResp);
54
+ this.getAllSelectedResponsibilities(this.selectedProgramAndResp);
55
+ }
56
+ ngOnInit() {
57
+ this.animation = true;
58
+ setTimeout(() => {
59
+ this.animation = false;
60
+ }, 300);
61
+ this.getProgramsList();
62
+ this.getProgramsCount();
63
+ }
64
+ close() {
65
+ this.closeList.emit(this.preSelectedProgramAndResp);
66
+ }
67
+ save() {
68
+ this.closeList.emit(this.selectedProgramAndResp);
69
+ }
70
+ getProgramsList(event) {
71
+ if (this.programCall) {
72
+ this.programCall.unsubscribe();
73
+ }
74
+ this.programLoader = true;
75
+ const request = {
76
+ headers: {
77
+ type: '',
78
+ paginationType: 'small',
79
+ a: '',
80
+ searchText: this.searchString,
81
+ filterData: {
82
+ appList: [],
83
+ riskIds: [],
84
+ reviewerId: [],
85
+ responsibilityCenter: [],
86
+ entrustedBy: [],
87
+ entrustedTo: [],
88
+ responsibilityCategory: [],
89
+ },
90
+ pageNo: this.programCurrentPage || 1,
91
+ sortObj: { sortBy: '', type: -1 },
92
+ pageName: 'category',
93
+ typeArr: [this.selectedTab],
94
+ start_date: this.currentBusinessCycle?.start_date,
95
+ end_date: this.currentBusinessCycle?.end_date,
96
+ selected_cycle_arr: this.currentBusinessCycle?.selected_cycle_arr,
97
+ selected_cycle: this.currentBusinessCycle?.selected_cycle,
98
+ time_filter_type: '',
99
+ state: [2, 3],
100
+ },
101
+ };
102
+ this.programCall = this.grcService.getProgramsList(request).subscribe({
103
+ next: (res) => {
104
+ this.programLoader = false;
105
+ // this.programData.data = res.data ?? [];
106
+ this.programData = { ...res };
107
+ this.onSelectedProgramChange();
108
+ this.getCategoryByProgramId(res?.data[0]);
109
+ },
110
+ error: (err) => {
111
+ this.programLoader = false;
112
+ },
113
+ });
114
+ }
115
+ onProgramPageChange(event) {
116
+ this.programCurrentPage = event?.pageNo || 1;
117
+ this.getProgramsList();
118
+ }
119
+ onSubCategoryPageChange(event) {
120
+ this.categoryCurrentPage = event?.pageNo || 1;
121
+ this.getCategoryByProgramId(this.selectedProgram);
122
+ }
123
+ deleteEvent(event) {
124
+ this.responsibilityListingComponent.deleteSelectedResponsibility(event);
125
+ }
126
+ setSelectedTab(event) {
127
+ this.programCurrentPage = 1;
128
+ this.selectedTab = event?.type;
129
+ this.getProgramsList();
130
+ }
131
+ handleSearch(event) {
132
+ if (this.searchString != event) {
133
+ this.programCurrentPage = 1;
134
+ this.searchString = event;
135
+ this.onSelectedProgramChange();
136
+ this.getProgramsList();
137
+ this.getProgramsCount();
138
+ }
139
+ }
140
+ getProgramsCount(paramsObject) {
141
+ this.programCountLoader = true;
142
+ const request = {
143
+ headers: {
144
+ type: '',
145
+ paginationType: 'small',
146
+ a: '',
147
+ searchText: this.searchString,
148
+ filterData: {
149
+ appList: [],
150
+ riskIds: [],
151
+ reviewerId: [],
152
+ responsibilityCenter: [],
153
+ entrustedBy: [],
154
+ entrustedTo: [],
155
+ responsibilityCategory: [],
156
+ },
157
+ pageNo: 1,
158
+ sortObj: { sortBy: '', type: '' },
159
+ pageName: 'category',
160
+ typeArr: [1, 2, 3, 0],
161
+ start_date: this.currentBusinessCycle?.start_date,
162
+ end_date: this.currentBusinessCycle?.end_date,
163
+ selected_cycle_arr: this.currentBusinessCycle?.selected_cycle_arr,
164
+ selected_cycle: this.currentBusinessCycle?.selected_cycle,
165
+ time_filter_type: '',
166
+ state: [2, 3],
167
+ },
168
+ };
169
+ this.grcService.getProgramsListCount(request).subscribe({
170
+ next: (res) => {
171
+ this.programCountLoader = false;
172
+ this.programTypes[0].count =
173
+ res?.regulationCount?.active + res?.regulationCount?.completed;
174
+ this.programTypes[1].count =
175
+ res?.standardCount?.active + res?.standardCount?.completed;
176
+ this.programTypes[2].count =
177
+ res?.internalCount?.active + res?.internalCount?.completed;
178
+ this.programTypes[3].count =
179
+ res?.otherCount?.active + res?.otherCount?.completed;
180
+ // }
181
+ },
182
+ });
183
+ }
184
+ getCategoryByProgramId(program) {
185
+ if (this.categoryCall) {
186
+ this.categoryCall.unsubscribe();
187
+ }
188
+ this.selectedProgram = program;
189
+ this.categoryLoader = true;
190
+ // this.resetControlVariable();
191
+ const headers = {
192
+ id: program?._id,
193
+ scopeType: 'risk',
194
+ paginationType: 'small',
195
+ searchText: this.searchString,
196
+ filterData: {
197
+ appList: [],
198
+ riskIds: [],
199
+ reviewerId: [],
200
+ responsibilityCenter: [],
201
+ entrustedBy: [],
202
+ entrustedTo: [],
203
+ responsibilityCategory: [],
204
+ },
205
+ page: this.categoryCurrentPage || 1,
206
+ // sortingCount: this.categorySortValue,
207
+ name: 'name',
208
+ businessCycle: {
209
+ start_date: this.currentBusinessCycle?.start_date,
210
+ end_date: this.currentBusinessCycle?.end_date,
211
+ selected_cycle_arr: this.currentBusinessCycle?.selected_cycle_arr,
212
+ selected_cycle: this.currentBusinessCycle?.selected_cycle,
213
+ time_filter_type: '',
214
+ // "scopeType": 'risk',
215
+ type: 'risk',
216
+ filterData: {
217
+ appList: [],
218
+ riskIds: [],
219
+ reviewerId: [],
220
+ responsibilityCenter: [],
221
+ entrustedBy: [],
222
+ entrustedTo: [],
223
+ responsibilityCategory: [],
224
+ },
225
+ },
226
+ };
227
+ this.categoryCall = this.grcService.getSubCategoryList(headers).subscribe({
228
+ next: (res) => {
229
+ this.categoryLoader = false;
230
+ this.categoryData = { ...res };
231
+ this.selectedCategory = res?.data[0];
232
+ this.responsibilityCurrentPage = 1;
233
+ this.getResponsibilitiesList();
234
+ },
235
+ error: (err) => {
236
+ console.error(err);
237
+ this.categoryLoader = false;
238
+ },
239
+ });
240
+ }
241
+ activeSelectedProgram(event) {
242
+ this.selectedProgram = event?.category;
243
+ this.onSelectedProgramChange();
244
+ this.getCategoryByProgramId(this.selectedProgram);
245
+ // this.getSelectedCategoryIds(this.selectedProgramAndResp);
246
+ }
247
+ activeSelectedSubCategory(event) {
248
+ this.selectedCategory = event?.category;
249
+ this.getResponsibilitiesList();
250
+ }
251
+ getResponsibilitiesList(event) {
252
+ if (this.responsibilityCall) {
253
+ this.responsibilityCall.unsubscribe();
254
+ }
255
+ // this.respCount = event.sortValue;
256
+ this.responsibilityLoader = true;
257
+ let params = new HttpParams();
258
+ params = params.append('isBusinessCycle', 'true');
259
+ params = params.append('parentId', this.selectedProgram?.category_id);
260
+ params = params.append('catId', this.selectedCategory?.category_id);
261
+ params = params.append('pageNo', this.responsibilityCurrentPage ?? 1);
262
+ // if ([1, -1].includes(this.controlSortValue)) {
263
+ // params = params.append('sortValue', this.controlSortValue);
264
+ // params = params.append('sortBy', 'Data.ReportName');
265
+ // }
266
+ params = params.append('paginationType', 'small');
267
+ params = params.append('pageType', 'risk');
268
+ let businessCycle = {
269
+ start_date: this.currentBusinessCycle?.start_date,
270
+ end_date: this.currentBusinessCycle?.end_date,
271
+ selected_cycle_arr: this.currentBusinessCycle?.selected_cycle_arr,
272
+ selected_cycle: this.currentBusinessCycle?.selected_cycle,
273
+ time_filter_type: '',
274
+ pageType: 'risk',
275
+ filterData: {
276
+ appList: [],
277
+ riskIds: [],
278
+ reviewerId: [],
279
+ responsibilityCenter: [],
280
+ entrustedBy: [],
281
+ entrustedTo: [],
282
+ responsibilityCategory: [],
283
+ },
284
+ };
285
+ this.responsibilityCall = this.grcService
286
+ .getResponsibilityByCategoryId(params, businessCycle)
287
+ .subscribe({
288
+ next: (res) => {
289
+ this.categoryLoader = false;
290
+ this.responsibilityData = res;
291
+ this.responsibilityData['data'] = this.setDataListStructure(res?.data);
292
+ this.responsibilityLoader = false;
293
+ },
294
+ error: (err) => {
295
+ this.responsibilityLoader = false;
296
+ },
297
+ });
298
+ }
299
+ getUpdatedDataList(event) {
300
+ this.responsibilityCurrentPage = event?.pageNo;
301
+ this.getResponsibilitiesList();
302
+ }
303
+ setDataListStructure(res) {
304
+ const data = res?.map((responsibility) => {
305
+ return {
306
+ ...responsibility,
307
+ name: responsibility?.ReportName,
308
+ controlId: responsibility?.ControlId,
309
+ _id: responsibility?.EncryptedReportId,
310
+ entrustedBy: {
311
+ name: responsibility?.AssignBy,
312
+ email: responsibility?.AssignByEmail,
313
+ profilePic: responsibility?.member_pic ?? '',
314
+ shortName: responsibility?.member_short_name,
315
+ },
316
+ entrustedTo: {
317
+ name: responsibility?.AssignTo,
318
+ email: responsibility?.AssignTo,
319
+ profilePic: responsibility?.employee_pic ?? '',
320
+ shortName: responsibility?.employee_short_name,
321
+ EntrustedToMembers: responsibility?.EntrustedToMembers,
322
+ },
323
+ withinData: responsibility?.RC_details_array?.map((within) => {
324
+ return {
325
+ name: within?.rc_name,
326
+ };
327
+ }),
328
+ };
329
+ });
330
+ return data;
331
+ }
332
+ onSelectedProgramChange() {
333
+ this.categoryCurrentPage = 1;
334
+ this.responsibilityCurrentPage = 1;
335
+ }
336
+ changeSelectedProgramAndResp(event) {
337
+ this.selectedProgramAndResp = event;
338
+ this.getSelectedProgramIds(this.selectedProgramAndResp);
339
+ this.getAllSelectedResponsibilities(this.selectedProgramAndResp);
340
+ // this.getSelectedCategoryIds(this.selectedProgramAndResp);
341
+ }
342
+ getSelectedProgramIds(selectedData) {
343
+ this.selectedProgramIds = [];
344
+ selectedData?.forEach((selected) => {
345
+ this.selectedCategoryIds = selected?.category;
346
+ this.selectedProgramIds.push(selected?.program?.programId);
347
+ });
348
+ }
349
+ getSelectedCategoryIds(selectedData) {
350
+ this.selectedCategoryIds = [];
351
+ let programIndex = -1;
352
+ programIndex = selectedData.findIndex((cat) => cat?.program?.programId === this.selectedProgram?.programId);
353
+ if (programIndex !== -1) {
354
+ this.selectedCategoryIds = selectedData[programIndex]?.category;
355
+ }
356
+ else {
357
+ this.selectedCategoryIds = [];
358
+ }
359
+ }
360
+ getAllSelectedResponsibilities(selectedData) {
361
+ this.selectedResponsibilities = [];
362
+ selectedData.forEach((item) => {
363
+ this.selectedResponsibilities.push(...item?.responsibility);
364
+ });
365
+ }
366
+ }
367
+ ProgramResponsibilityListingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgramResponsibilityListingComponent, deps: [{ token: i1.GrcService }], target: i0.ɵɵFactoryTarget.Component });
368
+ ProgramResponsibilityListingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ProgramResponsibilityListingComponent, isStandalone: true, selector: "app-program-responsibility-listing", inputs: { getSelectedProgramAndResp: ["selectedProgramAndResp", "getSelectedProgramAndResp"] }, outputs: { closeList: "closeList" }, viewQueries: [{ propertyName: "responsibilityListingComponent", first: true, predicate: ["dataListing"], descendants: true }], ngImport: i0, template: "<div class=\"program-responsibility-listing\" [class.animate]=\"animation\">\r\n <div class=\"program-responsibility-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <h3 class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Select Responsibilities</h3></div>\r\n <div class=\"program-responsibility-listing-body\">\r\n <app-table-card-loader *ngIf=\"programCountLoader\"></app-table-card-loader>\r\n <app-table-card\r\n *ngIf=\"!programCountLoader\"\r\n class=\"vx-w-100\"\r\n [tableCard]=\"programTypes\"\r\n [singleSelectedText]=\"'Responsibility Selected'\"\r\n [selectedTab]=\"selectedTab\"\r\n [multipleSelectedText]=\"'Responsibilities Selected'\"\r\n (setSelectedTab)=\"setSelectedTab($event)\">\r\n </app-table-card>\r\n <div class=\"search-block vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchRiskCategory (keyup.enter)=\"handleSearch($event.target.value)\" placeholder=\"Search Programs\" />\r\n </div>\r\n <div class=\"program-responsibility-listing-body-inner vx-mb-2 vx-d-flex\" [class.vx-justify-center]=\"(!programLoader && !programData?.data?.length)\">\r\n <ng-container *ngIf=\"(programLoader || programData?.data?.length)\">\r\n <div class=\"inner-item-left vx-pr-2\">\r\n\r\n <app-grc-category-listing *ngIf=\"!programLoader\" [headerText]=\"'Programs'\" [programData]=\"programData\" [selectedCatAndRisk]=\"selectedCatAndRisk\" [nameDisplayKey]=\"'item_name'\" [currentPage]=\"programCurrentPage\" [selectedTabIndex]=\"selectedTab\" [selectedCategoryIds]=\"selectedProgramIds\" (activeSelectedCategory)=\"activeSelectedProgram($event)\" (onCategoryPageChange)=\"onProgramPageChange($event)\"></app-grc-category-listing>\r\n \r\n <app-list-loader *ngIf=\"programLoader\"></app-list-loader>\r\n\r\n </div>\r\n\r\n <div class=\"inner-item-mid vx-pr-2\">\r\n <app-grc-sub-category-listing *ngIf=\"!categoryLoader && !programLoader\" [headerText]=\"'Programs'\" [categories]=\"categoryData\" [nameDisplayKey]=\"'item_name'\" [currentPage]=\"categoryCurrentPage\" [selectedCategoryIds]=\"selectedCategoryIds\" [activeProgram]=\"selectedProgram\" [selectedProgramAndResp]=\"selectedProgramAndResp\" (activeSelectedCategory)=\"activeSelectedSubCategory($event)\" (onCategoryPageChange)=\"onSubCategoryPageChange($event)\"></app-grc-sub-category-listing>\r\n <app-list-loader *ngIf=\"categoryLoader || programLoader\"></app-list-loader>\r\n </div>\r\n\r\n <div class=\"inner-item-right\">\r\n <!-- <app-grc-responsibility-listing></app-grc-responsibility-listing> -->\r\n\r\n <app-grc-responsibility-listing #dataListing *ngIf=\"!responsibilityLoader && !categoryLoader && !programLoader && responsibilityData?.data?.length !== 0\" [headerText]=\"'Responsibilities'\" [responsibilityData]=\"responsibilityData\" [activeProgram]=\"selectedProgram\" [activeCategory]=\"selectedCategory\" [selectedProgramAndResp]=\"selectedProgramAndResp\" (changeSelectedProgramAndResp)=\"changeSelectedProgramAndResp($event)\" [currentPage]=\"responsibilityCurrentPage\" [perPageLimit]=\"30\" [totalListData]=\"responsibilityData?.total_items\" [totalPages]=\"responsibilityData?.total_pages\" (getUpdatedDataList)=\"getUpdatedDataList($event)\" ></app-grc-responsibility-listing>\r\n \r\n <app-list-loader *ngIf=\"responsibilityLoader || categoryLoader || programLoader\"></app-list-loader>\r\n \r\n <app-no-data *ngIf=\"responsibilityData?.data?.length === 0 && !(responsibilityLoader || categoryLoader || programLoader)\" [noDataImage]=\"CDN_LINK?.noData\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n </ng-container>\r\n <app-no-data *ngIf=\"(!programLoader && !programData?.data?.length)\" [noDataImage]=\"CDN_LINK?.noData\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n <app-floating-bar [selectedData]=\"selectedResponsibilities?.length ? selectedResponsibilities : []\" (closeList)=\"close()\" (closeEvent)=\"save()\" [displayElementKey]=\"'ReportName'\" [singularText]=\"'Responsibility selected'\" [pluralText]=\"'Responsibilities selected'\" (deleteEvent)=\"deleteEvent($event)\"></app-floating-bar>\r\n </div>\r\n</div>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .program-responsibility-listing{position:fixed;inset:0 30px 0 0}::ng-deep .program-responsibility-listing:before{background:#1E5DD3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .program-responsibility-listing.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-responsibility-listing-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .program-responsibility-listing-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .program-responsibility-listing-body .search-block{position:relative}::ng-deep .program-responsibility-listing-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .program-responsibility-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-responsibility-listing-body .search-block input::placeholder{color:#747576}::ng-deep .program-responsibility-listing-body .search-block i{position:absolute;left:1rem;font-size:12px;font-weight:400;top:1rem;pointer-events:none;color:#f1f1f1}::ng-deep .program-responsibility-listing-body-inner{height:calc(100vh - 17.5rem)}::ng-deep .program-responsibility-listing-body-inner .inner-item-left{width:25%}::ng-deep .program-responsibility-listing-body-inner .inner-item-mid{width:25%}::ng-deep .program-responsibility-listing-body-inner .inner-item-right{width:50%}@keyframes animate-right{0%{transform:translate(100%)}to{transform:translate(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "ngmodule", type: FormgroupModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: FloatingBarModule }, { kind: "component", type: i3.FloatingBarComponent, selector: "app-floating-bar", inputs: ["selectedData", "selectedGroups", "displayElementKey", "elementId", "singularText", "pluralText", "showNextButton", "showFrequencyText", "showWorkflow", "workflowText", "currentFrequency", "isDisabled", "workflowList", "selectedWorkflow", "workflowPlaceHolder", "mode", "defaultSelected", "groupsEnabled", "nonRemovableUsersList", "removePosition"], outputs: ["closeEvent", "deleteEvent", "closeList", "deleteGroupEvent", "workflowTypeChanged"] }, { kind: "ngmodule", type: PaginationModule }, { kind: "component", type: TableCardComponent, selector: "app-table-card", inputs: ["singleSelectedText", "multipleSelectedText", "selectedTab", "tableCard"], outputs: ["setSelectedTab"] }, { kind: "component", type: GrcCategoryListingComponent, selector: "app-grc-category-listing", inputs: ["tableCard", "headerText", "currentPage", "selectedTabIndex", "selectedCatAndRisk", "selectedCategoryIds", "categories", "programData"], outputs: ["activeSelectedCategory", "onCategoryPageChange"] }, { kind: "component", type: GrcResponsibilityListingComponent, selector: "app-grc-responsibility-listing", inputs: ["tableCard", "activeProgram", "headerText", "currentPage", "perPageLimit", "totalListData", "totalPages", "selectedListData", "selectedListDataIds", "responsibilityData", "selectedProgramAndResp"], outputs: ["getUpdatedDataList", "changeSelectedProgramAndResp"] }, { kind: "component", type: GrcSubCategoryListingComponent, selector: "app-grc-sub-category-listing", inputs: ["currentPage", "nameDisplayKey", "selectedCategoryIds", "activeProgram", "categories", "selectedProgramAndResp"], outputs: ["activeSelectedCategory", "onCategoryPageChange"] }, { kind: "ngmodule", type: ListLoaderModule }, { kind: "component", type: i4.ListLoaderComponent, selector: "app-list-loader" }, { kind: "ngmodule", type: NoDataModule }, { kind: "component", type: i5.NoDataComponent, selector: "app-no-data", inputs: ["action", "secondaryAction", "noDataImage", "noDataText", "noDataButton", "secondaryButton", "noDataSecButton", "altText", "smallButton"], outputs: ["buttonAction", "secondaryActionButton"] }, { kind: "component", type: TableCardLoaderComponent, selector: "app-table-card-loader" }] });
369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgramResponsibilityListingComponent, decorators: [{
370
+ type: Component,
371
+ args: [{ selector: 'app-program-responsibility-listing', standalone: true, imports: [
372
+ CommonModule,
373
+ PopoverModule,
374
+ FormgroupModule,
375
+ TooltipModule,
376
+ FloatingBarModule,
377
+ PaginationModule,
378
+ TableCardComponent,
379
+ GrcCategoryListingComponent,
380
+ GrcResponsibilityListingComponent,
381
+ GrcSubCategoryListingComponent,
382
+ ListLoaderModule,
383
+ NoDataModule,
384
+ TableCardLoaderComponent,
385
+ ], outputs: ['closeList'], template: "<div class=\"program-responsibility-listing\" [class.animate]=\"animation\">\r\n <div class=\"program-responsibility-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <h3 class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Select Responsibilities</h3></div>\r\n <div class=\"program-responsibility-listing-body\">\r\n <app-table-card-loader *ngIf=\"programCountLoader\"></app-table-card-loader>\r\n <app-table-card\r\n *ngIf=\"!programCountLoader\"\r\n class=\"vx-w-100\"\r\n [tableCard]=\"programTypes\"\r\n [singleSelectedText]=\"'Responsibility Selected'\"\r\n [selectedTab]=\"selectedTab\"\r\n [multipleSelectedText]=\"'Responsibilities Selected'\"\r\n (setSelectedTab)=\"setSelectedTab($event)\">\r\n </app-table-card>\r\n <div class=\"search-block vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchRiskCategory (keyup.enter)=\"handleSearch($event.target.value)\" placeholder=\"Search Programs\" />\r\n </div>\r\n <div class=\"program-responsibility-listing-body-inner vx-mb-2 vx-d-flex\" [class.vx-justify-center]=\"(!programLoader && !programData?.data?.length)\">\r\n <ng-container *ngIf=\"(programLoader || programData?.data?.length)\">\r\n <div class=\"inner-item-left vx-pr-2\">\r\n\r\n <app-grc-category-listing *ngIf=\"!programLoader\" [headerText]=\"'Programs'\" [programData]=\"programData\" [selectedCatAndRisk]=\"selectedCatAndRisk\" [nameDisplayKey]=\"'item_name'\" [currentPage]=\"programCurrentPage\" [selectedTabIndex]=\"selectedTab\" [selectedCategoryIds]=\"selectedProgramIds\" (activeSelectedCategory)=\"activeSelectedProgram($event)\" (onCategoryPageChange)=\"onProgramPageChange($event)\"></app-grc-category-listing>\r\n \r\n <app-list-loader *ngIf=\"programLoader\"></app-list-loader>\r\n\r\n </div>\r\n\r\n <div class=\"inner-item-mid vx-pr-2\">\r\n <app-grc-sub-category-listing *ngIf=\"!categoryLoader && !programLoader\" [headerText]=\"'Programs'\" [categories]=\"categoryData\" [nameDisplayKey]=\"'item_name'\" [currentPage]=\"categoryCurrentPage\" [selectedCategoryIds]=\"selectedCategoryIds\" [activeProgram]=\"selectedProgram\" [selectedProgramAndResp]=\"selectedProgramAndResp\" (activeSelectedCategory)=\"activeSelectedSubCategory($event)\" (onCategoryPageChange)=\"onSubCategoryPageChange($event)\"></app-grc-sub-category-listing>\r\n <app-list-loader *ngIf=\"categoryLoader || programLoader\"></app-list-loader>\r\n </div>\r\n\r\n <div class=\"inner-item-right\">\r\n <!-- <app-grc-responsibility-listing></app-grc-responsibility-listing> -->\r\n\r\n <app-grc-responsibility-listing #dataListing *ngIf=\"!responsibilityLoader && !categoryLoader && !programLoader && responsibilityData?.data?.length !== 0\" [headerText]=\"'Responsibilities'\" [responsibilityData]=\"responsibilityData\" [activeProgram]=\"selectedProgram\" [activeCategory]=\"selectedCategory\" [selectedProgramAndResp]=\"selectedProgramAndResp\" (changeSelectedProgramAndResp)=\"changeSelectedProgramAndResp($event)\" [currentPage]=\"responsibilityCurrentPage\" [perPageLimit]=\"30\" [totalListData]=\"responsibilityData?.total_items\" [totalPages]=\"responsibilityData?.total_pages\" (getUpdatedDataList)=\"getUpdatedDataList($event)\" ></app-grc-responsibility-listing>\r\n \r\n <app-list-loader *ngIf=\"responsibilityLoader || categoryLoader || programLoader\"></app-list-loader>\r\n \r\n <app-no-data *ngIf=\"responsibilityData?.data?.length === 0 && !(responsibilityLoader || categoryLoader || programLoader)\" [noDataImage]=\"CDN_LINK?.noData\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n </ng-container>\r\n <app-no-data *ngIf=\"(!programLoader && !programData?.data?.length)\" [noDataImage]=\"CDN_LINK?.noData\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n <app-floating-bar [selectedData]=\"selectedResponsibilities?.length ? selectedResponsibilities : []\" (closeList)=\"close()\" (closeEvent)=\"save()\" [displayElementKey]=\"'ReportName'\" [singularText]=\"'Responsibility selected'\" [pluralText]=\"'Responsibilities selected'\" (deleteEvent)=\"deleteEvent($event)\"></app-floating-bar>\r\n </div>\r\n</div>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .program-responsibility-listing{position:fixed;inset:0 30px 0 0}::ng-deep .program-responsibility-listing:before{background:#1E5DD3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .program-responsibility-listing.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-responsibility-listing-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .program-responsibility-listing-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .program-responsibility-listing-body .search-block{position:relative}::ng-deep .program-responsibility-listing-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .program-responsibility-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-responsibility-listing-body .search-block input::placeholder{color:#747576}::ng-deep .program-responsibility-listing-body .search-block i{position:absolute;left:1rem;font-size:12px;font-weight:400;top:1rem;pointer-events:none;color:#f1f1f1}::ng-deep .program-responsibility-listing-body-inner{height:calc(100vh - 17.5rem)}::ng-deep .program-responsibility-listing-body-inner .inner-item-left{width:25%}::ng-deep .program-responsibility-listing-body-inner .inner-item-mid{width:25%}::ng-deep .program-responsibility-listing-body-inner .inner-item-right{width:50%}@keyframes animate-right{0%{transform:translate(100%)}to{transform:translate(0)}}\n"] }]
386
+ }], ctorParameters: function () { return [{ type: i1.GrcService }]; }, propDecorators: { getSelectedProgramAndResp: [{
387
+ type: Input,
388
+ args: ['selectedProgramAndResp']
389
+ }], responsibilityListingComponent: [{
390
+ type: ViewChild,
391
+ args: ['dataListing']
392
+ }] } });
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1yZXNwb25zaWJpbGl0eS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93L3NoYXJlZC9jb21wb25lbnRzL3Byb2dyYW0tcmVzcG9uc2liaWxpdHktbGlzdGluZy9wcm9ncmFtLXJlc3BvbnNpYmlsaXR5LWxpc3RpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3cvc2hhcmVkL2NvbXBvbmVudHMvcHJvZ3JhbS1yZXNwb25zaWJpbGl0eS1saXN0aW5nL3Byb2dyYW0tcmVzcG9uc2liaWxpdHktbGlzdGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFB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cUM7a0JBdEJqRCxTQUFTOytCQUNFLG9DQUFvQyxjQUNsQyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQiwyQkFBMkI7d0JBQzNCLGlDQUFpQzt3QkFDakMsOEJBQThCO3dCQUM5QixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osd0JBQXdCO3FCQUN6QixXQUdRLENBQUMsV0FBVyxDQUFDO2lHQW1DZSx5QkFBeUI7c0JBQTdELEtBQUs7dUJBQUMsd0JBQXdCO2dCQVUvQiw4QkFBOEI7c0JBRDdCLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGbG9hdGluZ0Jhck1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZENvbXBvbmVudHMvZmxvYXRpbmctYmFyL2Zsb2F0aW5nLWJhci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBGb3JtZ3JvdXBNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi91aS1raXQvZm9ybWdyb3VwL2Zvcm1ncm91cC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdWkta2l0L3BhZ2luYXRpb24vcGFnaW5hdGlvbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdWkta2l0L3BvcG92ZXIvcG9wb3Zlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdWkta2l0L3Rvb2x0aXAvdG9vbHRpcC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBUYWJsZUNhcmRDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1jYXJkL3RhYmxlLWNhcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JjQ2F0ZWdvcnlMaXN0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JjLWNhdGVnb3J5LWxpc3RpbmcvZ3JjLWNhdGVnb3J5LWxpc3RpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JjUmVzcG9uc2liaWxpdHlMaXN0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JjLXJlc3BvbnNpYmlsaXR5LWxpc3RpbmcvZ3JjLXJlc3BvbnNpYmlsaXR5LWxpc3RpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTm9EYXRhTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdWkta2l0L25vLWRhdGEvbm8tZGF0YS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBMaXN0TG9hZGVyTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkQ29tcG9uZW50cy9saXN0LWxvYWRlci9saXN0LWxvYWRlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBHcmNTdWJDYXRlZ29yeUxpc3RpbmdDb21wb25lbnQgfSBmcm9tICcuLi9ncmMtc3ViLWNhdGVnb3J5LWxpc3RpbmcvZ3JjLXN1Yi1jYXRlZ29yeS1saXN0aW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSRVNQT05TSUJJTElUWV9UQUJMRV9DQVJEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2xpbmstcmVzcG9uc2liaWxpdHkuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBHcmNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZUNhcmRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWRDb21wb25lbnRzL3RhYmxlLWNhcmQtbG9hZGVyL3RhYmxlLWNhcmQtbG9hZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IExJTktTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Nkbi1saW5rLmNvbnN0YW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXByb2dyYW0tcmVzcG9uc2liaWxpdHktbGlzdGluZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBQb3BvdmVyTW9kdWxlLFxyXG4gICAgRm9ybWdyb3VwTW9kdWxlLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIEZsb2F0aW5nQmFyTW9kdWxlLFxyXG4gICAgUGFnaW5hdGlvbk1vZHVsZSxcclxuICAgIFRhYmxlQ2FyZENvbXBvbmVudCxcclxuICAgIEdyY0NhdGVnb3J5TGlzdGluZ0NvbXBvbmVudCxcclxuICAgIEdyY1Jlc3BvbnNpYmlsaXR5TGlzdGluZ0NvbXBvbmVudCxcclxuICAgIEdyY1N1YkNhdGVnb3J5TGlzdGluZ0NvbXBvbmVudCxcclxuICAgIExpc3RMb2FkZXJNb2R1bGUsXHJcbiAgICBOb0RhdGFNb2R1bGUsXHJcbiAgICBUYWJsZUNhcmRMb2FkZXJDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3JhbS1yZXNwb25zaWJpbGl0eS1saXN0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmFtLXJlc3BvbnNpYmlsaXR5LWxpc3RpbmcuY29tcG9uZW50Lmxlc3MnXSxcclxuICBvdXRwdXRzOiBbJ2Nsb3NlTGlzdCddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbVJlc3BvbnNpYmlsaXR5TGlzdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJvZ3JhbVR5cGVzID0gUkVTUE9OU0lCSUxJVFlfVEFCTEVfQ0FSRDtcclxuICBDRE5fTElOSyA9IExJTktTO1xyXG4gIHNlbGVjdGVkVGFiOiAwIHwgMSB8IDIgfCAzID0gMTtcclxuXHJcbiAgYW5pbWF0aW9uID0gZmFsc2U7XHJcblxyXG4gIHByb2dyYW1Mb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9ncmFtQ291bnRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZXNwb25zaWJpbGl0eUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhdGVnb3J5TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcDogYW55W10gPSBbXTtcclxuICBwcmVTZWxlY3RlZFByb2dyYW1BbmRSZXNwOiBhbnlbXSA9IFtdO1xyXG4gIHNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgY3VycmVudEJ1c2luZXNzQ3ljbGUhOiBhbnk7XHJcbiAgc2VsZWN0ZWRQcm9ncmFtOiBhbnk7XHJcbiAgc2VsZWN0ZWRDYXRlZ29yeTogYW55O1xyXG4gIHByb2dyYW1DdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBjYXRlZ29yeUN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHJlc3BvbnNpYmlsaXR5Q3VycmVudFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHJvZ3JhbURhdGE6IGFueTtcclxuICBjYXRlZ29yeURhdGE6IGFueTtcclxuICByZXNwb25zaWJpbGl0eURhdGE6IGFueSA9IHtcclxuICAgIGRhdGE6IFtdLFxyXG4gIH07XHJcbiAgc2VsZWN0ZWRQcm9ncmFtSWRzOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2F0ZWdvcnlJZHM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRSZXNwb25zaWJpbGl0aWVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBwcm9ncmFtQ2FsbCE6IFN1YnNjcmlwdGlvbjtcclxuICBjYXRlZ29yeUNhbGwhOiBTdWJzY3JpcHRpb247XHJcbiAgcmVzcG9uc2liaWxpdHlDYWxsITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBASW5wdXQoJ3NlbGVjdGVkUHJvZ3JhbUFuZFJlc3AnKSBzZXQgZ2V0U2VsZWN0ZWRQcm9ncmFtQW5kUmVzcChkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcCA9IGRhdGEgfHwgW107XHJcbiAgICB0aGlzLnByZVNlbGVjdGVkUHJvZ3JhbUFuZFJlc3AgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtSWRzKHRoaXMuc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcCk7XHJcbiAgICB0aGlzLmdldEFsbFNlbGVjdGVkUmVzcG9uc2liaWxpdGllcyh0aGlzLnNlbGVjdGVkUHJvZ3JhbUFuZFJlc3ApO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VMaXN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0YUxpc3RpbmcnKVxyXG4gIHJlc3BvbnNpYmlsaXR5TGlzdGluZ0NvbXBvbmVudCE6IEdyY1Jlc3BvbnNpYmlsaXR5TGlzdGluZ0NvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBncmNTZXJ2aWNlOiBHcmNTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlID0gdGhpcy5ncmNTZXJ2aWNlPy5nZXRCdXNpbmVzc0N5Y2xlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0NvdW50KCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuY2xvc2VMaXN0LmVtaXQodGhpcy5wcmVTZWxlY3RlZFByb2dyYW1BbmRSZXNwKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLmNsb3NlTGlzdC5lbWl0KHRoaXMuc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcCk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtc0xpc3QoZXZlbnQ/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnByb2dyYW1DYWxsKSB7XHJcbiAgICAgIHRoaXMucHJvZ3JhbUNhbGwudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvZ3JhbUxvYWRlciA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgdHlwZTogJycsXHJcbiAgICAgICAgcGFnaW5hdGlvblR5cGU6ICdzbWFsbCcsXHJcbiAgICAgICAgYTogJycsXHJcbiAgICAgICAgc2VhcmNoVGV4dDogdGhpcy5zZWFyY2hTdHJpbmcsXHJcbiAgICAgICAgZmlsdGVyRGF0YToge1xyXG4gICAgICAgICAgYXBwTGlzdDogW10sXHJcbiAgICAgICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgICAgIHJldmlld2VySWQ6IFtdLFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxyXG4gICAgICAgICAgZW50cnVzdGVkQnk6IFtdLFxyXG4gICAgICAgICAgZW50cnVzdGVkVG86IFtdLFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlTm86IHRoaXMucHJvZ3JhbUN1cnJlbnRQYWdlIHx8IDEsXHJcbiAgICAgICAgc29ydE9iajogeyBzb3J0Qnk6ICcnLCB0eXBlOiAtMSB9LFxyXG4gICAgICAgIHBhZ2VOYW1lOiAnY2F0ZWdvcnknLFxyXG4gICAgICAgIHR5cGVBcnI6IFt0aGlzLnNlbGVjdGVkVGFiXSxcclxuICAgICAgICBzdGFydF9kYXRlOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zdGFydF9kYXRlLFxyXG4gICAgICAgIGVuZF9kYXRlOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5lbmRfZGF0ZSxcclxuICAgICAgICBzZWxlY3RlZF9jeWNsZV9hcnI6IHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkX2N5Y2xlX2FycixcclxuICAgICAgICBzZWxlY3RlZF9jeWNsZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGUsXHJcbiAgICAgICAgdGltZV9maWx0ZXJfdHlwZTogJycsXHJcbiAgICAgICAgc3RhdGU6IFsyLCAzXSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLnByb2dyYW1DYWxsID0gdGhpcy5ncmNTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyYW1Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLnByb2dyYW1EYXRhLmRhdGEgPSByZXMuZGF0YSA/PyBbXTtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhID0geyAuLi5yZXMgfTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQcm9ncmFtQ2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yeUJ5UHJvZ3JhbUlkKHJlcz8uZGF0YVswXSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyYW1Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Qcm9ncmFtUGFnZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnByb2dyYW1DdXJyZW50UGFnZSA9IGV2ZW50Py5wYWdlTm8gfHwgMTtcclxuICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBvblN1YkNhdGVnb3J5UGFnZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNhdGVnb3J5Q3VycmVudFBhZ2UgPSBldmVudD8ucGFnZU5vIHx8IDE7XHJcbiAgICB0aGlzLmdldENhdGVnb3J5QnlQcm9ncmFtSWQodGhpcy5zZWxlY3RlZFByb2dyYW0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUxpc3RpbmdDb21wb25lbnQuZGVsZXRlU2VsZWN0ZWRSZXNwb25zaWJpbGl0eShldmVudCk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZFRhYihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnByb2dyYW1DdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gZXZlbnQ/LnR5cGU7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLnByb2dyYW1DdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMub25TZWxlY3RlZFByb2dyYW1DaGFuZ2UoKTtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0NvdW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtc0NvdW50KHBhcmFtc09iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIHR5cGU6ICcnLFxyXG4gICAgICAgIHBhZ2luYXRpb25UeXBlOiAnc21hbGwnLFxyXG4gICAgICAgIGE6ICcnLFxyXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoU3RyaW5nLFxyXG4gICAgICAgIGZpbHRlckRhdGE6IHtcclxuICAgICAgICAgIGFwcExpc3Q6IFtdLFxyXG4gICAgICAgICAgcmlza0lkczogW10sXHJcbiAgICAgICAgICByZXZpZXdlcklkOiBbXSxcclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiBbXSxcclxuICAgICAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcclxuICAgICAgICAgIGVudHJ1c3RlZFRvOiBbXSxcclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZU5vOiAxLFxyXG4gICAgICAgIHNvcnRPYmo6IHsgc29ydEJ5OiAnJywgdHlwZTogJycgfSxcclxuICAgICAgICBwYWdlTmFtZTogJ2NhdGVnb3J5JyxcclxuICAgICAgICB0eXBlQXJyOiBbMSwgMiwgMywgMF0sXHJcbiAgICAgICAgc3RhcnRfZGF0ZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc3RhcnRfZGF0ZSxcclxuICAgICAgICBlbmRfZGF0ZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uZW5kX2RhdGUsXHJcbiAgICAgICAgc2VsZWN0ZWRfY3ljbGVfYXJyOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zZWxlY3RlZF9jeWNsZV9hcnIsXHJcbiAgICAgICAgc2VsZWN0ZWRfY3ljbGU6IHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkX2N5Y2xlLFxyXG4gICAgICAgIHRpbWVfZmlsdGVyX3R5cGU6ICcnLFxyXG4gICAgICAgIHN0YXRlOiBbMiwgM10sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ncmNTZXJ2aWNlLmdldFByb2dyYW1zTGlzdENvdW50KHJlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvdW50TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVHlwZXNbMF0uY291bnQgPVxyXG4gICAgICAgICAgcmVzPy5yZWd1bGF0aW9uQ291bnQ/LmFjdGl2ZSArIHJlcz8ucmVndWxhdGlvbkNvdW50Py5jb21wbGV0ZWQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVHlwZXNbMV0uY291bnQgPVxyXG4gICAgICAgICAgcmVzPy5zdGFuZGFyZENvdW50Py5hY3RpdmUgKyByZXM/LnN0YW5kYXJkQ291bnQ/LmNvbXBsZXRlZDtcclxuICAgICAgICB0aGlzLnByb2dyYW1UeXBlc1syXS5jb3VudCA9XHJcbiAgICAgICAgICByZXM/LmludGVybmFsQ291bnQ/LmFjdGl2ZSArIHJlcz8uaW50ZXJuYWxDb3VudD8uY29tcGxldGVkO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbVR5cGVzWzNdLmNvdW50ID1cclxuICAgICAgICAgIHJlcz8ub3RoZXJDb3VudD8uYWN0aXZlICsgcmVzPy5vdGhlckNvdW50Py5jb21wbGV0ZWQ7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeUJ5UHJvZ3JhbUlkKHByb2dyYW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlDYWxsKSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlDYWxsLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICB0aGlzLmNhdGVnb3J5TG9hZGVyID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMucmVzZXRDb250cm9sVmFyaWFibGUoKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgIGlkOiBwcm9ncmFtPy5faWQsXHJcbiAgICAgIHNjb3BlVHlwZTogJ3Jpc2snLFxyXG4gICAgICBwYWdpbmF0aW9uVHlwZTogJ3NtYWxsJyxcclxuICAgICAgc2VhcmNoVGV4dDogdGhpcy5zZWFyY2hTdHJpbmcsXHJcbiAgICAgIGZpbHRlckRhdGE6IHtcclxuICAgICAgICBhcHBMaXN0OiBbXSxcclxuICAgICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgICByZXZpZXdlcklkOiBbXSxcclxuICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogW10sXHJcbiAgICAgICAgZW50cnVzdGVkQnk6IFtdLFxyXG4gICAgICAgIGVudHJ1c3RlZFRvOiBbXSxcclxuICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBbXSxcclxuICAgICAgfSxcclxuICAgICAgcGFnZTogdGhpcy5jYXRlZ29yeUN1cnJlbnRQYWdlIHx8IDEsXHJcbiAgICAgIC8vIHNvcnRpbmdDb3VudDogdGhpcy5jYXRlZ29yeVNvcnRWYWx1ZSxcclxuICAgICAgbmFtZTogJ25hbWUnLFxyXG4gICAgICBidXNpbmVzc0N5Y2xlOiB7XHJcbiAgICAgICAgc3RhcnRfZGF0ZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc3RhcnRfZGF0ZSxcclxuICAgICAgICBlbmRfZGF0ZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uZW5kX2RhdGUsXHJcbiAgICAgICAgc2VsZWN0ZWRfY3ljbGVfYXJyOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zZWxlY3RlZF9jeWNsZV9hcnIsXHJcbiAgICAgICAgc2VsZWN0ZWRfY3ljbGU6IHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkX2N5Y2xlLFxyXG4gICAgICAgIHRpbWVfZmlsdGVyX3R5cGU6ICcnLFxyXG4gICAgICAgIC8vIFwic2NvcGVUeXBlXCI6ICdyaXNrJyxcclxuICAgICAgICB0eXBlOiAncmlzaycsXHJcbiAgICAgICAgZmlsdGVyRGF0YToge1xyXG4gICAgICAgICAgYXBwTGlzdDogW10sXHJcbiAgICAgICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgICAgIHJldmlld2VySWQ6IFtdLFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxyXG4gICAgICAgICAgZW50cnVzdGVkQnk6IFtdLFxyXG4gICAgICAgICAgZW50cnVzdGVkVG86IFtdLFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmNhdGVnb3J5Q2FsbCA9IHRoaXMuZ3JjU2VydmljZS5nZXRTdWJDYXRlZ29yeUxpc3QoaGVhZGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhID0geyAuLi5yZXMgfTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPSByZXM/LmRhdGFbMF07XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXNMaXN0KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlU2VsZWN0ZWRQcm9ncmFtKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtID0gZXZlbnQ/LmNhdGVnb3J5O1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUHJvZ3JhbUNoYW5nZSgpO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yeUJ5UHJvZ3JhbUlkKHRoaXMuc2VsZWN0ZWRQcm9ncmFtKTtcclxuICAgIC8vIHRoaXMuZ2V0U2VsZWN0ZWRDYXRlZ29yeUlkcyh0aGlzLnNlbGVjdGVkUHJvZ3JhbUFuZFJlc3ApO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlU2VsZWN0ZWRTdWJDYXRlZ29yeShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPSBldmVudD8uY2F0ZWdvcnk7XHJcbiAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNwb25zaWJpbGl0aWVzTGlzdChldmVudD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlDYWxsKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYWxsLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnJlc3BDb3VudCA9IGV2ZW50LnNvcnRWYWx1ZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlMb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc0J1c2luZXNzQ3ljbGUnLCAndHJ1ZScpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFyZW50SWQnLCB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnY2F0SWQnLCB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5X2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMucmVzcG9uc2liaWxpdHlDdXJyZW50UGFnZSA/PyAxKTtcclxuICAgIC8vIGlmIChbMSwgLTFdLmluY2x1ZGVzKHRoaXMuY29udHJvbFNvcnRWYWx1ZSkpIHtcclxuICAgIC8vICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc29ydFZhbHVlJywgdGhpcy5jb250cm9sU29ydFZhbHVlKTtcclxuICAgIC8vICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc29ydEJ5JywgJ0RhdGEuUmVwb3J0TmFtZScpO1xyXG4gICAgLy8gfVxyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnaW5hdGlvblR5cGUnLCAnc21hbGwnKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VUeXBlJywgJ3Jpc2snKTtcclxuICAgIGxldCBidXNpbmVzc0N5Y2xlID0ge1xyXG4gICAgICBzdGFydF9kYXRlOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zdGFydF9kYXRlLFxyXG4gICAgICBlbmRfZGF0ZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uZW5kX2RhdGUsXHJcbiAgICAgIHNlbGVjdGVkX2N5Y2xlX2FycjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGVfYXJyLFxyXG4gICAgICBzZWxlY3RlZF9jeWNsZTogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGUsXHJcbiAgICAgIHRpbWVfZmlsdGVyX3R5cGU6ICcnLFxyXG4gICAgICBwYWdlVHlwZTogJ3Jpc2snLFxyXG4gICAgICBmaWx0ZXJEYXRhOiB7XHJcbiAgICAgICAgYXBwTGlzdDogW10sXHJcbiAgICAgICAgcmlza0lkczogW10sXHJcbiAgICAgICAgcmV2aWV3ZXJJZDogW10sXHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxyXG4gICAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcclxuICAgICAgICBlbnRydXN0ZWRUbzogW10sXHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYWxsID0gdGhpcy5ncmNTZXJ2aWNlXHJcbiAgICAgIC5nZXRSZXNwb25zaWJpbGl0eUJ5Q2F0ZWdvcnlJZChwYXJhbXMsIGJ1c2luZXNzQ3ljbGUpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eURhdGEgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YVsnZGF0YSddID0gdGhpcy5zZXREYXRhTGlzdFN0cnVjdHVyZShcclxuICAgICAgICAgICAgcmVzPy5kYXRhXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXBkYXRlZERhdGFMaXN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlDdXJyZW50UGFnZSA9IGV2ZW50Py5wYWdlTm87XHJcbiAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhTGlzdFN0cnVjdHVyZShyZXM6IGFueSkge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlcz8ubWFwKChyZXNwb25zaWJpbGl0eTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucmVzcG9uc2liaWxpdHksXHJcbiAgICAgICAgbmFtZTogcmVzcG9uc2liaWxpdHk/LlJlcG9ydE5hbWUsXHJcbiAgICAgICAgY29udHJvbElkOiByZXNwb25zaWJpbGl0eT8uQ29udHJvbElkLFxyXG4gICAgICAgIF9pZDogcmVzcG9uc2liaWxpdHk/LkVuY3J5cHRlZFJlcG9ydElkLFxyXG4gICAgICAgIGVudHJ1c3RlZEJ5OiB7XHJcbiAgICAgICAgICBuYW1lOiByZXNwb25zaWJpbGl0eT8uQXNzaWduQnksXHJcbiAgICAgICAgICBlbWFpbDogcmVzcG9uc2liaWxpdHk/LkFzc2lnbkJ5RW1haWwsXHJcbiAgICAgICAgICBwcm9maWxlUGljOiByZXNwb25zaWJpbGl0eT8ubWVtYmVyX3BpYyA/PyAnJyxcclxuICAgICAgICAgIHNob3J0TmFtZTogcmVzcG9uc2liaWxpdHk/Lm1lbWJlcl9zaG9ydF9uYW1lLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW50cnVzdGVkVG86IHtcclxuICAgICAgICAgIG5hbWU6IHJlc3BvbnNpYmlsaXR5Py5Bc3NpZ25UbyxcclxuICAgICAgICAgIGVtYWlsOiByZXNwb25zaWJpbGl0eT8uQXNzaWduVG8sXHJcbiAgICAgICAgICBwcm9maWxlUGljOiByZXNwb25zaWJpbGl0eT8uZW1wbG95ZWVfcGljID8/ICcnLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiByZXNwb25zaWJpbGl0eT8uZW1wbG95ZWVfc2hvcnRfbmFtZSxcclxuICAgICAgICAgIEVudHJ1c3RlZFRvTWVtYmVyczogcmVzcG9uc2liaWxpdHk/LkVudHJ1c3RlZFRvTWVtYmVycyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpdGhpbkRhdGE6IHJlc3BvbnNpYmlsaXR5Py5SQ19kZXRhaWxzX2FycmF5Py5tYXAoKHdpdGhpbjogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiB3aXRoaW4/LnJjX25hbWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRQcm9ncmFtQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5jYXRlZ29yeUN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlDdXJyZW50UGFnZSA9IDE7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTZWxlY3RlZFByb2dyYW1BbmRSZXNwKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcCA9IGV2ZW50O1xyXG4gICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1JZHModGhpcy5zZWxlY3RlZFByb2dyYW1BbmRSZXNwKTtcclxuICAgIHRoaXMuZ2V0QWxsU2VsZWN0ZWRSZXNwb25zaWJpbGl0aWVzKHRoaXMuc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcCk7XHJcbiAgICAvLyB0aGlzLmdldFNlbGVjdGVkQ2F0ZWdvcnlJZHModGhpcy5zZWxlY3RlZFByb2dyYW1BbmRSZXNwKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUHJvZ3JhbUlkcyhzZWxlY3RlZERhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1JZHMgPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YT8uZm9yRWFjaCgoc2VsZWN0ZWQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZHMgPSBzZWxlY3RlZD8uY2F0ZWdvcnk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtSWRzLnB1c2goc2VsZWN0ZWQ/LnByb2dyYW0/LnByb2dyYW1JZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkQ2F0ZWdvcnlJZHMoc2VsZWN0ZWREYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkcyA9IFtdO1xyXG4gICAgbGV0IHByb2dyYW1JbmRleCA9IC0xO1xyXG4gICAgcHJvZ3JhbUluZGV4ID0gc2VsZWN0ZWREYXRhLmZpbmRJbmRleChcclxuICAgICAgKGNhdDogYW55KSA9PiBjYXQ/LnByb2dyYW0/LnByb2dyYW1JZCA9PT0gdGhpcy5zZWxlY3RlZFByb2dyYW0/LnByb2dyYW1JZFxyXG4gICAgKTtcclxuICAgIGlmIChwcm9ncmFtSW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkcyA9IHNlbGVjdGVkRGF0YVtwcm9ncmFtSW5kZXhdPy5jYXRlZ29yeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2VsZWN0ZWRSZXNwb25zaWJpbGl0aWVzKHNlbGVjdGVkRGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVzcG9uc2liaWxpdGllcyA9IFtdO1xyXG4gICAgc2VsZWN0ZWREYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUmVzcG9uc2liaWxpdGllcy5wdXNoKC4uLml0ZW0/LnJlc3BvbnNpYmlsaXR5KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicHJvZ3JhbS1yZXNwb25zaWJpbGl0eS1saXN0aW5nXCIgW2NsYXNzLmFuaW1hdGVdPVwiYW5pbWF0aW9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1yZXNwb25zaWJpbGl0eS1saXN0aW5nLWhlYWQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGwtNCB2eC1wci00XCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwidngtZnMtMTQgdngtZnctNTAwIHZ4LWxhYmVsLXR4dFwiPlNlbGVjdCBSZXNwb25zaWJpbGl0aWVzPC9oMz48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLXJlc3BvbnNpYmlsaXR5LWxpc3RpbmctYm9keVwiPlxyXG4gICAgICAgIDxhcHAtdGFibGUtY2FyZC1sb2FkZXIgKm5nSWY9XCJwcm9ncmFtQ291bnRMb2FkZXJcIj48L2FwcC10YWJsZS1jYXJkLWxvYWRlcj5cclxuICAgICAgICA8YXBwLXRhYmxlLWNhcmRcclxuICAgICAgICAgICAgKm5nSWY9XCIhcHJvZ3JhbUNvdW50TG9hZGVyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ2eC13LTEwMFwiXHJcbiAgICAgICAgICAgIFt0YWJsZUNhcmRdPVwicHJvZ3JhbVR5cGVzXCJcclxuICAgICAgICAgICAgW3NpbmdsZVNlbGVjdGVkVGV4dF09XCInUmVzcG9uc2liaWxpdHkgU2VsZWN0ZWQnXCJcclxuICAgICAgICAgICAgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCJcclxuICAgICAgICAgICAgW211bHRpcGxlU2VsZWN0ZWRUZXh0XT1cIidSZXNwb25zaWJpbGl0aWVzIFNlbGVjdGVkJ1wiXHJcbiAgICAgICAgICAgIChzZXRTZWxlY3RlZFRhYik9XCJzZXRTZWxlY3RlZFRhYigkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9hcHAtdGFibGUtY2FyZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJsb2NrIHZ4LW1iLTJcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiICAjc2VhcmNoUmlza0NhdGVnb3J5IChrZXl1cC5lbnRlcik9XCJoYW5kbGVTZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9ncmFtc1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tcmVzcG9uc2liaWxpdHktbGlzdGluZy1ib2R5LWlubmVyIHZ4LW1iLTIgdngtZC1mbGV4XCIgW2NsYXNzLnZ4LWp1c3RpZnktY2VudGVyXT1cIighcHJvZ3JhbUxvYWRlciAmJiAhcHJvZ3JhbURhdGE/LmRhdGE/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihwcm9ncmFtTG9hZGVyIHx8IHByb2dyYW1EYXRhPy5kYXRhPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXItaXRlbS1sZWZ0IHZ4LXByLTJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1ncmMtY2F0ZWdvcnktbGlzdGluZyAqbmdJZj1cIiFwcm9ncmFtTG9hZGVyXCIgW2hlYWRlclRleHRdPVwiJ1Byb2dyYW1zJ1wiIFtwcm9ncmFtRGF0YV09XCJwcm9ncmFtRGF0YVwiICBbc2VsZWN0ZWRDYXRBbmRSaXNrXT1cInNlbGVjdGVkQ2F0QW5kUmlza1wiIFtuYW1lRGlzcGxheUtleV09XCInaXRlbV9uYW1lJ1wiIFtjdXJyZW50UGFnZV09XCJwcm9ncmFtQ3VycmVudFBhZ2VcIiBbc2VsZWN0ZWRUYWJJbmRleF09XCJzZWxlY3RlZFRhYlwiIFtzZWxlY3RlZENhdGVnb3J5SWRzXT1cInNlbGVjdGVkUHJvZ3JhbUlkc1wiIChhY3RpdmVTZWxlY3RlZENhdGVnb3J5KT1cImFjdGl2ZVNlbGVjdGVkUHJvZ3JhbSgkZXZlbnQpXCIgKG9uQ2F0ZWdvcnlQYWdlQ2hhbmdlKT1cIm9uUHJvZ3JhbVBhZ2VDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWdyYy1jYXRlZ29yeS1saXN0aW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8YXBwLWxpc3QtbG9hZGVyICpuZ0lmPVwicHJvZ3JhbUxvYWRlclwiPjwvYXBwLWxpc3QtbG9hZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1pdGVtLW1pZCB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1ncmMtc3ViLWNhdGVnb3J5LWxpc3RpbmcgKm5nSWY9XCIhY2F0ZWdvcnlMb2FkZXIgJiYgIXByb2dyYW1Mb2FkZXJcIiAgW2hlYWRlclRleHRdPVwiJ1Byb2dyYW1zJ1wiIFtjYXRlZ29yaWVzXT1cImNhdGVnb3J5RGF0YVwiICBbbmFtZURpc3BsYXlLZXldPVwiJ2l0ZW1fbmFtZSdcIiAgW2N1cnJlbnRQYWdlXT1cImNhdGVnb3J5Q3VycmVudFBhZ2VcIiBbc2VsZWN0ZWRDYXRlZ29yeUlkc109XCJzZWxlY3RlZENhdGVnb3J5SWRzXCIgW2FjdGl2ZVByb2dyYW1dPVwic2VsZWN0ZWRQcm9ncmFtXCIgW3NlbGVjdGVkUHJvZ3JhbUFuZFJlc3BdPVwic2VsZWN0ZWRQcm9ncmFtQW5kUmVzcFwiIChhY3RpdmVTZWxlY3RlZENhdGVnb3J5KT1cImFjdGl2ZVNlbGVjdGVkU3ViQ2F0ZWdvcnkoJGV2ZW50KVwiIChvbkNhdGVnb3J5UGFnZUNoYW5nZSk9XCJvblN1YkNhdGVnb3J5UGFnZUNoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZ3JjLXN1Yi1jYXRlZ29yeS1saXN0aW5nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbGlzdC1sb2FkZXIgKm5nSWY9XCJjYXRlZ29yeUxvYWRlciB8fCBwcm9ncmFtTG9hZGVyXCI+PC9hcHAtbGlzdC1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXItaXRlbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1ncmMtcmVzcG9uc2liaWxpdHktbGlzdGluZz48L2FwcC1ncmMtcmVzcG9uc2liaWxpdHktbGlzdGluZz4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtZ3JjLXJlc3BvbnNpYmlsaXR5LWxpc3RpbmcgI2RhdGFMaXN0aW5nICpuZ0lmPVwiIXJlc3BvbnNpYmlsaXR5TG9hZGVyICYmICFjYXRlZ29yeUxvYWRlciAmJiAhcHJvZ3JhbUxvYWRlciAmJiByZXNwb25zaWJpbGl0eURhdGE/LmRhdGE/Lmxlbmd0aCAhPT0gMFwiIFtoZWFkZXJUZXh0XT1cIidSZXNwb25zaWJpbGl0aWVzJ1wiIFtyZXNwb25zaWJpbGl0eURhdGFdPVwicmVzcG9uc2liaWxpdHlEYXRhXCIgW2FjdGl2ZVByb2dyYW1dPVwic2VsZWN0ZWRQcm9ncmFtXCIgW2FjdGl2ZUNhdGVnb3J5XT1cInNlbGVjdGVkQ2F0ZWdvcnlcIiBbc2VsZWN0ZWRQcm9ncmFtQW5kUmVzcF09XCJzZWxlY3RlZFByb2dyYW1BbmRSZXNwXCIgKGNoYW5nZVNlbGVjdGVkUHJvZ3JhbUFuZFJlc3ApPVwiY2hhbmdlU2VsZWN0ZWRQcm9ncmFtQW5kUmVzcCgkZXZlbnQpXCIgW2N1cnJlbnRQYWdlXT1cInJlc3BvbnNpYmlsaXR5Q3VycmVudFBhZ2VcIiBbcGVyUGFnZUxpbWl0XT1cIjMwXCIgW3RvdGFsTGlzdERhdGFdPVwicmVzcG9uc2liaWxpdHlEYXRhPy50b3RhbF9pdGVtc1wiIFt0b3RhbFBhZ2VzXT1cInJlc3BvbnNpYmlsaXR5RGF0YT8udG90YWxfcGFnZXNcIiAoZ2V0VXBkYXRlZERhdGFMaXN0KT1cImdldFVwZGF0ZWREYXRhTGlzdCgkZXZlbnQpXCIgPjwvYXBwLWdyYy1yZXNwb25zaWJpbGl0eS1saXN0aW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8YXBwLWxpc3QtbG9hZGVyICpuZ0lmPVwicmVzcG9uc2liaWxpdHlMb2FkZXIgfHwgY2F0ZWdvcnlMb2FkZXIgfHwgcHJvZ3JhbUxvYWRlclwiPjwvYXBwLWxpc3QtbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbm8tZGF0YSAqbmdJZj1cInJlc3BvbnNpYmlsaXR5RGF0YT8uZGF0YT8ubGVuZ3RoID09PSAwICYmICEocmVzcG9uc2liaWxpdHlMb2FkZXIgfHwgY2F0ZWdvcnlMb2FkZXIgfHwgcHJvZ3JhbUxvYWRlcilcIiBbbm9EYXRhSW1hZ2VdPVwiQ0ROX0xJTks/Lm5vRGF0YVwiIFtub0RhdGFUZXh0XT1cIidObyBkYXRhIHRvIGRpc3BsYXknXCI+PC9hcHAtbm8tZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGFwcC1uby1kYXRhICpuZ0lmPVwiKCFwcm9ncmFtTG9hZGVyICYmICFwcm9ncmFtRGF0YT8uZGF0YT8ubGVuZ3RoKVwiIFtub0RhdGFJbWFnZV09XCJDRE5fTElOSz8ubm9EYXRhXCIgW25vRGF0YVRleHRdPVwiJ05vIGRhdGEgdG8gZGlzcGxheSdcIj48L2FwcC1uby1kYXRhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxhcHAtZmxvYXRpbmctYmFyICAgW3NlbGVjdGVkRGF0YV09XCJzZWxlY3RlZFJlc3BvbnNpYmlsaXRpZXM/Lmxlbmd0aCA/IHNlbGVjdGVkUmVzcG9uc2liaWxpdGllcyA6IFtdXCIgIChjbG9zZUxpc3QpPVwiY2xvc2UoKVwiIChjbG9zZUV2ZW50KT1cInNhdmUoKVwiICBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ1JlcG9ydE5hbWUnXCIgW3Npbmd1bGFyVGV4dF09XCInUmVzcG9uc2liaWxpdHkgc2VsZWN0ZWQnXCIgW3BsdXJhbFRleHRdPVwiJ1Jlc3BvbnNpYmlsaXRpZXMgc2VsZWN0ZWQnXCIgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZUV2ZW50KCRldmVudClcIj48L2FwcC1mbG9hdGluZy1iYXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19