cps-ui-kit 0.18.0 → 0.20.0
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 +2 -0
- package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +30 -0
- package/esm2020/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +8 -13
- package/esm2020/lib/components/cps-select/cps-select.component.mjs +3 -3
- package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +3 -3
- package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +466 -0
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/cps-ui-kit.mjs +504 -19
- package/fesm2015/cps-ui-kit.mjs.map +1 -1
- package/fesm2020/cps-ui-kit.mjs +490 -19
- package/fesm2020/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +10 -0
- package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +2 -6
- package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +84 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { Subscription } from 'rxjs';
|
|
5
|
+
import { convertSize } from '../../utils/size-utils';
|
|
6
|
+
import { CpsIconComponent } from '../cps-icon/cps-icon.component';
|
|
7
|
+
import { CpsChipComponent } from '../cps-chip/cps-chip.component';
|
|
8
|
+
import { CpsProgressLinearComponent } from '../cps-progress-linear/cps-progress-linear.component';
|
|
9
|
+
import { ClickOutsideDirective } from '../../directives/click-outside.directive';
|
|
10
|
+
import { LabelByValuePipe } from '../../pipes/label-by-value.pipe';
|
|
11
|
+
import { CombineLabelsPipe } from '../../pipes/combine-labels.pipe';
|
|
12
|
+
import { isEqual } from 'lodash-es';
|
|
13
|
+
import { TreeModule } from 'primeng/tree';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/forms";
|
|
16
|
+
import * as i2 from "@angular/common";
|
|
17
|
+
import * as i3 from "primeng/tree";
|
|
18
|
+
import * as i4 from "primeng/api";
|
|
19
|
+
export class CpsTreeSelectComponent {
|
|
20
|
+
set options(options) {
|
|
21
|
+
if (options?.some((o) => o.inner)) {
|
|
22
|
+
this._options = options;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this._options = this._toInnerOptions(options);
|
|
26
|
+
}
|
|
27
|
+
get options() {
|
|
28
|
+
return this._options;
|
|
29
|
+
}
|
|
30
|
+
set value(value) {
|
|
31
|
+
this._value = value;
|
|
32
|
+
this.onChange(value);
|
|
33
|
+
}
|
|
34
|
+
get value() {
|
|
35
|
+
return this._value;
|
|
36
|
+
}
|
|
37
|
+
constructor(_control, cdRef) {
|
|
38
|
+
this._control = _control;
|
|
39
|
+
this.cdRef = cdRef;
|
|
40
|
+
this.label = '';
|
|
41
|
+
this.placeholder = 'Please select';
|
|
42
|
+
this.hint = '';
|
|
43
|
+
this.multiple = false;
|
|
44
|
+
this.disabled = false;
|
|
45
|
+
this.width = '100%';
|
|
46
|
+
this.chips = true;
|
|
47
|
+
this.closableChips = true;
|
|
48
|
+
this.clearable = false;
|
|
49
|
+
this.openOnClear = true;
|
|
50
|
+
this.optionLabel = 'label';
|
|
51
|
+
this.optionInfo = 'info';
|
|
52
|
+
this.hideDetails = false;
|
|
53
|
+
this.persistentClear = false;
|
|
54
|
+
this.prefixIcon = '';
|
|
55
|
+
this.prefixIconSize = '18px';
|
|
56
|
+
this.loading = false;
|
|
57
|
+
this.virtualScroll = false;
|
|
58
|
+
this._value = undefined;
|
|
59
|
+
this.valueChanged = new EventEmitter();
|
|
60
|
+
this._statusChangesSubscription = new Subscription();
|
|
61
|
+
this._options = [];
|
|
62
|
+
this.optionsMap = new Map();
|
|
63
|
+
this.originalOptionsMap = new Map();
|
|
64
|
+
this.virtualListHeight = 240;
|
|
65
|
+
this.virtualScrollItemSize = 40;
|
|
66
|
+
this.error = '';
|
|
67
|
+
this.cvtWidth = '';
|
|
68
|
+
this.isOpened = false;
|
|
69
|
+
this.optionFocused = false;
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
71
|
+
this.onChange = (value) => { };
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
73
|
+
this.onTouched = () => { };
|
|
74
|
+
if (this._control) {
|
|
75
|
+
this._control.valueAccessor = this;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
ngOnInit() {
|
|
79
|
+
this.cvtWidth = convertSize(this.width);
|
|
80
|
+
if (!this._value) {
|
|
81
|
+
if (this.multiple) {
|
|
82
|
+
this._value = [];
|
|
83
|
+
this.treeSelection = [];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.treeSelection = this._valueToTreeSelection(this.value);
|
|
88
|
+
}
|
|
89
|
+
this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
|
|
90
|
+
this._checkErrors();
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
ngAfterViewInit() {
|
|
94
|
+
this._initContainerClickListener();
|
|
95
|
+
this.recalcVirtualListHeight();
|
|
96
|
+
this.cdRef.detectChanges();
|
|
97
|
+
}
|
|
98
|
+
ngOnDestroy() {
|
|
99
|
+
this._statusChangesSubscription?.unsubscribe();
|
|
100
|
+
if (this.treeContainerElement)
|
|
101
|
+
this.treeContainerElement.removeEventListener('click', this._handleOnContainerClick.bind(this));
|
|
102
|
+
}
|
|
103
|
+
_initContainerClickListener() {
|
|
104
|
+
this.treeContainerElement =
|
|
105
|
+
this.treeList?.el?.nativeElement?.querySelector('.p-tree-container');
|
|
106
|
+
if (this.treeContainerElement) {
|
|
107
|
+
this.treeContainerElement.addEventListener('click', this._handleOnContainerClick.bind(this));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
_handleOnContainerClick(event) {
|
|
111
|
+
function getParentWithClass(element, className) {
|
|
112
|
+
let currentElement = element;
|
|
113
|
+
while (currentElement) {
|
|
114
|
+
if (currentElement.classList.contains(className)) {
|
|
115
|
+
return currentElement;
|
|
116
|
+
}
|
|
117
|
+
currentElement = currentElement.parentElement;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
this.optionFocused = true;
|
|
122
|
+
const parent = event.target.classList.contains('p-treenode-content')
|
|
123
|
+
? event.target
|
|
124
|
+
: getParentWithClass(event.target, 'p-treenode-content');
|
|
125
|
+
if (parent?.parentElement?.classList?.contains('cps-tree-node-fully-expandable')) {
|
|
126
|
+
this.onClickFullyExpandable(event, parent.parentElement);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
registerOnChange(fn) {
|
|
130
|
+
this.onChange = fn;
|
|
131
|
+
}
|
|
132
|
+
registerOnTouched(fn) {
|
|
133
|
+
this.onTouched = fn;
|
|
134
|
+
}
|
|
135
|
+
writeValue(value) {
|
|
136
|
+
this.value = value;
|
|
137
|
+
}
|
|
138
|
+
updateValue(value) {
|
|
139
|
+
this.writeValue(value);
|
|
140
|
+
this.onChange(value);
|
|
141
|
+
this.valueChanged.emit(value);
|
|
142
|
+
}
|
|
143
|
+
onSelectNode() {
|
|
144
|
+
if (!this.multiple) {
|
|
145
|
+
this._toggleOptions(this.selectContainer?.nativeElement, false);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
onClickOutside(dd) {
|
|
149
|
+
this._toggleOptions(dd, false);
|
|
150
|
+
}
|
|
151
|
+
onBoxClick(dd) {
|
|
152
|
+
this._toggleOptions(dd);
|
|
153
|
+
}
|
|
154
|
+
onKeyDown(event, dd) {
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
const code = event.keyCode;
|
|
157
|
+
// escape
|
|
158
|
+
if (code === 27) {
|
|
159
|
+
this._toggleOptions(dd, false);
|
|
160
|
+
}
|
|
161
|
+
// click down arrow
|
|
162
|
+
else if ([40].includes(code)) {
|
|
163
|
+
this._initArrowsNavigaton();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
onClickFullyExpandable(event, elem) {
|
|
167
|
+
const key = this._getHTMLElementKey(elem);
|
|
168
|
+
if (!key)
|
|
169
|
+
return;
|
|
170
|
+
const treeNode = this.options.find((o) => o.key === key);
|
|
171
|
+
if (!treeNode)
|
|
172
|
+
return;
|
|
173
|
+
treeNode.expanded = !treeNode.expanded;
|
|
174
|
+
this._updateOptions();
|
|
175
|
+
setTimeout(() => {
|
|
176
|
+
this.recalcVirtualListHeight();
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
_getHTMLElementKey(elem) {
|
|
180
|
+
if (!elem?.classList)
|
|
181
|
+
return '';
|
|
182
|
+
const classList = [...elem.classList];
|
|
183
|
+
const key = classList.find((className) => {
|
|
184
|
+
return className.startsWith('key-');
|
|
185
|
+
});
|
|
186
|
+
if (!key)
|
|
187
|
+
return '';
|
|
188
|
+
return key.replace('key-', '');
|
|
189
|
+
}
|
|
190
|
+
treeSelectionChanged(selection) {
|
|
191
|
+
this.updateValue(this._treeSelectionToValue(selection));
|
|
192
|
+
}
|
|
193
|
+
recalcVirtualListHeight() {
|
|
194
|
+
if (!this.virtualScroll)
|
|
195
|
+
return;
|
|
196
|
+
const currentLen = this.treeList?.serializedValue?.length || 0;
|
|
197
|
+
this.virtualListHeight = Math.min(this.virtualScrollItemSize * currentLen, 240);
|
|
198
|
+
}
|
|
199
|
+
_toggleOptions(dd, show) {
|
|
200
|
+
if (this.disabled || !dd)
|
|
201
|
+
return;
|
|
202
|
+
if (typeof show === 'boolean') {
|
|
203
|
+
if (show)
|
|
204
|
+
dd.classList.add('active');
|
|
205
|
+
else
|
|
206
|
+
dd.classList.remove('active');
|
|
207
|
+
}
|
|
208
|
+
else
|
|
209
|
+
dd.classList.toggle('active');
|
|
210
|
+
this.isOpened = dd.classList.contains('active');
|
|
211
|
+
this.optionFocused = false;
|
|
212
|
+
if (this.isOpened && this.treeSelection) {
|
|
213
|
+
this._expandToNodes(this.multiple ? this.treeSelection : [this.treeSelection]);
|
|
214
|
+
this._updateOptions();
|
|
215
|
+
setTimeout(() => {
|
|
216
|
+
this.recalcVirtualListHeight();
|
|
217
|
+
const selected = this.selectContainer.nativeElement.querySelector('.p-highlight');
|
|
218
|
+
if (selected) {
|
|
219
|
+
selected.scrollIntoView({
|
|
220
|
+
behavior: 'instant',
|
|
221
|
+
block: 'nearest',
|
|
222
|
+
inline: 'center'
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
else if (this.virtualScroll && this.treeSelection) {
|
|
226
|
+
let key = '';
|
|
227
|
+
if (this.multiple) {
|
|
228
|
+
if (this.treeSelection.length > 0)
|
|
229
|
+
key = this.treeSelection[0].key;
|
|
230
|
+
}
|
|
231
|
+
else
|
|
232
|
+
key = this.treeSelection.key;
|
|
233
|
+
if (key) {
|
|
234
|
+
const idx = this.treeList?.serializedValue?.findIndex((v) => v.node.key === key) || -1;
|
|
235
|
+
if (idx >= 0)
|
|
236
|
+
this.treeList.scrollToVirtualIndex(idx);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
remove(option) {
|
|
243
|
+
if (!this.multiple)
|
|
244
|
+
return;
|
|
245
|
+
this.treeSelection = this.treeSelection.filter((v) => !isEqual(v, option));
|
|
246
|
+
this.updateValue(this._treeSelectionToValue(this.treeSelection));
|
|
247
|
+
}
|
|
248
|
+
_initArrowsNavigaton() {
|
|
249
|
+
if (!this.isOpened)
|
|
250
|
+
return;
|
|
251
|
+
if (!this.optionFocused) {
|
|
252
|
+
const firstElem = this.treeContainerElement?.querySelector('.p-treenode-content');
|
|
253
|
+
if (firstElem)
|
|
254
|
+
firstElem.focus();
|
|
255
|
+
this.optionFocused = true;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
clear(dd, event) {
|
|
259
|
+
event.stopPropagation();
|
|
260
|
+
if ((!this.multiple && this.treeSelection) ||
|
|
261
|
+
(this.multiple && this.treeSelection?.length > 0)) {
|
|
262
|
+
if (this.openOnClear) {
|
|
263
|
+
this._toggleOptions(dd, true);
|
|
264
|
+
}
|
|
265
|
+
const val = this.multiple ? [] : undefined;
|
|
266
|
+
this.treeSelection = val;
|
|
267
|
+
this.updateValue(val);
|
|
268
|
+
}
|
|
269
|
+
this.optionFocused = false;
|
|
270
|
+
}
|
|
271
|
+
_checkErrors() {
|
|
272
|
+
const errors = this._control?.errors;
|
|
273
|
+
if (!this._control?.control?.touched || !errors) {
|
|
274
|
+
this.error = '';
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
if ('required' in errors) {
|
|
278
|
+
this.error = 'Field is required';
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const errArr = Object.values(errors);
|
|
282
|
+
if (errArr.length < 1) {
|
|
283
|
+
this.error = '';
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const message = errArr.find((msg) => typeof msg === 'string');
|
|
287
|
+
this.error = message || 'Unknown error';
|
|
288
|
+
}
|
|
289
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
290
|
+
setDisabledState(disabled) { }
|
|
291
|
+
onBlur() {
|
|
292
|
+
this._control?.control?.markAsTouched();
|
|
293
|
+
this._checkErrors();
|
|
294
|
+
}
|
|
295
|
+
focus() {
|
|
296
|
+
this.selectContainer?.nativeElement?.focus();
|
|
297
|
+
this._toggleOptions(this.selectContainer?.nativeElement, true);
|
|
298
|
+
}
|
|
299
|
+
_expandToNodes(nodes) {
|
|
300
|
+
function getParentKey(key) {
|
|
301
|
+
const lastSeparatorIndex = key.lastIndexOf('-');
|
|
302
|
+
if (lastSeparatorIndex !== -1) {
|
|
303
|
+
return key.substring(0, lastSeparatorIndex);
|
|
304
|
+
}
|
|
305
|
+
return '';
|
|
306
|
+
}
|
|
307
|
+
nodes.forEach((node) => {
|
|
308
|
+
const parentNodeKey = getParentKey(node.key);
|
|
309
|
+
const parentNode = this.optionsMap.get(parentNodeKey) || null;
|
|
310
|
+
if (parentNode) {
|
|
311
|
+
parentNode.expanded = true;
|
|
312
|
+
this._expandToNodes([parentNode]);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
_toInnerOptions(_options) {
|
|
317
|
+
function mapOption(o, optionLabel, optionInfo, key, originalOptionsMap) {
|
|
318
|
+
const inner = {
|
|
319
|
+
inner: true,
|
|
320
|
+
label: o[optionLabel],
|
|
321
|
+
info: o[optionInfo],
|
|
322
|
+
key,
|
|
323
|
+
styleClass: 'key-' + key
|
|
324
|
+
};
|
|
325
|
+
if (o.type === 'directory') {
|
|
326
|
+
inner.type = 'directory';
|
|
327
|
+
inner.selectable = false;
|
|
328
|
+
inner.styleClass += ' cps-tree-node-fully-expandable';
|
|
329
|
+
}
|
|
330
|
+
if (o.children) {
|
|
331
|
+
inner.children = o.children.map((c, index) => {
|
|
332
|
+
return mapOption(c, optionLabel, optionInfo, key + '-' + index, originalOptionsMap);
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
originalOptionsMap.set(key, o);
|
|
336
|
+
return inner;
|
|
337
|
+
}
|
|
338
|
+
const res = _options.map((option, index) => {
|
|
339
|
+
return mapOption(option, this.optionLabel, this.optionInfo, '' + index, this.originalOptionsMap);
|
|
340
|
+
});
|
|
341
|
+
this.optionsMap = this._buildOptionsMap(res);
|
|
342
|
+
return res;
|
|
343
|
+
}
|
|
344
|
+
_buildOptionsMap(options) {
|
|
345
|
+
const nodeMap = new Map();
|
|
346
|
+
for (const option of options) {
|
|
347
|
+
nodeMap.set(option.key, option);
|
|
348
|
+
if (option.children) {
|
|
349
|
+
const childNodeMap = this._buildOptionsMap(option.children);
|
|
350
|
+
childNodeMap.forEach((value, key) => nodeMap.set(key, value));
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return nodeMap;
|
|
354
|
+
}
|
|
355
|
+
_treeSelectionToValue(selection) {
|
|
356
|
+
if (!selection)
|
|
357
|
+
return this.multiple ? [] : undefined;
|
|
358
|
+
if (this.multiple) {
|
|
359
|
+
return selection.map((s) => this.originalOptionsMap.get(s.key));
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
return this.originalOptionsMap.get(selection.key);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
_valueToTreeSelection(value) {
|
|
366
|
+
function getKey(v, map) {
|
|
367
|
+
for (const [key, val] of map.entries()) {
|
|
368
|
+
if (isEqual(v, val)) {
|
|
369
|
+
return key;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return '';
|
|
373
|
+
}
|
|
374
|
+
if (!value)
|
|
375
|
+
return this.multiple ? [] : undefined;
|
|
376
|
+
if (this.multiple) {
|
|
377
|
+
const res = [];
|
|
378
|
+
value.forEach((v) => {
|
|
379
|
+
const key = getKey(v, this.originalOptionsMap);
|
|
380
|
+
if (key)
|
|
381
|
+
res.push(this.optionsMap.get(key));
|
|
382
|
+
});
|
|
383
|
+
return res;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
const key = getKey(value, this.originalOptionsMap);
|
|
387
|
+
return key ? this.optionsMap.get(key) : undefined;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// this is a fix of primeng change detection bug when virtual scroller is enabled
|
|
391
|
+
_updateOptions() {
|
|
392
|
+
if (!this.virtualScroll)
|
|
393
|
+
return;
|
|
394
|
+
this.options = [...this.options];
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
CpsTreeSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeSelectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
398
|
+
CpsTreeSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeSelectComponent, isStandalone: true, selector: "cps-tree-select", inputs: { label: "label", placeholder: "placeholder", hint: "hint", multiple: "multiple", disabled: "disabled", width: "width", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", optionLabel: "optionLabel", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", virtualScroll: "virtualScroll", options: "options", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, providers: [LabelByValuePipe, CombineLabelsPipe], viewQueries: [{ propertyName: "selectContainer", first: true, predicate: ["selectContainer"], descendants: true }, { propertyName: "treeList", first: true, predicate: ["treeList"], descendants: true }], ngImport: i0, template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-treeselect\"\n tabindex=\"0\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #selectContainer\n (keydown)=\"onKeyDown($event, selectContainer)\"\n (blur)=\"onBlur()\">\n <label *ngIf=\"label\" class=\"cps-treeselect-label\">{{ label }} </label>\n <div\n class=\"cps-treeselect-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear\n }\"\n (clickOutside)=\"onClickOutside(selectContainer)\">\n <div class=\"cps-treeselect-box\" (click)=\"onBoxClick(selectContainer)\">\n <div class=\"cps-treeselect-box-left\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-treeselect-box-placeholder\"\n *ngIf=\"\n (!treeSelection && !multiple) ||\n (treeSelection?.length < 1 && multiple)\n \">\n {{ placeholder }}\n </div>\n <div\n class=\"cps-treeselect-box-items\"\n *ngIf=\"\n (treeSelection && !multiple) ||\n (treeSelection?.length > 0 && multiple)\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n {{ treeSelection.label }}</span\n >\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <span class=\"text-group-item\">\n {{\n treeSelection | combineLabels : options : '' : 'label' : true\n }}\n </span>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of treeSelection\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"remove(val)\"\n [label]=\"val.label\">\n </cps-chip>\n </div>\n </div>\n </div>\n <span class=\"cps-treeselect-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && treeSelection?.length) ||\n (!multiple && treeSelection)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-treeselect-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(selectContainer, $event)\"></cps-icon>\n </span>\n <span class=\"cps-treeselect-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"></cps-icon>\n </span>\n </span>\n </div>\n\n <div class=\"cps-treeselect-options\">\n <p-tree\n #treeList\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{ numToleratedItems: 3 }\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n (onNodeSelect)=\"onSelectNode()\"\n (onNodeExpand)=\"recalcVirtualListHeight()\"\n (onNodeCollapse)=\"recalcVirtualListHeight()\"\n [value]=\"options\"\n [(selection)]=\"treeSelection\"\n (selectionChange)=\"treeSelectionChanged($event)\"\n [metaKeySelection]=\"multiple ? false : true\"\n [selectionMode]=\"multiple ? 'multiple' : 'single'\">\n <ng-template let-node pTemplate=\"directory\">\n <span class=\"cps-treeselect-directory-elem\">{{ node.label }}</span>\n </ng-template>\n <ng-template let-node pTemplate=\"default\">\n <span class=\"cps-treeselect-option\">\n <span class=\"cps-treeselect-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-treeselect-option-check\">\n </span>\n <span class=\"cps-treeselect-option-label\">{{ node.label }}</span>\n </span>\n <span class=\"cps-treeselect-option-info\">{{ node.info }}</span>\n </span>\n </ng-template>\n </p-tree>\n </div>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"treeselect-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-treeselect-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-treeselect-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-treeselect{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;display:grid}:host .cps-treeselect-container{position:relative}:host .cps-treeselect-container .treeselect-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-treeselect.active .cps-treeselect-options{display:block}:host .cps-treeselect.active .cps-treeselect-box{border:1px solid var(--cps-color-calm)}:host .cps-treeselect.active .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-treeselect .persistent-clear .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container.focused .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container:hover .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:.5}:host .cps-treeselect .cps-treeselect-box{overflow:hidden;justify-content:space-between;min-height:38px;width:100%;cursor:pointer;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;align-items:center;display:flex;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box-placeholder{color:var(--cps-color-text-lightest);font-style:italic}:host .cps-treeselect .cps-treeselect-box-items{margin-top:3px;margin-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .text-group,:host .cps-treeselect .cps-treeselect-box-items .single-item{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-treeselect .cps-treeselect-box-items .text-group-item{line-height:1.5}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left{display:inline-flex;align-items:center}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-treeselect .cps-treeselect-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box:hover .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons{display:flex}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon{display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-treeselect.active .cps-treeselect-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-treeselect .cps-treeselect-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:242px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree{border:1px solid #dee2e6;background:#ffffff;color:var(--cps-color-text-dark);padding:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option{margin-right:8px;display:flex;align-items:center;justify-content:space-between}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-left{display:flex;align-items:center;margin-right:8px}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-info{margin-left:6px;color:var(--cps-color-text-light)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-wrapper{overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content{transition:box-shadow .2s;padding:.25rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content{display:flex;align-items:center}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content .p-treenode-label{width:100%}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler{margin-right:.5rem;width:2rem;height:2rem;color:var(--cps-color-text-light);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):hover{background:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:focus{outline:0 none;outline-offset:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):focus{background-color:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight{background:#efe4e7;color:var(--cps-color-calm);font-weight:600}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .cps-treeselect-option-check{opacity:1}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler{outline:0 none;outline-offset:0;cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler :hover{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable>.p-treenode-content:hover .p-tree-toggler{color:var(--cps-color-calm)!important}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-treenode-children{padding:0 0 0 1rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-children{margin:0;padding:0;list-style-type:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable{cursor:pointer;-webkit-user-select:none;user-select:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-directory-elem{font-weight:700;font-size:16px}:host .cps-treeselect .cps-treeselect-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect .cps-treeselect-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect.disabled{pointer-events:none}:host .cps-treeselect.disabled .cps-treeselect-box{background:#f7f7f7}:host .cps-treeselect.disabled .cps-treeselect-box-items{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-box-items .text-group,:host .cps-treeselect.disabled .cps-treeselect-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-label{color:var(--cps-color-text-mild)}:host .cps-treeselect.error .cps-treeselect-box{border-color:#c33!important;background:#fef3f2!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i3.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["skipTargets"], outputs: ["clickOutside"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsChipComponent, selector: "cps-chip", inputs: ["label", "icon", "iconPosition", "closable", "disabled"], outputs: ["closed"] }, { kind: "component", type: CpsProgressLinearComponent, selector: "cps-progress-linear", inputs: ["width", "height", "color", "bgColor", "opacity", "radius"] }, { kind: "pipe", type: CombineLabelsPipe, name: "combineLabels" }] });
|
|
399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeSelectComponent, decorators: [{
|
|
400
|
+
type: Component,
|
|
401
|
+
args: [{ standalone: true, imports: [
|
|
402
|
+
CommonModule,
|
|
403
|
+
FormsModule,
|
|
404
|
+
TreeModule,
|
|
405
|
+
ClickOutsideDirective,
|
|
406
|
+
CpsIconComponent,
|
|
407
|
+
CpsChipComponent,
|
|
408
|
+
CpsProgressLinearComponent,
|
|
409
|
+
LabelByValuePipe,
|
|
410
|
+
CombineLabelsPipe
|
|
411
|
+
], providers: [LabelByValuePipe, CombineLabelsPipe], selector: 'cps-tree-select', template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-treeselect\"\n tabindex=\"0\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #selectContainer\n (keydown)=\"onKeyDown($event, selectContainer)\"\n (blur)=\"onBlur()\">\n <label *ngIf=\"label\" class=\"cps-treeselect-label\">{{ label }} </label>\n <div\n class=\"cps-treeselect-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear\n }\"\n (clickOutside)=\"onClickOutside(selectContainer)\">\n <div class=\"cps-treeselect-box\" (click)=\"onBoxClick(selectContainer)\">\n <div class=\"cps-treeselect-box-left\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-treeselect-box-placeholder\"\n *ngIf=\"\n (!treeSelection && !multiple) ||\n (treeSelection?.length < 1 && multiple)\n \">\n {{ placeholder }}\n </div>\n <div\n class=\"cps-treeselect-box-items\"\n *ngIf=\"\n (treeSelection && !multiple) ||\n (treeSelection?.length > 0 && multiple)\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n {{ treeSelection.label }}</span\n >\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <span class=\"text-group-item\">\n {{\n treeSelection | combineLabels : options : '' : 'label' : true\n }}\n </span>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of treeSelection\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"remove(val)\"\n [label]=\"val.label\">\n </cps-chip>\n </div>\n </div>\n </div>\n <span class=\"cps-treeselect-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && treeSelection?.length) ||\n (!multiple && treeSelection)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-treeselect-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(selectContainer, $event)\"></cps-icon>\n </span>\n <span class=\"cps-treeselect-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"></cps-icon>\n </span>\n </span>\n </div>\n\n <div class=\"cps-treeselect-options\">\n <p-tree\n #treeList\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{ numToleratedItems: 3 }\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n (onNodeSelect)=\"onSelectNode()\"\n (onNodeExpand)=\"recalcVirtualListHeight()\"\n (onNodeCollapse)=\"recalcVirtualListHeight()\"\n [value]=\"options\"\n [(selection)]=\"treeSelection\"\n (selectionChange)=\"treeSelectionChanged($event)\"\n [metaKeySelection]=\"multiple ? false : true\"\n [selectionMode]=\"multiple ? 'multiple' : 'single'\">\n <ng-template let-node pTemplate=\"directory\">\n <span class=\"cps-treeselect-directory-elem\">{{ node.label }}</span>\n </ng-template>\n <ng-template let-node pTemplate=\"default\">\n <span class=\"cps-treeselect-option\">\n <span class=\"cps-treeselect-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-treeselect-option-check\">\n </span>\n <span class=\"cps-treeselect-option-label\">{{ node.label }}</span>\n </span>\n <span class=\"cps-treeselect-option-info\">{{ node.info }}</span>\n </span>\n </ng-template>\n </p-tree>\n </div>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"treeselect-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-treeselect-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-treeselect-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-treeselect{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;display:grid}:host .cps-treeselect-container{position:relative}:host .cps-treeselect-container .treeselect-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-treeselect.active .cps-treeselect-options{display:block}:host .cps-treeselect.active .cps-treeselect-box{border:1px solid var(--cps-color-calm)}:host .cps-treeselect.active .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-treeselect .persistent-clear .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container.focused .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container:hover .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:.5}:host .cps-treeselect .cps-treeselect-box{overflow:hidden;justify-content:space-between;min-height:38px;width:100%;cursor:pointer;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;align-items:center;display:flex;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box-placeholder{color:var(--cps-color-text-lightest);font-style:italic}:host .cps-treeselect .cps-treeselect-box-items{margin-top:3px;margin-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .text-group,:host .cps-treeselect .cps-treeselect-box-items .single-item{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-treeselect .cps-treeselect-box-items .text-group-item{line-height:1.5}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left{display:inline-flex;align-items:center}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-treeselect .cps-treeselect-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box:hover .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons{display:flex}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon{display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-treeselect.active .cps-treeselect-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-treeselect .cps-treeselect-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:242px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree{border:1px solid #dee2e6;background:#ffffff;color:var(--cps-color-text-dark);padding:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option{margin-right:8px;display:flex;align-items:center;justify-content:space-between}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-left{display:flex;align-items:center;margin-right:8px}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-info{margin-left:6px;color:var(--cps-color-text-light)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-wrapper{overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content{transition:box-shadow .2s;padding:.25rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content{display:flex;align-items:center}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content .p-treenode-label{width:100%}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler{margin-right:.5rem;width:2rem;height:2rem;color:var(--cps-color-text-light);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):hover{background:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:focus{outline:0 none;outline-offset:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):focus{background-color:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight{background:#efe4e7;color:var(--cps-color-calm);font-weight:600}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .cps-treeselect-option-check{opacity:1}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler{outline:0 none;outline-offset:0;cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler :hover{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable>.p-treenode-content:hover .p-tree-toggler{color:var(--cps-color-calm)!important}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-treenode-children{padding:0 0 0 1rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-children{margin:0;padding:0;list-style-type:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable{cursor:pointer;-webkit-user-select:none;user-select:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-directory-elem{font-weight:700;font-size:16px}:host .cps-treeselect .cps-treeselect-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect .cps-treeselect-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect.disabled{pointer-events:none}:host .cps-treeselect.disabled .cps-treeselect-box{background:#f7f7f7}:host .cps-treeselect.disabled .cps-treeselect-box-items{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-box-items .text-group,:host .cps-treeselect.disabled .cps-treeselect-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-label{color:var(--cps-color-text-mild)}:host .cps-treeselect.error .cps-treeselect-box{border-color:#c33!important;background:#fef3f2!important}\n"] }]
|
|
412
|
+
}], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
|
|
413
|
+
type: Self
|
|
414
|
+
}, {
|
|
415
|
+
type: Optional
|
|
416
|
+
}] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
|
|
417
|
+
type: Input
|
|
418
|
+
}], placeholder: [{
|
|
419
|
+
type: Input
|
|
420
|
+
}], hint: [{
|
|
421
|
+
type: Input
|
|
422
|
+
}], multiple: [{
|
|
423
|
+
type: Input
|
|
424
|
+
}], disabled: [{
|
|
425
|
+
type: Input
|
|
426
|
+
}], width: [{
|
|
427
|
+
type: Input
|
|
428
|
+
}], chips: [{
|
|
429
|
+
type: Input
|
|
430
|
+
}], closableChips: [{
|
|
431
|
+
type: Input
|
|
432
|
+
}], clearable: [{
|
|
433
|
+
type: Input
|
|
434
|
+
}], openOnClear: [{
|
|
435
|
+
type: Input
|
|
436
|
+
}], optionLabel: [{
|
|
437
|
+
type: Input
|
|
438
|
+
}], optionInfo: [{
|
|
439
|
+
type: Input
|
|
440
|
+
}], hideDetails: [{
|
|
441
|
+
type: Input
|
|
442
|
+
}], persistentClear: [{
|
|
443
|
+
type: Input
|
|
444
|
+
}], prefixIcon: [{
|
|
445
|
+
type: Input
|
|
446
|
+
}], prefixIconSize: [{
|
|
447
|
+
type: Input
|
|
448
|
+
}], loading: [{
|
|
449
|
+
type: Input
|
|
450
|
+
}], virtualScroll: [{
|
|
451
|
+
type: Input
|
|
452
|
+
}], options: [{
|
|
453
|
+
type: Input
|
|
454
|
+
}], _value: [{
|
|
455
|
+
type: Input,
|
|
456
|
+
args: ['value']
|
|
457
|
+
}], valueChanged: [{
|
|
458
|
+
type: Output
|
|
459
|
+
}], selectContainer: [{
|
|
460
|
+
type: ViewChild,
|
|
461
|
+
args: ['selectContainer']
|
|
462
|
+
}], treeList: [{
|
|
463
|
+
type: ViewChild,
|
|
464
|
+
args: ['treeList']
|
|
465
|
+
}] } });
|
|
466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy10cmVlLXNlbGVjdC9jcHMtdHJlZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtc2VsZWN0L2Nwcy10cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBUSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQXFCaEQsTUFBTSxPQUFPLHNCQUFzQjtJQXNCakMsSUFBYSxPQUFPLENBQUMsT0FBYztRQUNqQyxJQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBSUQsSUFBSSxLQUFLLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQTBCRCxZQUM4QixRQUFtQixFQUN2QyxLQUF3QjtRQURKLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDdkMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFyRXpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUM5QixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFVBQUssR0FBb0IsTUFBTSxDQUFDO1FBQ2hDLFVBQUssR0FBRyxJQUFJLENBQUM7UUFDYixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixtQkFBYyxHQUFpQixNQUFNLENBQUM7UUFDdEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQWVmLFdBQU0sR0FBUSxTQUFTLENBQUM7UUFXOUIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBT3pDLCtCQUEwQixHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXRFLGFBQVEsR0FBZSxFQUFFLENBQUM7UUFDMUIsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFJNUMsc0JBQWlCLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUUzQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFxRnRCLGdFQUFnRTtRQUNoRSxhQUFRLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUU5QixnRUFBZ0U7UUFDaEUsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQW5GbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO2FBQ3pCO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3RDtRQUVELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQ3ZFLEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQ2MsQ0FBQztJQUNwQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FDM0MsT0FBTyxFQUNQLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3hDLENBQUM7SUFDTixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0I7WUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FDeEMsT0FBTyxFQUNQLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3hDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxLQUFVO1FBQ3hDLFNBQVMsa0JBQWtCLENBQ3pCLE9BQTJCLEVBQzNCLFNBQWlCO1lBRWpCLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQztZQUM3QixPQUFPLGNBQWMsRUFBRTtnQkFDckIsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDaEQsT0FBTyxjQUFjLENBQUM7aUJBQ3ZCO2dCQUNELGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO2FBQy9DO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNkLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFM0QsSUFDRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQ3hDLGdDQUFnQyxDQUNqQyxFQUNEO1lBQ0EsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBUUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVO1FBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQWU7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFlO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsRUFBZTtRQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMzQixTQUFTO1FBQ1QsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEM7UUFDRCxtQkFBbUI7YUFDZCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQVUsRUFBRSxJQUFpQjtRQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUV0QixRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVM7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFO1lBQy9DLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBYztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMvQixJQUFJLENBQUMscUJBQXFCLEdBQUcsVUFBVSxFQUN2QyxHQUFHLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsRUFBZSxFQUFFLElBQWM7UUFDcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDakMsSUFBSSxPQUFPLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxJQUFJO2dCQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztnQkFDaEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEM7O1lBQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QyxJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDMUQsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV0QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUUvQixNQUFNLFFBQVEsR0FDWixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ25FLElBQUksUUFBUSxFQUFFO29CQUNaLFFBQVEsQ0FBQyxjQUFjLENBQUM7d0JBQ3RCLFFBQVEsRUFBRSxTQUFTO3dCQUNuQixLQUFLLEVBQUUsU0FBUzt3QkFDaEIsTUFBTSxFQUFFLFFBQVE7cUJBQ2pCLENBQUMsQ0FBQztpQkFDSjtxQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDbkQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDakIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztxQkFDcEU7O3dCQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztvQkFDcEMsSUFBSSxHQUFHLEVBQUU7d0JBQ1AsTUFBTSxHQUFHLEdBQ1AsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUN2QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNWLElBQUksR0FBRyxJQUFJLENBQUM7NEJBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDdkQ7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFnQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzVDLENBQUMsQ0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQ3JDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FDeEQscUJBQXFCLENBQ3RCLENBQUM7WUFDRixJQUFJLFNBQVM7Z0JBQUcsU0FBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsRUFBZSxFQUFFLEtBQVU7UUFDL0IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ2pEO1lBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQjtZQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUVyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE9BQU87U0FDUjtRQUVELElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDO1lBQ2pDLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixPQUFPO1NBQ1I7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxlQUFlLENBQUM7SUFDMUMsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxnQkFBZ0IsQ0FBQyxRQUFpQixJQUFHLENBQUM7SUFFdEMsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFZO1FBQ2pDLFNBQVMsWUFBWSxDQUFDLEdBQVc7WUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksa0JBQWtCLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUM3QztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUU5RCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDbkM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsUUFBZTtRQUNyQyxTQUFTLFNBQVMsQ0FDaEIsQ0FBTSxFQUNOLFdBQW1CLEVBQ25CLFVBQWtCLEVBQ2xCLEdBQVcsRUFDWCxrQkFBdUI7WUFFdkIsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osS0FBSyxFQUFFLElBQUk7Z0JBQ1gsS0FBSyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUNuQixHQUFHO2dCQUNILFVBQVUsRUFBRSxNQUFNLEdBQUcsR0FBRzthQUNiLENBQUM7WUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztnQkFDekIsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxVQUFVLElBQUksaUNBQWlDLENBQUM7YUFDdkQ7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2QsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxLQUFhLEVBQUUsRUFBRTtvQkFDeEQsT0FBTyxTQUFTLENBQ2QsQ0FBQyxFQUNELFdBQVcsRUFDWCxVQUFVLEVBQ1YsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQ2pCLGtCQUFrQixDQUNuQixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekMsT0FBTyxTQUFTLENBQ2QsTUFBTSxFQUNOLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQ2YsRUFBRSxHQUFHLEtBQUssRUFDVixJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQWM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtZQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUMvRDtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQWM7UUFDMUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdEU7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRU8scUJBQXFCLENBQUMsS0FBVTtRQUN0QyxTQUFTLE1BQU0sQ0FBQyxDQUFNLEVBQUUsR0FBcUI7WUFDM0MsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNuQixPQUFPLEdBQUcsQ0FBQztpQkFDWjthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWxELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFnQixDQUFDO1lBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxHQUFHO29CQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFhLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1NBQ1o7YUFBTTtZQUNMLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbkQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQsaUZBQWlGO0lBQ3pFLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7bUhBL2RVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHNtQkFMdEIsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxxT0N6Q2xELGlqSkFvSUEsczdRRHJHSSxZQUFZLGtiQUNaLFdBQVcsOEJBQ1gsVUFBVSx1OUJBQ1YscUJBQXFCLCtHQUNyQixnQkFBZ0Isd0ZBQ2hCLGdCQUFnQiw2SUFDaEIsMEJBQTBCLGlJQUUxQixpQkFBaUI7MkZBT1Isc0JBQXNCO2tCQWxCbEMsU0FBUztpQ0FDSSxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsMEJBQTBCO3dCQUMxQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjtxQkFDbEIsYUFDVSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLFlBQ3RDLGlCQUFpQjs7MEJBMkV4QixJQUFJOzswQkFBSSxRQUFROzRFQXBFVixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRU8sT0FBTztzQkFBbkIsS0FBSztnQkFhVSxNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBV0osWUFBWTtzQkFBckIsTUFBTTtnQkFHUCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUdMLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50LCBpY29uU2l6ZVR5cGUgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQ2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1jaGlwL2Nwcy1jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNQcm9ncmVzc0xpbmVhckNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1wcm9ncmVzcy1saW5lYXIvY3BzLXByb2dyZXNzLWxpbmVhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMYWJlbEJ5VmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbGFiZWwtYnktdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBDb21iaW5lTGFiZWxzUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2NvbWJpbmUtbGFiZWxzLnBpcGUnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBUcmVlLCBUcmVlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90cmVlJztcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmVlTW9kdWxlLFxuICAgIENsaWNrT3V0c2lkZURpcmVjdGl2ZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQsXG4gICAgTGFiZWxCeVZhbHVlUGlwZSxcbiAgICBDb21iaW5lTGFiZWxzUGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtMYWJlbEJ5VmFsdWVQaXBlLCBDb21iaW5lTGFiZWxzUGlwZV0sXG4gIHNlbGVjdG9yOiAnY3BzLXRyZWUtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy10cmVlLXNlbGVjdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENwc1RyZWVTZWxlY3RDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIHNlbGVjdCc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciB8IHN0cmluZyA9ICcxMDAlJztcbiAgQElucHV0KCkgY2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zYWJsZUNoaXBzID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG9wZW5PbkNsZWFyID0gdHJ1ZTtcbiAgQElucHV0KCkgb3B0aW9uTGFiZWwgPSAnbGFiZWwnO1xuICBASW5wdXQoKSBvcHRpb25JbmZvID0gJ2luZm8nO1xuICBASW5wdXQoKSBoaWRlRGV0YWlscyA9IGZhbHNlO1xuICBASW5wdXQoKSBwZXJzaXN0ZW50Q2xlYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgcHJlZml4SWNvbiA9ICcnO1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnlbXSkge1xuICAgIGlmIChvcHRpb25zPy5zb21lKChvKSA9PiBvLmlubmVyKSkge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3RvSW5uZXJPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBASW5wdXQoJ3ZhbHVlJykgX3ZhbHVlOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbnRhaW5lcicpXG4gIHNlbGVjdENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndHJlZUxpc3QnKSB0cmVlTGlzdCE6IFRyZWU7XG5cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIF9vcHRpb25zOiBUcmVlTm9kZVtdID0gW107XG4gIG9wdGlvbnNNYXAgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGU+KCk7XG4gIG9yaWdpbmFsT3B0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgdHJlZVNlbGVjdGlvbjogYW55O1xuXG4gIHZpcnR1YWxMaXN0SGVpZ2h0ID0gMjQwO1xuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSA0MDtcblxuICBlcnJvciA9ICcnO1xuICBjdnRXaWR0aCA9ICcnO1xuICBpc09wZW5lZCA9IGZhbHNlO1xuICB0cmVlQ29udGFpbmVyRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICBvcHRpb25Gb2N1c2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jdnRXaWR0aCA9IGNvbnZlcnRTaXplKHRoaXMud2lkdGgpO1xuICAgIGlmICghdGhpcy5fdmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVTZWxlY3Rpb24gPSB0aGlzLl92YWx1ZVRvVHJlZVNlbGVjdGlvbih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbD8uc3RhdHVzQ2hhbmdlcz8uc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICAgICAgfVxuICAgICkgYXMgU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2luaXRDb250YWluZXJDbGlja0xpc3RlbmVyKCk7XG4gICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy50cmVlQ29udGFpbmVyRWxlbWVudClcbiAgICAgIHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgdGhpcy5faGFuZGxlT25Db250YWluZXJDbGljay5iaW5kKHRoaXMpXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdENvbnRhaW5lckNsaWNrTGlzdGVuZXIoKSB7XG4gICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCA9XG4gICAgICB0aGlzLnRyZWVMaXN0Py5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZS1jb250YWluZXInKTtcbiAgICBpZiAodGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLl9oYW5kbGVPbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT25Db250YWluZXJDbGljayhldmVudDogYW55KSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50V2l0aENsYXNzKFxuICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgICAgY2xhc3NOYW1lOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uRm9jdXNlZCA9IHRydWU7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLXRyZWVub2RlLWNvbnRlbnQnKVxuICAgICAgPyBldmVudC50YXJnZXRcbiAgICAgIDogZ2V0UGFyZW50V2l0aENsYXNzKGV2ZW50LnRhcmdldCwgJ3AtdHJlZW5vZGUtY29udGVudCcpO1xuXG4gICAgaWYgKFxuICAgICAgcGFyZW50Py5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKFxuICAgICAgICAnY3BzLXRyZWUtbm9kZS1mdWxseS1leHBhbmRhYmxlJ1xuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrRnVsbHlFeHBhbmRhYmxlKGV2ZW50LCBwYXJlbnQucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uU2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModGhpcy5zZWxlY3RDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrT3V0c2lkZShkZDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLl90b2dnbGVPcHRpb25zKGRkLCBmYWxzZSk7XG4gIH1cblxuICBvbkJveENsaWNrKGRkOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZGQpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBhbnksIGRkOiBIVE1MRWxlbWVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgLy8gZXNjYXBlXG4gICAgaWYgKGNvZGUgPT09IDI3KSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKGRkLCBmYWxzZSk7XG4gICAgfVxuICAgIC8vIGNsaWNrIGRvd24gYXJyb3dcbiAgICBlbHNlIGlmIChbNDBdLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICB0aGlzLl9pbml0QXJyb3dzTmF2aWdhdG9uKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGlja0Z1bGx5RXhwYW5kYWJsZShldmVudDogYW55LCBlbGVtOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldEhUTUxFbGVtZW50S2V5KGVsZW0pO1xuICAgIGlmICgha2V5KSByZXR1cm47XG5cbiAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMub3B0aW9ucy5maW5kKChvKSA9PiBvLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoIXRyZWVOb2RlKSByZXR1cm47XG5cbiAgICB0cmVlTm9kZS5leHBhbmRlZCA9ICF0cmVlTm9kZS5leHBhbmRlZDtcbiAgICB0aGlzLl91cGRhdGVPcHRpb25zKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIVE1MRWxlbWVudEtleShlbGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghZWxlbT8uY2xhc3NMaXN0KSByZXR1cm4gJyc7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gWy4uLmVsZW0uY2xhc3NMaXN0XTtcbiAgICBjb25zdCBrZXkgPSBjbGFzc0xpc3QuZmluZCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuc3RhcnRzV2l0aCgna2V5LScpO1xuICAgIH0pO1xuICAgIGlmICgha2V5KSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKCdrZXktJywgJycpO1xuICB9XG5cbiAgdHJlZVNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuX3RyZWVTZWxlY3Rpb25Ub1ZhbHVlKHNlbGVjdGlvbikpO1xuICB9XG5cbiAgcmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50TGVuID0gdGhpcy50cmVlTGlzdD8uc2VyaWFsaXplZFZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICB0aGlzLnZpcnR1YWxMaXN0SGVpZ2h0ID0gTWF0aC5taW4oXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSAqIGN1cnJlbnRMZW4sXG4gICAgICAyNDBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlT3B0aW9ucyhkZDogSFRNTEVsZW1lbnQsIHNob3c/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIWRkKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChzaG93KSBkZC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIGVsc2UgZGQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgfSBlbHNlIGRkLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xuXG4gICAgdGhpcy5pc09wZW5lZCA9IGRkLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJyk7XG4gICAgdGhpcy5vcHRpb25Gb2N1c2VkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc09wZW5lZCAmJiB0aGlzLnRyZWVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuX2V4cGFuZFRvTm9kZXMoXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPyB0aGlzLnRyZWVTZWxlY3Rpb24gOiBbdGhpcy50cmVlU2VsZWN0aW9uXVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnMoKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgICAgdGhpcy5zZWxlY3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1oaWdobGlnaHQnKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMudHJlZVNlbGVjdGlvbikge1xuICAgICAgICAgIGxldCBrZXkgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZVNlbGVjdGlvbi5sZW5ndGggPiAwKSBrZXkgPSB0aGlzLnRyZWVTZWxlY3Rpb25bMF0ua2V5O1xuICAgICAgICAgIH0gZWxzZSBrZXkgPSB0aGlzLnRyZWVTZWxlY3Rpb24ua2V5O1xuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9XG4gICAgICAgICAgICAgIHRoaXMudHJlZUxpc3Q/LnNlcmlhbGl6ZWRWYWx1ZT8uZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh2KSA9PiB2Lm5vZGUua2V5ID09PSBrZXlcbiAgICAgICAgICAgICAgKSB8fCAtMTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy50cmVlTGlzdC5zY3JvbGxUb1ZpcnR1YWxJbmRleChpZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKG9wdGlvbjogVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHJldHVybjtcblxuICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMudHJlZVNlbGVjdGlvbi5maWx0ZXIoXG4gICAgICAodjogVHJlZU5vZGUpID0+ICFpc0VxdWFsKHYsIG9wdGlvbilcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5fdHJlZVNlbGVjdGlvblRvVmFsdWUodGhpcy50cmVlU2VsZWN0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0QXJyb3dzTmF2aWdhdG9uKCkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbkZvY3VzZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0RWxlbSA9IHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVlbm9kZS1jb250ZW50J1xuICAgICAgKTtcbiAgICAgIGlmIChmaXJzdEVsZW0pIChmaXJzdEVsZW0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKGRkOiBIVE1MRWxlbWVudCwgZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKFxuICAgICAgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbikgfHxcbiAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbj8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZGQsIHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsID0gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy50cmVlU2VsZWN0aW9uID0gdmFsO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRXJyb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2NvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdyZXF1aXJlZCcgaW4gZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0ZpZWxkIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJBcnIgPSBPYmplY3QudmFsdWVzKGVycm9ycyk7XG4gICAgaWYgKGVyckFyci5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHt9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5zZWxlY3RDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyh0aGlzLnNlbGVjdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9leHBhbmRUb05vZGVzKG5vZGVzOiBhbnlbXSkge1xuICAgIGZ1bmN0aW9uIGdldFBhcmVudEtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zdCBsYXN0U2VwYXJhdG9ySW5kZXggPSBrZXkubGFzdEluZGV4T2YoJy0nKTtcbiAgICAgIGlmIChsYXN0U2VwYXJhdG9ySW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBrZXkuc3Vic3RyaW5nKDAsIGxhc3RTZXBhcmF0b3JJbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZUtleSA9IGdldFBhcmVudEtleShub2RlLmtleSk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5vcHRpb25zTWFwLmdldChwYXJlbnROb2RlS2V5KSB8fCBudWxsO1xuXG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZXhwYW5kVG9Ob2RlcyhbcGFyZW50Tm9kZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9Jbm5lck9wdGlvbnMoX29wdGlvbnM6IGFueVtdKTogVHJlZU5vZGVbXSB7XG4gICAgZnVuY3Rpb24gbWFwT3B0aW9uKFxuICAgICAgbzogYW55LFxuICAgICAgb3B0aW9uTGFiZWw6IHN0cmluZyxcbiAgICAgIG9wdGlvbkluZm86IHN0cmluZyxcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgb3JpZ2luYWxPcHRpb25zTWFwOiBhbnlcbiAgICApIHtcbiAgICAgIGNvbnN0IGlubmVyID0ge1xuICAgICAgICBpbm5lcjogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IG9bb3B0aW9uTGFiZWxdLFxuICAgICAgICBpbmZvOiBvW29wdGlvbkluZm9dLFxuICAgICAgICBrZXksXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdrZXktJyArIGtleVxuICAgICAgfSBhcyBUcmVlTm9kZTtcbiAgICAgIGlmIChvLnR5cGUgPT09ICdkaXJlY3RvcnknKSB7XG4gICAgICAgIGlubmVyLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICAgICAgaW5uZXIuc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICBpbm5lci5zdHlsZUNsYXNzICs9ICcgY3BzLXRyZWUtbm9kZS1mdWxseS1leHBhbmRhYmxlJztcbiAgICAgIH1cbiAgICAgIGlmIChvLmNoaWxkcmVuKSB7XG4gICAgICAgIGlubmVyLmNoaWxkcmVuID0gby5jaGlsZHJlbi5tYXAoKGM6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgb3B0aW9uTGFiZWwsXG4gICAgICAgICAgICBvcHRpb25JbmZvLFxuICAgICAgICAgICAga2V5ICsgJy0nICsgaW5kZXgsXG4gICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnNNYXBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsT3B0aW9uc01hcC5zZXQoa2V5LCBvKTtcbiAgICAgIHJldHVybiBpbm5lcjtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBfb3B0aW9ucy5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgIG9wdGlvbixcbiAgICAgICAgdGhpcy5vcHRpb25MYWJlbCxcbiAgICAgICAgdGhpcy5vcHRpb25JbmZvLFxuICAgICAgICAnJyArIGluZGV4LFxuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9uc01hcCA9IHRoaXMuX2J1aWxkT3B0aW9uc01hcChyZXMpO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkT3B0aW9uc01hcChvcHRpb25zOiBhbnlbXSk6IE1hcDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIG5vZGVNYXAuc2V0KG9wdGlvbi5rZXksIG9wdGlvbik7XG4gICAgICBpZiAob3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZU1hcCA9IHRoaXMuX2J1aWxkT3B0aW9uc01hcChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICBjaGlsZE5vZGVNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gbm9kZU1hcC5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZU1hcDtcbiAgfVxuXG4gIHByaXZhdGUgX3RyZWVTZWxlY3Rpb25Ub1ZhbHVlKHNlbGVjdGlvbjogYW55KSB7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybiB0aGlzLm11bHRpcGxlID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChzOiBhbnkpID0+IHRoaXMub3JpZ2luYWxPcHRpb25zTWFwLmdldChzLmtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXAuZ2V0KHNlbGVjdGlvbi5rZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBmdW5jdGlvbiBnZXRLZXkodjogYW55LCBtYXA6IE1hcDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIG1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGlzRXF1YWwodiwgdmFsKSkge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IFtdIGFzIFRyZWVOb2RlW107XG4gICAgICB2YWx1ZS5mb3JFYWNoKCh2OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHYsIHRoaXMub3JpZ2luYWxPcHRpb25zTWFwKTtcbiAgICAgICAgaWYgKGtleSkgcmVzLnB1c2godGhpcy5vcHRpb25zTWFwLmdldChrZXkpIGFzIFRyZWVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHZhbHVlLCB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcCk7XG4gICAgICByZXR1cm4ga2V5ID8gdGhpcy5vcHRpb25zTWFwLmdldChrZXkpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRoaXMgaXMgYSBmaXggb2YgcHJpbWVuZyBjaGFuZ2UgZGV0ZWN0aW9uIGJ1ZyB3aGVuIHZpcnR1YWwgc2Nyb2xsZXIgaXMgZW5hYmxlZFxuICBwcml2YXRlIF91cGRhdGVPcHRpb25zKCkge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSByZXR1cm47XG4gICAgdGhpcy5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nU3R5bGVdPVwieyB3aWR0aDogY3Z0V2lkdGggfVwiXG4gIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3RcIlxuICB0YWJpbmRleD1cIjBcIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCwgZXJyb3I6IGVycm9yIH1cIlxuICAjc2VsZWN0Q29udGFpbmVyXG4gIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIHNlbGVjdENvbnRhaW5lcilcIlxuICAoYmx1cik9XCJvbkJsdXIoKVwiPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtbGFiZWxcIj57eyBsYWJlbCB9fSA8L2xhYmVsPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1jb250YWluZXJcIlxuICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlbmVkXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAncGVyc2lzdGVudC1jbGVhcic6IHBlcnNpc3RlbnRDbGVhclxuICAgIH1cIlxuICAgIChjbGlja091dHNpZGUpPVwib25DbGlja091dHNpZGUoc2VsZWN0Q29udGFpbmVyKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3hcIiAoY2xpY2spPVwib25Cb3hDbGljayhzZWxlY3RDb250YWluZXIpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtYm94LWxlZnRcIj5cbiAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgKm5nSWY9XCJwcmVmaXhJY29uXCJcbiAgICAgICAgICBbaWNvbl09XCJwcmVmaXhJY29uXCJcbiAgICAgICAgICBbc2l6ZV09XCJwcmVmaXhJY29uU2l6ZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmVmaXgtaWNvblwiPlxuICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoIXRyZWVTZWxlY3Rpb24gJiYgIW11bHRpcGxlKSB8fFxuICAgICAgICAgICAgKHRyZWVTZWxlY3Rpb24/Lmxlbmd0aCA8IDEgJiYgbXVsdGlwbGUpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVlc2VsZWN0LWJveC1pdGVtc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICh0cmVlU2VsZWN0aW9uICYmICFtdWx0aXBsZSkgfHxcbiAgICAgICAgICAgICh0cmVlU2VsZWN0aW9uPy5sZW5ndGggPiAwICYmIG11bHRpcGxlKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW11bHRpcGxlXCIgY2xhc3M9XCJzaW5nbGUtaXRlbVwiPlxuICAgICAgICAgICAge3sgdHJlZVNlbGVjdGlvbi5sYWJlbCB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgIWNoaXBzXCIgY2xhc3M9XCJ0ZXh0LWdyb3VwXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHRyZWVTZWxlY3Rpb24gfCBjb21iaW5lTGFiZWxzIDogb3B0aW9ucyA6ICcnIDogJ2xhYmVsJyA6IHRydWVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiBjaGlwc1wiIGNsYXNzPVwiY2hpcHMtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxjcHMtY2hpcFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsIG9mIHRyZWVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbY2xvc2FibGVdPVwiY2xvc2FibGVDaGlwc1wiXG4gICAgICAgICAgICAgIChjbG9zZWQpPVwicmVtb3ZlKHZhbClcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwidmFsLmxhYmVsXCI+XG4gICAgICAgICAgICA8L2Nwcy1jaGlwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtaWNvbnNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImNsZWFyYWJsZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIlxuICAgICAgICAgICAgcGVyc2lzdGVudENsZWFyIHx8XG4gICAgICAgICAgICAoIXBlcnNpc3RlbnRDbGVhciAmJlxuICAgICAgICAgICAgICAoKG11bHRpcGxlICYmIHRyZWVTZWxlY3Rpb24/Lmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAoIW11bHRpcGxlICYmIHRyZWVTZWxlY3Rpb24pKSlcbiAgICAgICAgICAgICAgPyAndmlzaWJsZSdcbiAgICAgICAgICAgICAgOiAnaGlkZGVuJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtY2xlYXItaWNvblwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKHNlbGVjdENvbnRhaW5lciwgJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtY2hldnJvblwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93blwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgY29sb3I9XCJ0ZXh0LWRhcmtcIj48L2Nwcy1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uc1wiPlxuICAgICAgPHAtdHJlZVxuICAgICAgICAjdHJlZUxpc3RcbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gICAgICAgIFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxPcHRpb25zXT1cInsgbnVtVG9sZXJhdGVkSXRlbXM6IDMgfVwiXG4gICAgICAgIFtzY3JvbGxIZWlnaHRdPVwidmlydHVhbExpc3RIZWlnaHQgKyAncHgnXCJcbiAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvblNlbGVjdE5vZGUoKVwiXG4gICAgICAgIChvbk5vZGVFeHBhbmQpPVwicmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKVwiXG4gICAgICAgIChvbk5vZGVDb2xsYXBzZSk9XCJyZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpXCJcbiAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbnNcIlxuICAgICAgICBbKHNlbGVjdGlvbildPVwidHJlZVNlbGVjdGlvblwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwidHJlZVNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFttZXRhS2V5U2VsZWN0aW9uXT1cIm11bHRpcGxlID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwibXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZSdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ub2RlIHBUZW1wbGF0ZT1cImRpcmVjdG9yeVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtZGlyZWN0b3J5LWVsZW1cIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW5vZGUgcFRlbXBsYXRlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVlc2VsZWN0LW9wdGlvbi1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlwbGVcIiBjbGFzcz1cImNwcy10cmVlc2VsZWN0LW9wdGlvbi1jaGVja1wiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uLWxhYmVsXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uLWluZm9cIj57eyBub2RlLmluZm8gfX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9wLXRyZWU+XG4gICAgPC9kaXY+XG4gICAgPGNwcy1wcm9ncmVzcy1saW5lYXJcbiAgICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICBoZWlnaHQ9XCIzXCJcbiAgICAgIHJhZGl1cz1cIjRcIlxuICAgICAgb3BhY2l0eT1cIjAuM1wiXG4gICAgICBjbGFzcz1cInRyZWVzZWxlY3QtcHJvZ3Jlc3MtYmFyXCJcbiAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiPlxuICAgIDwvY3BzLXByb2dyZXNzLWxpbmVhcj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1oaW50XCI+XG4gICAge3sgaGludCB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVycm9yICYmICFoaWRlRGV0YWlsc1wiIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtZXJyb3JcIj5cbiAgICB7eyBlcnJvciB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|