@ieeesa-npm/groups 0.15.16 → 0.15.18
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.
- package/esm2022/lib/assets/constants.json +27 -1
- package/esm2022/lib/components/add-user-roster/add-user-roster.component.mjs +8 -10
- package/esm2022/lib/components/create-group/create-group.component.mjs +2 -2
- package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +7 -55
- package/esm2022/lib/components/interest-form/interest-form.component.mjs +4 -4
- package/esm2022/lib/components/interest-form-management/interest-form-management.component.mjs +3 -3
- package/esm2022/lib/components/interest-responses/interest-responses.component.mjs +119 -0
- package/esm2022/lib/components/interested-rosters/interested-rosters.component.mjs +370 -15
- package/esm2022/lib/components/roster-import-history/roster-import-history.component.mjs +106 -8
- package/esm2022/lib/components/view-roster/view-roster.component.mjs +2 -2
- package/esm2022/lib/groups.component.mjs +58 -9
- package/esm2022/lib/models/interest-response.model.mjs +18 -0
- package/esm2022/lib/models/roster-import.model.mjs +1 -1
- package/esm2022/lib/services/groups.service.mjs +91 -7
- package/esm2022/lib/services/interest-form.service.mjs +8 -7
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/ieeesa-npm-groups.mjs +829 -219
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/edit-user-roles/edit-user-roles.component.d.ts +0 -10
- package/lib/components/interest-responses/interest-responses.component.d.ts +80 -0
- package/lib/components/interested-rosters/interested-rosters.component.d.ts +143 -9
- package/lib/components/roster-import-history/roster-import-history.component.d.ts +42 -4
- package/lib/groups.component.d.ts +9 -4
- package/lib/models/interest-response.model.d.ts +209 -0
- package/lib/models/roster-import.model.d.ts +12 -0
- package/lib/services/groups.service.d.ts +66 -10
- package/lib/services/interest-form.service.d.ts +6 -5
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/esm2022/lib/assets/country-calling-codes.mjs +0 -83
- package/lib/assets/country-calling-codes.d.ts +0 -14
|
@@ -1,28 +1,383 @@
|
|
|
1
|
-
import { Component, ViewEncapsulation } from '@angular/core';
|
|
1
|
+
import { Component, Inject, Optional, ViewEncapsulation, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import
|
|
3
|
+
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
4
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
5
|
+
import { ModalType } from '@ieeesa-npm/models';
|
|
6
|
+
import { DataTableComponent, ModalComponent, TableColumnType, } from '@ieeesa-npm/presentation';
|
|
7
|
+
import constants from '../../assets/constants.json';
|
|
8
|
+
import { InterestResponsesComponent } from '../interest-responses/interest-responses.component';
|
|
4
9
|
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/material/dialog";
|
|
11
|
+
import * as i2 from "../../services/groups.service";
|
|
5
12
|
/**
|
|
6
|
-
* "Interested Rosters" tab
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
13
|
+
* "Interested Rosters" tab of the Roster Interests dialog (SP3M-428). Lists the
|
|
14
|
+
* users who expressed interest in the group and lets a Group Admin review each
|
|
15
|
+
* requester's submitted responses and set/override their membership level from
|
|
16
|
+
* the Roster Management screen.
|
|
17
|
+
*
|
|
18
|
+
* The list is rendered through the shared {@link DataTableComponent}: the
|
|
19
|
+
* Name/Email/Affiliations/Submitted On columns are plain TEXT, Member Level is
|
|
20
|
+
* the reusable table's DROPDOWN column (an inline {@code ieeesa-select}) and
|
|
21
|
+
* Form is a LINK that opens the "View Responses" dialog. The Member Level
|
|
22
|
+
* options are sourced from the roles API
|
|
23
|
+
* ({@link GroupsService.getGroupTypeRoles}) filtered to the "Member Level" role
|
|
24
|
+
* type. Interested-roster rows are loaded from
|
|
25
|
+
* {@link GroupsService.getInterestResponsesByGroup} and each requester's stored
|
|
26
|
+
* form responses are loaded on demand from
|
|
27
|
+
* {@link GroupsService.getInterestResponses} using the row's `interestId`. All
|
|
28
|
+
* display text is sourced from constants.json.
|
|
11
29
|
* @export
|
|
12
30
|
* @class InterestedRostersComponent
|
|
13
31
|
*/
|
|
14
32
|
export class InterestedRostersComponent {
|
|
15
|
-
constructor(
|
|
33
|
+
constructor(
|
|
34
|
+
// eslint-disable-next-line no-unused-vars
|
|
35
|
+
dialog,
|
|
36
|
+
// eslint-disable-next-line no-unused-vars
|
|
37
|
+
groupsService,
|
|
38
|
+
// eslint-disable-next-line no-unused-vars
|
|
39
|
+
cdr,
|
|
40
|
+
// eslint-disable-next-line no-unused-vars
|
|
41
|
+
group) {
|
|
42
|
+
this.dialog = dialog;
|
|
43
|
+
this.groupsService = groupsService;
|
|
44
|
+
this.cdr = cdr;
|
|
45
|
+
this.group = group;
|
|
16
46
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
47
|
this.constants = constants;
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
48
|
+
this.texts = this.constants?.rosterInterests?.interestedRosters;
|
|
49
|
+
this.destroy$ = new Subject();
|
|
50
|
+
/**
|
|
51
|
+
* Member-level dropdown options, sourced from the roles API
|
|
52
|
+
* ({@code GET /groups/config/rolesByGroupType/{groupType}}) filtered to the "Member Level" role type.
|
|
53
|
+
* Each option is {@code { id: roleId, name: roleName }}.
|
|
54
|
+
*/
|
|
55
|
+
this.memberLevelOptions = [];
|
|
56
|
+
this.rosters = [];
|
|
57
|
+
this.tableData = [];
|
|
58
|
+
this.columnSchema = [];
|
|
59
|
+
/** Total interested-roster rows reported by the backend (for paging/counts). */
|
|
60
|
+
this.totalRecords = 0;
|
|
61
|
+
this.paginatorConfig = {
|
|
62
|
+
recordsPerPage: this.texts?.pageSizeOptions?.[0],
|
|
63
|
+
pageSizeOptions: this.texts?.pageSizeOptions,
|
|
64
|
+
totalRecords: 0,
|
|
65
|
+
};
|
|
66
|
+
this.pageIndex = 0;
|
|
67
|
+
this.defaultSortedColumn = 'submittedOn';
|
|
68
|
+
this.defaultColumnSortDirection = 'desc';
|
|
69
|
+
this.sortedBy = this.defaultSortedColumn;
|
|
70
|
+
this.sortedOrderBy = this.defaultColumnSortDirection;
|
|
71
|
+
/** Read-only table — no search / filter / add / edit / delete actions. */
|
|
72
|
+
this.tableActions = {
|
|
73
|
+
isPaginationNeeded: true,
|
|
74
|
+
isSearchNeeded: false,
|
|
75
|
+
isFilterNeeded: false,
|
|
76
|
+
isAddNeeded: false,
|
|
77
|
+
isEditNeeded: false,
|
|
78
|
+
isDeleteNeeded: false,
|
|
79
|
+
};
|
|
80
|
+
this.isLoading = false;
|
|
20
81
|
}
|
|
21
|
-
|
|
22
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Builds the reusable-table column schema and loads the interested-roster
|
|
84
|
+
* list for the current group from the backend.
|
|
85
|
+
* @memberof InterestedRostersComponent
|
|
86
|
+
*/
|
|
87
|
+
ngOnInit() {
|
|
88
|
+
this.loadMemberLevelOptions();
|
|
89
|
+
this.buildColumnSchema();
|
|
90
|
+
this.loadInterestedRosters();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Cleans up in-flight subscriptions when the component is destroyed.
|
|
94
|
+
* @memberof InterestedRostersComponent
|
|
95
|
+
*/
|
|
96
|
+
ngOnDestroy() {
|
|
97
|
+
this.destroy$.next(true);
|
|
98
|
+
this.destroy$.complete();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Resolves the current group id from the dialog data (falling back to the
|
|
102
|
+
* service's selected group) and loads the interested-roster rows for it. Maps
|
|
103
|
+
* each backend {@link GroupInterestResponseView} onto the flattened
|
|
104
|
+
* {@link InterestedRoster} shape the reusable table binds to. On failure the
|
|
105
|
+
* table is cleared and the error is delegated to GroupsService for alerting.
|
|
106
|
+
* @memberof InterestedRostersComponent
|
|
107
|
+
*/
|
|
108
|
+
loadInterestedRosters() {
|
|
109
|
+
const groupId = this.group?.groupId ??
|
|
110
|
+
this.groupsService.getSelectedGroupInfo()?.groupId;
|
|
111
|
+
if (!groupId)
|
|
112
|
+
return;
|
|
113
|
+
this.isLoading = true;
|
|
114
|
+
const payload = {
|
|
115
|
+
payload: {
|
|
116
|
+
searchByNameOrEmail: '',
|
|
117
|
+
offset: this.pageIndex * this.paginatorConfig.recordsPerPage,
|
|
118
|
+
pageSize: this.paginatorConfig.recordsPerPage,
|
|
119
|
+
sortedBy: this.sortedBy,
|
|
120
|
+
sortedOrderBy: this.sortedOrderBy,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
this.groupsService
|
|
124
|
+
.getInterestResponsesByGroup(groupId, payload)
|
|
125
|
+
.pipe(takeUntil(this.destroy$))
|
|
126
|
+
.subscribe({
|
|
127
|
+
next: (response) => {
|
|
128
|
+
this.totalRecords = response?.totalRecords ?? 0;
|
|
129
|
+
this.paginatorConfig = {
|
|
130
|
+
...this.paginatorConfig,
|
|
131
|
+
totalRecords: this.totalRecords,
|
|
132
|
+
};
|
|
133
|
+
this.rosters = (response?.data ?? []).map((view) => this.mapToRoster(view));
|
|
134
|
+
this.tableData = this.rosters;
|
|
135
|
+
this.isLoading = false;
|
|
136
|
+
this.cdr.detectChanges();
|
|
137
|
+
},
|
|
138
|
+
error: (error) => {
|
|
139
|
+
this.rosters = [];
|
|
140
|
+
this.tableData = [];
|
|
141
|
+
this.totalRecords = 0;
|
|
142
|
+
this.paginatorConfig = { ...this.paginatorConfig, totalRecords: 0 };
|
|
143
|
+
this.isLoading = false;
|
|
144
|
+
this.groupsService.handleErrors(error);
|
|
145
|
+
this.cdr.detectChanges();
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
onPaginationChange(event) {
|
|
150
|
+
this.pageIndex = event.pageIndex;
|
|
151
|
+
this.paginatorConfig = {
|
|
152
|
+
...this.paginatorConfig,
|
|
153
|
+
recordsPerPage: event.pageSize,
|
|
154
|
+
};
|
|
155
|
+
this.loadInterestedRosters();
|
|
156
|
+
}
|
|
157
|
+
onSortChange(event) {
|
|
158
|
+
this.sortedBy = event.direction ? event.active : this.defaultSortedColumn;
|
|
159
|
+
this.sortedOrderBy = event.direction || this.defaultColumnSortDirection;
|
|
160
|
+
this.pageIndex = 0;
|
|
161
|
+
this.loadInterestedRosters();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Maps a backend {@link GroupInterestResponseView} to the flattened
|
|
165
|
+
* {@link InterestedRoster} row the table renders: affiliation org names are
|
|
166
|
+
* joined into the affiliations list, the assigned membership level (if any)
|
|
167
|
+
* becomes the role name — which the Member Level dropdown binds as its
|
|
168
|
+
* pre-selected value — the submitted timestamp is formatted for display, and
|
|
169
|
+
* the interest id is carried through for the responses dialog and the level
|
|
170
|
+
* override.
|
|
171
|
+
* @param {GroupInterestResponseView} view
|
|
172
|
+
* @return {InterestedRoster}
|
|
173
|
+
* @memberof InterestedRostersComponent
|
|
174
|
+
*/
|
|
175
|
+
mapToRoster(view) {
|
|
176
|
+
return {
|
|
177
|
+
interestId: view?.interestId,
|
|
178
|
+
userId: view?.userId,
|
|
179
|
+
name: view?.name,
|
|
180
|
+
email: view?.email,
|
|
181
|
+
affiliations: (view?.affiliation ?? []).map((org) => org?.orgName),
|
|
182
|
+
submittedOn: this.formatSubmittedOn(view?.submittedOn),
|
|
183
|
+
memberLevel: view?.memberLevel?.length
|
|
184
|
+
? view.memberLevel[0]?.roleName ?? null
|
|
185
|
+
: null,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Formats the backend submitted timestamp (ISO date string) for display,
|
|
190
|
+
* falling back to the raw value when it is not a parseable date.
|
|
191
|
+
* @param {string} submittedOn
|
|
192
|
+
* @return {string}
|
|
193
|
+
* @memberof InterestedRostersComponent
|
|
194
|
+
*/
|
|
195
|
+
formatSubmittedOn(submittedOn) {
|
|
196
|
+
if (!submittedOn)
|
|
197
|
+
return '';
|
|
198
|
+
const date = new Date(submittedOn);
|
|
199
|
+
return isNaN(date.getTime())
|
|
200
|
+
? submittedOn
|
|
201
|
+
: date.toLocaleDateString('en-US');
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Loads the Member Level dropdown options from the roles API
|
|
205
|
+
* ({@code GET /groups/config/rolesByGroupType/{groupType}}), keeping only roles whose
|
|
206
|
+
* {@code roleTypeName} is "Member Level" and mapping each to a
|
|
207
|
+
* {@link SelectOption} ({@code { id: roleId, name: roleName }}).
|
|
208
|
+
* @memberof InterestedRostersComponent
|
|
209
|
+
*/
|
|
210
|
+
loadMemberLevelOptions() {
|
|
211
|
+
const groupType = this.group?.groupType ??
|
|
212
|
+
this.groupsService.getSelectedGroupInfo()?.groupType;
|
|
213
|
+
if (!groupType)
|
|
214
|
+
return;
|
|
215
|
+
this.groupsService
|
|
216
|
+
.getGroupTypeRoles(groupType)
|
|
217
|
+
.pipe(takeUntil(this.destroy$))
|
|
218
|
+
.subscribe({
|
|
219
|
+
next: () => {
|
|
220
|
+
this.memberLevelOptions = (this.groupsService.getMemberTypes() ?? [])
|
|
221
|
+
.map((role) => ({ id: role.roleId, name: role.roleName }));
|
|
222
|
+
this.buildColumnSchema();
|
|
223
|
+
this.cdr.detectChanges();
|
|
224
|
+
},
|
|
225
|
+
error: (error) => {
|
|
226
|
+
this.groupsService.handleErrors(error);
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Persists the membership-level override when the admin picks a value in a
|
|
232
|
+
* row's Member Level dropdown (bound to the reusable table's
|
|
233
|
+
* `rowDropdownChange` output). Builds the request from the dialog's current
|
|
234
|
+
* group id, the row's user id and the selected option's id (the role id), and
|
|
235
|
+
* posts it to the backend. The row's displayed level is updated optimistically
|
|
236
|
+
* and reverted if the save fails.
|
|
237
|
+
* @param {{ row: InterestedRoster; option: SelectOption }} event
|
|
238
|
+
* @memberof InterestedRostersComponent
|
|
239
|
+
*/
|
|
240
|
+
onMemberLevelChange(event) {
|
|
241
|
+
const row = event?.row;
|
|
242
|
+
const option = event?.option;
|
|
243
|
+
const groupId = this.group?.groupId ??
|
|
244
|
+
this.groupsService.getSelectedGroupInfo()?.groupId;
|
|
245
|
+
const roleId = option?.id;
|
|
246
|
+
if (!row?.userId || !groupId || !roleId)
|
|
247
|
+
return;
|
|
248
|
+
const previousLevel = row.memberLevel;
|
|
249
|
+
// Optimistically reflect the selection in the row.
|
|
250
|
+
row.memberLevel = option?.name ?? row.memberLevel;
|
|
251
|
+
const payload = {
|
|
252
|
+
payload: {
|
|
253
|
+
groupId,
|
|
254
|
+
userId: row.userId,
|
|
255
|
+
roleId,
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
this.groupsService
|
|
259
|
+
.updateInterestMemberLevel(payload)
|
|
260
|
+
.pipe(takeUntil(this.destroy$))
|
|
261
|
+
.subscribe({
|
|
262
|
+
error: (error) => {
|
|
263
|
+
// Revert the optimistic change on failure and surface the error.
|
|
264
|
+
row.memberLevel = previousLevel;
|
|
265
|
+
this.cdr.detectChanges();
|
|
266
|
+
this.groupsService.handleErrors(error);
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Opens the "View Responses" dialog for a roster row (bound to the reusable
|
|
272
|
+
* table's LINK output) using the shared {@link ModalComponent}. The modal
|
|
273
|
+
* supplies the title row and X close; the requester's stored interest-form
|
|
274
|
+
* responses are rendered by {@link InterestResponsesComponent}, which loads
|
|
275
|
+
* them from the backend using the row's {@code interestId} passed via the
|
|
276
|
+
* ModalComponent dynamic-input pattern.
|
|
277
|
+
* @param {InterestedRoster} row
|
|
278
|
+
* @memberof InterestedRostersComponent
|
|
279
|
+
*/
|
|
280
|
+
onFormLinkClick(row) {
|
|
281
|
+
if (!row?.interestId)
|
|
282
|
+
return;
|
|
283
|
+
const dialogOptions = {
|
|
284
|
+
heading: this.texts?.responses?.title,
|
|
285
|
+
subHeading: this.group?.groupName,
|
|
286
|
+
headingClass: 'ieeesa-title-lg-24',
|
|
287
|
+
isCloseNeeded: true,
|
|
288
|
+
componentReference: InterestResponsesComponent,
|
|
289
|
+
modalType: ModalType.FORM,
|
|
290
|
+
data2DynamicComponent: { interestId: row.interestId },
|
|
291
|
+
dataInputName: 'componentData',
|
|
292
|
+
};
|
|
293
|
+
this.dialog.open(ModalComponent, {
|
|
294
|
+
data: dialogOptions,
|
|
295
|
+
panelClass: ['ieeesa-modal-dialog', 'ieeesa-interest-responses-dialog'],
|
|
296
|
+
width: '800px',
|
|
297
|
+
maxWidth: '95vw',
|
|
298
|
+
maxHeight: '90vh',
|
|
299
|
+
ariaModal: true,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Defines the reusable-table columns for the Interested Rosters list. Every
|
|
304
|
+
* `cellData`/`selectedOption` is a `(row) => ...` accessor, matching the
|
|
305
|
+
* shared table's contract. Member Level is the DROPDOWN column seeded with the
|
|
306
|
+
* configured levels plus "None"; Form is a LINK that opens the responses
|
|
307
|
+
* dialog.
|
|
308
|
+
* @memberof InterestedRostersComponent
|
|
309
|
+
*/
|
|
310
|
+
buildColumnSchema() {
|
|
311
|
+
const columns = this.texts?.columns;
|
|
312
|
+
this.columnSchema = [
|
|
313
|
+
{
|
|
314
|
+
id: 1,
|
|
315
|
+
columnDef: 'name',
|
|
316
|
+
heading: columns?.name,
|
|
317
|
+
columnType: TableColumnType.TEXT,
|
|
318
|
+
isSortableColumn: true,
|
|
319
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
320
|
+
cellData: (row) => row.name,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
id: 2,
|
|
324
|
+
columnDef: 'email',
|
|
325
|
+
heading: columns?.email,
|
|
326
|
+
columnType: TableColumnType.TEXT,
|
|
327
|
+
isSortableColumn: true,
|
|
328
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
329
|
+
cellData: (row) => row.email,
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
id: 3,
|
|
333
|
+
columnDef: 'affiliations',
|
|
334
|
+
heading: columns?.affiliations,
|
|
335
|
+
columnType: TableColumnType.TEXT,
|
|
336
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
337
|
+
cellData: (row) => (row.affiliations || []).join(', '),
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
id: 4,
|
|
341
|
+
columnDef: 'submittedOn',
|
|
342
|
+
heading: columns?.submittedOn,
|
|
343
|
+
columnType: TableColumnType.TEXT,
|
|
344
|
+
isSortableColumn: true,
|
|
345
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
346
|
+
cellData: (row) => row.submittedOn,
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
id: 5,
|
|
350
|
+
columnDef: 'memberLevel',
|
|
351
|
+
heading: columns?.memberLevel,
|
|
352
|
+
columnType: TableColumnType.DROPDOWN,
|
|
353
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
354
|
+
cellData: (row) => row.memberLevel,
|
|
355
|
+
dropdownOptions: this.memberLevelOptions,
|
|
356
|
+
dropdownPlaceholder: this.texts?.memberLevelPlaceholder,
|
|
357
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
358
|
+
selectedOption: (row) => this.memberLevelOptions.find((o) => o.name === row.memberLevel) ??
|
|
359
|
+
null,
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
id: 6,
|
|
363
|
+
columnDef: 'form',
|
|
364
|
+
heading: columns?.form,
|
|
365
|
+
columnType: TableColumnType.LINK,
|
|
366
|
+
cellData: () => this.texts?.viewLabel,
|
|
367
|
+
ariaLabel: (row) => `${this.texts?.viewAriaLabelPrefix} ${row?.name ?? ''}`.trim(),
|
|
368
|
+
},
|
|
369
|
+
];
|
|
370
|
+
}
|
|
371
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InterestedRostersComponent, deps: [{ token: i1.MatDialog }, { token: i2.GroupsService }, { token: i0.ChangeDetectorRef }, { token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
372
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: InterestedRostersComponent, isStandalone: true, selector: "ieeesa-interested-rosters", ngImport: i0, template: "<section class=\"ieeesa-interested-rosters\" [attr.aria-label]=\"texts?.regionAriaLabel\">\r\n <p class=\"ieeesa-interested-rosters__count\">{{ totalRecords }} {{ texts?.countSuffix }}</p>\r\n <ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [tableActions]=\"tableActions\"\r\n [paginatorConfig]=\"paginatorConfig\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"paginatorConfig.recordsPerPage\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n [defaultColumnSortDirection]=\"defaultColumnSortDirection\"\r\n [isClearSortNeeded]=\"false\"\r\n (paginationChange)=\"onPaginationChange($event)\"\r\n (sortChange)=\"onSortChange($event)\"\r\n (rowLink)=\"onFormLinkClick($event)\"\r\n (rowDropdownChange)=\"onMemberLevelChange($event)\"\r\n ></ieeesa-data-table>\r\n</section>\r\n", styles: [".ieeesa-interested-rosters{color:#333;font-size:14px;letter-spacing:0}.ieeesa-interested-rosters__count{margin:0;padding:24px 12px 28px;line-height:20px}.ieeesa-interested-rosters__empty{margin:0;padding:24px 12px;color:#757575}.ieeesa-interested-rosters .mat-mdc-table{width:100%;min-width:960px;table-layout:fixed}.ieeesa-interested-rosters .mat-column-name{width:16.5%}.ieeesa-interested-rosters .mat-column-email,.ieeesa-interested-rosters .mat-column-affiliations{width:18%}.ieeesa-interested-rosters .mat-column-submittedOn{width:16%}.ieeesa-interested-rosters .mat-column-memberLevel{width:22.5%}.ieeesa-interested-rosters .mat-column-form{width:9%}.ieeesa-interested-rosters tbody tr{height:64px}.ieeesa-interested-rosters td.mat-column-memberLevel{vertical-align:middle}.ieeesa-interested-rosters td.mat-column-memberLevel ieeesa-select{display:block;width:176px;max-width:100%}.ieeesa-interested-rosters td.mat-column-memberLevel .ieeesa-select-field__label,.ieeesa-interested-rosters td.mat-column-memberLevel .mat-mdc-form-field-subscript-wrapper{display:none}.ieeesa-interested-rosters td.mat-column-memberLevel .mat-mdc-form-field{display:block;width:100%}.ieeesa-interested-rosters td.mat-column-memberLevel .mat-mdc-form-field-infix{width:auto;min-width:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle", "rowDropdownChange"] }, { kind: "ngmodule", type: MatDialogModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
23
373
|
}
|
|
24
374
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InterestedRostersComponent, decorators: [{
|
|
25
375
|
type: Component,
|
|
26
|
-
args: [{ selector: 'ieeesa-interested-rosters', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<
|
|
27
|
-
}] }
|
|
28
|
-
|
|
376
|
+
args: [{ selector: 'ieeesa-interested-rosters', standalone: true, imports: [CommonModule, DataTableComponent, ModalComponent, MatDialogModule], encapsulation: ViewEncapsulation.None, template: "<section class=\"ieeesa-interested-rosters\" [attr.aria-label]=\"texts?.regionAriaLabel\">\r\n <p class=\"ieeesa-interested-rosters__count\">{{ totalRecords }} {{ texts?.countSuffix }}</p>\r\n <ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [tableActions]=\"tableActions\"\r\n [paginatorConfig]=\"paginatorConfig\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"paginatorConfig.recordsPerPage\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n [defaultColumnSortDirection]=\"defaultColumnSortDirection\"\r\n [isClearSortNeeded]=\"false\"\r\n (paginationChange)=\"onPaginationChange($event)\"\r\n (sortChange)=\"onSortChange($event)\"\r\n (rowLink)=\"onFormLinkClick($event)\"\r\n (rowDropdownChange)=\"onMemberLevelChange($event)\"\r\n ></ieeesa-data-table>\r\n</section>\r\n", styles: [".ieeesa-interested-rosters{color:#333;font-size:14px;letter-spacing:0}.ieeesa-interested-rosters__count{margin:0;padding:24px 12px 28px;line-height:20px}.ieeesa-interested-rosters__empty{margin:0;padding:24px 12px;color:#757575}.ieeesa-interested-rosters .mat-mdc-table{width:100%;min-width:960px;table-layout:fixed}.ieeesa-interested-rosters .mat-column-name{width:16.5%}.ieeesa-interested-rosters .mat-column-email,.ieeesa-interested-rosters .mat-column-affiliations{width:18%}.ieeesa-interested-rosters .mat-column-submittedOn{width:16%}.ieeesa-interested-rosters .mat-column-memberLevel{width:22.5%}.ieeesa-interested-rosters .mat-column-form{width:9%}.ieeesa-interested-rosters tbody tr{height:64px}.ieeesa-interested-rosters td.mat-column-memberLevel{vertical-align:middle}.ieeesa-interested-rosters td.mat-column-memberLevel ieeesa-select{display:block;width:176px;max-width:100%}.ieeesa-interested-rosters td.mat-column-memberLevel .ieeesa-select-field__label,.ieeesa-interested-rosters td.mat-column-memberLevel .mat-mdc-form-field-subscript-wrapper{display:none}.ieeesa-interested-rosters td.mat-column-memberLevel .mat-mdc-form-field{display:block;width:100%}.ieeesa-interested-rosters td.mat-column-memberLevel .mat-mdc-form-field-infix{width:auto;min-width:0}\n"] }]
|
|
377
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.GroupsService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
378
|
+
type: Optional
|
|
379
|
+
}, {
|
|
380
|
+
type: Inject,
|
|
381
|
+
args: [MAT_DIALOG_DATA]
|
|
382
|
+
}] }]; } });
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJlc3RlZC1yb3N0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJlc3RlZC1yb3N0ZXJzL2ludGVyZXN0ZWQtcm9zdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2ludGVyZXN0ZWQtcm9zdGVycy9pbnRlcmVzdGVkLXJvc3RlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBR04sUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBYSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd2RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUlkLGVBQWUsR0FDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQVNwRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7OztBQVFoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVNILE1BQU0sT0FBTywwQkFBMEI7SUE0Q3JDO0lBQ0UsMENBQTBDO0lBQ2xDLE1BQWlCO0lBQ3pCLDBDQUEwQztJQUNsQyxhQUE0QjtJQUNwQywwQ0FBMEM7SUFDbEMsR0FBc0I7SUFDOUIsMENBQTBDO0lBQ0UsS0FBdUI7UUFOM0QsV0FBTSxH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SSxDQUFDLGtCQUFrQjtnQkFDeEMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxzQkFBc0I7Z0JBQ3ZELDhEQUE4RDtnQkFDOUQsY0FBYyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJO2FBQ1A7WUFDRDtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxTQUFTLEVBQUUsTUFBTTtnQkFDakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJO2dCQUN0QixVQUFVLEVBQUUsZUFBZSxDQUFDLElBQUk7Z0JBQ2hDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVM7Z0JBQ3JDLFNBQVMsRUFBRSxDQUFDLEdBQXFCLEVBQUUsRUFBRSxDQUNuQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUU7YUFDakU7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0F4V1UsMEJBQTBCLHlHQW9EZixlQUFlO21HQXBEMUIsMEJBQTBCLHFGQ3BFdkMseTJCQWtCQSxtekNENkNZLFlBQVksK0JBQUUsa0JBQWtCLDRpREFBa0IsZUFBZTs7NEZBS2hFLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSwyQkFBMkIsY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsaUJBRzdELGlCQUFpQixDQUFDLElBQUk7OzBCQXNEbEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGUsIFNlbGVjdE9wdGlvbiB9IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG4gIE1vZGFsQ29tcG9uZW50LFxyXG4gIFBhZ2luYXRvckNvbmZpZyxcclxuICBUYWJsZUFjdGlvbnMsXHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXcsXHJcbiAgSW50ZXJlc3RlZFJvc3RlcixcclxuICBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkLFxyXG4gIFVwZGF0ZU1lbWJlckxldmVsUGF5bG9hZCxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvaW50ZXJlc3QtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnRlcmVzdFJlc3BvbnNlc0NvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZXN0LXJlc3BvbnNlcy9pbnRlcmVzdC1yZXNwb25zZXMuY29tcG9uZW50JztcclxuXHJcbi8vIEdyb3VwcyBtYXkgY29tcGlsZSBhZ2FpbnN0IHB1Ymxpc2hlZCBQcmVzZW50YXRpb24gdHlwZXMgd2l0aG91dCB0aGUgcm93LWxhYmVsIGNhbGxiYWNrLlxyXG50eXBlIEludGVyZXN0ZWRSb3N0ZXJDb2x1bW5TY2hlbWEgPSBUYWJsZUNvbHVtblNjaGVtYSAmIHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBhcmlhTGFiZWw/OiAocm93OiBJbnRlcmVzdGVkUm9zdGVyKSA9PiBzdHJpbmc7XHJcbn07XHJcblxyXG4vKipcclxuICogXCJJbnRlcmVzdGVkIFJvc3RlcnNcIiB0YWIgb2YgdGhlIFJvc3RlciBJbnRlcmVzdHMgZGlhbG9nIChTUDNNLTQyOCkuIExpc3RzIHRoZVxyXG4gKiB1c2VycyB3aG8gZXhwcmVzc2VkIGludGVyZXN0IGluIHRoZSBncm91cCBhbmQgbGV0cyBhIEdyb3VwIEFkbWluIHJldmlldyBlYWNoXHJcbiAqIHJlcXVlc3RlcidzIHN1Ym1pdHRlZCByZXNwb25zZXMgYW5kIHNldC9vdmVycmlkZSB0aGVpciBtZW1iZXJzaGlwIGxldmVsIGZyb21cclxuICogdGhlIFJvc3RlciBNYW5hZ2VtZW50IHNjcmVlbi5cclxuICpcclxuICogVGhlIGxpc3QgaXMgcmVuZGVyZWQgdGhyb3VnaCB0aGUgc2hhcmVkIHtAbGluayBEYXRhVGFibGVDb21wb25lbnR9OiB0aGVcclxuICogTmFtZS9FbWFpbC9BZmZpbGlhdGlvbnMvU3VibWl0dGVkIE9uIGNvbHVtbnMgYXJlIHBsYWluIFRFWFQsIE1lbWJlciBMZXZlbCBpc1xyXG4gKiB0aGUgcmV1c2FibGUgdGFibGUncyBEUk9QRE9XTiBjb2x1bW4gKGFuIGlubGluZSB7QGNvZGUgaWVlZXNhLXNlbGVjdH0pIGFuZFxyXG4gKiBGb3JtIGlzIGEgTElOSyB0aGF0IG9wZW5zIHRoZSBcIlZpZXcgUmVzcG9uc2VzXCIgZGlhbG9nLiBUaGUgTWVtYmVyIExldmVsXHJcbiAqIG9wdGlvbnMgYXJlIHNvdXJjZWQgZnJvbSB0aGUgcm9sZXMgQVBJXHJcbiAqICh7QGxpbmsgR3JvdXBzU2VydmljZS5nZXRHcm91cFR5cGVSb2xlc30pIGZpbHRlcmVkIHRvIHRoZSBcIk1lbWJlciBMZXZlbFwiIHJvbGVcclxuICogdHlwZS4gSW50ZXJlc3RlZC1yb3N0ZXIgcm93cyBhcmUgbG9hZGVkIGZyb21cclxuICoge0BsaW5rIEdyb3Vwc1NlcnZpY2UuZ2V0SW50ZXJlc3RSZXNwb25zZXNCeUdyb3VwfSBhbmQgZWFjaCByZXF1ZXN0ZXIncyBzdG9yZWRcclxuICogZm9ybSByZXNwb25zZXMgYXJlIGxvYWRlZCBvbiBkZW1hbmQgZnJvbVxyXG4gKiB7QGxpbmsgR3JvdXBzU2VydmljZS5nZXRJbnRlcmVzdFJlc3BvbnNlc30gdXNpbmcgdGhlIHJvdydzIGBpbnRlcmVzdElkYC4gQWxsXHJcbiAqIGRpc3BsYXkgdGV4dCBpcyBzb3VyY2VkIGZyb20gY29uc3RhbnRzLmpzb24uXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS1pbnRlcmVzdGVkLXJvc3RlcnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGF0YVRhYmxlQ29tcG9uZW50LCBNb2RhbENvbXBvbmVudCwgTWF0RGlhbG9nTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJlc3RlZC1yb3N0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnRlcmVzdGVkLXJvc3RlcnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICB0ZXh0cyA9IHRoaXMuY29uc3RhbnRzPy5yb3N0ZXJJbnRlcmVzdHM/LmludGVyZXN0ZWRSb3N0ZXJzO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWVtYmVyLWxldmVsIGRyb3Bkb3duIG9wdGlvbnMsIHNvdXJjZWQgZnJvbSB0aGUgcm9sZXMgQVBJXHJcbiAgKiAoe0Bjb2RlIEdFVCAvZ3JvdXBzL2NvbmZpZy9yb2xlc0J5R3JvdXBUeXBlL3tncm91cFR5cGV9fSkgZmlsdGVyZWQgdG8gdGhlIFwiTWVtYmVyIExldmVsXCIgcm9sZSB0eXBlLlxyXG4gICAqIEVhY2ggb3B0aW9uIGlzIHtAY29kZSB7IGlkOiByb2xlSWQsIG5hbWU6IHJvbGVOYW1lIH19LlxyXG4gICAqL1xyXG4gIG1lbWJlckxldmVsT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuXHJcbiAgcm9zdGVyczogSW50ZXJlc3RlZFJvc3RlcltdID0gW107XHJcbiAgdGFibGVEYXRhOiBJbnRlcmVzdGVkUm9zdGVyW10gPSBbXTtcclxuICBjb2x1bW5TY2hlbWE6IEludGVyZXN0ZWRSb3N0ZXJDb2x1bW5TY2hlbWFbXSA9IFtdO1xyXG5cclxuICAvKiogVG90YWwgaW50ZXJlc3RlZC1yb3N0ZXIgcm93cyByZXBvcnRlZCBieSB0aGUgYmFja2VuZCAoZm9yIHBhZ2luZy9jb3VudHMpLiAqL1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcblxyXG4gIHBhZ2luYXRvckNvbmZpZzogUGFnaW5hdG9yQ29uZmlnID0ge1xyXG4gICAgcmVjb3Jkc1BlclBhZ2U6IHRoaXMudGV4dHM/LnBhZ2VTaXplT3B0aW9ucz8uWzBdLFxyXG4gICAgcGFnZVNpemVPcHRpb25zOiB0aGlzLnRleHRzPy5wYWdlU2l6ZU9wdGlvbnMsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgfTtcclxuICBwYWdlSW5kZXggPSAwO1xyXG4gIGRlZmF1bHRTb3J0ZWRDb2x1bW4gPSAnc3VibWl0dGVkT24nO1xyXG4gIGRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uOiBTb3J0WydkaXJlY3Rpb24nXSA9ICdkZXNjJztcclxuICBwcml2YXRlIHNvcnRlZEJ5ID0gdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uO1xyXG4gIHByaXZhdGUgc29ydGVkT3JkZXJCeSA9IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb247XHJcblxyXG4gIC8qKiBSZWFkLW9ubHkgdGFibGUg4oCUIG5vIHNlYXJjaCAvIGZpbHRlciAvIGFkZCAvIGVkaXQgLyBkZWxldGUgYWN0aW9ucy4gKi9cclxuICB0YWJsZUFjdGlvbnM6IFRhYmxlQWN0aW9ucyA9IHtcclxuICAgIGlzUGFnaW5hdGlvbk5lZWRlZDogdHJ1ZSxcclxuICAgIGlzU2VhcmNoTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRmlsdGVyTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzQWRkTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRWRpdE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0RlbGV0ZU5lZWRlZDogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3Vwc1NlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBncm91cDogR3JvdXBJbmZvIHwgbnVsbFxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSByZXVzYWJsZS10YWJsZSBjb2x1bW4gc2NoZW1hIGFuZCBsb2FkcyB0aGUgaW50ZXJlc3RlZC1yb3N0ZXJcclxuICAgKiBsaXN0IGZvciB0aGUgY3VycmVudCBncm91cCBmcm9tIHRoZSBiYWNrZW5kLlxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkTWVtYmVyTGV2ZWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLmJ1aWxkQ29sdW1uU2NoZW1hKCk7XHJcbiAgICB0aGlzLmxvYWRJbnRlcmVzdGVkUm9zdGVycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW5zIHVwIGluLWZsaWdodCBzdWJzY3JpcHRpb25zIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlcyB0aGUgY3VycmVudCBncm91cCBpZCBmcm9tIHRoZSBkaWFsb2cgZGF0YSAoZmFsbGluZyBiYWNrIHRvIHRoZVxyXG4gICAqIHNlcnZpY2UncyBzZWxlY3RlZCBncm91cCkgYW5kIGxvYWRzIHRoZSBpbnRlcmVzdGVkLXJvc3RlciByb3dzIGZvciBpdC4gTWFwc1xyXG4gICAqIGVhY2ggYmFja2VuZCB7QGxpbmsgR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlld30gb250byB0aGUgZmxhdHRlbmVkXHJcbiAgICoge0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJ9IHNoYXBlIHRoZSByZXVzYWJsZSB0YWJsZSBiaW5kcyB0by4gT24gZmFpbHVyZSB0aGVcclxuICAgKiB0YWJsZSBpcyBjbGVhcmVkIGFuZCB0aGUgZXJyb3IgaXMgZGVsZWdhdGVkIHRvIEdyb3Vwc1NlcnZpY2UgZm9yIGFsZXJ0aW5nLlxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9hZEludGVyZXN0ZWRSb3N0ZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXBJZCA9XHJcbiAgICAgIHRoaXMuZ3JvdXA/Lmdyb3VwSWQgPz9cclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQ7XHJcbiAgICBpZiAoIWdyb3VwSWQpIHJldHVybjtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBzZWFyY2hCeU5hbWVPckVtYWlsOiAnJyxcclxuICAgICAgICBvZmZzZXQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3JDb25maWcucmVjb3Jkc1BlclBhZ2UsXHJcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yQ29uZmlnLnJlY29yZHNQZXJQYWdlLFxyXG4gICAgICAgIHNvcnRlZEJ5OiB0aGlzLnNvcnRlZEJ5LFxyXG4gICAgICAgIHNvcnRlZE9yZGVyQnk6IHRoaXMuc29ydGVkT3JkZXJCeSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgLmdldEludGVyZXN0UmVzcG9uc2VzQnlHcm91cChncm91cElkLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZT8udG90YWxSZWNvcmRzID8/IDA7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5wYWdpbmF0b3JDb25maWcsXHJcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogdGhpcy50b3RhbFJlY29yZHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5yb3N0ZXJzID0gKHJlc3BvbnNlPy5kYXRhID8/IFtdKS5tYXAoKHZpZXcpID0+XHJcbiAgICAgICAgICAgIHRoaXMubWFwVG9Sb3N0ZXIodmlldylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMucm9zdGVycztcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJvc3RlcnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvckNvbmZpZyA9IHsgLi4udGhpcy5wYWdpbmF0b3JDb25maWcsIHRvdGFsUmVjb3JkczogMCB9O1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmF0aW9uQ2hhbmdlKGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5wYWdpbmF0b3JDb25maWcgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnaW5hdG9yQ29uZmlnLFxyXG4gICAgICByZWNvcmRzUGVyUGFnZTogZXZlbnQucGFnZVNpemUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5sb2FkSW50ZXJlc3RlZFJvc3RlcnMoKTtcclxuICB9XHJcblxyXG4gIG9uU29ydENoYW5nZShldmVudDogU29ydCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0ZWRCeSA9IGV2ZW50LmRpcmVjdGlvbiA/IGV2ZW50LmFjdGl2ZSA6IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbjtcclxuICAgIHRoaXMuc29ydGVkT3JkZXJCeSA9IGV2ZW50LmRpcmVjdGlvbiB8fCB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy5sb2FkSW50ZXJlc3RlZFJvc3RlcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYSBiYWNrZW5kIHtAbGluayBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3fSB0byB0aGUgZmxhdHRlbmVkXHJcbiAgICoge0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJ9IHJvdyB0aGUgdGFibGUgcmVuZGVyczogYWZmaWxpYXRpb24gb3JnIG5hbWVzIGFyZVxyXG4gICAqIGpvaW5lZCBpbnRvIHRoZSBhZmZpbGlhdGlvbnMgbGlzdCwgdGhlIGFzc2lnbmVkIG1lbWJlcnNoaXAgbGV2ZWwgKGlmIGFueSlcclxuICAgKiBiZWNvbWVzIHRoZSByb2xlIG5hbWUg4oCUIHdoaWNoIHRoZSBNZW1iZXIgTGV2ZWwgZHJvcGRvd24gYmluZHMgYXMgaXRzXHJcbiAgICogcHJlLXNlbGVjdGVkIHZhbHVlIOKAlCB0aGUgc3VibWl0dGVkIHRpbWVzdGFtcCBpcyBmb3JtYXR0ZWQgZm9yIGRpc3BsYXksIGFuZFxyXG4gICAqIHRoZSBpbnRlcmVzdCBpZCBpcyBjYXJyaWVkIHRocm91Z2ggZm9yIHRoZSByZXNwb25zZXMgZGlhbG9nIGFuZCB0aGUgbGV2ZWxcclxuICAgKiBvdmVycmlkZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXd9IHZpZXdcclxuICAgKiBAcmV0dXJuIHtJbnRlcmVzdGVkUm9zdGVyfVxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWFwVG9Sb3N0ZXIodmlldzogR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlldyk6IEludGVyZXN0ZWRSb3N0ZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW50ZXJlc3RJZDogdmlldz8uaW50ZXJlc3RJZCxcclxuICAgICAgdXNlcklkOiB2aWV3Py51c2VySWQsXHJcbiAgICAgIG5hbWU6IHZpZXc/Lm5hbWUsXHJcbiAgICAgIGVtYWlsOiB2aWV3Py5lbWFpbCxcclxuICAgICAgYWZmaWxpYXRpb25zOiAodmlldz8uYWZmaWxpYXRpb24gPz8gW10pLm1hcCgob3JnKSA9PiBvcmc/Lm9yZ05hbWUpLFxyXG4gICAgICBzdWJtaXR0ZWRPbjogdGhpcy5mb3JtYXRTdWJtaXR0ZWRPbih2aWV3Py5zdWJtaXR0ZWRPbiksXHJcbiAgICAgIG1lbWJlckxldmVsOiB2aWV3Py5tZW1iZXJMZXZlbD8ubGVuZ3RoXHJcbiAgICAgICAgPyB2aWV3Lm1lbWJlckxldmVsWzBdPy5yb2xlTmFtZSA/PyBudWxsXHJcbiAgICAgICAgOiBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdHMgdGhlIGJhY2tlbmQgc3VibWl0dGVkIHRpbWVzdGFtcCAoSVNPIGRhdGUgc3RyaW5nKSBmb3IgZGlzcGxheSxcclxuICAgKiBmYWxsaW5nIGJhY2sgdG8gdGhlIHJhdyB2YWx1ZSB3aGVuIGl0IGlzIG5vdCBhIHBhcnNlYWJsZSBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJtaXR0ZWRPblxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGZvcm1hdFN1Ym1pdHRlZE9uKHN1Ym1pdHRlZE9uOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzdWJtaXR0ZWRPbikgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN1Ym1pdHRlZE9uKTtcclxuICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSlcclxuICAgICAgPyBzdWJtaXR0ZWRPblxyXG4gICAgICA6IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZHMgdGhlIE1lbWJlciBMZXZlbCBkcm9wZG93biBvcHRpb25zIGZyb20gdGhlIHJvbGVzIEFQSVxyXG4gICogKHtAY29kZSBHRVQgL2dyb3Vwcy9jb25maWcvcm9sZXNCeUdyb3VwVHlwZS97Z3JvdXBUeXBlfX0pLCBrZWVwaW5nIG9ubHkgcm9sZXMgd2hvc2VcclxuICAgKiB7QGNvZGUgcm9sZVR5cGVOYW1lfSBpcyBcIk1lbWJlciBMZXZlbFwiIGFuZCBtYXBwaW5nIGVhY2ggdG8gYVxyXG4gICAqIHtAbGluayBTZWxlY3RPcHRpb259ICh7QGNvZGUgeyBpZDogcm9sZUlkLCBuYW1lOiByb2xlTmFtZSB9fSkuXHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2FkTWVtYmVyTGV2ZWxPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID1cclxuICAgICAgdGhpcy5ncm91cD8uZ3JvdXBUeXBlID8/XHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGU7XHJcbiAgICBpZiAoIWdyb3VwVHlwZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVSb2xlcyhncm91cFR5cGUpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZW1iZXJMZXZlbE9wdGlvbnMgPSAodGhpcy5ncm91cHNTZXJ2aWNlLmdldE1lbWJlclR5cGVzKCkgPz8gW10pXHJcbiAgICAgICAgICAgIC5tYXAoKHJvbGUpID0+ICh7IGlkOiByb2xlLnJvbGVJZCwgbmFtZTogcm9sZS5yb2xlTmFtZSB9KSk7XHJcbiAgICAgICAgICB0aGlzLmJ1aWxkQ29sdW1uU2NoZW1hKCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcnNpc3RzIHRoZSBtZW1iZXJzaGlwLWxldmVsIG92ZXJyaWRlIHdoZW4gdGhlIGFkbWluIHBpY2tzIGEgdmFsdWUgaW4gYVxyXG4gICAqIHJvdydzIE1lbWJlciBMZXZlbCBkcm9wZG93biAoYm91bmQgdG8gdGhlIHJldXNhYmxlIHRhYmxlJ3NcclxuICAgKiBgcm93RHJvcGRvd25DaGFuZ2VgIG91dHB1dCkuIEJ1aWxkcyB0aGUgcmVxdWVzdCBmcm9tIHRoZSBkaWFsb2cncyBjdXJyZW50XHJcbiAgICogZ3JvdXAgaWQsIHRoZSByb3cncyB1c2VyIGlkIGFuZCB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgaWQgKHRoZSByb2xlIGlkKSwgYW5kXHJcbiAgICogcG9zdHMgaXQgdG8gdGhlIGJhY2tlbmQuIFRoZSByb3cncyBkaXNwbGF5ZWQgbGV2ZWwgaXMgdXBkYXRlZCBvcHRpbWlzdGljYWxseVxyXG4gICAqIGFuZCByZXZlcnRlZCBpZiB0aGUgc2F2ZSBmYWlscy5cclxuICAgKiBAcGFyYW0ge3sgcm93OiBJbnRlcmVzdGVkUm9zdGVyOyBvcHRpb246IFNlbGVjdE9wdGlvbiB9fSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uTWVtYmVyTGV2ZWxDaGFuZ2UoZXZlbnQ6IHtcclxuICAgIHJvdzogSW50ZXJlc3RlZFJvc3RlcjtcclxuICAgIG9wdGlvbjogU2VsZWN0T3B0aW9uO1xyXG4gIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvdyA9IGV2ZW50Py5yb3c7XHJcbiAgICBjb25zdCBvcHRpb24gPSBldmVudD8ub3B0aW9uO1xyXG4gICAgY29uc3QgZ3JvdXBJZCA9XHJcbiAgICAgIHRoaXMuZ3JvdXA/Lmdyb3VwSWQgPz9cclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQ7XHJcbiAgICBjb25zdCByb2xlSWQgPSBvcHRpb24/LmlkIGFzIHN0cmluZztcclxuICAgIGlmICghcm93Py51c2VySWQgfHwgIWdyb3VwSWQgfHwgIXJvbGVJZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHByZXZpb3VzTGV2ZWwgPSByb3cubWVtYmVyTGV2ZWw7XHJcbiAgICAvLyBPcHRpbWlzdGljYWxseSByZWZsZWN0IHRoZSBzZWxlY3Rpb24gaW4gdGhlIHJvdy5cclxuICAgIHJvdy5tZW1iZXJMZXZlbCA9IG9wdGlvbj8ubmFtZSA/PyByb3cubWVtYmVyTGV2ZWw7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZDogVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgZ3JvdXBJZCxcclxuICAgICAgICB1c2VySWQ6IHJvdy51c2VySWQsXHJcbiAgICAgICAgcm9sZUlkLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAudXBkYXRlSW50ZXJlc3RNZW1iZXJMZXZlbChwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIC8vIFJldmVydCB0aGUgb3B0aW1pc3RpYyBjaGFuZ2Ugb24gZmFpbHVyZSBhbmQgc3VyZmFjZSB0aGUgZXJyb3IuXHJcbiAgICAgICAgICByb3cubWVtYmVyTGV2ZWwgPSBwcmV2aW91c0xldmVsO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVucyB0aGUgXCJWaWV3IFJlc3BvbnNlc1wiIGRpYWxvZyBmb3IgYSByb3N0ZXIgcm93IChib3VuZCB0byB0aGUgcmV1c2FibGVcclxuICAgKiB0YWJsZSdzIExJTksgb3V0cHV0KSB1c2luZyB0aGUgc2hhcmVkIHtAbGluayBNb2RhbENvbXBvbmVudH0uIFRoZSBtb2RhbFxyXG4gICAqIHN1cHBsaWVzIHRoZSB0aXRsZSByb3cgYW5kIFggY2xvc2U7IHRoZSByZXF1ZXN0ZXIncyBzdG9yZWQgaW50ZXJlc3QtZm9ybVxyXG4gICAqIHJlc3BvbnNlcyBhcmUgcmVuZGVyZWQgYnkge0BsaW5rIEludGVyZXN0UmVzcG9uc2VzQ29tcG9uZW50fSwgd2hpY2ggbG9hZHNcclxuICAgKiB0aGVtIGZyb20gdGhlIGJhY2tlbmQgdXNpbmcgdGhlIHJvdydzIHtAY29kZSBpbnRlcmVzdElkfSBwYXNzZWQgdmlhIHRoZVxyXG4gICAqIE1vZGFsQ29tcG9uZW50IGR5bmFtaWMtaW5wdXQgcGF0dGVybi5cclxuICAgKiBAcGFyYW0ge0ludGVyZXN0ZWRSb3N0ZXJ9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRm9ybUxpbmtDbGljayhyb3c6IEludGVyZXN0ZWRSb3N0ZXIpOiB2b2lkIHtcclxuICAgIGlmICghcm93Py5pbnRlcmVzdElkKSByZXR1cm47XHJcbiAgICBjb25zdCBkaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICBoZWFkaW5nOiB0aGlzLnRleHRzPy5yZXNwb25zZXM/LnRpdGxlLFxyXG4gICAgICBzdWJIZWFkaW5nOiB0aGlzLmdyb3VwPy5ncm91cE5hbWUsXHJcbiAgICAgIGhlYWRpbmdDbGFzczogJ2llZWVzYS10aXRsZS1sZy0yNCcsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudFJlZmVyZW5jZTogSW50ZXJlc3RSZXNwb25zZXNDb21wb25lbnQsXHJcbiAgICAgIG1vZGFsVHlwZTogTW9kYWxUeXBlLkZPUk0sXHJcbiAgICAgIGRhdGEyRHluYW1pY0NvbXBvbmVudDogeyBpbnRlcmVzdElkOiByb3cuaW50ZXJlc3RJZCB9LFxyXG4gICAgICBkYXRhSW5wdXROYW1lOiAnY29tcG9uZW50RGF0YScsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiBkaWFsb2dPcHRpb25zLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2llZWVzYS1tb2RhbC1kaWFsb2cnLCAnaWVlZXNhLWludGVyZXN0LXJlc3BvbnNlcy1kaWFsb2cnXSxcclxuICAgICAgd2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnOTV2dycsXHJcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICBhcmlhTW9kYWw6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIHJldXNhYmxlLXRhYmxlIGNvbHVtbnMgZm9yIHRoZSBJbnRlcmVzdGVkIFJvc3RlcnMgbGlzdC4gRXZlcnlcclxuICAgKiBgY2VsbERhdGFgL2BzZWxlY3RlZE9wdGlvbmAgaXMgYSBgKHJvdykgPT4gLi4uYCBhY2Nlc3NvciwgbWF0Y2hpbmcgdGhlXHJcbiAgICogc2hhcmVkIHRhYmxlJ3MgY29udHJhY3QuIE1lbWJlciBMZXZlbCBpcyB0aGUgRFJPUERPV04gY29sdW1uIHNlZWRlZCB3aXRoIHRoZVxyXG4gICAqIGNvbmZpZ3VyZWQgbGV2ZWxzIHBsdXMgXCJOb25lXCI7IEZvcm0gaXMgYSBMSU5LIHRoYXQgb3BlbnMgdGhlIHJlc3BvbnNlc1xyXG4gICAqIGRpYWxvZy5cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkQ29sdW1uU2NoZW1hKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMudGV4dHM/LmNvbHVtbnM7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAxLFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/Lm5hbWUsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAocm93OiBhbnkpID0+IHJvdy5uYW1lLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnZW1haWwnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmVtYWlsLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKHJvdzogYW55KSA9PiByb3cuZW1haWwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogMyxcclxuICAgICAgICBjb2x1bW5EZWY6ICdhZmZpbGlhdGlvbnMnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmFmZmlsaWF0aW9ucyxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAocm93OiBhbnkpID0+IChyb3cuYWZmaWxpYXRpb25zIHx8IFtdKS5qb2luKCcsICcpLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnc3VibWl0dGVkT24nLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LnN1Ym1pdHRlZE9uLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKHJvdzogYW55KSA9PiByb3cuc3VibWl0dGVkT24sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogNSxcclxuICAgICAgICBjb2x1bW5EZWY6ICdtZW1iZXJMZXZlbCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8ubWVtYmVyTGV2ZWwsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLkRST1BET1dOLFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChyb3c6IGFueSkgPT4gcm93Lm1lbWJlckxldmVsLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5tZW1iZXJMZXZlbE9wdGlvbnMsXHJcbiAgICAgICAgZHJvcGRvd25QbGFjZWhvbGRlcjogdGhpcy50ZXh0cz8ubWVtYmVyTGV2ZWxQbGFjZWhvbGRlcixcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICB0aGlzLm1lbWJlckxldmVsT3B0aW9ucy5maW5kKChvKSA9PiBvLm5hbWUgPT09IHJvdy5tZW1iZXJMZXZlbCkgPz9cclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogNixcclxuICAgICAgICBjb2x1bW5EZWY6ICdmb3JtJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy5mb3JtLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5MSU5LLFxyXG4gICAgICAgIGNlbGxEYXRhOiAoKSA9PiB0aGlzLnRleHRzPy52aWV3TGFiZWwsXHJcbiAgICAgICAgYXJpYUxhYmVsOiAocm93OiBJbnRlcmVzdGVkUm9zdGVyKSA9PlxyXG4gICAgICAgICAgYCR7dGhpcy50ZXh0cz8udmlld0FyaWFMYWJlbFByZWZpeH0gJHtyb3c/Lm5hbWUgPz8gJyd9YC50cmltKCksXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImllZWVzYS1pbnRlcmVzdGVkLXJvc3RlcnNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHRzPy5yZWdpb25BcmlhTGFiZWxcIj5cclxuICA8cCBjbGFzcz1cImllZWVzYS1pbnRlcmVzdGVkLXJvc3RlcnNfX2NvdW50XCI+e3sgdG90YWxSZWNvcmRzIH19IHt7IHRleHRzPy5jb3VudFN1ZmZpeCB9fTwvcD5cclxuICA8aWVlZXNhLWRhdGEtdGFibGVcclxuICAgIFt0YWJsZURhdGFJbmZvXT1cInRhYmxlRGF0YVwiXHJcbiAgICBbY29sdW1uU2NoZW1hSW5mb109XCJjb2x1bW5TY2hlbWFcIlxyXG4gICAgW3RhYmxlQWN0aW9uc109XCJ0YWJsZUFjdGlvbnNcIlxyXG4gICAgW3BhZ2luYXRvckNvbmZpZ109XCJwYWdpbmF0b3JDb25maWdcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2luYXRvckNvbmZpZy5yZWNvcmRzUGVyUGFnZVwiXHJcbiAgICBbZGVmYXVsdFNvcnRlZENvbHVtbl09XCJkZWZhdWx0U29ydGVkQ29sdW1uXCJcclxuICAgIFtkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbl09XCJkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblwiXHJcbiAgICBbaXNDbGVhclNvcnROZWVkZWRdPVwiZmFsc2VcIlxyXG4gICAgKHBhZ2luYXRpb25DaGFuZ2UpPVwib25QYWdpbmF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKHJvd0xpbmspPVwib25Gb3JtTGlua0NsaWNrKCRldmVudClcIlxyXG4gICAgKHJvd0Ryb3Bkb3duQ2hhbmdlKT1cIm9uTWVtYmVyTGV2ZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgPjwvaWVlZXNhLWRhdGEtdGFibGU+XHJcbjwvc2VjdGlvbj5cclxuIl19
|