vc-create-dashboard 2.9.5 → 2.9.6

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 (152) hide show
  1. package/esm2022/lib/configurations.mjs +7 -0
  2. package/esm2022/lib/create-dashboard-container/categories/categories.component.mjs +210 -0
  3. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +549 -0
  4. package/{esm2020 → esm2022}/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +15 -15
  5. package/esm2022/lib/create-dashboard-container/create-dashboard.component.mjs +1080 -0
  6. package/{esm2020 → esm2022}/lib/create-dashboard-container/create-dashboard.module.mjs +49 -49
  7. package/{esm2020 → esm2022}/lib/create-dashboard-container/directives/directives.module.mjs +5 -5
  8. package/esm2022/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +36 -0
  9. package/esm2022/lib/create-dashboard-container/form-group/form-group.component.mjs +152 -0
  10. package/esm2022/lib/create-dashboard-container/frequency/frequency.component.mjs +309 -0
  11. package/{esm2020 → esm2022}/lib/create-dashboard-container/pipes/filter.pipe.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/create-dashboard-container/pipes/search.pipe.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/create-dashboard-container/pipes/text-count.pipe.mjs +4 -4
  14. package/esm2022/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +145 -0
  15. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +195 -0
  16. package/esm2022/lib/create-dashboard-container/services/auth.service.mjs +31 -0
  17. package/esm2022/lib/create-dashboard-container/services/configure-widgets.service.mjs +227 -0
  18. package/esm2022/lib/create-dashboard-container/services/create-dashboard.service.mjs +126 -0
  19. package/esm2022/lib/create-dashboard-container/services/pagination.service.mjs +28 -0
  20. package/esm2022/lib/create-dashboard-container/user-list/user-list.component.mjs +421 -0
  21. package/{esm2020 → esm2022}/lib/create-dashboard.service.mjs +4 -4
  22. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +52 -0
  23. package/{esm2020 → esm2022}/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +9 -9
  24. package/esm2022/lib/ui-kit/dialog/dialog-config.mjs +7 -0
  25. package/{esm2020 → esm2022}/lib/ui-kit/dialog/dialog-injector.mjs +4 -2
  26. package/esm2022/lib/ui-kit/dialog/dialog-ref.mjs +11 -0
  27. package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +96 -0
  28. package/{esm2020 → esm2022}/lib/ui-kit/dialog/dialog.module.mjs +5 -5
  29. package/esm2022/lib/ui-kit/dialog/dialog.service.mjs +56 -0
  30. package/esm2022/lib/ui-kit/dialog/insertion.directive.mjs +17 -0
  31. package/esm2022/lib/ui-kit/floating-bar/floating-bar.component.mjs +57 -0
  32. package/{esm2020 → esm2022}/lib/ui-kit/floating-bar/floating-bar.module.mjs +9 -9
  33. package/esm2022/lib/ui-kit/formgroup/click-outside.directive.mjs +30 -0
  34. package/esm2022/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +29 -0
  35. package/esm2022/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +34 -0
  36. package/{esm2020 → esm2022}/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +4 -4
  37. package/esm2022/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +119 -0
  38. package/esm2022/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +39 -0
  39. package/{esm2020 → esm2022}/lib/ui-kit/formgroup/formgroup.module.mjs +17 -17
  40. package/{esm2020 → esm2022}/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +4 -4
  41. package/{esm2020 → esm2022}/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +4 -4
  42. package/esm2022/lib/ui-kit/no-data/no-data.component.mjs +47 -0
  43. package/{esm2020 → esm2022}/lib/ui-kit/no-data/no-data.module.mjs +5 -5
  44. package/esm2022/lib/ui-kit/pagination/pagination.component.mjs +130 -0
  45. package/{esm2020 → esm2022}/lib/ui-kit/pagination/pagination.module.mjs +5 -5
  46. package/esm2022/lib/ui-kit/popover/popover.component.mjs +142 -0
  47. package/esm2022/lib/ui-kit/popover/popover.directive.mjs +93 -0
  48. package/{esm2020 → esm2022}/lib/ui-kit/popover/popover.module.mjs +5 -5
  49. package/esm2022/lib/ui-kit/popover/popover.service.mjs +23 -0
  50. package/esm2022/lib/ui-kit/select/cs-option/cs-option.component.mjs +41 -0
  51. package/esm2022/lib/ui-kit/select/cs-select/cs-select.component.mjs +105 -0
  52. package/esm2022/lib/ui-kit/select/safe-html.pipe.mjs +21 -0
  53. package/{esm2020 → esm2022}/lib/ui-kit/select/select.module.mjs +5 -5
  54. package/esm2022/lib/ui-kit/services/cs-select.service.mjs +16 -0
  55. package/{esm2020 → esm2022}/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +10 -8
  56. package/{esm2020 → esm2022}/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +5 -5
  57. package/esm2022/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +46 -0
  58. package/{esm2020 → esm2022}/lib/ui-kit/snack-bar/snack-bar.module.mjs +5 -5
  59. package/{esm2020 → esm2022}/lib/ui-kit/snack-bar/snack-bar.service.mjs +6 -7
  60. package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +161 -0
  61. package/{esm2020 → esm2022}/lib/ui-kit/tooltip/tooltip.module.mjs +5 -5
  62. package/esm2022/lib/ui-kit/v-loader/loader/loader.component.mjs +23 -0
  63. package/esm2022/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +23 -0
  64. package/{esm2020 → esm2022}/lib/ui-kit/v-loader/v-loader.module.mjs +5 -5
  65. package/esm2022/vc-create-dashboard.mjs +5 -0
  66. package/fesm2022/vc-create-dashboard.mjs +5338 -0
  67. package/fesm2022/vc-create-dashboard.mjs.map +1 -0
  68. package/index.d.ts +1 -1
  69. package/lib/create-dashboard-container/categories/categories.component.d.ts +1 -1
  70. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +1 -1
  71. package/lib/create-dashboard-container/create-dashboard.component.d.ts +1 -1
  72. package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +1 -1
  73. package/lib/create-dashboard-container/form-group/form-group.component.d.ts +1 -1
  74. package/lib/create-dashboard-container/frequency/frequency.component.d.ts +1 -1
  75. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +1 -1
  76. package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +1 -1
  77. package/lib/create-dashboard-container/user-list/user-list.component.d.ts +1 -1
  78. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +1 -1
  79. package/lib/ui-kit/dialog/dialog-injector.d.ts +2 -2
  80. package/lib/ui-kit/dialog/dialog.component.d.ts +1 -1
  81. package/lib/ui-kit/dialog/insertion.directive.d.ts +1 -1
  82. package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +1 -1
  83. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +1 -1
  84. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +1 -1
  85. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +1 -1
  86. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +1 -1
  87. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +1 -1
  88. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +1 -1
  89. package/lib/ui-kit/no-data/no-data.component.d.ts +1 -1
  90. package/lib/ui-kit/pagination/pagination.component.d.ts +1 -1
  91. package/lib/ui-kit/popover/popover.component.d.ts +1 -1
  92. package/lib/ui-kit/popover/popover.directive.d.ts +1 -1
  93. package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +1 -1
  94. package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +1 -1
  95. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +1 -1
  96. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +1 -1
  97. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +1 -1
  98. package/lib/ui-kit/v-loader/loader/loader.component.d.ts +1 -1
  99. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +1 -1
  100. package/package.json +6 -12
  101. package/esm2020/create-dashboard.mjs +0 -5
  102. package/esm2020/lib/configurations.mjs +0 -6
  103. package/esm2020/lib/create-dashboard-container/categories/categories.component.mjs +0 -209
  104. package/esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +0 -545
  105. package/esm2020/lib/create-dashboard-container/create-dashboard.component.mjs +0 -1067
  106. package/esm2020/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +0 -35
  107. package/esm2020/lib/create-dashboard-container/form-group/form-group.component.mjs +0 -141
  108. package/esm2020/lib/create-dashboard-container/frequency/frequency.component.mjs +0 -305
  109. package/esm2020/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +0 -146
  110. package/esm2020/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +0 -194
  111. package/esm2020/lib/create-dashboard-container/services/auth.service.mjs +0 -29
  112. package/esm2020/lib/create-dashboard-container/services/configure-widgets.service.mjs +0 -224
  113. package/esm2020/lib/create-dashboard-container/services/create-dashboard.service.mjs +0 -123
  114. package/esm2020/lib/create-dashboard-container/services/pagination.service.mjs +0 -29
  115. package/esm2020/lib/create-dashboard-container/user-list/user-list.component.mjs +0 -414
  116. package/esm2020/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +0 -53
  117. package/esm2020/lib/ui-kit/dialog/dialog-config.mjs +0 -3
  118. package/esm2020/lib/ui-kit/dialog/dialog-ref.mjs +0 -12
  119. package/esm2020/lib/ui-kit/dialog/dialog.component.mjs +0 -85
  120. package/esm2020/lib/ui-kit/dialog/dialog.service.mjs +0 -52
  121. package/esm2020/lib/ui-kit/dialog/insertion.directive.mjs +0 -16
  122. package/esm2020/lib/ui-kit/floating-bar/floating-bar.component.mjs +0 -52
  123. package/esm2020/lib/ui-kit/formgroup/click-outside.directive.mjs +0 -29
  124. package/esm2020/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +0 -27
  125. package/esm2020/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +0 -30
  126. package/esm2020/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +0 -100
  127. package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +0 -35
  128. package/esm2020/lib/ui-kit/no-data/no-data.component.mjs +0 -40
  129. package/esm2020/lib/ui-kit/pagination/pagination.component.mjs +0 -127
  130. package/esm2020/lib/ui-kit/popover/popover.component.mjs +0 -133
  131. package/esm2020/lib/ui-kit/popover/popover.directive.mjs +0 -86
  132. package/esm2020/lib/ui-kit/popover/popover.service.mjs +0 -17
  133. package/esm2020/lib/ui-kit/select/cs-option/cs-option.component.mjs +0 -36
  134. package/esm2020/lib/ui-kit/select/cs-select/cs-select.component.mjs +0 -89
  135. package/esm2020/lib/ui-kit/select/safe-html.pipe.mjs +0 -20
  136. package/esm2020/lib/ui-kit/services/cs-select.service.mjs +0 -15
  137. package/esm2020/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +0 -45
  138. package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +0 -153
  139. package/esm2020/lib/ui-kit/v-loader/loader/loader.component.mjs +0 -21
  140. package/esm2020/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +0 -21
  141. package/fesm2015/create-dashboard.mjs +0 -5195
  142. package/fesm2015/create-dashboard.mjs.map +0 -1
  143. package/fesm2020/create-dashboard.mjs +0 -5162
  144. package/fesm2020/create-dashboard.mjs.map +0 -1
  145. /package/{esm2020 → esm2022}/lib/create-dashboard-container/categories/categories-config.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/create-dashboard-container/create-dashboard-config.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/create-dashboard-container/interfaces/widget-data-model.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/create-dashboard-container/user-list/user-list.config.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs +0 -0
  152. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,421 @@
