vcomply-workflow-engine 2.5.1 → 2.5.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 (44) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +465 -304
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/more-option/more-option.component.js +66 -3
  4. package/esm2015/lib/more-option/more-option.component.ngfactory.js +9 -9
  5. package/esm2015/lib/sharedComponents/framework-list/framework-list.component.js +67 -62
  6. package/esm2015/lib/sharedComponents/framework-list/framework-list.component.ngfactory.js +43 -48
  7. package/esm2015/lib/sharedComponents/framework-list/framework-list.component.ngsummary.json +1 -1
  8. package/esm2015/lib/sharedComponents/framework-list/framework-responsibility-table/framework-responsibility-table.component.js +2 -2
  9. package/esm2015/lib/sharedComponents/framework-list/framework-responsibility-table/framework-responsibility-table.component.ngfactory.js +3 -3
  10. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +3 -3
  11. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +6 -6
  12. package/esm2015/lib/ui-kit/popover/popover.component.js +5 -4
  13. package/esm2015/lib/ui-kit/popover-hover/popover-hover.component.js +5 -4
  14. package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +36 -24
  15. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +2 -2
  16. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +5 -4
  17. package/esm2015/lib/workflow-engine.module.js +3 -1
  18. package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
  19. package/esm2015/lib/workflow-program/create-program-ui/create-program-ui.module.ngfactory.js +1 -1
  20. package/esm2015/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.js +12 -0
  21. package/esm2015/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.ngsummary.json +1 -0
  22. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.js +2 -2
  23. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.js +35 -4
  24. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngfactory.js +11 -4
  25. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngsummary.json +1 -1
  26. package/esm2015/lib/workflow-program/workflow-program.component.js +27 -8
  27. package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +438 -445
  28. package/esm2015/lib/workflow-program/workflow-program.component.ngsummary.json +1 -1
  29. package/esm2015/lib/workflow-services/programs.service.js +8 -7
  30. package/esm2015/lib/workflow-services/responsibility.service.js +5 -2
  31. package/esm2015/vcomply-workflow-engine.js +189 -188
  32. package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
  33. package/fesm2015/vcomply-workflow-engine.js +266 -117
  34. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  35. package/lib/sharedComponents/framework-list/framework-list.component.d.ts +17 -18
  36. package/lib/workflow-compliance/workflow-compliance.component.d.ts +2 -1
  37. package/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.d.ts +4 -0
  38. package/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.d.ts +6 -0
  39. package/lib/workflow-program/workflow-program.component.d.ts +1 -0
  40. package/lib/workflow-services/programs.service.d.ts +1 -1
  41. package/lib/workflow-services/responsibility.service.d.ts +1 -1
  42. package/package.json +1 -1
  43. package/vcomply-workflow-engine.d.ts +188 -187
  44. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -13,17 +13,11 @@ export class FrameworkListComponent {
13
13
  this.entrustFramework = new EventEmitter();
14
14
  this.closeFramework = new EventEmitter();
15
15
  this.assignControl = new EventEmitter();
16
- this.currentList = 'framework';
17
- this.floatingBarDisplayKeys = {
18
- framework: 'name',
19
- categories: 'name',
20
- responsibilities: 'name',
21
- };
22
16
  this.subCategoriesList = {
23
17
  from: 1,
24
18
  to: 0,
25
19
  currentPage: 1,
26
- totalPage: 0,
20
+ totalPages: 0,
27
21
  totalRecords: 0,
28
22
  data: [],
29
23
  };
@@ -31,7 +25,7 @@ export class FrameworkListComponent {
31
25
  from: 1,
32
26
  to: 0,
33
27
  currentPage: 1,
34
- totalPage: 0,
28
+ totalPages: 0,
35
29
  totalRecords: 0,
36
30
  data: [],
37
31
  };
@@ -53,10 +47,6 @@ export class FrameworkListComponent {
53
47
  //program
54
48
  this.subList = false;
55
49
  this.selectedCategories = [];
56
- this.previousSelectedValues = {
57
- program: {},
58
- categories: []
59
- };
60
50
  this.frameworkData = {
61
51
  data: [],
62
52
  from: 0,
@@ -85,12 +75,27 @@ export class FrameworkListComponent {
85
75
  this.controlsList = [];
86
76
  this.displayConfirmationMessage = false;
87
77
  this.activeTab = 'regulations';
78
+ this.currentList = 'framework';
79
+ this.floatingBarDisplayKeys = {
80
+ framework: 'name',
81
+ categories: 'name',
82
+ responsibilities: 'name',
83
+ };
84
+ }
85
+ ngOnChanges(changes) {
86
+ var _a, _b, _c;
87
+ if (this.previousSelectedValues) {
88
+ this.selectedValues = {
89
+ framework: (_a = this.previousSelectedValues.framework) !== null && _a !== void 0 ? _a : {},
90
+ categories: (_b = this.previousSelectedValues.categories) !== null && _b !== void 0 ? _b : {},
91
+ responsibilities: (_c = this.previousSelectedValues.responsibilities) !== null && _c !== void 0 ? _c : {},
92
+ };
93
+ }
94
+ }
95
+ ngOnInit() {
96
+ this.getFrameworksCount();
97
+ this.getFrameworksList();
88
98
  }
89
- // ngOnInit(): void {
90
- // console.log("categoryList ==>", this.categoryList)
91
- // this.parentData = Object.assign(this.categoryList);
92
- // console.log("categoryList ==>", this.parentData)
93
- // }
94
99
  expandCategory(category) {
95
100
  if (category.category_name) {
96
101
  this.breadCrumb = [];
@@ -112,34 +117,33 @@ export class FrameworkListComponent {
112
117
  });
113
118
  }
114
119
  }
115
- getCategoryDetailsById(id) {
116
- if (!id || id == null) {
117
- this.breadCrumb = [];
118
- this.showParent = true;
119
- this.showChild = false;
120
- console.log();
121
- this.categoryList = Object.assign(this.parentData);
122
- this.showParent = false;
123
- setTimeout(() => {
124
- this.showParent = true;
125
- }, 100);
126
- return;
127
- }
128
- this.tableComponent.getCategoryDetailsById(id);
129
- }
120
+ // getCategoryDetailsById(id?: any) {
121
+ // if (!id || id == null) {
122
+ // this.breadCrumb = [];
123
+ // this.showParent = true;
124
+ // this.showChild = false;
125
+ // console.log()
126
+ // this.categoryList = Object.assign(this.parentData)
127
+ // this.showParent = false;
128
+ // setTimeout(() => {
129
+ // this.showParent = true;
130
+ // }, 100);
131
+ // return
132
+ // }
133
+ // this.tableComponent.getCategoryDetailsById(id);
134
+ // }
130
135
  entrustFrameworkDetails(report) {
131
136
  this.entrustFramework.emit(report);
132
137
  }
133
138
  close() {
134
139
  this.closeFramework.emit();
135
140
  }
136
- //program
137
- ngOnInit() {
138
- this.getFrameworksCount();
139
- this.getFrameworksList();
140
- }
141
- getFrameworksCount() {
142
- this.responsibilityService.getFrameWorkCount().pipe(takeUntil(this.unsubscribe)).subscribe({
141
+ getFrameworksCount(data) {
142
+ let params = new HttpParams();
143
+ if ((data === null || data === void 0 ? void 0 : data.search) || this.searchText.frameWork) {
144
+ params = params.append('search', this.searchText.frameWork);
145
+ }
146
+ this.responsibilityService.getFrameWorkCount(params).pipe(takeUntil(this.unsubscribe)).subscribe({
143
147
  next: (res) => {
144
148
  var _a, _b, _c, _d;
145
149
  this.frameworkCount = {
@@ -184,14 +188,14 @@ export class FrameworkListComponent {
184
188
  params = params.append('search', this.searchText.category);
185
189
  }
186
190
  else {
187
- params = params.append('page', this.frameworkData.currentPage);
191
+ params = params.append('page', this.subCategoriesList.currentPage);
188
192
  }
189
193
  this.responsibilityService.getFrameworkSubCategories(id, params).pipe(takeUntil(this.unsubscribe)).subscribe({
190
194
  next: (res) => {
191
195
  var _a, _b, _c, _d, _e;
192
196
  this.subCategoriesList.from = (_a = res.items_from) !== null && _a !== void 0 ? _a : 1;
193
197
  this.subCategoriesList.to = (_b = res.items_to) !== null && _b !== void 0 ? _b : 0;
194
- this.subCategoriesList.totalPage = (_c = res.total_pages) !== null && _c !== void 0 ? _c : 0;
198
+ this.subCategoriesList.totalPages = (_c = res.total_pages) !== null && _c !== void 0 ? _c : 0;
195
199
  this.subCategoriesList.totalRecords = (_d = res.total_items) !== null && _d !== void 0 ? _d : 0;
196
200
  this.subCategoriesList.data = (_e = res.data) !== null && _e !== void 0 ? _e : [];
197
201
  this.loader = false;
@@ -215,11 +219,17 @@ export class FrameworkListComponent {
215
219
  params = params.append('search', this.searchText.responsibility);
216
220
  }
217
221
  else {
218
- params = params.append('page', this.frameworkData.currentPage);
222
+ params = params.append('page', this.responsibilitiesList.currentPage);
219
223
  }
220
224
  this.responsibilityService.getFrameworkControls(id, params).pipe(takeUntil(this.unsubscribe)).subscribe({
221
225
  next: (res) => {
226
+ var _a, _b, _c, _d, _e;
222
227
  this.controlsList = res;
228
+ this.responsibilitiesList.from = (_a = res.items_from) !== null && _a !== void 0 ? _a : 1;
229
+ this.responsibilitiesList.to = (_b = res.items_to) !== null && _b !== void 0 ? _b : 0;
230
+ this.responsibilitiesList.totalPages = (_c = res.total_pages) !== null && _c !== void 0 ? _c : 0;
231
+ this.responsibilitiesList.totalRecords = (_d = res.total_items) !== null && _d !== void 0 ? _d : 0;
232
+ this.responsibilitiesList.data = (_e = res.data) !== null && _e !== void 0 ? _e : res;
223
233
  this.loader = false;
224
234
  },
225
235
  error: (err) => {
@@ -249,19 +259,18 @@ export class FrameworkListComponent {
249
259
  if (this.searchText.frameWork != event) {
250
260
  this.searchText.frameWork = event;
251
261
  this.getFrameworksList({ search: true });
262
+ this.getFrameworksCount({ search: true });
252
263
  }
253
264
  break;
254
265
  case 'categories':
255
266
  if (this.searchText.category != event) {
256
267
  this.searchText.category = event;
257
- debugger;
258
268
  this.getSubCategories(this.selectedValues.framework._id, { search: true });
259
269
  }
260
270
  break;
261
271
  case 'responsibilities':
262
272
  if (this.searchText.responsibility != event) {
263
273
  this.searchText.responsibility = event;
264
- debugger;
265
274
  this.getResponsibilities(this.selectedValues.categories._id, { search: true });
266
275
  }
267
276
  break;
@@ -271,25 +280,14 @@ export class FrameworkListComponent {
271
280
  switch (this.currentList) {
272
281
  case 'framework':
273
282
  this.selectedValues.framework = data;
274
- // this.selectedIds.categories= [];
275
283
  this.selectedValues.categories = {};
276
- // this.selectedIds.responsibilities= [];
277
284
  this.selectedValues.responsibilities = {};
278
- // this.currentTab = 'framework';
279
285
  break;
280
286
  case 'categories':
281
287
  this.selectedValues.categories = data;
282
- // this.selectedIds.categories= [];
283
- // this.selectedValues.categories = [];
284
- // this.selectedIds.responsibilities= [];
285
288
  this.selectedValues.responsibilities = {};
286
- // this.currentTab = 'categories';
287
289
  break;
288
290
  case 'responsibilities':
289
- // this.selectedValues.framework = data;
290
- // // this.selectedIds.categories= [];
291
- // this.selectedValues.categories = [];
292
- // this.selectedIds.responsibilities= [];
293
291
  this.selectedValues.responsibilities = data;
294
292
  break;
295
293
  default:
@@ -297,13 +295,19 @@ export class FrameworkListComponent {
297
295
  }
298
296
  }
299
297
  save() {
298
+ var _a, _b, _c, _d, _e, _f, _g;
300
299
  switch (this.currentList) {
301
300
  case 'framework':
302
- this.currentList = 'categories';
303
- this.getSubCategories(this.selectedValues.framework._id);
301
+ if (((_c = (_b = (_a = this.selectedValues) === null || _a === void 0 ? void 0 : _a.framework) === null || _b === void 0 ? void 0 : _b.parent_list_details) === null || _c === void 0 ? void 0 : _c.length) == 0 && ((_e = (_d = this.selectedValues) === null || _d === void 0 ? void 0 : _d.framework) === null || _e === void 0 ? void 0 : _e.child_list_details.length) == 0 && ((_g = (_f = this.selectedValues) === null || _f === void 0 ? void 0 : _f.framework) === null || _g === void 0 ? void 0 : _g.totalControls) > 0) {
302
+ this.currentList = 'responsibilities';
303
+ this.getResponsibilities(this.selectedValues.framework._id);
304
+ }
305
+ else {
306
+ this.currentList = 'categories';
307
+ this.getSubCategories(this.selectedValues.framework._id);
308
+ }
304
309
  break;
305
310
  case 'categories':
306
- debugger;
307
311
  this.currentList = 'responsibilities';
308
312
  this.getResponsibilities(this.selectedValues.categories._id);
309
313
  break;
@@ -364,13 +368,14 @@ export class FrameworkListComponent {
364
368
  }
365
369
  }
366
370
  assignSelectedControl(data) {
367
- this.assignControl.emit(data);
371
+ let selectedFrameworkData = this.selectedValues;
372
+ this.assignControl.emit({ data, selectedFrameworkData });
368
373
  }
369
374
  }
370
375
  FrameworkListComponent.decorators = [
371
376
  { type: Component, args: [{
372
377
  selector: 'app-framework-list',
373
- template: "<!-- <p>framework-list works!</p> -->\r\n<div class=\"framework-list\">\r\n <div class=\"framework-list-head\">\r\n <h3 *ngIf=\"breadCrumb.length==0\" class=\"framework-list-title\"> Select From a Framework</h3>\r\n <h3 *ngIf=\"breadCrumb.length>0\" class=\"framework-list-title\">\r\n <i class=\"icons\" *ngIf=\"breadCrumb?.length > 0\" (click)=\"getCategoryDetailsById()\">&#xe91d;</i>\r\n <ng-container *ngFor=\"let item of breadCrumb; let i = index\">\r\n <span class=\"arrow\">{{(i>0)?'>':''}}</span>\r\n <span\r\n [class.link]=\"tableComponent.currentEntity || (!(tableComponent.currentEntity) && i !== breadCrumb?.length -1)\"\r\n (click)=\"getCategoryDetailsById(item.itemId)\" [appTooltip]=\"item.itemName\" placement=\"bottom\"\r\n delay=\"0\">{{item.itemName}}\r\n </span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"tableComponent.currentEntity\"> <span class=\"arrow\">></span>\r\n {{breadCrumb[breadCrumb?.length - 1].itemName}}\r\n <span>&nbsp;for {{tableComponent.currentEntity}}</span>\r\n </ng-container>\r\n </h3>\r\n </div>\r\n <div class=\"framework-list-body\">\r\n <div class=\"filter-card-row\" *ngIf=\"currentList=='framework'\">\r\n <!--this section will not appear on child part -->\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label>Regulations</label>\r\n </div>\r\n\r\n <span class=\"counter\">{{frameworkCount.regulations}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label>Standards</label>\r\n </div>\r\n <span class=\"counter\">{{frameworkCount.standards}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'internalControls'\"\r\n (click)=\"changeTab('internalControls')\">\r\n <div class=\"left\">\r\n <label>Internal Controls</label>\r\n </div>\r\n <span class=\"counter\">{{frameworkCount.internalControls}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label>Others</label>\r\n </div>\r\n <span class=\"counter\">{{frameworkCount.others}}</span>\r\n </div>\r\n </div>\r\n <div class=\"framework-list-search\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchField [placeholder]=\"placeholderText[currentList]\"\r\n (keyup.enter)=\"searchBy($event.target.value,currentList)\" />\r\n </div>\r\n <!-- <app-workflow-pagination></app-workflow-pagination> -->\r\n <!-- For parent -->\r\n <!-- <div class=\"framework-list-pagination\">\r\n <app-workflow-pagination></app-workflow-pagination>\r\n </div> -->\r\n <div class=\"framework-list-table\" [class.no-card]=\"breadCrumb.length>0\">\r\n \r\n\r\n <app-no-data *ngIf=\"false\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n\r\n <app-framework-list-table *ngIf=\"currentList=='framework'\" [listLoader]=\"loader\" [frameworkType]=\"'framework'\"\r\n (selectedFramework)=\"selectFramework($event)\" [currentFramework]=\"selectedValues[currentList]\"\r\n [frameworksList]=\"frameworkData\">\r\n </app-framework-list-table>\r\n <app-framework-list-table *ngIf=\"currentList=='categories'\"[listLoader]=\"loader\" [frameworksList]=\"subCategoriesList\"\r\n (selectedFramework)=\"selectFramework($event)\" [currentFramework]=\"selectedValues[currentList]\" [frameworkType]=\"'subFramework'\">\r\n </app-framework-list-table>\r\n <app-framework-responsibility-table *ngIf=\"currentList=='responsibilities'\" [listLoader]=\"loader\" \r\n [currentSelectedControl]=\"selectedValues[currentList]\" [controlsList]=\"controlsList\"\r\n (selectedControl)=\"selectFramework($event)\" (assignControl)=\"assignSelectedControl($event)\">\r\n </app-framework-responsibility-table>\r\n <!-- old table list -->\r\n <!-- <app-parent-table #parentTable *ngIf=\"showParent\" [search]=\"search\"\r\n (expandCategory)=\"expandCategory($event)\" [tableList]=\"categoryList[activeTab].list\"\r\n (entrustFramework)=\"entrustFrameworkDetails($event)\">\r\n </app-parent-table> -->\r\n </div>\r\n\r\n\r\n </div>\r\n <!-- [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" (closeEvent)=\"save(selectedIds)\"\r\n (closeList)=\"close()\" (deleteEvent)=\"deleteEvent($event)\"\r\n [isDisabled]=\"(groupsList?.length + usersList?.length) === 0 || selectedUsers?.length === 0\" -->\r\n <app-floating-bar [selectedData]=\"(selectedValues[currentList]?.name)?[selectedValues[currentList]]:[]\"\r\n [displayElementKey]=\"floatingBarDisplayKeys[currentList]\" (closeEvent)=\"save()\" (closeList)=\"goBack()\"\r\n (deleteEvent)=\"remove()\"></app-floating-bar>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n</div>",
378
+ template: "<!-- <p>framework-list works!</p> -->\r\n<div class=\"framework-list\">\r\n <div class=\"framework-list-head\">\r\n <h3 *ngIf=\"currentList=='framework'\" class=\"framework-list-title\"> Select From a Framework</h3>\r\n <h3 *ngIf=\"currentList=='categories'\" class=\"framework-list-title\"> Select From a Framework >\r\n {{selectedValues?.framework?.name}}</h3>\r\n\r\n <h3 *ngIf=\"currentList=='responsibilities'\" class=\"framework-list-title\">\r\n <i class=\"icons\" (click)=\"goBack()\">&#xe91d;</i> {{selectedValues?.framework?.name}}</h3>\r\n\r\n <!-- <h3 *ngIf=\"breadCrumb.length>0\" class=\"framework-list-title\">\r\n <i class=\"icons\" *ngIf=\"breadCrumb?.length > 0\" (click)=\"getCategoryDetailsById()\">&#xe91d;</i>\r\n <ng-container *ngFor=\"let item of breadCrumb; let i = index\">\r\n <span class=\"arrow\">{{(i>0)?'>':''}}</span>\r\n <span\r\n [class.link]=\"tableComponent.currentEntity || (!(tableComponent.currentEntity) && i !== breadCrumb?.length -1)\"\r\n (click)=\"getCategoryDetailsById(item.itemId)\" [appTooltip]=\"item.itemName\" placement=\"bottom\"\r\n delay=\"0\">{{item.itemName}}\r\n </span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"tableComponent.currentEntity\"> <span class=\"arrow\">></span>\r\n {{breadCrumb[breadCrumb?.length - 1].itemName}}\r\n <span>&nbsp;for {{tableComponent.currentEntity}}</span>\r\n </ng-container>\r\n </h3> -->\r\n </div>\r\n <div class=\"framework-list-body\">\r\n <div class=\"filter-card-row\" *ngIf=\"currentList=='framework'\">\r\n <!--this section will not appear on child part -->\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label>Regulations</label>\r\n </div>\r\n\r\n <span class=\"counter\">{{frameworkCount.regulations}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label>Standards</label>\r\n </div>\r\n <span class=\"counter\">{{frameworkCount.standards}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'internalControls'\"\r\n (click)=\"changeTab('internalControls')\">\r\n <div class=\"left\">\r\n <label>Internal Controls</label>\r\n </div>\r\n <span class=\"counter\">{{frameworkCount.internalControls}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label>Others</label>\r\n </div>\r\n <span class=\"counter\">{{frameworkCount.others}}</span>\r\n </div>\r\n </div>\r\n <div class=\"framework-list-search\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchField [placeholder]=\"placeholderText[currentList]\"\r\n (keyup.enter)=\"searchBy($event.target.value,currentList)\" />\r\n </div>\r\n <!-- <app-workflow-pagination></app-workflow-pagination> -->\r\n <app-pagination *ngIf=\"currentList=='framework' && frameworkData.totalPages > 1\" [start]=\"frameworkData.from\"\r\n [end]=\"frameworkData.to\" [total]=\"frameworkData.totalRecords\" [pageCount]=\"frameworkData.totalPages\"\r\n [currentPage]=\"frameworkData.currentPage\" (selectedPage)=\"changePage($event,'frameworks')\"></app-pagination>\r\n <app-pagination *ngIf=\"currentList=='categories' && subCategoriesList.totalPages > 1\"\r\n [start]=\"subCategoriesList.from\" [end]=\"subCategoriesList.to\" [total]=\"subCategoriesList.totalRecords\"\r\n [pageCount]=\"subCategoriesList.totalPages\" [currentPage]=\"subCategoriesList.currentPage\"\r\n (selectedPage)=\"changePage($event,'categories')\"></app-pagination>\r\n <app-pagination *ngIf=\"currentList=='responsibilities' && responsibilitiesList.totalPages > 1\"\r\n [start]=\"responsibilitiesList.from\" [end]=\"responsibilitiesList.to\"\r\n [total]=\"responsibilitiesList.totalRecords\" [pageCount]=\"responsibilitiesList.totalPages\"\r\n [currentPage]=\"responsibilitiesList.currentPage\" (selectedPage)=\"changePage($event,'responsibilities')\">\r\n </app-pagination>\r\n <!-- For parent -->\r\n <!-- <div class=\"framework-list-pagination\">\r\n <app-workflow-pagination></app-workflow-pagination>\r\n </div> -->\r\n <div class=\"framework-list-table\" [class.no-card]=\"breadCrumb.length>0\">\r\n\r\n\r\n\r\n\r\n <app-framework-list-table *ngIf=\"currentList=='framework'\" [listLoader]=\"loader\"\r\n [frameworkType]=\"'framework'\" (selectedFramework)=\"selectFramework($event)\"\r\n [currentFramework]=\"selectedValues[currentList]\" [frameworksList]=\"frameworkData\">\r\n </app-framework-list-table>\r\n <app-framework-list-table *ngIf=\"currentList=='categories'\" [listLoader]=\"loader\"\r\n [frameworksList]=\"subCategoriesList\" (selectedFramework)=\"selectFramework($event)\"\r\n [currentFramework]=\"selectedValues[currentList]\" [frameworkType]=\"'subFramework'\">\r\n </app-framework-list-table>\r\n <app-framework-responsibility-table *ngIf=\"currentList=='responsibilities'\" [listLoader]=\"loader\"\r\n [currentSelectedControl]=\"selectedValues[currentList]\" [controlsList]=\"responsibilitiesList.data\"\r\n (selectedControl)=\"selectFramework($event)\" (assignControl)=\"assignSelectedControl($event)\">\r\n </app-framework-responsibility-table>\r\n <app-no-data *ngIf=\"frameworkData?.data?.length==0 && currentList=='framework' && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No data to display'\"></app-no-data>\r\n <app-no-data *ngIf=\"subCategoriesList?.data?.length==0 && currentList=='categories' && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No data to display'\"></app-no-data>\r\n <app-no-data *ngIf=\"responsibilitiesList?.data?.length==0 && currentList=='responsibilities' && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No data to display'\"></app-no-data>\r\n <!-- old table list -->\r\n <!-- <app-parent-table #parentTable *ngIf=\"showParent\" [search]=\"search\"\r\n (expandCategory)=\"expandCategory($event)\" [tableList]=\"categoryList[activeTab].list\"\r\n (entrustFramework)=\"entrustFrameworkDetails($event)\">\r\n </app-parent-table> -->\r\n </div>\r\n\r\n\r\n </div>\r\n <!-- [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" (closeEvent)=\"save(selectedIds)\"\r\n (closeList)=\"close()\" (deleteEvent)=\"deleteEvent($event)\"\r\n [isDisabled]=\"(groupsList?.length + usersList?.length) === 0 || selectedUsers?.length === 0\" -->\r\n <app-floating-bar [selectedData]=\"(selectedValues[currentList]?.name)?[selectedValues[currentList]]:[]\"\r\n [displayElementKey]=\"floatingBarDisplayKeys[currentList]\" [isDisabled]=\"!selectedValues[currentList]?.name\" (closeEvent)=\"save()\" (closeList)=\"goBack()\"\r\n (deleteEvent)=\"remove()\"></app-floating-bar>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n</div>",
374
379
  styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .framework-list{border-top:3px solid #1e5dd3;position:fixed;top:0;right:500px;bottom:0;left:0;z-index:-1}::ng-deep .framework-list-head{height:44px;background:#fbfbfb;padding:12px}::ng-deep .framework-list-title{line-height:20px;font-size:14px;color:#161b2f;margin:0;font-weight:500;display:flex;align-items:center}::ng-deep .framework-list-title i{font-size:20px;margin-right:8px;cursor:pointer}::ng-deep .framework-list-title span.link{color:#1e5dd3;cursor:pointer;text-transform:capitalize}::ng-deep .framework-list-title span.link.not-click{pointer-events:none;color:#161b2f}::ng-deep .framework-list-title span.link:last-of-type{pointer-events:none;color:#161b2f}::ng-deep .framework-list-title span{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}::ng-deep .framework-list-title span.arrow{margin:0 8px;display:inline-block;font-size:20px}::ng-deep .framework-list-title span.arrow:empty{display:none}::ng-deep .framework-list-search{position:relative;margin-bottom:8px}::ng-deep .framework-list-search input{height:44px;line-height:24px;padding:10px 15px 10px 40px;outline:none;border:1px solid #7475763f;border-radius:4px;width:100%;font-size:14px;color:#747576}::ng-deep .framework-list-search input:focus{border-color:#1e5dd3}::ng-deep .framework-list-search i{position:absolute;left:17px;font-size:12px;font-weight:400;top:17px;pointer-events:none;color:#f1f1f1}::ng-deep .framework-list app-workflow-pagination .pagination-sec{padding-top:0!important}::ng-deep .framework-list-body{padding:28px 36px 12px;height:calc(100vh - 120px)}::ng-deep .framework-list-body .filter-card{display:flex;align-items:center;border:1px solid #dbdbdb;border-radius:4px;height:55px;padding:12px 15px;width:100%;justify-content:space-between;cursor:pointer}::ng-deep .framework-list-body .filter-card.active{box-shadow:0 3px 6px #1e5dd340}::ng-deep .framework-list-body .filter-card.active .counter{background:#f1f1f1;color:#161b2f}::ng-deep .framework-list-body .filter-card label{font-weight:600;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .framework-list-body .filter-card p{line-height:16px;font-size:10px;color:#161b2f;font-weight:600;margin:0}::ng-deep .framework-list-body .filter-card span.counter{display:flex;height:32px;min-width:32px;border-radius:4px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 5px;line-height:32px}::ng-deep .framework-list-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .framework-list-body .filter-card+.filter-card{margin-left:4px}::ng-deep .framework-list-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .framework-list-table{position:relative;height:calc(100% - 138px);overflow:hidden;overflow-y:auto}::ng-deep .framework-list-table app-parent-table{height:calc(100vh - 260px);overflow-x:hidden;overflow-y:auto;scrollbar-width:thin;display:block;padding-right:8px;margin-right:-8px}::ng-deep .framework-list-table app-parent-table::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::ng-deep .framework-list-table app-parent-table::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .framework-list-table app-parent-table::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .framework-list-table::-webkit-scrollbar-track{background-color:transparent}::ng-deep .framework-list-table::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .framework-list-table::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .framework-list-table.no-card{height:calc(100vh - 232px)}::ng-deep .framework-list-table:before{background:#fff;position:absolute;top:0;right:-8px;height:32px;width:8px;content:\"\"}"]
375
380
  },] }
376
381
  ];
@@ -378,11 +383,11 @@ FrameworkListComponent.ctorParameters = () => [
378
383
  { type: ResponsibilityService }
379
384
  ];
380
385
  FrameworkListComponent.propDecorators = {
381
- categoryList: [{ type: Input }],
382
386
  tableComponent: [{ type: ViewChild, args: ['parentTable',] }],
383
387
  entrustFramework: [{ type: Output }],
384
388
  closeFramework: [{ type: Output }],
385
389
  assignControl: [{ type: Output }],
390
+ previousSelectedValues: [{ type: Input }],
386
391
  policy: [{ type: Input }],
387
392
  frameWorkList: [{ type: Input }],
388
393
  selectedFrameWork: [{ type: Input }],
@@ -390,4 +395,4 @@ FrameworkListComponent.propDecorators = {
390
395
  searchfield: [{ type: ViewChild, args: ['searchField',] }],
391
396
  searchCategory: [{ type: ViewChild, args: ['searchCategory',] }]
392
397
  };
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvc2hhcmVkQ29tcG9uZW50cy9mcmFtZXdvcmstbGlzdC9mcmFtZXdvcmstbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBU3ZGLE1BQU0sT0FBTyxzQkFBc0I7SUFxQmpDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBbkJoRSxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFXLEVBQUUsQ0FBQTtRQUViLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc3QyxnQkFBVyxHQUFvRCxXQUFXLENBQUM7UUFDM0UsMkJBQXNCLEdBQUc7WUFDdkIsU0FBUyxFQUFFLE1BQU07WUFDakIsVUFBVSxFQUFFLE1BQU07WUFDbEIsZ0JBQWdCLEVBQUUsTUFBTTtTQUN6QixDQUFBO1FBNERELHNCQUFpQixHQUFHO1lBQ2xCLElB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U0wsS0FBSztnQ0FFTCxLQUFLO2lDQUNMLEtBQUs7MEJBQ0wsU0FBUyxTQUFDLGFBQWE7NkJBQ3ZCLFNBQVMsU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZElkcywgU2VsZWN0ZWRWYWx1ZXMgfSBmcm9tICcuL2ZyYW1ld29yay1pbnRlZ3JhdGlvbi1pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgUGFyZW50VGFibGVDb21wb25lbnQgfSBmcm9tICcuL3BhcmVudC10YWJsZS9wYXJlbnQtdGFibGUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZyYW1ld29yay1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZnJhbWV3b3JrLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZyYW1ld29yay1saXN0LmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZyYW1ld29ya0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNhdGVnb3J5TGlzdDogYW55O1xyXG4gIGJyZWFkQ3J1bWI6IGFueVtdID0gW107XHJcbiAgc2VhcmNoID0gJyc7XHJcbiAgc2hvd1BhcmVudCA9IHRydWU7XHJcbiAgc2hvd0NoaWxkID0gZmFsc2U7XHJcbiAgcGFyZW50RGF0YTogb2JqZWN0ID0ge31cclxuICBAVmlld0NoaWxkKCdwYXJlbnRUYWJsZScpIHRhYmxlQ29tcG9uZW50ITogUGFyZW50VGFibGVDb21wb25lbnQ7XHJcbiAgQE91dHB1dCgpIGVudHJ1c3RGcmFtZXdvcmsgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRnJhbWV3b3JrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhc3NpZ25Db250cm9sID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgY3VycmVudExpc3Q6ICdmcmFtZXdvcmsnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnID0gJ2ZyYW1ld29yayc7XHJcbiAgZmxvYXRpbmdCYXJEaXNwbGF5S2V5cyA9IHtcclxuICAgIGZyYW1ld29yazogJ25hbWUnLFxyXG4gICAgY2F0ZWdvcmllczogJ25hbWUnLFxyXG4gICAgcmVzcG9uc2liaWxpdGllczogJ25hbWUnLFxyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UpIHsgfVxyXG5cclxuICAvLyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKFwiY2F0ZWdvcnlMaXN0ID09PlwiLCB0aGlzLmNhdGVnb3J5TGlzdClcclxuICAvLyAgIHRoaXMucGFyZW50RGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5jYXRlZ29yeUxpc3QpO1xyXG5cclxuICAvLyAgIGNvbnNvbGUubG9nKFwiY2F0ZWdvcnlMaXN0ID09PlwiLCB0aGlzLnBhcmVudERhdGEpXHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG4gIGV4cGFuZENhdGVnb3J5KGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGlmIChjYXRlZ29yeS5jYXRlZ29yeV9uYW1lKSB7XHJcbiAgICAgIHRoaXMuYnJlYWRDcnVtYiA9IFtdO1xyXG4gICAgICBjYXRlZ29yeS5jYXRlZ29yeV9uYW1lLmZvckVhY2goKGNhdGVnb3J5SXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG9iajtcclxuICAgICAgICBpZiAoaW5kZXggPT0gY2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiBjYXRlZ29yeUl0ZW0sXHJcbiAgICAgICAgICAgIGl0ZW1JZDogY2F0ZWdvcnkuX2lkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgaXRlbU5hbWU6IGNhdGVnb3J5SXRlbSxcclxuICAgICAgICAgICAgaXRlbUlkOiBjYXRlZ29yeS5wYXJlbnRfY2F0X29ial9pZHNbaW5kZXhdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJlYWRDcnVtYi5wdXNoKG9iaik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcnlEZXRhaWxzQnlJZChpZD86IGFueSkge1xyXG5cclxuICAgIGlmICghaWQgfHwgaWQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmJyZWFkQ3J1bWIgPSBbXTtcclxuICAgICAgdGhpcy5zaG93UGFyZW50ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93Q2hpbGQgPSBmYWxzZTtcclxuICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IE9iamVjdC5hc3NpZ24odGhpcy5wYXJlbnREYXRhKVxyXG4gICAgICB0aGlzLnNob3dQYXJlbnQgPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UGFyZW50ID0gdHJ1ZTtcclxuICAgICAgfSwgMTAwKTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYmxlQ29tcG9uZW50LmdldENhdGVnb3J5RGV0YWlsc0J5SWQoaWQpO1xyXG4gIH1cclxuICBlbnRydXN0RnJhbWV3b3JrRGV0YWlscyhyZXBvcnQ6IGFueSkge1xyXG4gICAgdGhpcy5lbnRydXN0RnJhbWV3b3JrLmVtaXQocmVwb3J0KTtcclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmNsb3NlRnJhbWV3b3JrLmVtaXQoKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgc3ViQ2F0ZWdvcmllc0xpc3QgPSB7XHJcbiAgICBmcm9tOiAxLFxyXG4gICAgdG86IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHRvdGFsUGFnZTogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGRhdGE6IFtdLFxyXG4gIH07XHJcbiAgcmVzcG9uc2liaWxpdGllc0xpc3QgPSB7XHJcbiAgICBmcm9tOiAxLFxyXG4gICAgdG86IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHRvdGFsUGFnZTogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGRhdGE6IFtdLFxyXG4gIH07XHJcblxyXG4gIHNlYXJjaFRleHQgPSB7XHJcbiAgICBmcmFtZVdvcms6ICcnLFxyXG4gICAgY2F0ZWdvcnk6ICcnLFxyXG4gICAgcmVzcG9uc2liaWxpdHk6ICcnLFxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRWYWx1ZXM6IFNlbGVjdGVkVmFsdWVzID0ge1xyXG4gICAgZnJhbWV3b3JrOiB7fSxcclxuICAgIGNhdGVnb3JpZXM6IHt9LFxyXG4gICAgcmVzcG9uc2liaWxpdGllczoge31cclxuICB9XHJcblxyXG5cclxuICBzdWJtaXNzaW9uTG9hZGVyID0gZmFsc2U7XHJcbiAgY3VycmVudENhdGVnb3J5OiBhbnkgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgcG9saWN5OiBhbnkgPSB7fVxyXG4gIC8vIEBPdXRwdXQoKSBjaGFuZ2VUYWIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGN1cnJlbnRCdXNpbmVzc0N5Y2xlITogYW55O1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLy9wcm9ncmFtXHJcbiAgc3ViTGlzdCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZyYW1lV29ya0xpc3Q6IGFueTtcclxuICAvLyBASW5wdXQoKSBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEZyYW1lV29yayE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoRmllbGQnKSBzZWFyY2hmaWVsZCE6IGFueTtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hDYXRlZ29yeScpIHNlYXJjaENhdGVnb3J5ITogYW55O1xyXG4gIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXM6IGFueSA9IHtcclxuICAgIHByb2dyYW06IHt9LFxyXG4gICAgY2F0ZWdvcmllczogW11cclxuICB9XHJcbiAgZnJhbWV3b3JrRGF0YSA9IHtcclxuICAgIGRhdGE6IFtdLFxyXG4gICAgZnJvbTogMCxcclxuICAgIHRvOiAwLFxyXG4gICAgdG90YWxQYWdlczogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG5cclxuICB9XHJcbiAgZnJhbWV3b3JrQ291bnQgPSB7XHJcbiAgICByZWd1bGF0aW9uczogMCxcclxuICAgIHN0YW5kYXJkczogMCxcclxuICAgIGludGVybmFsQ29udHJvbHM6IDAsXHJcbiAgICBvdGhlcnM6IDBcclxuICB9XHJcbiAgZnJhbWVUeXBlT2JqZWN0ID0ge1xyXG4gICAgcmVndWxhdGlvbnM6IDEsXHJcbiAgICBzdGFuZGFyZHM6IDIsXHJcbiAgICBpbnRlcm5hbENvbnRyb2xzOiAzLFxyXG4gICAgb3RoZXJzOiAwLFxyXG4gIH1cclxuICBwbGFjZWhvbGRlclRleHQ9e1xyXG4gICAgZnJhbWV3b3JrOidTZWFyY2ggRnJhbWV3b3JrcycsXHJcbiAgICBjYXRlZ29yaWVzOidTZWFyY2ggQ2F0ZWdvcmllcycsXHJcbiAgICByZXNwb25zaWJpbGl0aWVzOidTZWFyY2ggUmVzcG9uc2liaWxpdGllcydcclxuICB9XHJcbmNvbnRyb2xzTGlzdDphbnlbXT1bXVxyXG4gIGRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlID0gZmFsc2U7XHJcbiAgXHJcbiAgYWN0aXZlVGFiOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxDb250cm9scycgfCAnb3RoZXJzJyA9ICdyZWd1bGF0aW9ucydcclxuXHJcbiAgLy9wcm9ncmFtXHJcblxyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEZyYW1ld29ya3NDb3VudCgpO1xyXG4gICAgdGhpcy5nZXRGcmFtZXdvcmtzTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWV3b3Jrc0NvdW50KCkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0RnJhbWVXb3JrQ291bnQoKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrQ291bnQgPSB7XHJcbiAgICAgICAgICByZWd1bGF0aW9uczogcmVzLnJlZ3VsYXRpb25zID8/IDAsXHJcbiAgICAgICAgICBzdGFuZGFyZHM6IHJlcy5zdGFuZGFyZHMgPz8gMCxcclxuICAgICAgICAgIGludGVybmFsQ29udHJvbHM6IHJlcy5pbnRlcm5hbENvbnRyb2xzID8/IDAsXHJcbiAgICAgICAgICBvdGhlcnM6IHJlcy5vdGhlcnMgPz8gMFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldEZyYW1ld29ya3NMaXN0KGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgndHlwZScsIHRoaXMuZnJhbWVUeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoVGV4dC5mcmFtZVdvcmspIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgdGhpcy5zZWFyY2hUZXh0LmZyYW1lV29yayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlJywgdGhpcy5mcmFtZXdvcmtEYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEZyYW1lV29ya0xpc3QocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEuZnJvbSA9IHJlcy5pdGVtc19mcm9tO1xyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrRGF0YS50byA9IHJlcy5pdGVtc190bztcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbF9wYWdlcztcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsX2l0ZW1zO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdWJDYXRlZ29yaWVzKGlkPzogYW55LGRhdGE/OmFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoVGV4dC5jYXRlZ29yeSkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCB0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZScsIHRoaXMuZnJhbWV3b3JrRGF0YS5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRGcmFtZXdvcmtTdWJDYXRlZ29yaWVzKGlkLHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QuZnJvbSA9IHJlcy5pdGVtc19mcm9tID8/IDE7XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC50byA9IHJlcy5pdGVtc190byA/PyAwO1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QudG90YWxQYWdlID0gcmVzLnRvdGFsX3BhZ2VzID8/IDA7XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC50b3RhbFJlY29yZHMgPSByZXMudG90YWxfaXRlbXMgPz8gMDtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LmRhdGEgPSByZXMuZGF0YSA/PyBbXTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBjaGFuZ2VUYWIodHlwZTogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsQ29udHJvbHMnIHwgJ290aGVycycpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMuZnJhbWV3b3JrRGF0YS5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQuZnJhbWVXb3JrID0gJyc7XHJcbiAgICB0aGlzLnNlYXJjaGZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIHRoaXMuZ2V0RnJhbWV3b3Jrc0xpc3QoKTtcclxuICB9XHJcblxyXG4gIGdldFJlc3BvbnNpYmlsaXRpZXMoaWQ/OiBhbnksZGF0YT86YW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChkYXRhPy5zZWFyY2ggfHwgdGhpcy5zZWFyY2hUZXh0LnJlc3BvbnNpYmlsaXR5KSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHRoaXMuc2VhcmNoVGV4dC5yZXNwb25zaWJpbGl0eSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlJywgdGhpcy5mcmFtZXdvcmtEYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEZyYW1ld29ya0NvbnRyb2xzKGlkLHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29udHJvbHNMaXN0PXJlcztcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAnZnJhbWV3b3JrcycgfCAnY2F0ZWdvcmllcycgfCAncmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdmcmFtZXdvcmtzJzpcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldEZyYW1ld29ya3NMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldFN1YkNhdGVnb3JpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5mcmFtZXdvcmsuX2lkLHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzLl9pZCx7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgc2VhcmNoQnkoZXZlbnQ6IGFueSwgdHlwZTogJ2ZyYW1ld29yaycgfCAnY2F0ZWdvcmllcycgfCAncmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdmcmFtZXdvcmsnOlxyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQuZnJhbWVXb3JrICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQuZnJhbWVXb3JrID0gZXZlbnQ7XHJcbiAgICAgICAgICB0aGlzLmdldEZyYW1ld29ya3NMaXN0KHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LmNhdGVnb3J5ICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkgPSBldmVudDtcclxuICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICB0aGlzLmdldFN1YkNhdGVnb3JpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5mcmFtZXdvcmsuX2lkLHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LnJlc3BvbnNpYmlsaXR5ICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQucmVzcG9uc2liaWxpdHkgPSBldmVudDtcclxuICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzLl9pZCx7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHNlbGVjdEZyYW1ld29yayhkYXRhOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TGlzdCkge1xyXG4gICAgICBjYXNlICdmcmFtZXdvcmsnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZnJhbWV3b3JrID0gZGF0YTtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSWRzLmNhdGVnb3JpZXM9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcyA9IHt9O1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcz0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0ge307XHJcbiAgICAgICAgLy8gdGhpcy5jdXJyZW50VGFiID0gJ2ZyYW1ld29yayc7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMgPSBkYXRhO1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJZHMuY2F0ZWdvcmllcz0gW107XHJcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZElkcy5yZXNwb25zaWJpbGl0aWVzPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSB7fTtcclxuICAgICAgICAvLyB0aGlzLmN1cnJlbnRUYWIgPSAnY2F0ZWdvcmllcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZnJhbWV3b3JrID0gZGF0YTtcclxuICAgICAgICAvLyAvLyB0aGlzLnNlbGVjdGVkSWRzLmNhdGVnb3JpZXM9IFtdO1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcz0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gZGF0YTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExpc3QpIHtcclxuICAgICAgY2FzZSAnZnJhbWV3b3JrJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0PSdjYXRlZ29yaWVzJztcclxuICAgICAgICB0aGlzLmdldFN1YkNhdGVnb3JpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5mcmFtZXdvcmsuX2lkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgZGVidWdnZXJcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0PSdyZXNwb25zaWJpbGl0aWVzJztcclxuICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzLl9pZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIHRoaXMuYXNzaWduU2VsZWN0ZWRDb250cm9sKHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ29CYWNrKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRMaXN0KSB7XHJcbiAgICAgIGNhc2UgJ2ZyYW1ld29yayc6XHJcbiAgICAgICAgdGhpcy5jbG9zZUZyYW1ld29yay5lbWl0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAnZnJhbWV3b3JrJ1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gJ2NhdGVnb3JpZXMnXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmUoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExpc3QpIHtcclxuICAgICAgY2FzZSAnZnJhbWV3b3JrJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmZyYW1ld29yayA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcyA9IHt9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSB7fTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0ge307XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgc2F2ZUNoYW5nZXModHlwZTogJ3Byb2dyYW1zJyB8ICdjYXRlZ29yaWVzJyB8ICdyZXNwb25zaWJpbGl0aWVzJyB8ICdwcm9ncmFtc09ubHknKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbXMnOlxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAnY2F0ZWdvcmllcyc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy5nZXRTdWJDYXRlZ29yaWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAncmVzcG9uc2liaWxpdGllcyc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy5nZXRSZXNwb25zaWJpbGl0aWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIC8vIHRoaXMuc3VibWl0cHJvZ3JhbUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3NpZ25TZWxlY3RlZENvbnRyb2woZGF0YTphbnkpe1xyXG4gICAgdGhpcy5hc3NpZ25Db250cm9sLmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvc2hhcmVkQ29tcG9uZW50cy9mcmFtZXdvcmstbGlzdC9mcmFtZXdvcmstbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFTdkYsTUFBTSxPQUFPLHNCQUFzQjtJQW1HakMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFsR2hFLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDdkIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixlQUFVLEdBQVcsRUFBRSxDQUFBO1FBRWIscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTdDLHNCQUFpQixHQUFHO1lBQ2xCLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxXQUFXLEVBQUUsQ0FBQztZQUNkLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFFLENBQUM7WUFDZixJQUFJLEVBQUUsRUFBRTtTQUNULENB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b21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRJZHMsIFNlbGVjdGVkVmFsdWVzIH0gZnJvbSAnLi9mcmFtZXdvcmstaW50ZWdyYXRpb24taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFBhcmVudFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9wYXJlbnQtdGFibGUvcGFyZW50LXRhYmxlLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1mcmFtZXdvcmstbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZyYW1ld29yay1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mcmFtZXdvcmstbGlzdC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGcmFtZXdvcmtMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIGJyZWFkQ3J1bWI6IGFueVtdID0gW107XHJcbiAgc2VhcmNoID0gJyc7XHJcbiAgc2hvd1BhcmVudCA9IHRydWU7XHJcbiAgc2hvd0NoaWxkID0gZmFsc2U7XHJcbiAgcGFyZW50RGF0YTogb2JqZWN0ID0ge31cclxuICBAVmlld0NoaWxkKCdwYXJlbnRUYWJsZScpIHRhYmxlQ29tcG9uZW50ITogUGFyZW50VGFibGVDb21wb25lbnQ7XHJcbiAgQE91dHB1dCgpIGVudHJ1c3RGcmFtZXdvcmsgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRnJhbWV3b3JrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhc3NpZ25Db250cm9sID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMhOiBhbnk7XHJcbiAgc3ViQ2F0ZWdvcmllc0xpc3QgPSB7XHJcbiAgICBmcm9tOiAxLFxyXG4gICAgdG86IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBkYXRhOiBbXSxcclxuICB9O1xyXG4gIHJlc3BvbnNpYmlsaXRpZXNMaXN0ID0ge1xyXG4gICAgZnJvbTogMSxcclxuICAgIHRvOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgZGF0YTogW10sXHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoVGV4dCA9IHtcclxuICAgIGZyYW1lV29yazogJycsXHJcbiAgICBjYXRlZ29yeTogJycsXHJcbiAgICByZXNwb25zaWJpbGl0eTogJycsXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFZhbHVlczogU2VsZWN0ZWRWYWx1ZXMgPSB7XHJcbiAgICBmcmFtZXdvcms6IHt9LFxyXG4gICAgY2F0ZWdvcmllczoge30sXHJcbiAgICByZXNwb25zaWJpbGl0aWVzOiB7fVxyXG4gIH1cclxuXHJcblxyXG4gIHN1Ym1pc3Npb25Mb2FkZXIgPSBmYWxzZTtcclxuICBjdXJyZW50Q2F0ZWdvcnk6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBwb2xpY3k6IGFueSA9IHt9XHJcbiAgLy8gQE91dHB1dCgpIGNoYW5nZVRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY3VycmVudEJ1c2luZXNzQ3ljbGUhOiBhbnk7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvL3Byb2dyYW1cclxuICBzdWJMaXN0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZnJhbWVXb3JrTGlzdDogYW55O1xyXG4gIC8vIEBJbnB1dCgpIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRnJhbWVXb3JrITogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hGaWVsZCcpIHNlYXJjaGZpZWxkITogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaENhdGVnb3J5Jykgc2VhcmNoQ2F0ZWdvcnkhOiBhbnk7XHJcblxyXG4gIGZyYW1ld29ya0RhdGEgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuXHJcbiAgfVxyXG4gIGZyYW1ld29ya0NvdW50ID0ge1xyXG4gICAgcmVndWxhdGlvbnM6IDAsXHJcbiAgICBzdGFuZGFyZHM6IDAsXHJcbiAgICBpbnRlcm5hbENvbnRyb2xzOiAwLFxyXG4gICAgb3RoZXJzOiAwXHJcbiAgfVxyXG4gIGZyYW1lVHlwZU9iamVjdCA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiAxLFxyXG4gICAgc3RhbmRhcmRzOiAyLFxyXG4gICAgaW50ZXJuYWxDb250cm9sczogMyxcclxuICAgIG90aGVyczogMCxcclxuICB9XHJcbiAgcGxhY2Vob2xkZXJUZXh0ID0ge1xyXG4gICAgZnJhbWV3b3JrOiAnU2VhcmNoIEZyYW1ld29ya3MnLFxyXG4gICAgY2F0ZWdvcmllczogJ1NlYXJjaCBDYXRlZ29yaWVzJyxcclxuICAgIHJlc3BvbnNpYmlsaXRpZXM6ICdTZWFyY2ggUmVzcG9uc2liaWxpdGllcydcclxuICB9XHJcbiAgY29udHJvbHNMaXN0OiBhbnlbXSA9IFtdXHJcbiAgZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSBmYWxzZTtcclxuXHJcbiAgYWN0aXZlVGFiOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxDb250cm9scycgfCAnb3RoZXJzJyA9ICdyZWd1bGF0aW9ucydcclxuXHJcbiAgY3VycmVudExpc3Q6ICdmcmFtZXdvcmsnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnID0gJ2ZyYW1ld29yayc7XHJcbiAgZmxvYXRpbmdCYXJEaXNwbGF5S2V5cyA9IHtcclxuICAgIGZyYW1ld29yazogJ25hbWUnLFxyXG4gICAgY2F0ZWdvcmllczogJ25hbWUnLFxyXG4gICAgcmVzcG9uc2liaWxpdGllczogJ25hbWUnLFxyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB7XHJcbiAgICAgICAgZnJhbWV3b3JrOiB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMuZnJhbWV3b3JrID8/IHt9LFxyXG4gICAgICAgIGNhdGVnb3JpZXM6IHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID8/IHt9LFxyXG4gICAgICAgIHJlc3BvbnNpYmlsaXRpZXM6IHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID8/IHt9LFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRGcmFtZXdvcmtzQ291bnQoKTtcclxuICAgIHRoaXMuZ2V0RnJhbWV3b3Jrc0xpc3QoKTtcclxuICB9XHJcblxyXG5cclxuICBleHBhbmRDYXRlZ29yeShjYXRlZ29yeTogYW55KSB7XHJcbiAgICBpZiAoY2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZSkge1xyXG4gICAgICB0aGlzLmJyZWFkQ3J1bWIgPSBbXTtcclxuICAgICAgY2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZS5mb3JFYWNoKChjYXRlZ29yeUl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBvYmo7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IGNhdGVnb3J5LmNhdGVnb3J5X25hbWUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICBpdGVtTmFtZTogY2F0ZWdvcnlJdGVtLFxyXG4gICAgICAgICAgICBpdGVtSWQ6IGNhdGVnb3J5Ll9pZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiBjYXRlZ29yeUl0ZW0sXHJcbiAgICAgICAgICAgIGl0ZW1JZDogY2F0ZWdvcnkucGFyZW50X2NhdF9vYmpfaWRzW2luZGV4XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJyZWFkQ3J1bWIucHVzaChvYmopO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIC8vIGdldENhdGVnb3J5RGV0YWlsc0J5SWQoaWQ/OiBhbnkpIHtcclxuXHJcbiAgLy8gICBpZiAoIWlkIHx8IGlkID09IG51bGwpIHtcclxuICAvLyAgICAgdGhpcy5icmVhZENydW1iID0gW107XHJcbiAgLy8gICAgIHRoaXMuc2hvd1BhcmVudCA9IHRydWU7XHJcbiAgLy8gICAgIHRoaXMuc2hvd0NoaWxkID0gZmFsc2U7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKClcclxuICAvLyAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBPYmplY3QuYXNzaWduKHRoaXMucGFyZW50RGF0YSlcclxuICAvLyAgICAgdGhpcy5zaG93UGFyZW50ID0gZmFsc2U7XHJcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuc2hvd1BhcmVudCA9IHRydWU7XHJcbiAgLy8gICAgIH0sIDEwMCk7XHJcbiAgLy8gICAgIHJldHVyblxyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy50YWJsZUNvbXBvbmVudC5nZXRDYXRlZ29yeURldGFpbHNCeUlkKGlkKTtcclxuICAvLyB9XHJcbiAgZW50cnVzdEZyYW1ld29ya0RldGFpbHMocmVwb3J0OiBhbnkpIHtcclxuICAgIHRoaXMuZW50cnVzdEZyYW1ld29yay5lbWl0KHJlcG9ydCk7XHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZUZyYW1ld29yay5lbWl0KCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWV3b3Jrc0NvdW50KGRhdGE/OiBhbnkpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKGRhdGE/LnNlYXJjaCB8fCB0aGlzLnNlYXJjaFRleHQuZnJhbWVXb3JrKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHRoaXMuc2VhcmNoVGV4dC5mcmFtZVdvcmspO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0RnJhbWVXb3JrQ291bnQocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrQ291bnQgPSB7XHJcbiAgICAgICAgICByZWd1bGF0aW9uczogcmVzLnJlZ3VsYXRpb25zID8/IDAsXHJcbiAgICAgICAgICBzdGFuZGFyZHM6IHJlcy5zdGFuZGFyZHMgPz8gMCxcclxuICAgICAgICAgIGludGVybmFsQ29udHJvbHM6IHJlcy5pbnRlcm5hbENvbnRyb2xzID8/IDAsXHJcbiAgICAgICAgICBvdGhlcnM6IHJlcy5vdGhlcnMgPz8gMFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldEZyYW1ld29ya3NMaXN0KGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgndHlwZScsIHRoaXMuZnJhbWVUeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoVGV4dC5mcmFtZVdvcmspIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgdGhpcy5zZWFyY2hUZXh0LmZyYW1lV29yayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlJywgdGhpcy5mcmFtZXdvcmtEYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEZyYW1lV29ya0xpc3QocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEuZnJvbSA9IHJlcy5pdGVtc19mcm9tO1xyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrRGF0YS50byA9IHJlcy5pdGVtc190bztcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbF9wYWdlcztcclxuICAgICAgICB0aGlzLmZyYW1ld29ya0RhdGEudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsX2l0ZW1zO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdWJDYXRlZ29yaWVzKGlkPzogYW55LCBkYXRhPzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChkYXRhPy5zZWFyY2ggfHwgdGhpcy5zZWFyY2hUZXh0LmNhdGVnb3J5KSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHRoaXMuc2VhcmNoVGV4dC5jYXRlZ29yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlJywgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRGcmFtZXdvcmtTdWJDYXRlZ29yaWVzKGlkLCBwYXJhbXMpLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LmZyb20gPSByZXMuaXRlbXNfZnJvbSA/PyAxO1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QudG8gPSByZXMuaXRlbXNfdG8gPz8gMDtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LnRvdGFsUGFnZXMgPSByZXMudG90YWxfcGFnZXMgPz8gMDtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbF9pdGVtcyA/PyAwO1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QuZGF0YSA9IHJlcy5kYXRhID8/IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNoYW5nZVRhYih0eXBlOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxDb250cm9scycgfCAnb3RoZXJzJykge1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0eXBlO1xyXG4gICAgdGhpcy5mcmFtZXdvcmtEYXRhLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dC5mcmFtZVdvcmsgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoZmllbGQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5nZXRGcmFtZXdvcmtzTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzcG9uc2liaWxpdGllcyhpZD86IGFueSwgZGF0YT86IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoVGV4dC5yZXNwb25zaWJpbGl0eSkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCB0aGlzLnNlYXJjaFRleHQucmVzcG9uc2liaWxpdHkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZScsIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QuY3VycmVudFBhZ2UpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0RnJhbWV3b3JrQ29udHJvbHMoaWQsIHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29udHJvbHNMaXN0ID0gcmVzO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QuZnJvbSA9IHJlcy5pdGVtc19mcm9tID8/IDE7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0aWVzTGlzdC50byA9IHJlcy5pdGVtc190byA/PyAwO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QudG90YWxQYWdlcyA9IHJlcy50b3RhbF9wYWdlcyA/PyAwO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsX2l0ZW1zID8/IDA7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0aWVzTGlzdC5kYXRhID0gcmVzLmRhdGEgPz8gcmVzO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQYWdlKGV2ZW50OiBhbnksIHR5cGU6ICdmcmFtZXdvcmtzJyB8ICdjYXRlZ29yaWVzJyB8ICdyZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ZyYW1ld29ya3MnOlxyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0RnJhbWV3b3Jrc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0U3ViQ2F0ZWdvcmllcyh0aGlzLnNlbGVjdGVkVmFsdWVzLmZyYW1ld29yay5faWQsIHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXModGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzLl9pZCwgeyBzZWFyY2g6IHRydWUgfSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHNlYXJjaEJ5KGV2ZW50OiBhbnksIHR5cGU6ICdmcmFtZXdvcmsnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnZnJhbWV3b3JrJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LmZyYW1lV29yayAhPSBldmVudCkge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0LmZyYW1lV29yayA9IGV2ZW50O1xyXG4gICAgICAgICAgdGhpcy5nZXRGcmFtZXdvcmtzTGlzdCh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgICAgICAgdGhpcy5nZXRGcmFtZXdvcmtzQ291bnQoeyBzZWFyY2g6IHRydWUgfSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LmNhdGVnb3J5ICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkgPSBldmVudDtcclxuICAgICAgICAgIHRoaXMuZ2V0U3ViQ2F0ZWdvcmllcyh0aGlzLnNlbGVjdGVkVmFsdWVzLmZyYW1ld29yay5faWQsIHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LnJlc3BvbnNpYmlsaXR5ICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQucmVzcG9uc2liaWxpdHkgPSBldmVudDtcclxuICAgICAgICAgIHRoaXMuZ2V0UmVzcG9uc2liaWxpdGllcyh0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMuX2lkLCB7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGcmFtZXdvcmsoZGF0YTogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExpc3QpIHtcclxuICAgICAgY2FzZSAnZnJhbWV3b3JrJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmZyYW1ld29yayA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0ge307XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMgPSBkYXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSB7fTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gZGF0YTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExpc3QpIHtcclxuICAgICAgY2FzZSAnZnJhbWV3b3JrJzpcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlcz8uZnJhbWV3b3JrPy5wYXJlbnRfbGlzdF9kZXRhaWxzPy5sZW5ndGggPT0gMCAmJiB0aGlzLnNlbGVjdGVkVmFsdWVzPy5mcmFtZXdvcms/LmNoaWxkX2xpc3RfZGV0YWlscy5sZW5ndGggPT0gMCAmJiB0aGlzLnNlbGVjdGVkVmFsdWVzPy5mcmFtZXdvcms/LnRvdGFsQ29udHJvbHMgPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gJ3Jlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgICAgICAgdGhpcy5nZXRSZXNwb25zaWJpbGl0aWVzKHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZnJhbWV3b3JrLl9pZCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gJ2NhdGVnb3JpZXMnO1xyXG4gICAgICAgICAgdGhpcy5nZXRTdWJDYXRlZ29yaWVzKHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZnJhbWV3b3JrLl9pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gJ3Jlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgICAgIHRoaXMuZ2V0UmVzcG9uc2liaWxpdGllcyh0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMuX2lkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgdGhpcy5hc3NpZ25TZWxlY3RlZENvbnRyb2wodGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnb0JhY2soKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExpc3QpIHtcclxuICAgICAgY2FzZSAnZnJhbWV3b3JrJzpcclxuICAgICAgICB0aGlzLmNsb3NlRnJhbWV3b3JrLmVtaXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdmcmFtZXdvcmsnXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAnY2F0ZWdvcmllcydcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSgpIHtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TGlzdCkge1xyXG4gICAgICBjYXNlICdmcmFtZXdvcmsnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZnJhbWV3b3JrID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0ge307XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcyA9IHt9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSB7fTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzYXZlQ2hhbmdlcyh0eXBlOiAncHJvZ3JhbXMnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnIHwgJ3Byb2dyYW1zT25seScpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdwcm9ncmFtcyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdjYXRlZ29yaWVzJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmdldFN1YkNhdGVnb3JpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdyZXNwb25zaWJpbGl0aWVzJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgLy8gdGhpcy5zdWJtaXRwcm9ncmFtSW50ZWdyYXRpb24oKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzc2lnblNlbGVjdGVkQ29udHJvbChkYXRhOiBhbnkpIHtcclxuICAgIGxldCBzZWxlY3RlZEZyYW1ld29ya0RhdGEgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xyXG4gICAgdGhpcy5hc3NpZ25Db250cm9sLmVtaXQoeyBkYXRhLCBzZWxlY3RlZEZyYW1ld29ya0RhdGEgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=