@oneteme/jquery-organizer 0.0.1
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/README.md +441 -0
- package/esm2022/lib/group-by-manager/group-by-manager.mjs +73 -0
- package/esm2022/lib/lazy-field-manager/lazy-field-manager.mjs +91 -0
- package/esm2022/lib/models/index.mjs +3 -0
- package/esm2022/lib/models/organizer-chart-adapter.mjs +164 -0
- package/esm2022/lib/models/organizer-config.interface.mjs +2 -0
- package/esm2022/lib/models/organizer-menu.model.mjs +17 -0
- package/esm2022/lib/models/organizer-utils.mjs +26 -0
- package/esm2022/lib/organizer-button/organizer-button.component.mjs +266 -0
- package/esm2022/lib/organizer-button/organizer-button.module.mjs +17 -0
- package/esm2022/lib/organizer-facade/organizer-facade.mjs +269 -0
- package/esm2022/lib/organizer-facade/organizer-facade.types.mjs +2 -0
- package/esm2022/lib/slice-panel/slice-panel.component.mjs +452 -0
- package/esm2022/lib/slice-panel/slice-panel.model.mjs +2 -0
- package/esm2022/oneteme-jquery-organizer.mjs +5 -0
- package/esm2022/public-api.mjs +12 -0
- package/fesm2022/oneteme-jquery-organizer.mjs +1369 -0
- package/fesm2022/oneteme-jquery-organizer.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/group-by-manager/group-by-manager.d.ts +20 -0
- package/lib/lazy-field-manager/lazy-field-manager.d.ts +25 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/organizer-chart-adapter.d.ts +44 -0
- package/lib/models/organizer-config.interface.d.ts +103 -0
- package/lib/models/organizer-menu.model.d.ts +7 -0
- package/lib/models/organizer-utils.d.ts +8 -0
- package/lib/organizer-button/organizer-button.component.d.ts +51 -0
- package/lib/organizer-button/organizer-button.module.d.ts +8 -0
- package/lib/organizer-facade/organizer-facade.d.ts +51 -0
- package/lib/organizer-facade/organizer-facade.types.d.ts +31 -0
- package/lib/slice-panel/slice-panel.component.d.ts +80 -0
- package/lib/slice-panel/slice-panel.model.d.ts +25 -0
- package/package.json +35 -0
- package/public-api.d.ts +12 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
export function humanizeKey(key) {
|
|
3
|
+
return key
|
|
4
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
5
|
+
.replace(/[_-]+/g, ' ')
|
|
6
|
+
.replace(/^./, (v) => v.toUpperCase());
|
|
7
|
+
}
|
|
8
|
+
export class OrganizerFacade {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.fields = {
|
|
11
|
+
activeFields: [],
|
|
12
|
+
userCustomized: false,
|
|
13
|
+
};
|
|
14
|
+
this.groupBy = {
|
|
15
|
+
activeKey: null,
|
|
16
|
+
userCustomized: false,
|
|
17
|
+
};
|
|
18
|
+
this.sliceBy = {
|
|
19
|
+
activeDynamicFields: [],
|
|
20
|
+
availableForDynamic: [],
|
|
21
|
+
allDynamicFields: [],
|
|
22
|
+
activeLabel: 'Aucun',
|
|
23
|
+
};
|
|
24
|
+
this._panelConfig = { fields: [], sliceConfigs: [] };
|
|
25
|
+
this._hiddenStaticKeys = new Set();
|
|
26
|
+
this._events$ = new Subject();
|
|
27
|
+
this.events$ = this._events$.asObservable();
|
|
28
|
+
}
|
|
29
|
+
get enabled() {
|
|
30
|
+
return this._panelConfig.config?.enabled === true;
|
|
31
|
+
}
|
|
32
|
+
get showFields() {
|
|
33
|
+
return this.enabled;
|
|
34
|
+
}
|
|
35
|
+
get showGroupBySection() {
|
|
36
|
+
return this.enabled && this.groupByFields.length > 0;
|
|
37
|
+
}
|
|
38
|
+
get showSliceBySection() {
|
|
39
|
+
return this.enabled && ((this._panelConfig.sliceConfigs?.length ?? 0) > 0 ||
|
|
40
|
+
this.sliceBy.allDynamicFields.length > 0);
|
|
41
|
+
}
|
|
42
|
+
get allowFieldRemoval() {
|
|
43
|
+
return this._panelConfig.config?.enableFieldRemoval !== false;
|
|
44
|
+
}
|
|
45
|
+
get isFieldDragDropEnabled() {
|
|
46
|
+
return this._panelConfig.config?.enableFieldDragDrop === true;
|
|
47
|
+
}
|
|
48
|
+
get menuBaseFields() {
|
|
49
|
+
return this._uniqueByKey((this._panelConfig.fields || []).filter(c => !c.optional));
|
|
50
|
+
}
|
|
51
|
+
get menuOptionalFields() {
|
|
52
|
+
return this._uniqueByKey((this._panelConfig.fields || []).filter(c => c.optional));
|
|
53
|
+
}
|
|
54
|
+
get totalFieldCount() {
|
|
55
|
+
return new Set((this._panelConfig.fields || []).map(c => c.key)).size;
|
|
56
|
+
}
|
|
57
|
+
get groupByFields() {
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
return (this._panelConfig.fields || []).filter(c => {
|
|
60
|
+
if (c.groupable === false || seen.has(c.key))
|
|
61
|
+
return false;
|
|
62
|
+
if (!c.header && c.groupable !== true)
|
|
63
|
+
return false;
|
|
64
|
+
seen.add(c.key);
|
|
65
|
+
return true;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
get activeGroupByLabel() {
|
|
69
|
+
if (!this.groupBy.activeKey)
|
|
70
|
+
return this._panelConfig.noneLabel ?? 'Aucun';
|
|
71
|
+
const field = this.groupByFields.find(c => c.key === this.groupBy.activeKey);
|
|
72
|
+
return field?.header || this.groupBy.activeKey;
|
|
73
|
+
}
|
|
74
|
+
get staticSlicesForMenu() {
|
|
75
|
+
return (this._panelConfig.sliceConfigs ?? [])
|
|
76
|
+
.filter(s => !!s.columnKey)
|
|
77
|
+
.map(s => {
|
|
78
|
+
const fieldIcon = (this._panelConfig.fields ?? []).find(c => c.key === s.columnKey)?.icon;
|
|
79
|
+
return { key: s.columnKey, title: s.title || humanizeKey(s.columnKey), icon: s.icon ?? fieldIcon };
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
fieldLabel(field) {
|
|
83
|
+
return field.header || humanizeKey(field.key);
|
|
84
|
+
}
|
|
85
|
+
update(panelConfig) {
|
|
86
|
+
this._panelConfig = panelConfig;
|
|
87
|
+
this._refreshDefaultFields();
|
|
88
|
+
this._refreshDynamicSliceMeta();
|
|
89
|
+
if (!this.groupBy.userCustomized) {
|
|
90
|
+
this.groupBy.activeKey = panelConfig.defaultGroupBy ?? null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
setActiveFields(fields) {
|
|
94
|
+
this.fields.activeFields = fields;
|
|
95
|
+
this.fields.userCustomized = true;
|
|
96
|
+
}
|
|
97
|
+
setUserCustomized(value) {
|
|
98
|
+
this.fields.userCustomized = value;
|
|
99
|
+
}
|
|
100
|
+
resetToDefaults() {
|
|
101
|
+
this.fields.userCustomized = false;
|
|
102
|
+
this.groupBy.userCustomized = false;
|
|
103
|
+
this._refreshDefaultFields();
|
|
104
|
+
this.groupBy.activeKey = this._panelConfig.defaultGroupBy ?? null;
|
|
105
|
+
this.sliceBy.activeDynamicFields = [];
|
|
106
|
+
this._refreshDynamicSliceMeta();
|
|
107
|
+
}
|
|
108
|
+
addField(field) {
|
|
109
|
+
const configFields = this._panelConfig.fields ?? [];
|
|
110
|
+
const configIndex = configFields.findIndex(c => c.key === field.key);
|
|
111
|
+
if (configIndex === -1) {
|
|
112
|
+
this.fields.activeFields = [...this.fields.activeFields, field];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const insertBefore = this.fields.activeFields.findIndex(c => {
|
|
116
|
+
const ci = configFields.findIndex(cc => cc.key === c.key);
|
|
117
|
+
return ci !== -1 && ci > configIndex;
|
|
118
|
+
});
|
|
119
|
+
if (insertBefore === -1) {
|
|
120
|
+
this.fields.activeFields = [...this.fields.activeFields, field];
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const copy = [...this.fields.activeFields];
|
|
124
|
+
copy.splice(insertBefore, 0, field);
|
|
125
|
+
this.fields.activeFields = copy;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.fields.userCustomized = true;
|
|
129
|
+
this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });
|
|
130
|
+
}
|
|
131
|
+
removeField(fieldKey) {
|
|
132
|
+
const field = this.fields.activeFields.find(c => c.key === fieldKey);
|
|
133
|
+
if (!field)
|
|
134
|
+
return false;
|
|
135
|
+
if (!field.optional && !this.allowFieldRemoval)
|
|
136
|
+
return false;
|
|
137
|
+
if (this.fields.activeFields.length <= 1)
|
|
138
|
+
return false;
|
|
139
|
+
this.fields.activeFields = this.fields.activeFields.filter(c => c.key !== fieldKey);
|
|
140
|
+
this.fields.userCustomized = true;
|
|
141
|
+
this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
toggleFieldVisibility(field, visible) {
|
|
145
|
+
const isVisible = this.isFieldVisible(field.key);
|
|
146
|
+
if (visible && !isVisible) {
|
|
147
|
+
this.addField(field);
|
|
148
|
+
}
|
|
149
|
+
else if (!visible && isVisible) {
|
|
150
|
+
this.removeField(field.key);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
reorderFields(fromKey, toKey) {
|
|
154
|
+
const prev = this.fields.activeFields.findIndex(c => c.key === fromKey);
|
|
155
|
+
const curr = this.fields.activeFields.findIndex(c => c.key === toKey);
|
|
156
|
+
if (prev === -1 || curr === -1 || prev === curr)
|
|
157
|
+
return false;
|
|
158
|
+
const reordered = [...this.fields.activeFields];
|
|
159
|
+
const [moved] = reordered.splice(prev, 1);
|
|
160
|
+
reordered.splice(curr, 0, moved);
|
|
161
|
+
this.fields.activeFields = reordered;
|
|
162
|
+
this.fields.userCustomized = true;
|
|
163
|
+
this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
isFieldVisible(key) {
|
|
167
|
+
return this.fields.activeFields.some(c => c.key === key);
|
|
168
|
+
}
|
|
169
|
+
setGroupBy(key) {
|
|
170
|
+
this.groupBy.activeKey = key;
|
|
171
|
+
this.groupBy.userCustomized = true;
|
|
172
|
+
this._events$.next({ type: 'groupByChanged', key });
|
|
173
|
+
}
|
|
174
|
+
onDynamicSliceKeysChange(keys) {
|
|
175
|
+
const allFields = this._panelConfig.fields ?? [];
|
|
176
|
+
const staticKeys = new Set((this._panelConfig.sliceConfigs ?? []).map(s => s.columnKey).filter((k) => !!k));
|
|
177
|
+
const dynamicKeySet = new Set(keys);
|
|
178
|
+
const existingKeys = new Set([...staticKeys, ...dynamicKeySet]);
|
|
179
|
+
this.sliceBy.activeDynamicFields = keys
|
|
180
|
+
.map(k => allFields.find(c => c.key === k))
|
|
181
|
+
.filter((c) => !!c);
|
|
182
|
+
const seen = new Set();
|
|
183
|
+
this.sliceBy.availableForDynamic = allFields.filter(c => {
|
|
184
|
+
if (c.sliceable === false || existingKeys.has(c.key) || seen.has(c.key))
|
|
185
|
+
return false;
|
|
186
|
+
seen.add(c.key);
|
|
187
|
+
return true;
|
|
188
|
+
});
|
|
189
|
+
this._computeSliceLabel();
|
|
190
|
+
this._events$.next({ type: 'dynamicSlicesChanged', keys });
|
|
191
|
+
}
|
|
192
|
+
isDynamicSliceActive(key) {
|
|
193
|
+
return this.sliceBy.activeDynamicFields.some(c => c.key === key);
|
|
194
|
+
}
|
|
195
|
+
toOrganizerState() {
|
|
196
|
+
return {
|
|
197
|
+
selectedFieldIds: this.fields.activeFields.map(c => c.key),
|
|
198
|
+
groupByKey: this.groupBy.activeKey,
|
|
199
|
+
dynamicSliceKeys: this.sliceBy.activeDynamicFields.map(c => c.key),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
destroy() { this._events$.complete(); }
|
|
203
|
+
updateHiddenStaticKeys(keys) {
|
|
204
|
+
this._hiddenStaticKeys = keys;
|
|
205
|
+
this._computeSliceLabel();
|
|
206
|
+
}
|
|
207
|
+
_refreshDefaultFields() {
|
|
208
|
+
const defaultFields = (this._panelConfig.fields || []).filter(c => !c.optional);
|
|
209
|
+
if (!this.fields.userCustomized || this.fields.activeFields.length === 0) {
|
|
210
|
+
this.fields.activeFields = [...defaultFields];
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const allowedKeys = new Set((this._panelConfig.fields || []).map(c => c.key));
|
|
214
|
+
this.fields.activeFields = this.fields.activeFields.filter(c => allowedKeys.has(c.key));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
_refreshDynamicSliceMeta() {
|
|
218
|
+
const allFields = this._panelConfig.fields ?? [];
|
|
219
|
+
const staticKeys = new Set((this._panelConfig.sliceConfigs ?? []).map(s => s.columnKey).filter((k) => !!k));
|
|
220
|
+
const activeDynKeys = new Set(this.sliceBy.activeDynamicFields.map(c => c.key));
|
|
221
|
+
const seen1 = new Set();
|
|
222
|
+
this.sliceBy.availableForDynamic = allFields.filter(c => {
|
|
223
|
+
if (c.sliceable === false || staticKeys.has(c.key) || activeDynKeys.has(c.key) || seen1.has(c.key))
|
|
224
|
+
return false;
|
|
225
|
+
if (!c.header && c.sliceable !== true)
|
|
226
|
+
return false;
|
|
227
|
+
seen1.add(c.key);
|
|
228
|
+
return true;
|
|
229
|
+
});
|
|
230
|
+
const seen2 = new Set();
|
|
231
|
+
this.sliceBy.allDynamicFields = allFields.filter(c => {
|
|
232
|
+
if (c.sliceable === false || staticKeys.has(c.key) || seen2.has(c.key))
|
|
233
|
+
return false;
|
|
234
|
+
if (!c.header && c.sliceable !== true)
|
|
235
|
+
return false;
|
|
236
|
+
seen2.add(c.key);
|
|
237
|
+
return true;
|
|
238
|
+
});
|
|
239
|
+
this._computeSliceLabel();
|
|
240
|
+
}
|
|
241
|
+
_computeSliceLabel() {
|
|
242
|
+
const visibleStatics = (this._panelConfig.sliceConfigs ?? []).filter(s => !s.columnKey || !this._hiddenStaticKeys.has(s.columnKey));
|
|
243
|
+
const total = visibleStatics.length + this.sliceBy.activeDynamicFields.length;
|
|
244
|
+
if (total === 0) {
|
|
245
|
+
this.sliceBy.activeLabel = this._panelConfig.noneLabel ?? 'Aucun';
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (total === 1) {
|
|
249
|
+
if (visibleStatics.length === 1) {
|
|
250
|
+
const first = visibleStatics[0];
|
|
251
|
+
this.sliceBy.activeLabel = first?.title || first?.columnKey || '1';
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.sliceBy.activeLabel = this.sliceBy.activeDynamicFields[0]?.header || '1';
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
this.sliceBy.activeLabel = `${total} actifs`;
|
|
258
|
+
}
|
|
259
|
+
_uniqueByKey(fields) {
|
|
260
|
+
const seen = new Set();
|
|
261
|
+
return fields.filter(c => {
|
|
262
|
+
if (seen.has(c.key))
|
|
263
|
+
return false;
|
|
264
|
+
seen.add(c.key);
|
|
265
|
+
return true;
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWZhY2FkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvbGliL29yZ2FuaXplci1mYWNhZGUvb3JnYW5pemVyLWZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBVztJQUNyQyxPQUFPLEdBQUc7U0FDUCxPQUFPLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDO1NBQ3RDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUVXLFdBQU0sR0FBaUM7WUFDOUMsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQztRQUVPLFlBQU8sR0FBMEI7WUFDeEMsU0FBUyxFQUFFLElBQUk7WUFDZixjQUFjLEVBQUUsS0FBSztTQUN0QixDQUFDO1FBRU8sWUFBTyxHQUFrQztZQUNoRCxtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixXQUFXLEVBQUUsT0FBTztTQUNyQixDQUFDO1FBRU0saUJBQVksR0FBaUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM5RSxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRTdCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQztRQUNqRCxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FB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LElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUM7Z0JBQ25FLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQztZQUM5RSxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxHQUFHLEtBQUssU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBZ0I7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yZ2FuaXplckV2ZW50LCBPcmdhbml6ZXJTdGF0ZSB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcbmltcG9ydCB7IE9yZ2FuaXplckZpZWxkRGVmLCBPcmdhbml6ZXJGaWVsZHNTdGF0ZSwgT3JnYW5pemVyR3JvdXBCeVN0YXRlLCBPcmdhbml6ZXJQYW5lbENvbmZpZywgT3JnYW5pemVyU2xpY2VCeVN0YXRlIH0gZnJvbSAnLi9vcmdhbml6ZXItZmFjYWRlLnR5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtleVxuICAgIC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC9bXy1dKy9nLCAnICcpXG4gICAgLnJlcGxhY2UoL14uLywgKHYpID0+IHYudG9VcHBlckNhc2UoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBPcmdhbml6ZXJGYWNhZGU8VEZpZWxkIGV4dGVuZHMgT3JnYW5pemVyRmllbGREZWYgPSBPcmdhbml6ZXJGaWVsZERlZj4ge1xuXG4gIHJlYWRvbmx5IGZpZWxkczogT3JnYW5pemVyRmllbGRzU3RhdGU8VEZpZWxkPiA9IHtcbiAgICBhY3RpdmVGaWVsZHM6IFtdLFxuICAgIHVzZXJDdXN0b21pemVkOiBmYWxzZSxcbiAgfTtcblxuICByZWFkb25seSBncm91cEJ5OiBPcmdhbml6ZXJHcm91cEJ5U3RhdGUgPSB7XG4gICAgYWN0aXZlS2V5OiBudWxsLFxuICAgIHVzZXJDdXN0b21pemVkOiBmYWxzZSxcbiAgfTtcblxuICByZWFkb25seSBzbGljZUJ5OiBPcmdhbml6ZXJTbGljZUJ5U3RhdGU8VEZpZWxkPiA9IHtcbiAgICBhY3RpdmVEeW5hbWljRmllbGRzOiBbXSxcbiAgICBhdmFpbGFibGVGb3JEeW5hbWljOiBbXSxcbiAgICBhbGxEeW5hbWljRmllbGRzOiBbXSxcbiAgICBhY3RpdmVMYWJlbDogJ0F1Y3VuJyxcbiAgfTtcblxuICBwcml2YXRlIF9wYW5lbENvbmZpZzogT3JnYW5pemVyUGFuZWxDb25maWc8VEZpZWxkPiA9IHsgZmllbGRzOiBbXSwgc2xpY2VDb25maWdzOiBbXSB9O1xuICBwcml2YXRlIF9oaWRkZW5TdGF0aWNLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRzJCA9IG5ldyBTdWJqZWN0PE9yZ2FuaXplckV2ZW50PigpO1xuICByZWFkb25seSBldmVudHMkID0gdGhpcy5fZXZlbnRzJC5hc09ic2VydmFibGUoKTtcblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFuZWxDb25maWcuY29uZmlnPy5lbmFibGVkID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IHNob3dGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBzaG93R3JvdXBCeVNlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCAmJiB0aGlzLmdyb3VwQnlGaWVsZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBzaG93U2xpY2VCeVNlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCAmJiAoXG4gICAgICAodGhpcy5fcGFuZWxDb25maWcuc2xpY2VDb25maWdzPy5sZW5ndGggPz8gMCkgPiAwIHx8XG4gICAgICB0aGlzLnNsaWNlQnkuYWxsRHluYW1pY0ZpZWxkcy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhbGxvd0ZpZWxkUmVtb3ZhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFuZWxDb25maWcuY29uZmlnPy5lbmFibGVGaWVsZFJlbW92YWwgIT09IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzRmllbGREcmFnRHJvcEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhbmVsQ29uZmlnLmNvbmZpZz8uZW5hYmxlRmllbGREcmFnRHJvcCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBtZW51QmFzZUZpZWxkcygpOiBURmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3VuaXF1ZUJ5S2V5KCh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLmZpbHRlcihjID0+ICFjLm9wdGlvbmFsKSk7XG4gIH1cblxuICBnZXQgbWVudU9wdGlvbmFsRmllbGRzKCk6IFRGaWVsZFtdIHtcbiAgICByZXR1cm4gdGhpcy5fdW5pcXVlQnlLZXkoKHRoaXMuX3BhbmVsQ29uZmlnLmZpZWxkcyB8fCBbXSkuZmlsdGVyKGMgPT4gYy5vcHRpb25hbCkpO1xuICB9XG5cbiAgZ2V0IHRvdGFsRmllbGRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgU2V0KCh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLm1hcChjID0+IGMua2V5KSkuc2l6ZTtcbiAgfVxuXG4gIGdldCBncm91cEJ5RmllbGRzKCk6IFRGaWVsZFtdIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcmV0dXJuICh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLmdyb3VwYWJsZSA9PT0gZmFsc2UgfHwgc2Vlbi5oYXMoYy5rZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWMuaGVhZGVyICYmIGMuZ3JvdXBhYmxlICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzZWVuLmFkZChjLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhY3RpdmVHcm91cEJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeS5hY3RpdmVLZXkpIHJldHVybiB0aGlzLl9wYW5lbENvbmZpZy5ub25lTGFiZWwgPz8gJ0F1Y3VuJztcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ3JvdXBCeUZpZWxkcy5maW5kKGMgPT4gYy5rZXkgPT09IHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXkpO1xuICAgIHJldHVybiBmaWVsZD8uaGVhZGVyIHx8IHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXk7XG4gIH1cblxuICBnZXQgc3RhdGljU2xpY2VzRm9yTWVudSgpOiBBcnJheTx7IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gKHRoaXMuX3BhbmVsQ29uZmlnLnNsaWNlQ29uZmlncyA/PyBbXSlcbiAgICAgIC5maWx0ZXIocyA9PiAhIXMuY29sdW1uS2V5KVxuICAgICAgLm1hcChzID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRJY29uID0gKHRoaXMuX3BhbmVsQ29uZmlnLmZpZWxkcyA/PyBbXSkuZmluZChjID0+IGMua2V5ID09PSBzLmNvbHVtbktleSk/Lmljb247XG4gICAgICAgIHJldHVybiB7IGtleTogcy5jb2x1bW5LZXkhLCB0aXRsZTogcy50aXRsZSB8fCBodW1hbml6ZUtleShzLmNvbHVtbktleSEpLCBpY29uOiBzLmljb24gPz8gZmllbGRJY29uIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZpZWxkTGFiZWwoZmllbGQ6IHsga2V5OiBzdHJpbmc7IGhlYWRlcj86IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGQuaGVhZGVyIHx8IGh1bWFuaXplS2V5KGZpZWxkLmtleSk7XG4gIH1cblxuICB1cGRhdGUocGFuZWxDb25maWc6IE9yZ2FuaXplclBhbmVsQ29uZmlnPFRGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbENvbmZpZyA9IHBhbmVsQ29uZmlnO1xuICAgIHRoaXMuX3JlZnJlc2hEZWZhdWx0RmllbGRzKCk7XG4gICAgdGhpcy5fcmVmcmVzaER5bmFtaWNTbGljZU1ldGEoKTtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeS51c2VyQ3VzdG9taXplZCkge1xuICAgICAgdGhpcy5ncm91cEJ5LmFjdGl2ZUtleSA9IHBhbmVsQ29uZmlnLmRlZmF1bHRHcm91cEJ5ID8/IG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0QWN0aXZlRmllbGRzKGZpZWxkczogVEZpZWxkW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5maWVsZHMudXNlckN1c3RvbWl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgc2V0VXNlckN1c3RvbWl6ZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcy51c2VyQ3VzdG9taXplZCA9IHZhbHVlO1xuICB9XG5cbiAgcmVzZXRUb0RlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkID0gZmFsc2U7XG4gICAgdGhpcy5ncm91cEJ5LnVzZXJDdXN0b21pemVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVmcmVzaERlZmF1bHRGaWVsZHMoKTtcbiAgICB0aGlzLmdyb3VwQnkuYWN0aXZlS2V5ID0gdGhpcy5fcGFuZWxDb25maWcuZGVmYXVsdEdyb3VwQnkgPz8gbnVsbDtcbiAgICB0aGlzLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkcyA9IFtdO1xuICAgIHRoaXMuX3JlZnJlc2hEeW5hbWljU2xpY2VNZXRhKCk7XG4gIH1cblxuICBhZGRGaWVsZChmaWVsZDogVEZpZWxkKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRmllbGRzID0gdGhpcy5fcGFuZWxDb25maWcuZmllbGRzID8/IFtdO1xuICAgIGNvbnN0IGNvbmZpZ0luZGV4ID0gY29uZmlnRmllbGRzLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBmaWVsZC5rZXkpO1xuICAgIGlmIChjb25maWdJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IFsuLi50aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMsIGZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5zZXJ0QmVmb3JlID0gdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLmZpbmRJbmRleChjID0+IHtcbiAgICAgICAgY29uc3QgY2kgPSBjb25maWdGaWVsZHMuZmluZEluZGV4KGNjID0+IGNjLmtleSA9PT0gYy5rZXkpO1xuICAgICAgICByZXR1cm4gY2kgIT09IC0xICYmIGNpID4gY29uZmlnSW5kZXg7XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnNlcnRCZWZvcmUgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IFsuLi50aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMsIGZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBbLi4udGhpcy5maWVsZHMuYWN0aXZlRmllbGRzXTtcbiAgICAgICAgY29weS5zcGxpY2UoaW5zZXJ0QmVmb3JlLCAwLCBmaWVsZCk7XG4gICAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IGNvcHk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMkLm5leHQoeyB0eXBlOiAnZmllbGRzQ2hhbmdlZCcsIGZpZWxkSWRzOiB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpIH0pO1xuICB9XG5cbiAgcmVtb3ZlRmllbGQoZmllbGRLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLmZpbmQoYyA9PiBjLmtleSA9PT0gZmllbGRLZXkpO1xuICAgIGlmICghZmllbGQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWZpZWxkLm9wdGlvbmFsICYmICF0aGlzLmFsbG93RmllbGRSZW1vdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5maWx0ZXIoYyA9PiBjLmtleSAhPT0gZmllbGRLZXkpO1xuICAgIHRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMkLm5leHQoeyB0eXBlOiAnZmllbGRzQ2hhbmdlZCcsIGZpZWxkSWRzOiB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlRmllbGRWaXNpYmlsaXR5KGZpZWxkOiBURmllbGQsIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpc1Zpc2libGUgPSB0aGlzLmlzRmllbGRWaXNpYmxlKGZpZWxkLmtleSk7XG4gICAgaWYgKHZpc2libGUgJiYgIWlzVmlzaWJsZSkge1xuICAgICAgdGhpcy5hZGRGaWVsZChmaWVsZCk7XG4gICAgfSBlbHNlIGlmICghdmlzaWJsZSAmJiBpc1Zpc2libGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlRmllbGQoZmllbGQua2V5KTtcbiAgICB9XG4gIH1cblxuICByZW9yZGVyRmllbGRzKGZyb21LZXk6IHN0cmluZywgdG9LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGZyb21LZXkpO1xuICAgIGNvbnN0IGN1cnIgPSB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IHRvS2V5KTtcbiAgICBpZiAocHJldiA9PT0gLTEgfHwgY3VyciA9PT0gLTEgfHwgcHJldiA9PT0gY3VycikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHJlb3JkZXJlZCA9IFsuLi50aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHNdO1xuICAgIGNvbnN0IFttb3ZlZF0gPSByZW9yZGVyZWQuc3BsaWNlKHByZXYsIDEpO1xuICAgIHJlb3JkZXJlZC5zcGxpY2UoY3VyciwgMCwgbW92ZWQpO1xuICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IHJlb3JkZXJlZDtcbiAgICB0aGlzLmZpZWxkcy51c2VyQ3VzdG9taXplZCA9IHRydWU7XG4gICAgdGhpcy5fZXZlbnRzJC5uZXh0KHsgdHlwZTogJ2ZpZWxkc0NoYW5nZWQnLCBmaWVsZElkczogdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KSB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRmllbGRWaXNpYmxlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5zb21lKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gIH1cblxuICBzZXRHcm91cEJ5KGtleTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXkgPSBrZXk7XG4gICAgdGhpcy5ncm91cEJ5LnVzZXJDdXN0b21pemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMkLm5leHQoeyB0eXBlOiAnZ3JvdXBCeUNoYW5nZWQnLCBrZXkgfSk7XG4gIH1cblxuICBvbkR5bmFtaWNTbGljZUtleXNDaGFuZ2Uoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxGaWVsZHMgPSB0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgPz8gW107XG4gICAgY29uc3Qgc3RhdGljS2V5cyA9IG5ldyBTZXQoXG4gICAgICAodGhpcy5fcGFuZWxDb25maWcuc2xpY2VDb25maWdzID8/IFtdKS5tYXAocyA9PiBzLmNvbHVtbktleSkuZmlsdGVyKChrKTogayBpcyBzdHJpbmcgPT4gISFrKVxuICAgICk7XG4gICAgY29uc3QgZHluYW1pY0tleVNldCA9IG5ldyBTZXQoa2V5cyk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChbLi4uc3RhdGljS2V5cywgLi4uZHluYW1pY0tleVNldF0pO1xuXG4gICAgdGhpcy5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMgPSBrZXlzXG4gICAgICAubWFwKGsgPT4gYWxsRmllbGRzLmZpbmQoYyA9PiBjLmtleSA9PT0gaykpXG4gICAgICAuZmlsdGVyKChjKTogYyBpcyBURmllbGQgPT4gISFjKTtcblxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICB0aGlzLnNsaWNlQnkuYXZhaWxhYmxlRm9yRHluYW1pYyA9IGFsbEZpZWxkcy5maWx0ZXIoYyA9PiB7XG4gICAgICBpZiAoYy5zbGljZWFibGUgPT09IGZhbHNlIHx8IGV4aXN0aW5nS2V5cy5oYXMoYy5rZXkpIHx8IHNlZW4uaGFzKGMua2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb21wdXRlU2xpY2VMYWJlbCgpO1xuICAgIHRoaXMuX2V2ZW50cyQubmV4dCh7IHR5cGU6ICdkeW5hbWljU2xpY2VzQ2hhbmdlZCcsIGtleXMgfSk7XG4gIH1cblxuICBpc0R5bmFtaWNTbGljZUFjdGl2ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkcy5zb21lKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gIH1cblxuICB0b09yZ2FuaXplclN0YXRlKCk6IE9yZ2FuaXplclN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0ZWRGaWVsZElkczogdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KSxcbiAgICAgIGdyb3VwQnlLZXk6IHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXksXG4gICAgICBkeW5hbWljU2xpY2VLZXlzOiB0aGlzLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkcy5tYXAoYyA9PiBjLmtleSksXG4gICAgfTtcbiAgfVxuICBkZXN0cm95KCk6IHZvaWQgeyB0aGlzLl9ldmVudHMkLmNvbXBsZXRlKCkgfVxuXG4gIHVwZGF0ZUhpZGRlblN0YXRpY0tleXMoa2V5czogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLl9oaWRkZW5TdGF0aWNLZXlzID0ga2V5cztcbiAgICB0aGlzLl9jb21wdXRlU2xpY2VMYWJlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaERlZmF1bHRGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdEZpZWxkcyA9ICh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLmZpbHRlcihjID0+ICFjLm9wdGlvbmFsKTtcbiAgICBpZiAoIXRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkIHx8IHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IFsuLi5kZWZhdWx0RmllbGRzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBuZXcgU2V0KCh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLm1hcChjID0+IGMua2V5KSk7XG4gICAgICB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMgPSB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMuZmlsdGVyKGMgPT4gYWxsb3dlZEtleXMuaGFzKGMua2V5KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaER5bmFtaWNTbGljZU1ldGEoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsRmllbGRzID0gdGhpcy5fcGFuZWxDb25maWcuZmllbGRzID8/IFtdO1xuICAgIGNvbnN0IHN0YXRpY0tleXMgPSBuZXcgU2V0KFxuICAgICAgKHRoaXMuX3BhbmVsQ29uZmlnLnNsaWNlQ29uZmlncyA/PyBbXSkubWFwKHMgPT4gcy5jb2x1bW5LZXkpLmZpbHRlcigoayk6IGsgaXMgc3RyaW5nID0+ICEhaylcbiAgICApO1xuICAgIGNvbnN0IGFjdGl2ZUR5bktleXMgPSBuZXcgU2V0KHRoaXMuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLm1hcChjID0+IGMua2V5KSk7XG5cbiAgICBjb25zdCBzZWVuMSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuc2xpY2VCeS5hdmFpbGFibGVGb3JEeW5hbWljID0gYWxsRmllbGRzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLnNsaWNlYWJsZSA9PT0gZmFsc2UgfHwgc3RhdGljS2V5cy5oYXMoYy5rZXkpIHx8IGFjdGl2ZUR5bktleXMuaGFzKGMua2V5KSB8fCBzZWVuMS5oYXMoYy5rZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWMuaGVhZGVyICYmIGMuc2xpY2VhYmxlICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzZWVuMS5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWVuMiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuc2xpY2VCeS5hbGxEeW5hbWljRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLnNsaWNlYWJsZSA9PT0gZmFsc2UgfHwgc3RhdGljS2V5cy5oYXMoYy5rZXkpIHx8IHNlZW4yLmhhcyhjLmtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghYy5oZWFkZXIgJiYgYy5zbGljZWFibGUgIT09IHRydWUpIHJldHVybiBmYWxzZTtcbiAgICAgIHNlZW4yLmFkZChjLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLl9jb21wdXRlU2xpY2VMYWJlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcHV0ZVNsaWNlTGFiZWwoKTogdm9pZCB7XG4gICAgY29uc3QgdmlzaWJsZVN0YXRpY3MgPSAodGhpcy5fcGFuZWxDb25maWcuc2xpY2VDb25maWdzID8/IFtdKS5maWx0ZXIoXG4gICAgICBzID0+ICFzLmNvbHVtbktleSB8fCAhdGhpcy5faGlkZGVuU3RhdGljS2V5cy5oYXMocy5jb2x1bW5LZXkpXG4gICAgKTtcbiAgICBjb25zdCB0b3RhbCA9IHZpc2libGVTdGF0aWNzLmxlbmd0aCArIHRoaXMuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLmxlbmd0aDtcbiAgICBpZiAodG90YWwgPT09IDApIHsgdGhpcy5zbGljZUJ5LmFjdGl2ZUxhYmVsID0gdGhpcy5fcGFuZWxDb25maWcubm9uZUxhYmVsID8/ICdBdWN1bic7IHJldHVybjsgfVxuICAgIGlmICh0b3RhbCA9PT0gMSkge1xuICAgICAgaWYgKHZpc2libGVTdGF0aWNzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBmaXJzdCA9IHZpc2libGVTdGF0aWNzWzBdO1xuICAgICAgICB0aGlzLnNsaWNlQnkuYWN0aXZlTGFiZWwgPSBmaXJzdD8udGl0bGUgfHwgZmlyc3Q/LmNvbHVtbktleSB8fCAnMSc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2xpY2VCeS5hY3RpdmVMYWJlbCA9IHRoaXMuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzWzBdPy5oZWFkZXIgfHwgJzEnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNsaWNlQnkuYWN0aXZlTGFiZWwgPSBgJHt0b3RhbH0gYWN0aWZzYDtcbiAgfVxuXG4gIHByaXZhdGUgX3VuaXF1ZUJ5S2V5KGZpZWxkczogVEZpZWxkW10pOiBURmllbGRbXSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGMgPT4ge1xuICAgICAgaWYgKHNlZW4uaGFzKGMua2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWZhY2FkZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvbGliL29yZ2FuaXplci1mYWNhZGUvb3JnYW5pemVyLWZhY2FkZS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2xpY2VDb25maWcgfSBmcm9tICcuLi9zbGljZS1wYW5lbC9zbGljZS1wYW5lbC5tb2RlbCc7XG5pbXBvcnQgeyBPcmdhbml6ZXJDb25maWcgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyRmllbGREZWYge1xuICBrZXk6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIGdyb3VwYWJsZT86IGJvb2xlYW47XG4gIHNsaWNlYWJsZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclBhbmVsQ29uZmlnPFRGaWVsZCBleHRlbmRzIE9yZ2FuaXplckZpZWxkRGVmID0gT3JnYW5pemVyRmllbGREZWY+IHtcbiAgY29uZmlnPzogT3JnYW5pemVyQ29uZmlnO1xuICBmaWVsZHM6IFRGaWVsZFtdO1xuICBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPGFueT5bXTtcbiAgbm9uZUxhYmVsPzogc3RyaW5nO1xuICBkZWZhdWx0R3JvdXBCeT86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyRmllbGRzU3RhdGU8VEZpZWxkIGV4dGVuZHMgT3JnYW5pemVyRmllbGREZWYgPSBPcmdhbml6ZXJGaWVsZERlZj4ge1xuICBhY3RpdmVGaWVsZHM6IFRGaWVsZFtdO1xuICB1c2VyQ3VzdG9taXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJHcm91cEJ5U3RhdGUge1xuICBhY3RpdmVLZXk6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJDdXN0b21pemVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclNsaWNlQnlTdGF0ZTxURmllbGQgZXh0ZW5kcyBPcmdhbml6ZXJGaWVsZERlZiA9IE9yZ2FuaXplckZpZWxkRGVmPiB7XG4gIGFjdGl2ZUR5bmFtaWNGaWVsZHM6IFRGaWVsZFtdO1xuICBhdmFpbGFibGVGb3JEeW5hbWljOiBURmllbGRbXTtcbiAgYWxsRHluYW1pY0ZpZWxkczogVEZpZWxkW107XG4gIGFjdGl2ZUxhYmVsOiBzdHJpbmc7XG59XG4iXX0=
|