1
+ import { HttpParams } from '@angular/common/http';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../services/pagination.service";
5
+ import * as i2 from "../services/create-dashboard.service";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "../../ui-kit/formgroup/cs-checkbox/cs-checkbox.component";
8
+ import * as i5 from "@angular/forms";
9
+ import * as i6 from "../../ui-kit/tooltip/tooltip.directive";
10
+ import * as i7 from "../../ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component";
11
+ import * as i8 from "../../ui-kit/pagination/pagination.component";
12
+ import * as i9 from "../../ui-kit/popover/popover.component";
13
+ import * as i10 from "../../ui-kit/popover/popover.directive";
14
+ import * as i11 from "../../ui-kit/v-loader/loader-inline/loader-inline.component";
15
+ import * as i12 from "../../ui-kit/no-data/no-data.component";
16
+ export class UserListComponent {
17
+ paginationService;
18
+ dashboardService;
19
+ closeUserList = new EventEmitter();
20
+ saveSelectedUsers = new EventEmitter();
21
+ selectionType = '';
22
+ listDetails = {
23
+ displayElementKey: '',
24
+ displayGroupKey: '',
25
+ groupIdkey: '',
26
+ elementIdKey: '',
27
+ tooltipKey: '',
28
+ selectedUsersList: [],
29
+ selectedGroupList: [],
30
+ nonRemovableUsersList: []
31
+ };
32
+ footerDetails = {
33
+ selectedData: [],
34
+ nonRemovableList: [],
35
+ displayElementKey: '',
36
+ elementId: '',
37
+ singularText: 'User selected',
38
+ pluralText: 'Users selected',
39
+ showFrequency: false,
40
+ frequencyText: '',
41
+ isDisabled: false
42
+ };
43
+ vLoader = false;
44
+ vLoaderGroups = false;
45
+ totalPages = 1;
46
+ limit = 1;
47
+ totalList = 1;
48
+ feature;
49
+ totalgroupscount;
50
+ searchList = [];
51
+ searchValue = '';
52
+ searchFilter = '';
53
+ selectedIds = [];
54
+ selectedList = [];
55
+ groupdata = [];
56
+ animation = true;
57
+ totalgroups;
58
+ total_group_pages;
59
+ selectedGroupIds = [];
60
+ groupsEnabled;
61
+ selectedgroupList = [];
62
+ currentPage = 1;
63
+ constructor(paginationService, dashboardService) {
64
+ this.paginationService = paginationService;
65
+ this.dashboardService = dashboardService;
66
+ this.paginationService.reset();
67
+ this.getOrganizationUsersCount('');
68
+ }
69
+ ngOnChanges() {
70
+ }
71
+ ngOnInit() {
72
+ this.groupsEnabled = this.feature?.isFeatureEnabled("ff_groups_improvements");
73
+ this.animation = true;
74
+ setTimeout(() => {
75
+ this.animation = false;
76
+ }, 300);
77
+ if (this.listDetails.selectedUsersList.length > 0) {
78
+ this.selectedList = [...new Set(this.listDetails.selectedUsersList)];
79
+ const selectedData = [...new Set(this.listDetails.selectedUsersList)];
80
+ this.footerDetails.selectedData = selectedData;
81
+ this.footerDetails.nonRemovableList = this.listDetails.nonRemovableUsersList;
82
+ this.selectedIds = selectedData.map((ele) => {
83
+ if (ele[this.listDetails.elementIdKey]) {
84
+ return ele[this.listDetails.elementIdKey];
85
+ }
86
+ });
87
+ }
88
+ this.getUsersList({
89
+ // p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
90
+ p: this.paginationService.currentPage ?? 1,
91
+ type: '',
92
+ });
93
+ this.footerDetails.displayElementKey = this.listDetails.displayElementKey;
94
+ this.footerDetails.elementId = this.listDetails.elementIdKey;
95
+ if (this.groupsEnabled) {
96
+ this.getGroupsList({});
97
+ }
98
+ if (this.listDetails.selectedGroupList.length > 0) {
99
+ this.selectedgroupList = [...new Set(this.listDetails.selectedGroupList)];
100
+ const selectedData = [...new Set(this.listDetails.selectedGroupList)];
101
+ this.footerDetails.selectedData = selectedData;
102
+ this.footerDetails.nonRemovableList = this.listDetails.nonRemovableUsersList;
103
+ this.selectedGroupIds = selectedData.map((ele) => {
104
+ if (ele[this.listDetails.groupIdkey]) {
105
+ return ele[this.listDetails.groupIdkey];
106
+ }
107
+ });
108
+ }
109
+ }
110
+ cancelChanges() {
111
+ }
112
+ removeElement(event) {
113
+ }
114
+ submitChanges() {
115
+ }
116
+ selectAll(event) {
117
+ if (event) {
118
+ this.searchList.forEach(searchElement => {
119
+ if (!this.selectedIds.includes(searchElement[this.listDetails.elementIdKey])) {
120
+ this.selectedList.push(searchElement);
121
+ this.selectedIds.push(searchElement[this.listDetails.elementIdKey]);
122
+ this.footerDetails.selectedData = this.selectedList;
123
+ }
124
+ });
125
+ }
126
+ else {
127
+ this.searchList.forEach(searchElement => {
128
+ if (!this.listDetails.nonRemovableUsersList.includes(searchElement[this.listDetails.elementIdKey])) {
129
+ const index = this.selectedList.findIndex(ele => ele[this.listDetails.elementIdKey] ===
130
+ searchElement[this.listDetails.elementIdKey]);
131
+ this.selectedList.splice(index, 1);
132
+ const filteredList = [...this.selectedList];
133
+ this.footerDetails.selectedData = this.selectedList;
134
+ const idIndex = this.selectedIds.findIndex(ele => ele === searchElement[this.listDetails.elementIdKey]);
135
+ this.selectedIds.splice(idIndex, 1);
136
+ }
137
+ });
138
+ }
139
+ }
140
+ /**
141
+ * Selects all admins and managers at once by making api call.
142
+ * @param event consists boolean value to select of unselect.
143
+ */
144
+ selectAllUsers(event) {
145
+ if (event) {
146
+ this.vLoader = true;
147
+ this.dashboardService.getAllUsers().subscribe((res) => {
148
+ if (res.length > 1) {
149
+ res.forEach((searchElement) => {
150
+ if (!this.selectedIds.includes(searchElement[this.listDetails.elementIdKey])) {
151
+ this.selectedList.push(searchElement);
152
+ this.selectedIds.push(searchElement[this.listDetails.elementIdKey]);
153
+ this.footerDetails.selectedData = this.selectedList;
154
+ }
155
+ });
156
+ }
157
+ this.vLoader = false;
158
+ });
159
+ }
160
+ else {
161
+ const selectedData = [...new Set(this.selectedList)];
162
+ const index = selectedData.findIndex(ele => ele[this.listDetails.elementIdKey] === this.listDetails.nonRemovableUsersList[0]);
163
+ if (index != -1) {
164
+ const owner = Object.assign(selectedData[index]);
165
+ this.selectedList = [];
166
+ this.selectedIds = [];
167
+ this.footerDetails.selectedData = [];
168
+ this.selectedList.push(owner);
169
+ this.selectedIds.push(owner.member_id);
170
+ this.footerDetails.selectedData = this.selectedList;
171
+ }
172
+ else {
173
+ this.selectedList = [];
174
+ this.selectedIds = [];
175
+ this.footerDetails.selectedData = [];
176
+ }
177
+ }
178
+ }
179
+ selectAllGroups(event) {
180
+ let params = new HttpParams();
181
+ params = params.append('fetch_all', 1);
182
+ if (event) {
183
+ this.vLoaderGroups = true;
184
+ this.dashboardService.getAllGroups(params).subscribe((res) => {
185
+ if (res.data.length > 1) {
186
+ res.data.forEach((searchElement) => {
187
+ if (!this.selectedGroupIds.includes(searchElement[this.listDetails.groupIdkey])) {
188
+ this.selectedgroupList.push(searchElement);
189
+ this.selectedGroupIds.push(searchElement[this.listDetails.groupIdkey]);
190
+ this.footerDetails.selectedData = this.selectedgroupList;
191
+ }
192
+ });
193
+ }
194
+ this.vLoaderGroups = false;
195
+ });
196
+ }
197
+ else {
198
+ this.selectedgroupList = [];
199
+ this.selectedGroupIds = [];
200
+ this.footerDetails.selectedData = [];
201
+ }
202
+ }
203
+ selectAllsearchgroups(event) {
204
+ if (event) {
205
+ this.groupdata.forEach(searchElement => {
206
+ if (!this.selectedGroupIds.includes(searchElement[this.listDetails.groupIdkey])) {
207
+ this.selectedgroupList.push(searchElement);
208
+ this.selectedGroupIds.push(searchElement[this.listDetails.groupIdkey]);
209
+ this.footerDetails.selectedData = this.selectedgroupList;
210
+ }
211
+ });
212
+ }
213
+ else {
214
+ this.selectedgroupList = [];
215
+ this.selectedGroupIds = [];
216
+ this.footerDetails.selectedData = [];
217
+ }
218
+ }
219
+ /**
220
+ * Selects checked item from the list.
221
+ * In case of user's list calculates number of admins/manages to set visibility(either to all admins/ admins and managers)
222
+ * @param data is the selected element
223
+ */
224
+ selectElement(data) {
225
+ if (this.selectedIds.includes(data[this.listDetails.elementIdKey])) {
226
+ if (!this.listDetails.nonRemovableUsersList.includes(data[this.listDetails.elementIdKey])) {
227
+ const index = this.selectedList.findIndex(ele => ele[this.listDetails.elementIdKey] === data[this.listDetails.elementIdKey]);
228
+ this.selectedList.splice(index, 1);
229
+ this.footerDetails.selectedData = this.selectedList;
230
+ const idIndex = this.selectedIds.findIndex(ele => ele === data[this.listDetails.elementIdKey]);
231
+ this.selectedIds.splice(idIndex, 1);
232
+ }
233
+ }
234
+ else {
235
+ this.selectedList.push(data);
236
+ this.selectedIds.push(data[this.listDetails.elementIdKey]);
237
+ this.footerDetails.selectedData = this.selectedList;
238
+ }
239
+ }
240
+ selectGroupElement(data) {
241
+ if (this.selectedGroupIds.includes(data[this.listDetails.groupIdkey])) {
242
+ const index = this.selectedgroupList.findIndex((ele) => ele[this.listDetails.groupIdkey] === data[this.listDetails.groupIdkey]);
243
+ this.selectedgroupList.splice(index, 1);
244
+ this.footerDetails.selectedData = this.selectedgroupList;
245
+ const idIndex = this.selectedGroupIds.findIndex(ele => ele === data[this.listDetails.groupIdkey]);
246
+ this.selectedGroupIds.splice(idIndex, 1);
247
+ }
248
+ else {
249
+ this.selectedgroupList.push(data);
250
+ this.selectedGroupIds.push(data[this.listDetails.groupIdkey]);
251
+ this.footerDetails.selectedData = this.selectedgroupList;
252
+ }
253
+ }
254
+ /**
255
+ * It is used to set and search value incase of backend driven list to differentiate search list and original list
256
+ */
257
+ setSearchValue() {
258
+ if (this.paginationService.searchValue !== this.searchValue) {
259
+ this.paginationService.currentPage = 1;
260
+ this.paginationService.searchValue = this.searchValue;
261
+ this.paginationFilter(true);
262
+ }
263
+ }
264
+ /**
265
+ * it is used check select all condition incase of backend driven search
266
+ */
267
+ checkSelectAll() {
268
+ if (this.searchList.length > 0) {
269
+ const data = this.searchList.every(ele => this.selectedIds.includes(ele[this.listDetails.elementIdKey]));
270
+ return data;
271
+ }
272
+ else {
273
+ return false;
274
+ }
275
+ }
276
+ /**
277
+ * it is used check select all groups condition incase of backend driven search
278
+ */
279
+ checkSelectAllGroups() {
280
+ if (this.groupdata.length > 0) {
281
+ const data = this.groupdata.every(ele => this.selectedGroupIds.includes(ele[this.listDetails.groupIdkey]));
282
+ return data;
283
+ }
284
+ else {
285
+ return false;
286
+ }
287
+ }
288
+ /**
289
+ * Filter list user's list based on pagination by making api call
290
+ * @param event specifies a boolean value to call api
291
+ */
292
+ paginationFilter(event) {
293
+ if (!event)
294
+ return;
295
+ if (this.groupsEnabled) {
296
+ this.vLoader = true;
297
+ if (this.currentTab == 'USER') {
298
+ this.getUsersList({
299
+ // p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
300
+ p: this.paginationService.currentPage ?? 1,
301
+ type: '',
302
+ q: (!this.paginationService.searchValue) ? '' : this.paginationService.searchValue,
303
+ });
304
+ this.getOrganizationUsersCount({
305
+ p: this.paginationService.currentPage ?? 1,
306
+ type: '',
307
+ q: (!this.paginationService.searchValue) ? '' : this.paginationService.searchValue,
308
+ });
309
+ }
310
+ else {
311
+ this.getGroupsList({
312
+ page: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
313
+ groupName: (!this.paginationService.searchValue) ? '' : this.paginationService.searchValue,
314
+ });
315
+ }
316
+ }
317
+ else {
318
+ this.vLoader = true;
319
+ this.getUsersList({
320
+ // p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
321
+ p: this.paginationService.currentPage ?? 1,
322
+ type: '',
323
+ q: (!this.paginationService.searchValue) ? '' : this.paginationService.searchValue,
324
+ });
325
+ this.getOrganizationUsersCount({
326
+ p: this.paginationService.currentPage ?? 1,
327
+ type: '',
328
+ q: (!this.paginationService.searchValue) ? '' : this.paginationService.searchValue,
329
+ });
330
+ }
331
+ }
332
+ /**
333
+ * Gets user's list by making api call
334
+ * @param url contains userlist filter details
335
+ */
336
+ getUsersList(url) {
337
+ this.vLoader = true;
338
+ this.dashboardService.getOrganizationUsers(url ? url : '').subscribe(res => {
339
+ this.searchList = res;
340
+ this.vLoader = false;
341
+ });
342
+ }
343
+ getGroupsList(event) {
344
+ this.vLoaderGroups = true;
345
+ let params = new HttpParams();
346
+ if (event.hasOwnProperty("groupName")) {
347
+ params = params.append('groupName', event["groupName"]);
348
+ }
349
+ if (event.hasOwnProperty("page") && !this.searchValue) {
350
+ params = params.append('page', event["page"]);
351
+ }
352
+ if (this.totalgroupscount > 30 && !this.searchValue) {
353
+ params = params.append('limit', 30);
354
+ }
355
+ this.dashboardService.getAllGroups(params).subscribe((res) => {
356
+ this.groupdata = res?.data;
357
+ this.vLoaderGroups = false;
358
+ this.totalgroups = res.total_items;
359
+ this.total_group_pages = res.total_pages;
360
+ });
361
+ }
362
+ /**
363
+ * on click on next button from the list, it emits the selected list of elements to parent component.
364
+ */
365
+ onSubmit() {
366
+ // const data = [...new Set(this.selectedList)];
367
+ // data.push(this.selectedgroupList)
368
+ this.saveSelectedUsers.emit({ users: this.selectedList, groups: this.selectedgroupList });
369
+ this.paginationService.reset();
370
+ }
371
+ currentTab = 'USER';
372
+ switchTab(tab) {
373
+ this.paginationService.reset();
374
+ this.getOrganizationUsersCount('');
375
+ this.currentTab = tab;
376
+ if (this.currentTab == "USER") {
377
+ this.searchValue = '';
378
+ this.getUsersList({ p: this.paginationService.currentPage });
379
+ }
380
+ else {
381
+ this.searchValue = '';
382
+ this.getGroupsList({});
383
+ }
384
+ }
385
+ getOrganizationUsersCount(Url) {
386
+ this.dashboardService.getOrganizationUsersCount(Url).subscribe(res => {
387
+ this.totalList = res.total_members;
388
+ if (res.total_members && res.limit_per_page > 1) {
389
+ this.totalPages = res.create_page;
390
+ }
391
+ else {
392
+ this.totalPages = 1;
393
+ }
394
+ });
395
+ }
396
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserListComponent, deps: [{ token: i1.PaginationService }, { token: i2.CreateDashboardService }], target: i0.ɵɵFactoryTarget.Component });
397
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserListComponent, selector: "app-user-list", inputs: { selectionType: "selectionType", listDetails: "listDetails", totalPages: "totalPages", limit: "limit", totalList: "totalList", feature: "feature", totalgroupscount: "totalgroupscount" }, outputs: { closeUserList: "closeUserList", saveSelectedUsers: "saveSelectedUsers" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Who can view this dashboard?</div>\r\n </div>\r\n <div class=\"user-list-body\">\r\n <div class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\" *ngIf=\"groupsEnabled\">\r\n <button (click)=\"switchTab('USER')\" class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"currentTab === 'USER'\">USERS <span class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{totalList}}</span></button>\r\n <button id=\"switchtab\" (click)=\"switchTab('GROUP')\" class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"currentTab === 'GROUP'\" >USER GROUPS <span id=\"groupscount\" class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{totalgroups}}</span></button>\r\n </div>\r\n\r\n <div class=\"user-list-search vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" [(ngModel)]=\"searchValue\" placeholder=\"{{currentTab === 'USER' ? 'Search User(s)' :'Search User Group(s)'}} who can view this dashboard\" (keyup.enter)=\"setSearchValue()\" (focusout)=\"setSearchValue()\">\r\n </div>\r\n\r\n <ng-container *ngIf=\"currentTab === 'USER'\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"totalPages>1\">\r\n <div class=\"pagination-box\" *ngIf=\"totalPages>1 && searchList.length>1\"> \r\n <app-pagination (paginationFilter)=\"paginationFilter($event)\" [limit]=\"limit\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"></app-pagination>\r\n </div>\r\n </div>\r\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\r\n <app-cs-checkbox *ngIf=\"!searchValue && searchList.length>1\" [ngValue]=\"selectedList.length == totalList\" (ngValueChange)=\"selectAllUsers($event)\">\r\n <strong>{{((selectedList.length == totalList) ? 'Deselect All':'Select All')}}</strong>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox *ngIf=\"searchValue && searchList.length>1\" [ngValue]=\"checkSelectAll()\" (ngValueChange)=\"selectAll($event)\">\r\n <strong>{{((selectedList.length == totalList) ? 'Deselect All':'Select All')}}</strong>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"list-of-user\">\r\n <div class=\"selection-list vx-mb-4\" [class.with-group]=\"groupsEnabled\" [class.with-noData]=\"searchList.length == 0\" [class.with-pagination]=\"totalPages>1 && searchList.length>1\">\r\n <ul *ngIf=\"searchList.length !== 0\">\r\n <li *ngFor=\"let data of searchList; let i = index\">\r\n <app-cs-checkbox [disabled]=\"listDetails.nonRemovableUsersList.includes(data[listDetails.elementIdKey])\" [ngValue]=\"selectedList.length>0 && selectedIds.includes(data[listDetails.elementIdKey])\" (ngValueChange)=\"selectElement(data)\" [arTooltip]=\"data[listDetails.tooltipKey]\" placement=\"bottom-left\" delay=\"0\" [tooltipMandatory]=\"true\">{{data[listDetails.displayElementKey]}}</app-cs-checkbox>\r\n </li>\r\n </ul>\r\n\r\n <app-no-data *ngIf=\"!vLoader && searchList.length == 0\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\r\n <ng-container *ngIf=\"(groupdata) as groups \">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\r\n <div class=\"pagination-box\" *ngIf=\"total_group_pages>1\"> \r\n <app-pagination (paginationFilter)=\"paginationFilter($event)\" [limit]=\"limit\" [totalPages]=\"total_group_pages\" [totalList]=\"totalgroups\"></app-pagination>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"true\">\r\n <div class=\"user-list-mid vx-mb-4\" [class.with-pagination]=\"total_group_pages>1\">\r\n <ng-container *ngIf=\"groups?.length > 0\">\r\n <div class=\"user-list-select vx-mb-4\">\r\n <app-cs-checkbox [disabled]=\"false\" *ngIf=\"!searchValue && groups.length>1\" [ngValue]=\"selectedgroupList.length == totalgroups\" (ngValueChange)=\"selectAllGroups($event)\">\r\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">{{((selectedgroupList.length == totalgroups) ? 'Deselect All':'Select All')}}</div>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox [disabled]=\"false\" *ngIf=\"searchValue && groups.length>1\" [ngValue]=\"checkSelectAllGroups()\" (ngValueChange)=\"selectAllsearchgroups($event)\">\r\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">{{((selectedgroupList.length == totalgroups) ? 'Deselect All':'Select All')}}</div>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"user-list-item\">\r\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\r\n <li class=\"vx-mb-4\" *ngFor=\"let data of groups; let i = index\">\r\n <app-cs-checkbox (ngValueChange)=\"selectGroupElement(data)\" [disabled]=\"false\" [ngValue]=\"selectedgroupList.length>0 && selectedGroupIds.includes(data[listDetails.groupIdkey])\">\r\n <div class=\"user-name vx-d-flex vx-align-center\"> \r\n <div class=\"group-name\" [arTooltip]=\"data[listDetails.displayGroupKey]\" placement=\"bottom-left\"\r\n delay=\"0\" [tooltipMandatory]=\"true\">{{data[listDetails.displayGroupKey]}}</div>\r\n <span id=\"usersofgroup\" class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\">{{data[\"associatedUsers\"].length}} {{data[\"associatedUsers\"].length > 1 ? 'USERS' :'USER'}}</span>\r\n </div>\r\n </app-cs-checkbox>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\r\n <app-no-data [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"(searchKey?.length > 0 ?'No match found.':'No data to display.')\"></app-no-data>\r\n </ng-container>\r\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\r\n <div class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"left vx-d-flex vx-align-center\">\r\n <button class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\" *ngIf=\"selectedList?.length\" appPopover (click)=\"userCount.popover()\" placement=\"left\">{{selectedList?.length}}</button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\"> \r\n <span *ngIf=\"selectedList?.length === 1\">User {{selectedgroupList?.length > 0 ?' & ':'selected'}}</span>\r\n <span *ngIf=\"selectedList?.length > 1\">Users {{selectedgroupList?.length > 0 ?' & ':'are selected'}}</span>\r\n </div>\r\n <button class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\" *ngIf=\"selectedgroupList?.length\" appPopover (click)=\"groupCount.popover()\" placement=\"left\">{{selectedgroupList?.length}}</button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\r\n <span *ngIf=\"selectedgroupList?.length === 1\">User Group selected</span>\r\n <span *ngIf=\"selectedgroupList?.length > 1\">User Groups selected</span>\r\n </div>\r\n\r\n <app-popover #userCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedList\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [arTooltip]=\"element.member_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons cross-icon\" (click)=\"selectElement(element)\" *ngIf=\"!listDetails.nonRemovableUsersList.includes(element?.member_id)\">&#xe90d;</i> {{element.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n \r\n <app-popover #groupCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedgroupList\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [arTooltip]=\"element?.group_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons cross-icon\" (click)=\"selectGroupElement(element)\">&#xe90d;</i> {{element?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n \r\n <div class=\"right vx-d-flex vx-align-center\">\r\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\r\n <button [disabled]=\"false\" (click)=\"onSubmit()\">Next <i class=\"icons\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\r\n <app-dashboard-footer \r\n [footerDetails] =\"footerDetails\"\r\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset();\"\r\n (deleteEvent) =\"selectElement($event)\"\r\n (submitEvent)=\"onSubmit()\"\r\n [userButtonColor]=\"'greenBg'\"\r\n ></app-dashboard-footer>\r\n </div>\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\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search 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 .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i7.DashboardFooterComponent, selector: "app-dashboard-footer", inputs: ["footerDetails", "userButtonColor"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i8.PaginationComponent, selector: "app-pagination", inputs: ["totalPages", "limit", "totalList"], outputs: ["paginationFilter"] }, { kind: "component", type: i9.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i10.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i11.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i12.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }] });
398
+ }
399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserListComponent, decorators: [{
400
+ type: Component,
401
+ args: [{ selector: 'app-user-list', template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Who can view this dashboard?</div>\r\n </div>\r\n <div class=\"user-list-body\">\r\n <div class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\" *ngIf=\"groupsEnabled\">\r\n <button (click)=\"switchTab('USER')\" class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"currentTab === 'USER'\">USERS <span class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{totalList}}</span></button>\r\n <button id=\"switchtab\" (click)=\"switchTab('GROUP')\" class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"currentTab === 'GROUP'\" >USER GROUPS <span id=\"groupscount\" class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{totalgroups}}</span></button>\r\n </div>\r\n\r\n <div class=\"user-list-search vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" [(ngModel)]=\"searchValue\" placeholder=\"{{currentTab === 'USER' ? 'Search User(s)' :'Search User Group(s)'}} who can view this dashboard\" (keyup.enter)=\"setSearchValue()\" (focusout)=\"setSearchValue()\">\r\n </div>\r\n\r\n <ng-container *ngIf=\"currentTab === 'USER'\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"totalPages>1\">\r\n <div class=\"pagination-box\" *ngIf=\"totalPages>1 && searchList.length>1\"> \r\n <app-pagination (paginationFilter)=\"paginationFilter($event)\" [limit]=\"limit\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"></app-pagination>\r\n </div>\r\n </div>\r\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\r\n <app-cs-checkbox *ngIf=\"!searchValue && searchList.length>1\" [ngValue]=\"selectedList.length == totalList\" (ngValueChange)=\"selectAllUsers($event)\">\r\n <strong>{{((selectedList.length == totalList) ? 'Deselect All':'Select All')}}</strong>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox *ngIf=\"searchValue && searchList.length>1\" [ngValue]=\"checkSelectAll()\" (ngValueChange)=\"selectAll($event)\">\r\n <strong>{{((selectedList.length == totalList) ? 'Deselect All':'Select All')}}</strong>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"list-of-user\">\r\n <div class=\"selection-list vx-mb-4\" [class.with-group]=\"groupsEnabled\" [class.with-noData]=\"searchList.length == 0\" [class.with-pagination]=\"totalPages>1 && searchList.length>1\">\r\n <ul *ngIf=\"searchList.length !== 0\">\r\n <li *ngFor=\"let data of searchList; let i = index\">\r\n <app-cs-checkbox [disabled]=\"listDetails.nonRemovableUsersList.includes(data[listDetails.elementIdKey])\" [ngValue]=\"selectedList.length>0 && selectedIds.includes(data[listDetails.elementIdKey])\" (ngValueChange)=\"selectElement(data)\" [arTooltip]=\"data[listDetails.tooltipKey]\" placement=\"bottom-left\" delay=\"0\" [tooltipMandatory]=\"true\">{{data[listDetails.displayElementKey]}}</app-cs-checkbox>\r\n </li>\r\n </ul>\r\n\r\n <app-no-data *ngIf=\"!vLoader && searchList.length == 0\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\r\n <ng-container *ngIf=\"(groupdata) as groups \">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\r\n <div class=\"pagination-box\" *ngIf=\"total_group_pages>1\"> \r\n <app-pagination (paginationFilter)=\"paginationFilter($event)\" [limit]=\"limit\" [totalPages]=\"total_group_pages\" [totalList]=\"totalgroups\"></app-pagination>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"true\">\r\n <div class=\"user-list-mid vx-mb-4\" [class.with-pagination]=\"total_group_pages>1\">\r\n <ng-container *ngIf=\"groups?.length > 0\">\r\n <div class=\"user-list-select vx-mb-4\">\r\n <app-cs-checkbox [disabled]=\"false\" *ngIf=\"!searchValue && groups.length>1\" [ngValue]=\"selectedgroupList.length == totalgroups\" (ngValueChange)=\"selectAllGroups($event)\">\r\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">{{((selectedgroupList.length == totalgroups) ? 'Deselect All':'Select All')}}</div>\r\n </app-cs-checkbox>\r\n <app-cs-checkbox [disabled]=\"false\" *ngIf=\"searchValue && groups.length>1\" [ngValue]=\"checkSelectAllGroups()\" (ngValueChange)=\"selectAllsearchgroups($event)\">\r\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">{{((selectedgroupList.length == totalgroups) ? 'Deselect All':'Select All')}}</div>\r\n </app-cs-checkbox>\r\n </div>\r\n <div class=\"user-list-item\">\r\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\r\n <li class=\"vx-mb-4\" *ngFor=\"let data of groups; let i = index\">\r\n <app-cs-checkbox (ngValueChange)=\"selectGroupElement(data)\" [disabled]=\"false\" [ngValue]=\"selectedgroupList.length>0 && selectedGroupIds.includes(data[listDetails.groupIdkey])\">\r\n <div class=\"user-name vx-d-flex vx-align-center\"> \r\n <div class=\"group-name\" [arTooltip]=\"data[listDetails.displayGroupKey]\" placement=\"bottom-left\"\r\n delay=\"0\" [tooltipMandatory]=\"true\">{{data[listDetails.displayGroupKey]}}</div>\r\n <span id=\"usersofgroup\" class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\">{{data[\"associatedUsers\"].length}} {{data[\"associatedUsers\"].length > 1 ? 'USERS' :'USER'}}</span>\r\n </div>\r\n </app-cs-checkbox>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\r\n <app-no-data [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"(searchKey?.length > 0 ?'No match found.':'No data to display.')\"></app-no-data>\r\n </ng-container>\r\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\r\n <div class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"left vx-d-flex vx-align-center\">\r\n <button class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\" *ngIf=\"selectedList?.length\" appPopover (click)=\"userCount.popover()\" placement=\"left\">{{selectedList?.length}}</button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\"> \r\n <span *ngIf=\"selectedList?.length === 1\">User {{selectedgroupList?.length > 0 ?' & ':'selected'}}</span>\r\n <span *ngIf=\"selectedList?.length > 1\">Users {{selectedgroupList?.length > 0 ?' & ':'are selected'}}</span>\r\n </div>\r\n <button class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\" *ngIf=\"selectedgroupList?.length\" appPopover (click)=\"groupCount.popover()\" placement=\"left\">{{selectedgroupList?.length}}</button>\r\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\r\n <span *ngIf=\"selectedgroupList?.length === 1\">User Group selected</span>\r\n <span *ngIf=\"selectedgroupList?.length > 1\">User Groups selected</span>\r\n </div>\r\n\r\n <app-popover #userCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedList\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [arTooltip]=\"element.member_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons cross-icon\" (click)=\"selectElement(element)\" *ngIf=\"!listDetails.nonRemovableUsersList.includes(element?.member_id)\">&#xe90d;</i> {{element.member_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n \r\n <app-popover #groupCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedgroupList\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [arTooltip]=\"element?.group_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons cross-icon\" (click)=\"selectGroupElement(element)\">&#xe90d;</i> {{element?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n \r\n <div class=\"right vx-d-flex vx-align-center\">\r\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\r\n <button [disabled]=\"false\" (click)=\"onSubmit()\">Next <i class=\"icons\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\r\n <app-dashboard-footer \r\n [footerDetails] =\"footerDetails\"\r\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset();\"\r\n (deleteEvent) =\"selectElement($event)\"\r\n (submitEvent)=\"onSubmit()\"\r\n [userButtonColor]=\"'greenBg'\"\r\n ></app-dashboard-footer>\r\n </div>\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\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search 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 .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"] }]
402
+ }], ctorParameters: function () { return [{ type: i1.PaginationService }, { type: i2.CreateDashboardService }]; }, propDecorators: { closeUserList: [{
403
+ type: Output
404
+ }], saveSelectedUsers: [{
405
+ type: Output
406
+ }], selectionType: [{
407
+ type: Input
408
+ }], listDetails: [{
409
+ type: Input
410
+ }], totalPages: [{
411
+ type: Input
412
+ }], limit: [{
413
+ type: Input
414
+ }], totalList: [{
415
+ type: Input
416
+ }], feature: [{
417
+ type: Input
418
+ }], totalgroupscount: [{
419
+ type: Input
420
+ }] } });
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVcvRSxNQUFNLE9BQU8saUJBQWlCO0lBbURuQjtJQUNDO0lBbkRBLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDeEMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNuQixXQUFXLEdBQTBCO1FBQzVDLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsZUFBZSxFQUFDLEVBQUU7UUFDbEIsVUFBVSxFQUFDLEVBQUU7UUFDYixZQUFZLEVBQUUsRUFBRTtRQUNoQixVQUFVLEVBQUUsRUFBRTtRQUNkLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsaUJBQWlCLEVBQUMsRUFBRTtRQUNwQixxQkFBcUIsRUFBRSxFQUFFO0tBQzFCLENBQUM7SUFFRixhQUFhLEdBQTBCO1FBQ3JDLFlBQVksRUFBRSxFQUFFO1FBQ2hCLGdCQUFnQixFQUFFLEVBQUU7UUFDcEIsaUJBQWlCLEVBQUUsRUFBRTtRQUNyQixTQUFTLEVBQUUsRUFBRTtRQUNiLFlB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Q25FLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUNuQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FuYVUsaUJBQWlCOzRGQUFqQixpQkFBaUIsbVdDWjlCLCtpV0FpSk07OzRGRHJJTyxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZTs2SUFLZixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBMEJHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGFzaGJvYXJkRm9vdGVyQ29uZmlnIH0gZnJvbSAnLi4vLi4vdWkta2l0L2Rhc2hib2FyZC1mb290ZXIvZGFzaGJvYXJkLWZvb3Rlci1jb25maWcnO1xyXG5pbXBvcnQgeyBDcmVhdGVEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyTGlzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3VzZXItbGlzdC5jb25maWcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91c2VyLWxpc3QuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBjbG9zZVVzZXJMaXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlU2VsZWN0ZWRVc2VycyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlID0gJyc7XHJcbiAgQElucHV0KCkgbGlzdERldGFpbHM6IFVzZXJMaXN0Q29uZmlndXJhdGlvbiA9IHtcclxuICAgIGRpc3BsYXlFbGVtZW50S2V5OiAnJyxcclxuICAgIGRpc3BsYXlHcm91cEtleTonJyxcclxuICAgIGdyb3VwSWRrZXk6JycsXHJcbiAgICBlbGVtZW50SWRLZXk6ICcnLFxyXG4gICAgdG9vbHRpcEtleTogJycsXHJcbiAgICBzZWxlY3RlZFVzZXJzTGlzdDogW10sXHJcbiAgICBzZWxlY3RlZEdyb3VwTGlzdDpbXSxcclxuICAgIG5vblJlbW92YWJsZVVzZXJzTGlzdDogW11cclxuICB9O1xyXG5cclxuICBmb290ZXJEZXRhaWxzOiBEYXNoYm9hcmRGb290ZXJDb25maWcgPSB7XHJcbiAgICBzZWxlY3RlZERhdGE6IFtdLFxyXG4gICAgbm9uUmVtb3ZhYmxlTGlzdDogW10sXHJcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJycsXHJcbiAgICBlbGVtZW50SWQ6ICcnLFxyXG4gICAgc2luZ3VsYXJUZXh0OiAnVXNlciBzZWxlY3RlZCcsXHJcbiAgICBwbHVyYWxUZXh0OiAnVXNlcnMgc2VsZWN0ZWQnLFxyXG4gICAgc2hvd0ZyZXF1ZW5jeTogZmFsc2UsXHJcbiAgICBmcmVxdWVuY3lUZXh0OiAnJyxcclxuICAgIGlzRGlzYWJsZWQ6IGZhbHNlXHJcblxyXG4gIH07XHJcbiAgdkxvYWRlciA9IGZhbHNlO1xyXG4gIHZMb2FkZXJHcm91cHMgPSBmYWxzZVxyXG5cclxuICBASW5wdXQoKSB0b3RhbFBhZ2VzID0gMTtcclxuICBASW5wdXQoKSBsaW1pdCA9IDE7XHJcbiAgQElucHV0KCkgdG90YWxMaXN0ID0gMTtcclxuICBASW5wdXQoKSBmZWF0dXJlOmFueTtcclxuICBASW5wdXQoKSAgdG90YWxncm91cHNjb3VudCA6IGFueTtcclxuICBzZWFyY2hMaXN0ID0gW107XHJcbiAgc2VhcmNoVmFsdWUgPSAnJztcclxuICBzZWFyY2hGaWx0ZXIgPSAnJztcclxuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZExpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuXHJcbiAgYW5pbWF0aW9uID0gdHJ1ZTtcclxuICB0b3RhbGdyb3VwczogYW55O1xyXG4gIHRvdGFsX2dyb3VwX3BhZ2VzOiBhbnk7XHJcbiAgc2VsZWN0ZWRHcm91cElkczogYW55W109IFtdO1xyXG4gIGdyb3Vwc0VuYWJsZWQ6YW55O1xyXG4gIHNlbGVjdGVkZ3JvdXBMaXN0OiBhbnlbXSA9W107XHJcbiAgY3VycmVudFBhZ2U9MTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IENyZWF0ZURhc2hib2FyZFNlcnZpY2UsXHJcbiAgKSB7IFxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5yZXNldCgpO1xyXG4gICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KCcnKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cHNFbmFibGVkPXRoaXMuZmVhdHVyZT8uaXNGZWF0dXJlRW5hYmxlZChcImZmX2dyb3Vwc19pbXByb3ZlbWVudHNcIik7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICBpZiAodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gWy4uLm5ldyBTZXQodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdCldO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBbLi4ubmV3IFNldCh0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0KV07XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBzZWxlY3RlZERhdGE7XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5ub25SZW1vdmFibGVMaXN0ID0gdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3Q7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBzZWxlY3RlZERhdGEubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKSB7IHJldHVybiBlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldOyB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcclxuICAgICAgLy8gcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA9PT0gMSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSxcclxuICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxyXG4gICAgICB0eXBlOiAnJyxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb290ZXJEZXRhaWxzLmRpc3BsYXlFbGVtZW50S2V5ID0gdGhpcy5saXN0RGV0YWlscy5kaXNwbGF5RWxlbWVudEtleTtcclxuICAgIHRoaXMuZm9vdGVyRGV0YWlscy5lbGVtZW50SWQgPSB0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleTtcclxuICAgIGlmICh0aGlzLmdyb3Vwc0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHt9KVxyXG4gICAgfSBcclxuICBpZiAodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZEdyb3VwTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0ID0gWy4uLm5ldyBTZXQodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZEdyb3VwTGlzdCldO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gWy4uLm5ldyBTZXQodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZEdyb3VwTGlzdCldO1xyXG4gICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHNlbGVjdGVkRGF0YTtcclxuICAgIHRoaXMuZm9vdGVyRGV0YWlscy5ub25SZW1vdmFibGVMaXN0ID0gdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3Q7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSBzZWxlY3RlZERhdGEubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pIHsgcmV0dXJuIGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldOyB9XHJcbiAgICAgIFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICB9XHJcblxyXG4gIGNhbmNlbENoYW5nZXMoKSB7XHJcblxyXG4gIH1cclxuICByZW1vdmVFbGVtZW50KGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgfVxyXG4gIHN1Ym1pdENoYW5nZXMoKSB7XHJcblxyXG4gIH1cclxuICBzZWxlY3RBbGwoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTGlzdC5mb3JFYWNoKHNlYXJjaEVsZW1lbnQgPT4ge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJZHMuaW5jbHVkZXMoc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKTtcclxuICAgICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTGlzdC5mb3JFYWNoKHNlYXJjaEVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QuaW5jbHVkZXMoc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbmRJbmRleChlbGUgPT4gZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT1cclxuICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkTGlzdF07XHJcbiAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XHJcblxyXG4gICAgICAgICAgY29uc3QgaWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KGVsZSA9PiBlbGUgPT09IHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGlkSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhbGwgYWRtaW5zIGFuZCBtYW5hZ2VycyBhdCBvbmNlIGJ5IG1ha2luZyBhcGkgY2FsbC5cclxuICAgKiBAcGFyYW0gZXZlbnQgY29uc2lzdHMgYm9vbGVhbiB2YWx1ZSB0byBzZWxlY3Qgb2YgdW5zZWxlY3QuXHJcbiAgICovXHJcbiAgc2VsZWN0QWxsVXNlcnMoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRBbGxVc2VycygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgaWYocmVzLmxlbmd0aD4xKXtcclxuICAgICAgICAgIHJlcy5mb3JFYWNoKChzZWFyY2hFbGVtZW50OmFueSkgPT4ge1xyXG4gIFxyXG4gICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pO1xyXG4gICAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuXHJcblxyXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkTGlzdCldO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRGF0YS5maW5kSW5kZXgoZWxlID0+IGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0gPT09IHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0WzBdKTtcclxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgY29uc3Qgb3duZXIgPSBPYmplY3QuYXNzaWduKHNlbGVjdGVkRGF0YVtpbmRleF0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0LnB1c2gob3duZXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChvd25lci5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxHcm91cHMoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHBhcmFtcyA9bmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2ZldGNoX2FsbCcsIDEpO1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMudkxvYWRlckdyb3VwcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRBbGxHcm91cHMocGFyYW1zKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmVzLmRhdGEuZm9yRWFjaCgoc2VhcmNoRWxlbWVudDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pOyAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52TG9hZGVyR3JvdXBzID0gZmFsc2U7XHJcbiAgICAgIH0pOyAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBbXTsgICAgICAgIFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QWxsc2VhcmNoZ3JvdXBzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGRhdGEuZm9yRWFjaChzZWFyY2hFbGVtZW50ID0+IHtcclxuICBcclxuICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmluY2x1ZGVzKHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMucHVzaChzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pO1xyXG4gICAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IFtdOyBcclxuICBcclxuICAgICAgfVxyXG4gICAgfSAgXHJcblxyXG4vKipcclxuICogU2VsZWN0cyBjaGVja2VkIGl0ZW0gZnJvbSB0aGUgbGlzdC5cclxuICogSW4gY2FzZSBvZiB1c2VyJ3MgbGlzdCBjYWxjdWxhdGVzIG51bWJlciBvZiBhZG1pbnMvbWFuYWdlcyB0byBzZXQgdmlzaWJpbGl0eShlaXRoZXIgdG8gYWxsIGFkbWlucy8gYWRtaW5zIGFuZCBtYW5hZ2VycylcclxuICogQHBhcmFtIGRhdGEgaXMgdGhlIHNlbGVjdGVkIGVsZW1lbnRcclxuICovXHJcbnNlbGVjdEVsZW1lbnQoZGF0YTogYW55KSB7XHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZGF0YVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pKSB7XHJcbiAgICBpZiAoIXRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKSkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbmRJbmRleChlbGUgPT4gZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XHJcblxyXG4gICAgICBjb25zdCBpZEluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoZWxlID0+IGVsZSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaWRJbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKGRhdGEpO1xyXG4gICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKTtcclxuICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcclxuXHJcbiAgfVxyXG59XHJcblxyXG4gIHNlbGVjdEdyb3VwRWxlbWVudChkYXRhOiBhbnkpIHsgICAgICAgIFxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LmZpbmRJbmRleCgoZWxlOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldID09PSBkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRncm91cExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcclxuICAgICAgICBjb25zdCBpZEluZGV4ID0gdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmZpbmRJbmRleChlbGUgPT4gZWxlID09PSBkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5zcGxpY2UoaWRJbmRleCwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LnB1c2goZGF0YSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKGRhdGFbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSk7XHJcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0OyAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuLyoqXHJcbiAqIEl0IGlzIHVzZWQgdG8gc2V0IGFuZCBzZWFyY2ggdmFsdWUgaW5jYXNlIG9mIGJhY2tlbmQgZHJpdmVuIGxpc3QgdG8gZGlmZmVyZW50aWF0ZSBzZWFyY2ggbGlzdCBhbmQgb3JpZ2luYWwgbGlzdFxyXG4gKi9cclxuc2V0U2VhcmNoVmFsdWUoKSB7XHJcbiAgaWYodGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSAhPT0gdGhpcy5zZWFyY2hWYWx1ZSkge1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZTtcclxuICAgIHRoaXMucGFnaW5hdGlvbkZpbHRlcih0cnVlKTtcclxuICB9XHJcblxyXG59XHJcblxyXG4vKipcclxuKiBpdCBpcyB1c2VkIGNoZWNrIHNlbGVjdCBhbGwgY29uZGl0aW9uIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBzZWFyY2hcclxuKi9cclxuY2hlY2tTZWxlY3RBbGwoKSB7XHJcbiAgaWYgKHRoaXMuc2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBkYXRhOiBib29sZWFuID0gdGhpcy5zZWFyY2hMaXN0LmV2ZXJ5KGVsZSA9PiB0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pKTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8qKlxyXG4qIGl0IGlzIHVzZWQgY2hlY2sgc2VsZWN0IGFsbCBncm91cHMgY29uZGl0aW9uIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBzZWFyY2hcclxuKi9cclxuY2hlY2tTZWxlY3RBbGxHcm91cHMoKSB7XHJcbiAgaWYgKHRoaXMuZ3JvdXBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IGRhdGE6IGJvb2xlYW4gPSB0aGlzLmdyb3VwZGF0YS5ldmVyeShlbGUgPT4gdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmluY2x1ZGVzKGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldKSk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG59XHJcblxyXG4vKipcclxuICogRmlsdGVyIGxpc3QgdXNlcidzIGxpc3QgYmFzZWQgb24gcGFnaW5hdGlvbiBieSBtYWtpbmcgYXBpIGNhbGxcclxuICogQHBhcmFtIGV2ZW50IHNwZWNpZmllcyBhIGJvb2xlYW4gdmFsdWUgdG8gY2FsbCBhcGlcclxuICovXHJcbnBhZ2luYXRpb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG4gIGlmKCFldmVudCkgcmV0dXJuXHJcbiAgaWYodGhpcy5ncm91cHNFbmFibGVkKXtcclxuICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICBpZih0aGlzLmN1cnJlbnRUYWIgPT0gJ1VTRVInKXtcclxuICAgICAgICB0aGlzLmdldFVzZXJzTGlzdCh7XHJcbiAgICAgICAgICAvLyBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxyXG4gICAgICAgICAgdHlwZTogJycsXHJcbiAgICAgICAgICBxOiAoIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUpID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICAgIH0pOyAgXHJcbiAgICAgICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KHtcclxuICAgICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPz8gMSxcclxuICAgICAgICAgIHR5cGU6ICcnLFxyXG4gICAgICAgICAgcTogKCF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlKSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSxcclxuICAgICAgICB9KSBcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHtcclxuICAgICAgICAgIHBhZ2U6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBncm91cE5hbWU6ICghdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSkgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfWVsc2V7XHJcbiAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcclxuICAgICAgICAvLyBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPz8gMSxcclxuICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICBxOiAoIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUpID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KHtcclxuICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID8/IDEsXHJcbiAgICAgICAgdHlwZTogJycsXHJcbiAgICAgICAgcTogKCF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlKSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSxcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldHMgdXNlcidzIGxpc3QgIGJ5IG1ha2luZyBhcGkgY2FsbFxyXG4gKiBAcGFyYW0gdXJsIGNvbnRhaW5zIHVzZXJsaXN0IGZpbHRlciBkZXRhaWxzXHJcbiAqL1xyXG5nZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcclxuICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG5cclxuICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uVXNlcnModXJsID8gdXJsIDogJycpLnN1YnNjcmliZShyZXMgPT4ge1xyXG5cclxuICAgIHRoaXMuc2VhcmNoTGlzdCA9IHJlcztcclxuICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5nZXRHcm91cHNMaXN0KGV2ZW50OmFueSl7XHJcbiAgdGhpcy52TG9hZGVyR3JvdXBzID0gdHJ1ZVxyXG4gIGxldCBwYXJhbXMgPW5ldyBIdHRwUGFyYW1zKClcclxuICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoXCJncm91cE5hbWVcIikpIHtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2dyb3VwTmFtZScsIGV2ZW50W1wiZ3JvdXBOYW1lXCJdKTtcclxuICB9XHJcbiAgaWYoZXZlbnQuaGFzT3duUHJvcGVydHkoXCJwYWdlXCIpICYmICF0aGlzLnNlYXJjaFZhbHVlKSB7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlJywgZXZlbnRbXCJwYWdlXCJdKTtcclxuICB9XHJcbiAgaWYodGhpcy50b3RhbGdyb3Vwc2NvdW50ID4gMzAgJiYgIXRoaXMuc2VhcmNoVmFsdWUpe1xyXG4gICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdsaW1pdCcsIDMwKTtcclxuICB9XHJcbiAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRBbGxHcm91cHMocGFyYW1zKS5zdWJzY3JpYmUoKHJlczphbnkpPT57XHJcbiAgICB0aGlzLmdyb3VwZGF0YSA9IHJlcz8uZGF0YTtcclxuICAgIHRoaXMudkxvYWRlckdyb3VwcyA9IGZhbHNlO1xyXG4gICAgdGhpcy50b3RhbGdyb3VwcyA9IHJlcy50b3RhbF9pdGVtcztcclxuICAgIHRoaXMudG90YWxfZ3JvdXBfcGFnZXMgPSByZXMudG90YWxfcGFnZXM7XHJcbiBcclxufSlcclxufVxyXG5cclxuICAvKipcclxuICAgKiBvbiBjbGljayBvbiBuZXh0IGJ1dHRvbiBmcm9tIHRoZSBsaXN0LCBpdCBlbWl0cyB0aGUgc2VsZWN0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgLy8gY29uc3QgZGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRMaXN0KV07XHJcbiAgICAvLyBkYXRhLnB1c2godGhpcy5zZWxlY3RlZGdyb3VwTGlzdClcclxuICAgIHRoaXMuc2F2ZVNlbGVjdGVkVXNlcnMuZW1pdCh7IHVzZXJzOiB0aGlzLnNlbGVjdGVkTGlzdCwgZ3JvdXBzOiB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0IH0pO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5yZXNldCgpO1xyXG4gIH1cclxuICBjdXJyZW50VGFiID0gJ1VTRVInXHJcbiAgc3dpdGNoVGFiKHRhYjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoJycpO1xyXG4gICAgdGhpcy5jdXJyZW50VGFiID0gdGFiO1xyXG4gICAgaWYodGhpcy5jdXJyZW50VGFiPT1cIlVTRVJcIil7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWU9JydcclxuICAgICAgdGhpcy5nZXRVc2Vyc0xpc3Qoe3A6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2V9KTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlPScnXHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7fSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoVXJsOiBhbnkpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudG90YWxMaXN0ID0gcmVzLnRvdGFsX21lbWJlcnM7XHJcbiAgICAgIGlmIChyZXMudG90YWxfbWVtYmVycyAmJiByZXMubGltaXRfcGVyX3BhZ2UgPiAxKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzLmNyZWF0ZV9wYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidXNlci1saXN0XCIgW2NsYXNzLmFuaW1hdGUtc2xpZGVJblJpZ2h0XT1cImFuaW1hdGlvblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1oZWFkIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBsLTQgdngtcHItNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xNCB2eC1mdy01MDAgdngtbGFiZWwtdHh0XCI+V2hvIGNhbiB2aWV3IHRoaXMgZGFzaGJvYXJkPzwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWJvZHlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC10YWIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1tYi0yXCIgKm5nSWY9XCJncm91cHNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzd2l0Y2hUYWIoJ1VTRVInKVwiIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIiBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdVU0VSJ1wiPlVTRVJTIDxzcGFuIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3t0b3RhbExpc3R9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJzd2l0Y2h0YWJcIiAoY2xpY2spPVwic3dpdGNoVGFiKCdHUk9VUCcpXCIgY2xhc3M9XCJ0YWItYnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFRhYiA9PT0gJ0dST1VQJ1wiID5VU0VSIEdST1VQUyA8c3BhbiBpZD1cImdyb3Vwc2NvdW50XCIgY2xhc3M9XCJ2eC1wbC0xIHZ4LXByLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tbC0yIHZ4LWxoLTRcIj57e3RvdGFsZ3JvdXBzfX08L3NwYW4+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1zZWFyY2ggdngtbWItMlwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7e2N1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcihzKScgOidTZWFyY2ggVXNlciBHcm91cChzKSd9fSB3aG8gY2FuIHZpZXcgdGhpcyBkYXNoYm9hcmRcIiAoa2V5dXAuZW50ZXIpPVwic2V0U2VhcmNoVmFsdWUoKVwiIChmb2N1c291dCk9XCJzZXRTZWFyY2hWYWx1ZSgpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdVU0VSJ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1lbmRcIiAqbmdJZj1cInRvdGFsUGFnZXM+MVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWJveFwiICpuZ0lmPVwidG90YWxQYWdlcz4xICYmIHNlYXJjaExpc3QubGVuZ3RoPjFcIj4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtcGFnaW5hdGlvbiAocGFnaW5hdGlvbkZpbHRlcik9XCJwYWdpbmF0aW9uRmlsdGVyKCRldmVudClcIiBbbGltaXRdPVwibGltaXRcIiBbdG90YWxQYWdlc109XCJ0b3RhbFBhZ2VzXCIgW3RvdGFsTGlzdF09XCJ0b3RhbExpc3RcIj48L2FwcC1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWJvZHktdG9wXCIgKm5nSWY9XCJzZWFyY2hMaXN0Lmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3ggKm5nSWY9XCIhc2VhcmNoVmFsdWUgJiYgc2VhcmNoTGlzdC5sZW5ndGg+MVwiIFtuZ1ZhbHVlXT1cInNlbGVjdGVkTGlzdC5sZW5ndGggPT0gdG90YWxMaXN0XCIgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsVXNlcnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7KChzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdCkgPyAnRGVzZWxlY3QgQWxsJzonU2VsZWN0IEFsbCcpfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94ICpuZ0lmPVwic2VhcmNoVmFsdWUgJiYgc2VhcmNoTGlzdC5sZW5ndGg+MVwiIFtuZ1ZhbHVlXT1cImNoZWNrU2VsZWN0QWxsKClcIiAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7KChzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdCkgPyAnRGVzZWxlY3QgQWxsJzonU2VsZWN0IEFsbCcpfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3Qtb2YtdXNlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tbGlzdCB2eC1tYi00XCIgW2NsYXNzLndpdGgtZ3JvdXBdPVwiZ3JvdXBzRW5hYmxlZFwiIFtjbGFzcy53aXRoLW5vRGF0YV09XCJzZWFyY2hMaXN0Lmxlbmd0aCA9PSAwXCIgW2NsYXNzLndpdGgtcGFnaW5hdGlvbl09XCJ0b3RhbFBhZ2VzPjEgJiYgc2VhcmNoTGlzdC5sZW5ndGg+MVwiPlxyXG4gICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwic2VhcmNoTGlzdC5sZW5ndGggIT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIHNlYXJjaExpc3Q7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94IFtkaXNhYmxlZF09XCJsaXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QuaW5jbHVkZXMoZGF0YVtsaXN0RGV0YWlscy5lbGVtZW50SWRLZXldKVwiIFtuZ1ZhbHVlXT1cInNlbGVjdGVkTGlzdC5sZW5ndGg+MCAmJiBzZWxlY3RlZElkcy5pbmNsdWRlcyhkYXRhW2xpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pXCIgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0RWxlbWVudChkYXRhKVwiIFthclRvb2x0aXBdPVwiZGF0YVtsaXN0RGV0YWlscy50b29sdGlwS2V5XVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPnt7ZGF0YVtsaXN0RGV0YWlscy5kaXNwbGF5RWxlbWVudEtleV19fTwvYXBwLWNzLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICA8YXBwLW5vLWRhdGEgKm5nSWY9XCIhdkxvYWRlciAmJiBzZWFyY2hMaXN0Lmxlbmd0aCA9PSAwXCIgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc2VhcmNoLWRhdGEuc3ZnJ1wiIFtub0RhdGFUZXh0XT1cIidObyBkYXRhIHRvIGRpc3BsYXknXCI+PC9hcHAtbm8tZGF0YT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwidkxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFRhYiA9PT0gJ0dST1VQJyAmJiBncm91cHNFbmFibGVkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihncm91cGRhdGEpIGFzIGdyb3VwcyBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktZW5kXCIgKm5nSWY9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWJveFwiICpuZ0lmPVwidG90YWxfZ3JvdXBfcGFnZXM+MVwiPiAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8YXBwLXBhZ2luYXRpb24gKHBhZ2luYXRpb25GaWx0ZXIpPVwicGFnaW5hdGlvbkZpbHRlcigkZXZlbnQpXCIgW2xpbWl0XT1cImxpbWl0XCIgW3RvdGFsUGFnZXNdPVwidG90YWxfZ3JvdXBfcGFnZXNcIiBbdG90YWxMaXN0XT1cInRvdGFsZ3JvdXBzXCI+PC9hcHAtcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1taWQgdngtbWItNFwiIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwidG90YWxfZ3JvdXBfcGFnZXM+MVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LXNlbGVjdCB2eC1tYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCBbZGlzYWJsZWRdPVwiZmFsc2VcIiAqbmdJZj1cIiFzZWFyY2hWYWx1ZSAmJiBncm91cHMubGVuZ3RoPjFcIiBbbmdWYWx1ZV09XCJzZWxlY3RlZGdyb3VwTGlzdC5sZW5ndGggPT0gdG90YWxncm91cHNcIiAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxHcm91cHMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1uYW1lIHZ4LWZzLTEyIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtbm9uZVwiPnt7KChzZWxlY3RlZGdyb3VwTGlzdC5sZW5ndGggPT0gdG90YWxncm91cHMpID8gJ0Rlc2VsZWN0IEFsbCc6J1NlbGVjdCBBbGwnKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCBbZGlzYWJsZWRdPVwiZmFsc2VcIiAqbmdJZj1cInNlYXJjaFZhbHVlICYmIGdyb3Vwcy5sZW5ndGg+MVwiIFtuZ1ZhbHVlXT1cImNoZWNrU2VsZWN0QWxsR3JvdXBzKClcIiAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxzZWFyY2hncm91cHMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbmFtZSB2eC1mcy0xMiB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LW5vbmVcIj57eygoc2VsZWN0ZWRncm91cExpc3QubGVuZ3RoID09IHRvdGFsZ3JvdXBzKSA/ICdEZXNlbGVjdCBBbGwnOidTZWxlY3QgQWxsJyl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LW0tMCB2eC1wLTAgdngtZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidngtbWItNFwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGdyb3VwczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RHcm91cEVsZW1lbnQoZGF0YSlcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbbmdWYWx1ZV09XCJzZWxlY3RlZGdyb3VwTGlzdC5sZW5ndGg+MCAmJiBzZWxlY3RlZEdyb3VwSWRzLmluY2x1ZGVzKGRhdGFbbGlzdERldGFpbHMuZ3JvdXBJZGtleV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLW5hbWVcIiBbYXJUb29sdGlwXT1cImRhdGFbbGlzdERldGFpbHMuZGlzcGxheUdyb3VwS2V5XVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+e3tkYXRhW2xpc3REZXRhaWxzLmRpc3BsYXlHcm91cEtleV19fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwidXNlcnNvZmdyb3VwXCIgY2xhc3M9XCJjb3VudGVyIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC0zIHZ4LXR0LXVwcGVyY2FzZSB2eC1tbC0yXCI+e3tkYXRhW1wiYXNzb2NpYXRlZFVzZXJzXCJdLmxlbmd0aH19IHt7ZGF0YVtcImFzc29jaWF0ZWRVc2Vyc1wiXS5sZW5ndGggPiAxID8gJ1VTRVJTJyA6J1VTRVInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID09IDAgJiYgIXZMb2FkZXJHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbm8tZGF0YSAgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc2VhcmNoLWRhdGEuc3ZnJ1wiIFtub0RhdGFUZXh0XT1cIihzZWFyY2hLZXk/Lmxlbmd0aCA+IDAgPydObyBtYXRjaCBmb3VuZC4nOidObyBkYXRhIHRvIGRpc3BsYXkuJylcIj48L2FwcC1uby1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwidkxvYWRlckdyb3Vwc1wiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICBcclxuICAgICAgPGRpdiBjbGFzcz1cInVzZXItZmxvYXRpbmctYmFyXCIgKm5nSWY9XCJncm91cHNFbmFibGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZmxvYXRpbmctYmFyLWNvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudGVyIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgdngtbS0wIHZ4LXBsLTEgdngtcHItMVwiICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGhcIiBhcHBQb3BvdmVyIChjbGljayk9XCJ1c2VyQ291bnQucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiPnt7c2VsZWN0ZWRMaXN0Py5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lIHZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMlwiPiBcclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPT09IDFcIj5Vc2VyIHt7c2VsZWN0ZWRncm91cExpc3Q/Lmxlbmd0aCA+IDAgPycgJiAnOidzZWxlY3RlZCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPiAxXCI+VXNlcnMge3tzZWxlY3RlZGdyb3VwTGlzdD8ubGVuZ3RoID4gMCA/JyAmICc6J2FyZSBzZWxlY3RlZCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRlciBncm91cCB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IHZ4LW1sLTIgdngtcGwtMSB2eC1wci0xXCIgKm5nSWY9XCJzZWxlY3RlZGdyb3VwTGlzdD8ubGVuZ3RoXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBDb3VudC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+e3tzZWxlY3RlZGdyb3VwTGlzdD8ubGVuZ3RofX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRncm91cExpc3Q/Lmxlbmd0aCA9PT0gMVwiPlVzZXIgR3JvdXAgc2VsZWN0ZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAxXCI+VXNlciBHcm91cHMgc2VsZWN0ZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjdXNlckNvdW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZExpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCIgW2FyVG9vbHRpcF09XCJlbGVtZW50Lm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiIChjbGljayk9XCJzZWxlY3RFbGVtZW50KGVsZW1lbnQpXCIgKm5nSWY9XCIhbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIj4mI3hlOTBkOzwvaT4ge3tlbGVtZW50Lm1lbWJlcl9uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICBcclxuICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkZ3JvdXBMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiIFthclRvb2x0aXBdPVwiZWxlbWVudD8uZ3JvdXBfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzLWljb25cIiAoY2xpY2spPVwic2VsZWN0R3JvdXBFbGVtZW50KGVsZW1lbnQpXCI+JiN4ZTkwZDs8L2k+IHt7ZWxlbWVudD8uZ3JvdXBfbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsXCIgKGNsaWNrKT1cImNsb3NlVXNlckxpc3QuZW1pdCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImZhbHNlXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5OZXh0IDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFlOzwvaT48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtZm9vdGVyXCIgKm5nSWY9XCIhZ3JvdXBzRW5hYmxlZFwiPlxyXG4gICAgICAgIDxhcHAtZGFzaGJvYXJkLWZvb3RlciBcclxuICAgICAgICBbZm9vdGVyRGV0YWlsc10gPVwiZm9vdGVyRGV0YWlsc1wiXHJcbiAgICAgICAgKGNhbmNlbEV2ZW50KT1cImNsb3NlVXNlckxpc3QuZW1pdCgpOyBwYWdpbmF0aW9uU2VydmljZS5yZXNldCgpO1wiXHJcbiAgICAgICAgKGRlbGV0ZUV2ZW50KSA9XCJzZWxlY3RFbGVtZW50KCRldmVudClcIlxyXG4gICAgICAgIChzdWJtaXRFdmVudCk9XCJvblN1Ym1pdCgpXCJcclxuICAgICAgICBbdXNlckJ1dHRvbkNvbG9yXT1cIidncmVlbkJnJ1wiXHJcbiAgICAgICAgPjwvYXBwLWRhc2hib2FyZC1mb290ZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==