@tolle_/tolle-ui 18.2.23 → 18.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/accordion-item.component.mjs +17 -5
- package/esm2022/lib/alert-dialog-dynamic.component.mjs +1 -1
- package/esm2022/lib/alert-dialog.component.mjs +48 -10
- package/esm2022/lib/alert-dialog.service.mjs +13 -2
- package/esm2022/lib/alert.component.mjs +5 -5
- package/esm2022/lib/avatar.component.mjs +30 -9
- package/esm2022/lib/badge.component.mjs +41 -15
- package/esm2022/lib/breadcrumb-link.component.mjs +5 -5
- package/esm2022/lib/button.component.mjs +14 -3
- package/esm2022/lib/calendar.component.mjs +99 -17
- package/esm2022/lib/card.component.mjs +29 -9
- package/esm2022/lib/carousel/carousel.component.mjs +19 -3
- package/esm2022/lib/checkbox.component.mjs +44 -21
- package/esm2022/lib/collapsible.component.mjs +12 -4
- package/esm2022/lib/country-selector.component.mjs +140 -20
- package/esm2022/lib/data-table.component.mjs +27 -16
- package/esm2022/lib/date-picker.component.mjs +60 -25
- package/esm2022/lib/date-range-picker.component.mjs +64 -26
- package/esm2022/lib/dropdown-item.component.mjs +19 -5
- package/esm2022/lib/dropdown-label.component.mjs +3 -3
- package/esm2022/lib/dropdown-menu.component.mjs +3 -3
- package/esm2022/lib/dropdown-separator.component.mjs +3 -3
- package/esm2022/lib/dropdown-trigger.directive.mjs +7 -3
- package/esm2022/lib/empty-state.component.mjs +3 -3
- package/esm2022/lib/hover-card.component.mjs +4 -2
- package/esm2022/lib/input.component.mjs +7 -5
- package/esm2022/lib/label.component.mjs +2 -2
- package/esm2022/lib/masked-input.component.mjs +3 -3
- package/esm2022/lib/modal.component.mjs +58 -22
- package/esm2022/lib/modal.service.mjs +13 -1
- package/esm2022/lib/multi-select.component.mjs +228 -20
- package/esm2022/lib/otp.component.mjs +6 -3
- package/esm2022/lib/pagination.component.mjs +19 -9
- package/esm2022/lib/progress.component.mjs +8 -5
- package/esm2022/lib/radio-group.component.mjs +51 -3
- package/esm2022/lib/radio-item.component.mjs +46 -8
- package/esm2022/lib/radio-service.mjs +60 -1
- package/esm2022/lib/range-calendar.component.mjs +317 -98
- package/esm2022/lib/resizable-panel.component.mjs +5 -4
- package/esm2022/lib/scroll-area.component.mjs +5 -5
- package/esm2022/lib/segment.component.mjs +73 -7
- package/esm2022/lib/select-item.component.mjs +20 -2
- package/esm2022/lib/select-separator.component.mjs +3 -3
- package/esm2022/lib/select.component.mjs +221 -14
- package/esm2022/lib/separator.component.mjs +12 -6
- package/esm2022/lib/sheet-ref.mjs +8 -1
- package/esm2022/lib/sheet-wrapper.component.mjs +27 -11
- package/esm2022/lib/sheet.component.mjs +57 -16
- package/esm2022/lib/sheet.service.mjs +5 -1
- package/esm2022/lib/sidebar.component.mjs +73 -15
- package/esm2022/lib/skeleton.component.mjs +19 -5
- package/esm2022/lib/switch.component.mjs +59 -53
- package/esm2022/lib/tabs.component.mjs +75 -13
- package/esm2022/lib/tag-input.component.mjs +6 -3
- package/esm2022/lib/textarea.component.mjs +9 -7
- package/esm2022/lib/theme.service.mjs +114 -138
- package/esm2022/lib/toaster.component.mjs +19 -9
- package/esm2022/lib/toggle-group.component.mjs +76 -4
- package/esm2022/lib/tolle-config.mjs +1 -1
- package/esm2022/lib/tooltip.directive.mjs +41 -17
- package/esm2022/lib/utils/color.mjs +324 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/tolle-ui.mjs +2715 -682
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog.component.d.ts +10 -1
- package/lib/avatar.component.d.ts +16 -3
- package/lib/badge.component.d.ts +17 -5
- package/lib/button.component.d.ts +8 -1
- package/lib/calendar.component.d.ts +21 -3
- package/lib/card.component.d.ts +6 -0
- package/lib/carousel/carousel.component.d.ts +1 -0
- package/lib/checkbox.component.d.ts +12 -4
- package/lib/country-selector.component.d.ts +11 -2
- package/lib/date-picker.component.d.ts +2 -1
- package/lib/date-range-picker.component.d.ts +5 -2
- package/lib/dropdown-item.component.d.ts +4 -2
- package/lib/dropdown-trigger.directive.d.ts +1 -1
- package/lib/modal.component.d.ts +6 -0
- package/lib/multi-select.component.d.ts +20 -0
- package/lib/otp.component.d.ts +1 -0
- package/lib/progress.component.d.ts +1 -0
- package/lib/radio-group.component.d.ts +8 -0
- package/lib/radio-item.component.d.ts +10 -4
- package/lib/radio-service.d.ts +29 -0
- package/lib/range-calendar.component.d.ts +33 -4
- package/lib/segment.component.d.ts +13 -0
- package/lib/select-item.component.d.ts +4 -1
- package/lib/select.component.d.ts +20 -0
- package/lib/separator.component.d.ts +2 -0
- package/lib/sheet-wrapper.component.d.ts +4 -0
- package/lib/sheet.component.d.ts +10 -1
- package/lib/sidebar.component.d.ts +2 -0
- package/lib/skeleton.component.d.ts +9 -3
- package/lib/switch.component.d.ts +13 -20
- package/lib/tabs.component.d.ts +11 -1
- package/lib/theme.service.d.ts +21 -6
- package/lib/toaster.component.d.ts +2 -2
- package/lib/toggle-group.component.d.ts +20 -2
- package/lib/tolle-config.d.ts +8 -0
- package/lib/tooltip.directive.d.ts +3 -0
- package/lib/utils/color.d.ts +87 -0
- package/package.json +4 -1
- package/preset.js +28 -0
- package/public-api.d.ts +1 -0
- package/registry/docs-content.json +4214 -0
- package/registry/llms-full.txt +1599 -0
- package/registry/llms.txt +83 -0
- package/registry/manifest.json +4925 -0
- package/registry/r/accordion-item.json +21 -0
- package/registry/r/accordion.json +23 -0
- package/registry/r/alert-dialog-dynamic.json +31 -0
- package/registry/r/alert-dialog.json +26 -0
- package/registry/r/alert.json +23 -0
- package/registry/r/aspect-ratio.json +21 -0
- package/registry/r/avatar-fallback.json +16 -0
- package/registry/r/avatar.json +23 -0
- package/registry/r/badge.json +23 -0
- package/registry/r/breadcrumb-item.json +16 -0
- package/registry/r/breadcrumb-link.json +16 -0
- package/registry/r/breadcrumb-separator.json +16 -0
- package/registry/r/breadcrumb.json +21 -0
- package/registry/r/button-group.json +21 -0
- package/registry/r/button.json +23 -0
- package/registry/r/calendar.json +23 -0
- package/registry/r/card.json +21 -0
- package/registry/r/carousel.json +18 -0
- package/registry/r/checkbox.json +23 -0
- package/registry/r/collapsible.json +21 -0
- package/registry/r/context-menu-trigger.json +23 -0
- package/registry/r/context-menu.json +28 -0
- package/registry/r/country-selector.json +31 -0
- package/registry/r/data-table.json +38 -0
- package/registry/r/date-picker.json +27 -0
- package/registry/r/date-range-picker.json +32 -0
- package/registry/r/dropdown-item.json +21 -0
- package/registry/r/dropdown-label.json +16 -0
- package/registry/r/dropdown-menu.json +16 -0
- package/registry/r/dropdown-separator.json +16 -0
- package/registry/r/dropdown-trigger.json +20 -0
- package/registry/r/empty-state.json +23 -0
- package/registry/r/hover-card.json +23 -0
- package/registry/r/input.json +21 -0
- package/registry/r/label.json +21 -0
- package/registry/r/masked-input.json +21 -0
- package/registry/r/modal.json +36 -0
- package/registry/r/multi-select.json +33 -0
- package/registry/r/otp-group.json +16 -0
- package/registry/r/otp-slot.json +21 -0
- package/registry/r/otp.json +21 -0
- package/registry/r/pagination.json +32 -0
- package/registry/r/phone-number-input.json +34 -0
- package/registry/r/popover-content.json +21 -0
- package/registry/r/popover.json +18 -0
- package/registry/r/progress.json +21 -0
- package/registry/r/radio-group.json +26 -0
- package/registry/r/radio-item.json +26 -0
- package/registry/r/range-calendar.json +28 -0
- package/registry/r/resizable-panel-item.json +23 -0
- package/registry/r/resizable-panel.json +23 -0
- package/registry/r/resizable.json +21 -0
- package/registry/r/scroll-area.json +21 -0
- package/registry/r/segment.json +21 -0
- package/registry/r/select-group.json +21 -0
- package/registry/r/select-item.json +26 -0
- package/registry/r/select-separator.json +21 -0
- package/registry/r/select.json +31 -0
- package/registry/r/separator.json +21 -0
- package/registry/r/sheet-wrapper.json +31 -0
- package/registry/r/sheet.json +21 -0
- package/registry/r/sidebar.json +21 -0
- package/registry/r/skeleton.json +23 -0
- package/registry/r/slider.json +21 -0
- package/registry/r/switch.json +23 -0
- package/registry/r/tabs.json +23 -0
- package/registry/r/tag-input.json +25 -0
- package/registry/r/textarea.json +21 -0
- package/registry/r/toaster.json +26 -0
- package/registry/r/toggle-group.json +25 -0
- package/registry/r/toggle.json +23 -0
- package/registry/r/tolle-cell.json +16 -0
- package/registry/r/tooltip.json +23 -0
- package/registry/registry.json +1540 -0
- package/theme.css +60 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input, ContentChildren, ViewChild } from '@angular/core';
|
|
1
|
+
import { Component, Input, ContentChildren, ElementRef, ViewChild } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
4
|
import { computePosition, flip, shift, offset, autoUpdate, size } from '@floating-ui/dom';
|
|
@@ -23,6 +23,7 @@ export class MultiSelectComponent {
|
|
|
23
23
|
error = false; // Added to support error styling
|
|
24
24
|
trigger;
|
|
25
25
|
popover;
|
|
26
|
+
searchInput;
|
|
26
27
|
items;
|
|
27
28
|
value = [];
|
|
28
29
|
selectedItems = [];
|
|
@@ -30,6 +31,11 @@ export class MultiSelectComponent {
|
|
|
30
31
|
searchQuery = '';
|
|
31
32
|
noResults = false;
|
|
32
33
|
cleanup;
|
|
34
|
+
// Keyboard navigation (active-descendant) state
|
|
35
|
+
activeIndex = -1;
|
|
36
|
+
typeaheadBuffer = '';
|
|
37
|
+
typeaheadTime = 0;
|
|
38
|
+
pendingTypeaheadChar = '';
|
|
33
39
|
constructor(selectService) {
|
|
34
40
|
this.selectService = selectService;
|
|
35
41
|
this.selectService.selectedValue$.subscribe(val => {
|
|
@@ -48,12 +54,12 @@ export class MultiSelectComponent {
|
|
|
48
54
|
this.size === 'xs' && 'px-2 py-1', this.size === 'sm' && 'px-3 py-1.5', this.size === 'default' && 'px-3 py-2', this.size === 'lg' && 'px-4 py-2',
|
|
49
55
|
// Focus state - ZARDUI STYLE (Soft ring, no offset)
|
|
50
56
|
!this.disabled && [
|
|
51
|
-
'focus:outline-none',
|
|
52
|
-
'focus:ring-4',
|
|
53
|
-
'focus:ring-ring/30',
|
|
54
|
-
'focus:ring-offset-0',
|
|
55
|
-
'focus:shadow-none',
|
|
56
|
-
'focus:border-primary/80' // Darkens border on focus
|
|
57
|
+
'focus-visible:outline-none',
|
|
58
|
+
'focus-visible:ring-4',
|
|
59
|
+
'focus-visible:ring-ring/30',
|
|
60
|
+
'focus-visible:ring-offset-0',
|
|
61
|
+
'focus-visible:shadow-none',
|
|
62
|
+
'focus-visible:border-primary/80' // Darkens border on focus
|
|
57
63
|
],
|
|
58
64
|
// Hover state
|
|
59
65
|
!this.disabled && 'hover:border-accent',
|
|
@@ -61,8 +67,8 @@ export class MultiSelectComponent {
|
|
|
61
67
|
this.error && [
|
|
62
68
|
'border-destructive',
|
|
63
69
|
!this.disabled && [
|
|
64
|
-
'focus:border-destructive/80',
|
|
65
|
-
'focus:ring-destructive/30'
|
|
70
|
+
'focus-visible:border-destructive/80',
|
|
71
|
+
'focus-visible:ring-destructive/30'
|
|
66
72
|
]
|
|
67
73
|
],
|
|
68
74
|
// Disabled state
|
|
@@ -104,12 +110,14 @@ export class MultiSelectComponent {
|
|
|
104
110
|
setTimeout(() => {
|
|
105
111
|
this.updatePosition();
|
|
106
112
|
document.addEventListener('mousedown', this._outsideClickHandler);
|
|
113
|
+
this.initActiveAfterOpen();
|
|
107
114
|
});
|
|
108
115
|
}
|
|
109
116
|
close() {
|
|
110
117
|
this.isOpen = false;
|
|
111
118
|
this.searchQuery = '';
|
|
112
119
|
this.onSearchChange('');
|
|
120
|
+
this.resetActive();
|
|
113
121
|
if (this.cleanup)
|
|
114
122
|
this.cleanup();
|
|
115
123
|
document.removeEventListener('mousedown', this._outsideClickHandler);
|
|
@@ -211,6 +219,189 @@ export class MultiSelectComponent {
|
|
|
211
219
|
visibleCount++;
|
|
212
220
|
});
|
|
213
221
|
this.noResults = visibleCount === 0 && filter !== '';
|
|
222
|
+
// Re-anchor the active option to the first visible match while open.
|
|
223
|
+
if (this.isOpen)
|
|
224
|
+
this.setActive(0);
|
|
225
|
+
}
|
|
226
|
+
// ---- Keyboard navigation (WAI-ARIA listbox pattern) ----
|
|
227
|
+
get navigableItems() {
|
|
228
|
+
return this.items ? this.items.filter(i => !i.hidden && !i.disabled) : [];
|
|
229
|
+
}
|
|
230
|
+
get activeDescendantId() {
|
|
231
|
+
const list = this.navigableItems;
|
|
232
|
+
return this.activeIndex >= 0 && this.activeIndex < list.length
|
|
233
|
+
? list[this.activeIndex].id
|
|
234
|
+
: null;
|
|
235
|
+
}
|
|
236
|
+
updateActiveStates() {
|
|
237
|
+
const list = this.navigableItems;
|
|
238
|
+
const activeItem = this.activeIndex >= 0 ? list[this.activeIndex] ?? null : null;
|
|
239
|
+
this.items?.forEach(i => (i.active = i === activeItem));
|
|
240
|
+
this.syncActiveDescendant();
|
|
241
|
+
}
|
|
242
|
+
syncActiveDescendant() {
|
|
243
|
+
const input = this.searchInput?.nativeElement?.querySelector('input');
|
|
244
|
+
if (!input)
|
|
245
|
+
return;
|
|
246
|
+
const id = this.activeDescendantId;
|
|
247
|
+
if (id)
|
|
248
|
+
input.setAttribute('aria-activedescendant', id);
|
|
249
|
+
else
|
|
250
|
+
input.removeAttribute('aria-activedescendant');
|
|
251
|
+
}
|
|
252
|
+
setActive(index) {
|
|
253
|
+
const list = this.navigableItems;
|
|
254
|
+
if (!list.length) {
|
|
255
|
+
this.activeIndex = -1;
|
|
256
|
+
this.updateActiveStates();
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
this.activeIndex = Math.max(0, Math.min(index, list.length - 1));
|
|
260
|
+
this.updateActiveStates();
|
|
261
|
+
list[this.activeIndex]?.scrollIntoActiveView();
|
|
262
|
+
}
|
|
263
|
+
setActiveItem(item) {
|
|
264
|
+
const idx = this.navigableItems.indexOf(item);
|
|
265
|
+
if (idx >= 0)
|
|
266
|
+
this.setActive(idx);
|
|
267
|
+
}
|
|
268
|
+
moveActive(delta) {
|
|
269
|
+
const list = this.navigableItems;
|
|
270
|
+
if (!list.length)
|
|
271
|
+
return;
|
|
272
|
+
const next = this.activeIndex < 0 ? (delta > 0 ? 0 : list.length - 1) : this.activeIndex + delta;
|
|
273
|
+
this.setActive(next); // setActive clamps (no wrap, matching shadcn)
|
|
274
|
+
}
|
|
275
|
+
setActiveToSelectedOrFirst() {
|
|
276
|
+
const list = this.navigableItems;
|
|
277
|
+
if (!list.length) {
|
|
278
|
+
this.activeIndex = -1;
|
|
279
|
+
this.updateActiveStates();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const selIdx = list.findIndex(i => this.value.includes(i.value));
|
|
283
|
+
this.setActive(selIdx >= 0 ? selIdx : 0);
|
|
284
|
+
}
|
|
285
|
+
initActiveAfterOpen() {
|
|
286
|
+
if (this.pendingTypeaheadChar) {
|
|
287
|
+
const c = this.pendingTypeaheadChar;
|
|
288
|
+
this.pendingTypeaheadChar = '';
|
|
289
|
+
this.setActiveToSelectedOrFirst();
|
|
290
|
+
this.typeahead(c);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
this.setActiveToSelectedOrFirst();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
resetActive() {
|
|
297
|
+
this.activeIndex = -1;
|
|
298
|
+
this.typeaheadBuffer = '';
|
|
299
|
+
this.pendingTypeaheadChar = '';
|
|
300
|
+
this.items?.forEach(i => (i.active = false));
|
|
301
|
+
}
|
|
302
|
+
isTypeaheadChar(event) {
|
|
303
|
+
return event.key.length === 1 && event.key !== ' ' && !event.ctrlKey && !event.metaKey && !event.altKey;
|
|
304
|
+
}
|
|
305
|
+
typeahead(char) {
|
|
306
|
+
const now = Date.now();
|
|
307
|
+
// Reset the buffer based on elapsed time (correctness is not timer-driven).
|
|
308
|
+
if (now - this.typeaheadTime > 500)
|
|
309
|
+
this.typeaheadBuffer = '';
|
|
310
|
+
this.typeaheadTime = now;
|
|
311
|
+
this.typeaheadBuffer += char.toLowerCase();
|
|
312
|
+
const match = this.navigableItems.find(i => i.getLabel().toLowerCase().startsWith(this.typeaheadBuffer));
|
|
313
|
+
if (match)
|
|
314
|
+
this.setActiveItem(match);
|
|
315
|
+
}
|
|
316
|
+
selectActive() {
|
|
317
|
+
const item = this.navigableItems[this.activeIndex];
|
|
318
|
+
if (!item)
|
|
319
|
+
return;
|
|
320
|
+
// Multi-select: mirror SelectItemComponent.onClick — toggle and stay open.
|
|
321
|
+
item.selected = !item.selected;
|
|
322
|
+
this.selectService.registerClick(item.value, item.getLabel());
|
|
323
|
+
// syncItems() ran synchronously via the service subscription; keep the
|
|
324
|
+
// same option highlighted (its index may have shifted).
|
|
325
|
+
this.setActiveItem(item);
|
|
326
|
+
}
|
|
327
|
+
onTriggerKeyDown(event) {
|
|
328
|
+
if (this.disabled)
|
|
329
|
+
return;
|
|
330
|
+
const key = event.key;
|
|
331
|
+
if (!this.isOpen) {
|
|
332
|
+
if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ' || key === 'Home' || key === 'End') {
|
|
333
|
+
event.preventDefault();
|
|
334
|
+
this.open();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (this.isTypeaheadChar(event)) {
|
|
338
|
+
event.preventDefault();
|
|
339
|
+
this.pendingTypeaheadChar = key;
|
|
340
|
+
this.open();
|
|
341
|
+
}
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
switch (key) {
|
|
345
|
+
case 'ArrowDown':
|
|
346
|
+
event.preventDefault();
|
|
347
|
+
this.moveActive(1);
|
|
348
|
+
break;
|
|
349
|
+
case 'ArrowUp':
|
|
350
|
+
event.preventDefault();
|
|
351
|
+
this.moveActive(-1);
|
|
352
|
+
break;
|
|
353
|
+
case 'Home':
|
|
354
|
+
event.preventDefault();
|
|
355
|
+
this.setActive(0);
|
|
356
|
+
break;
|
|
357
|
+
case 'End':
|
|
358
|
+
event.preventDefault();
|
|
359
|
+
this.setActive(this.navigableItems.length - 1);
|
|
360
|
+
break;
|
|
361
|
+
case 'Enter':
|
|
362
|
+
case ' ':
|
|
363
|
+
event.preventDefault();
|
|
364
|
+
this.selectActive();
|
|
365
|
+
break;
|
|
366
|
+
case 'Escape':
|
|
367
|
+
event.preventDefault();
|
|
368
|
+
this.close();
|
|
369
|
+
this.trigger.nativeElement.focus();
|
|
370
|
+
break;
|
|
371
|
+
case 'Tab':
|
|
372
|
+
this.close();
|
|
373
|
+
break;
|
|
374
|
+
default:
|
|
375
|
+
if (this.isTypeaheadChar(event)) {
|
|
376
|
+
event.preventDefault();
|
|
377
|
+
this.typeahead(key);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Keydown while the (optional) search input is focused. Arrows/Enter/Escape
|
|
382
|
+
// drive the list; other keys fall through so the user can type to filter.
|
|
383
|
+
onSearchKeyDown(event) {
|
|
384
|
+
if (!this.isOpen)
|
|
385
|
+
return;
|
|
386
|
+
switch (event.key) {
|
|
387
|
+
case 'ArrowDown':
|
|
388
|
+
event.preventDefault();
|
|
389
|
+
this.moveActive(1);
|
|
390
|
+
break;
|
|
391
|
+
case 'ArrowUp':
|
|
392
|
+
event.preventDefault();
|
|
393
|
+
this.moveActive(-1);
|
|
394
|
+
break;
|
|
395
|
+
case 'Enter':
|
|
396
|
+
event.preventDefault();
|
|
397
|
+
this.selectActive();
|
|
398
|
+
break;
|
|
399
|
+
case 'Escape':
|
|
400
|
+
event.preventDefault();
|
|
401
|
+
this.close();
|
|
402
|
+
this.trigger.nativeElement.focus();
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
214
405
|
}
|
|
215
406
|
ngOnDestroy() {
|
|
216
407
|
document.removeEventListener('mousedown', this._outsideClickHandler);
|
|
@@ -232,12 +423,17 @@ export class MultiSelectComponent {
|
|
|
232
423
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MultiSelectComponent, isStandalone: true, selector: "tolle-multi-select", inputs: { placeholder: "placeholder", size: "size", searchable: "searchable", disabled: "disabled", class: "class", maxSelections: "maxSelections", maxDisplayItems: "maxDisplayItems", error: "error" }, providers: [
|
|
233
424
|
SelectService,
|
|
234
425
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MultiSelectComponent, multi: true }
|
|
235
|
-
], queries: [{ propertyName: "items", predicate: SelectItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: `
|
|
236
|
-
<div
|
|
426
|
+
], queries: [{ propertyName: "items", predicate: SelectItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
427
|
+
<div class="relative w-full" #container>
|
|
237
428
|
<button
|
|
238
429
|
#trigger
|
|
239
430
|
type="button"
|
|
431
|
+
role="combobox"
|
|
432
|
+
aria-haspopup="listbox"
|
|
433
|
+
[attr.aria-expanded]="isOpen"
|
|
434
|
+
[attr.aria-activedescendant]="isOpen ? activeDescendantId : null"
|
|
240
435
|
(click)="toggle()"
|
|
436
|
+
(keydown)="onTriggerKeyDown($event)"
|
|
241
437
|
[disabled]="disabled"
|
|
242
438
|
[class]="computedTriggerClass">
|
|
243
439
|
|
|
@@ -259,7 +455,9 @@ export class MultiSelectComponent {
|
|
|
259
455
|
</button>
|
|
260
456
|
|
|
261
457
|
<div #popover *ngIf="isOpen"
|
|
262
|
-
|
|
458
|
+
role="listbox"
|
|
459
|
+
aria-multiselectable="true"
|
|
460
|
+
class="fixed bg-popover text-popover-foreground z-[999] rounded-md border border-border shadow-md overflow-hidden"
|
|
263
461
|
style="visibility: hidden; top: 0; left: 0;">
|
|
264
462
|
|
|
265
463
|
<div class="p-2 border-b border-border space-y-2 bg-popover">
|
|
@@ -273,14 +471,14 @@ export class MultiSelectComponent {
|
|
|
273
471
|
</span>
|
|
274
472
|
</div>
|
|
275
473
|
|
|
276
|
-
<tolle-input *ngIf="searchable" size="xs" placeholder="Search..." [(ngModel)]="searchQuery" (ngModelChange)="onSearchChange($event)">
|
|
474
|
+
<tolle-input *ngIf="searchable" #searchInput size="xs" placeholder="Search..." [(ngModel)]="searchQuery" (ngModelChange)="onSearchChange($event)" (keydown)="onSearchKeyDown($event)">
|
|
277
475
|
<i prefix class="ri-search-line"></i>
|
|
278
476
|
</tolle-input>
|
|
279
477
|
|
|
280
478
|
<div class="flex items-center justify-between px-1">
|
|
281
479
|
<button type="button"
|
|
282
480
|
(click)="selectAll()"
|
|
283
|
-
[disabled]="maxSelections && selectableItems.length > maxSelections"
|
|
481
|
+
[disabled]="!!(maxSelections && selectableItems.length > maxSelections)"
|
|
284
482
|
[class]="cn(
|
|
285
483
|
'text-[10px] font-bold uppercase transition-colors',
|
|
286
484
|
maxSelections && selectableItems.length > maxSelections
|
|
@@ -310,7 +508,7 @@ export class MultiSelectComponent {
|
|
|
310
508
|
</div>
|
|
311
509
|
</div>
|
|
312
510
|
</div>
|
|
313
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: BadgeComponent, selector: "tolle-badge", inputs: ["variant", "size", "removable", "class"], outputs: ["onRemove"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }] });
|
|
511
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: BadgeComponent, selector: "tolle-badge", inputs: ["variant", "size", "removable", "removeLabel", "class"], outputs: ["onRemove"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }] });
|
|
314
512
|
}
|
|
315
513
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MultiSelectComponent, decorators: [{
|
|
316
514
|
type: Component,
|
|
@@ -323,11 +521,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
323
521
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MultiSelectComponent, multi: true }
|
|
324
522
|
],
|
|
325
523
|
template: `
|
|
326
|
-
<div
|
|
524
|
+
<div class="relative w-full" #container>
|
|
327
525
|
<button
|
|
328
526
|
#trigger
|
|
329
527
|
type="button"
|
|
528
|
+
role="combobox"
|
|
529
|
+
aria-haspopup="listbox"
|
|
530
|
+
[attr.aria-expanded]="isOpen"
|
|
531
|
+
[attr.aria-activedescendant]="isOpen ? activeDescendantId : null"
|
|
330
532
|
(click)="toggle()"
|
|
533
|
+
(keydown)="onTriggerKeyDown($event)"
|
|
331
534
|
[disabled]="disabled"
|
|
332
535
|
[class]="computedTriggerClass">
|
|
333
536
|
|
|
@@ -349,7 +552,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
349
552
|
</button>
|
|
350
553
|
|
|
351
554
|
<div #popover *ngIf="isOpen"
|
|
352
|
-
|
|
555
|
+
role="listbox"
|
|
556
|
+
aria-multiselectable="true"
|
|
557
|
+
class="fixed bg-popover text-popover-foreground z-[999] rounded-md border border-border shadow-md overflow-hidden"
|
|
353
558
|
style="visibility: hidden; top: 0; left: 0;">
|
|
354
559
|
|
|
355
560
|
<div class="p-2 border-b border-border space-y-2 bg-popover">
|
|
@@ -363,14 +568,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
363
568
|
</span>
|
|
364
569
|
</div>
|
|
365
570
|
|
|
366
|
-
<tolle-input *ngIf="searchable" size="xs" placeholder="Search..." [(ngModel)]="searchQuery" (ngModelChange)="onSearchChange($event)">
|
|
571
|
+
<tolle-input *ngIf="searchable" #searchInput size="xs" placeholder="Search..." [(ngModel)]="searchQuery" (ngModelChange)="onSearchChange($event)" (keydown)="onSearchKeyDown($event)">
|
|
367
572
|
<i prefix class="ri-search-line"></i>
|
|
368
573
|
</tolle-input>
|
|
369
574
|
|
|
370
575
|
<div class="flex items-center justify-between px-1">
|
|
371
576
|
<button type="button"
|
|
372
577
|
(click)="selectAll()"
|
|
373
|
-
[disabled]="maxSelections && selectableItems.length > maxSelections"
|
|
578
|
+
[disabled]="!!(maxSelections && selectableItems.length > maxSelections)"
|
|
374
579
|
[class]="cn(
|
|
375
580
|
'text-[10px] font-bold uppercase transition-colors',
|
|
376
581
|
maxSelections && selectableItems.length > maxSelections
|
|
@@ -424,8 +629,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
424
629
|
}], popover: [{
|
|
425
630
|
type: ViewChild,
|
|
426
631
|
args: ['popover']
|
|
632
|
+
}], searchInput: [{
|
|
633
|
+
type: ViewChild,
|
|
634
|
+
args: ['searchInput', { read: ElementRef }]
|
|
427
635
|
}], items: [{
|
|
428
636
|
type: ContentChildren,
|
|
429
637
|
args: [SelectItemComponent, { descendants: true }]
|
|
430
638
|
}] } });
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbXVsdGktc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQTJDLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQTBGbkQsTUFBTSxPQUFPLG9CQUFvQjtJQXFCWDtJQXBCWCxXQUFXLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsSUFBSSxHQUFtQyxTQUFTLENBQUM7SUFDakQsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxhQUFhLENBQVU7SUFDdkIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsaUNBQWlDO0lBRW5DLE9BQU8sQ0FB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QUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDO29CQUNwRSxTQUFTLEVBQUU7d0JBQ1QsYUFBYTt3QkFDYixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQy9FO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEVUO2lCQUNGO2tGQUVVLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUNFLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDeUMsS0FBSztzQkFBakUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQWZ0ZXJDb250ZW50SW5pdCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29tcHV0ZVBvc2l0aW9uLCBmbGlwLCBzaGlmdCwgb2Zmc2V0LCBhdXRvVXBkYXRlLCBzaXplIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0U2VydmljZSB9IGZyb20gJy4vc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFkZ2VDb21wb25lbnQgfSBmcm9tICcuL2JhZGdlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLW11bHRpLXNlbGVjdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBCYWRnZUNvbXBvbmVudCwgSW5wdXRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtcbiAgICBTZWxlY3RTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBNdWx0aVNlbGVjdENvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCdyZWxhdGl2ZSB3LWZ1bGwnLCAnc2l6ZS0nICsgc2l6ZSlcIiAjY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAjdHJpZ2dlclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkVHJpZ2dlckNsYXNzXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0xIGl0ZW1zLWNlbnRlciBtYXgtdy1bOTUlXVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWx1ZS5sZW5ndGg7IGVsc2UgcGxhY2Vob2xkZXJUcGxcIj5cbiAgICAgICAgICAgIDx0b2xsZS1iYWRnZSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5SXRlbXNcIiBzaXplPVwieHNcIiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKG9uUmVtb3ZlKT1cInJlbW92ZVZhbHVlKCRldmVudCwgaXRlbS52YWx1ZSlcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC90b2xsZS1iYWRnZT5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXhjZWVkc0Rpc3BsYXlMaW1pdFwiIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMVwiPlxuICAgICAgICAgICAgICAre3sgdmFsdWUubGVuZ3RoIC0gbWF4RGlzcGxheUl0ZW1zIH19IG1vcmVcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWF4U2VsZWN0aW9ucyAmJiB2YWx1ZS5sZW5ndGggPj0gbWF4U2VsZWN0aW9uc1wiIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMVwiPlxuICAgICAgICAgICAgICAoTWF4IHJlYWNoZWQpXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlclRwbD48c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aSBbY2xhc3NdPVwiY24oJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsIGlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnKVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8ZGl2ICNwb3BvdmVyICpuZ0lmPVwiaXNPcGVuXCJcbiAgICAgICAgICAgY2xhc3M9XCJmaXhlZCBiZy1wb3BvdmVyIHotWzk5OV0gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBzaGFkb3ctbWQgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47IHRvcDogMDsgbGVmdDogMDtcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIGJvcmRlci1iIGJvcmRlci1ib3JkZXIgc3BhY2UteS0yIGJnLXBvcG92ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTEgdGV4dC14c1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAge3sgdmFsdWUubGVuZ3RoIH19IHNlbGVjdGVkXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWF4U2VsZWN0aW9uc1wiPi8ge3sgbWF4U2VsZWN0aW9ucyB9fSBtYXg8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1heFNlbGVjdGlvbnMgJiYgdmFsdWUubGVuZ3RoID49IG1heFNlbGVjdGlvbnNcIiBjbGFzcz1cInRleHQtZGVzdHJ1Y3RpdmUgdGV4dC14cyBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICBNYXhpbXVtIHJlYWNoZWRcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDx0b2xsZS1pbnB1dCAqbmdJZj1cInNlYXJjaGFibGVcIiBzaXplPVwieHNcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8aSBwcmVmaXggY2xhc3M9XCJyaS1zZWFyY2gtbGluZVwiPjwvaT5cbiAgICAgICAgICA8L3RvbGxlLWlucHV0PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC0xXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWF4U2VsZWN0aW9ucyAmJiBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID4gbWF4U2VsZWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAndGV4dC1bMTBweF0gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgbWF4U2VsZWN0aW9ucyAmJiBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID4gbWF4U2VsZWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQtcHJpbWFyeSBob3Zlcjp1bmRlcmxpbmUnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXJBbGwoKVwiIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1ib2xkIHVwcGVyY2FzZSB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMSBtYXgtaC02MCBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm5vUmVzdWx0c1wiIGNsYXNzPVwicHktNCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgTm8gcmVzdWx0cyBmb3VuZCBmb3IgXCJ7e3NlYXJjaFF1ZXJ5fX1cIlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXhTZWxlY3Rpb25zICYmIHZhbHVlLmxlbmd0aCA+PSBtYXhTZWxlY3Rpb25zXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwicC0yIHRleHQtY2VudGVyIGJvcmRlci10IGJvcmRlci1ib3JkZXIgYmctbXV0ZWQvMjBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LWRlc3RydWN0aXZlXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicmktYWxlcnQtbGluZSBtci0xXCI+PC9pPlxuICAgICAgICAgICAgICBNYXhpbXVtIHNlbGVjdGlvbiBsaW1pdCByZWFjaGVkICh7e21heFNlbGVjdGlvbnN9fSlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3Qgb3B0aW9ucy4uLic7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgc2VhcmNoYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBtYXhTZWxlY3Rpb25zPzogbnVtYmVyO1xuICBASW5wdXQoKSBtYXhEaXNwbGF5SXRlbXMgPSAzO1xuICBASW5wdXQoKSBlcnJvciA9IGZhbHNlOyAvLyBBZGRlZCB0byBzdXBwb3J0IGVycm9yIHN0eWxpbmdcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJykgdHJpZ2dlciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogRWxlbWVudFJlZjtcbiAgQENvbnRlbnRDaGlsZHJlbihTZWxlY3RJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGl0ZW1zITogUXVlcnlMaXN0PFNlbGVjdEl0ZW1Db21wb25lbnQ+O1xuXG4gIHZhbHVlOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZEl0ZW1zOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBhbnkgfVtdID0gW107XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBub1Jlc3VsdHMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhbnVwPzogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlbGVjdFNlcnZpY2U6IFNlbGVjdFNlcnZpY2UpIHtcbiAgICB0aGlzLnNlbGVjdFNlcnZpY2Uuc2VsZWN0ZWRWYWx1ZSQuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc09wZW4pIHRoaXMudG9nZ2xlVmFsdWUodmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5FVzogTWF0Y2hlcyBJbnB1dENvbXBvbmVudCBzdHlsZXMgZXhhY3RseVxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gQmFzZSBzdHlsZXNcbiAgICAgICdmbGV4IG1pbi1oLTEwIHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBoLWF1dG8nLFxuICAgICAgJ2JnLWJhY2tncm91bmQgdGV4dC1zbScsXG5cbiAgICAgIC8vIEJvcmRlciBhbmQgc2hhZG93XG4gICAgICAnYm9yZGVyLWlucHV0IHNoYWRvdy1zbScsXG5cbiAgICAgIC8vIFBhZGRpbmcgYmFzZWQgb24gc2l6ZSAoYWxpZ25lZCB3aXRoIElucHV0Q29tcG9uZW50IGxvZ2ljKVxuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmICdweC0yIHB5LTEnLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmICdweC0zIHB5LTEuNScsXG4gICAgICB0aGlzLnNpemUgPT09ICdkZWZhdWx0JyAmJiAncHgtMyBweS0yJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAncHgtNCBweS0yJyxcblxuICAgICAgLy8gRm9jdXMgc3RhdGUgLSBaQVJEVUkgU1RZTEUgKFNvZnQgcmluZywgbm8gb2Zmc2V0KVxuICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgW1xuICAgICAgICAnZm9jdXM6b3V0bGluZS1ub25lJyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctNCcsXG4gICAgICAgICdmb2N1czpyaW5nLXJpbmcvMzAnLFxuICAgICAgICAnZm9jdXM6cmluZy1vZmZzZXQtMCcsXG4gICAgICAgICdmb2N1czpzaGFkb3ctbm9uZScsXG4gICAgICAgICdmb2N1czpib3JkZXItcHJpbWFyeS84MCcgLy8gRGFya2VucyBib3JkZXIgb24gZm9jdXNcbiAgICAgIF0sXG5cbiAgICAgIC8vIEhvdmVyIHN0YXRlXG4gICAgICAhdGhpcy5kaXNhYmxlZCAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG5cbiAgICAgIC8vIEVycm9yIHN0YXRlXG4gICAgICB0aGlzLmVycm9yICYmIFtcbiAgICAgICAgJ2JvcmRlci1kZXN0cnVjdGl2ZScsXG4gICAgICAgICF0aGlzLmRpc2FibGVkICYmIFtcbiAgICAgICAgICAnZm9jdXM6Ym9yZGVyLWRlc3RydWN0aXZlLzgwJyxcbiAgICAgICAgICAnZm9jdXM6cmluZy1kZXN0cnVjdGl2ZS8zMCdcbiAgICAgICAgXVxuICAgICAgXSxcblxuICAgICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgW1xuICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnLFxuICAgICAgICAnYm9yZGVyLW9wYWNpdHktNTAnXG4gICAgICBdLFxuXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnN5bmNJdGVtcygpO1xuICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zeW5jSXRlbXMoKSk7XG4gIH1cblxuICBnZXQgZGlzcGxheUl0ZW1zKCk6IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IGFueSB9W10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMuc2xpY2UoMCwgdGhpcy5tYXhEaXNwbGF5SXRlbXMpO1xuICB9XG5cbiAgZ2V0IGV4Y2VlZHNEaXNwbGF5TGltaXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID4gdGhpcy5tYXhEaXNwbGF5SXRlbXM7XG4gIH1cblxuICBnZXQgc2VsZWN0YWJsZUl0ZW1zKCk6IFNlbGVjdEl0ZW1Db21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMgPyB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKSA6IFtdO1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZVNlbGVjdGlvbnMoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMubWF4U2VsZWN0aW9ucykgcmV0dXJuIEluZmluaXR5O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLm1heFNlbGVjdGlvbnMgLSB0aGlzLnZhbHVlLmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tIYW5kbGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmICF0aGlzLnBvcG92ZXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmlzT3BlbiA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgIHRoaXMub25TZWFyY2hDaGFuZ2UoJycpO1xuICAgIGlmICh0aGlzLmNsZWFudXApIHRoaXMuY2xlYW51cCgpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlciB8fCAhdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLmNsZWFudXAgPSBhdXRvVXBkYXRlKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LCB0aGlzLnBvcG92ZXIubmF0aXZlRWxlbWVudCwgKCkgPT4ge1xuICAgICAgY29tcHV0ZVBvc2l0aW9uKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LCB0aGlzLnBvcG92ZXIubmF0aXZlRWxlbWVudCwge1xuICAgICAgICBzdHJhdGVneTogJ2ZpeGVkJyxcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICAgIG9mZnNldCg0KSxcbiAgICAgICAgICBmbGlwKCksXG4gICAgICAgICAgc2hpZnQoeyBwYWRkaW5nOiA4IH0pLFxuICAgICAgICAgIHNpemUoe1xuICAgICAgICAgICAgYXBwbHkoeyByZWN0cywgZWxlbWVudHMsIGF2YWlsYWJsZUhlaWdodCB9KSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudHMuZmxvYXRpbmcuc3R5bGUsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogYCR7cmVjdHMucmVmZXJlbmNlLndpZHRofXB4YCxcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGAke2F2YWlsYWJsZUhlaWdodH1weGBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSkudGhlbigoeyB4LCB5LCBzdHJhdGVneSB9KSA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUsIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RyYXRlZ3ksXG4gICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgdG9wOiBgJHt5fXB4YCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVWYWx1ZSh2YWw6IGFueSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZS5pbmRleE9mKHZhbCk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0aW9ucyAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm1heFNlbGVjdGlvbnMpIHJldHVybjtcbiAgICAgIHRoaXMudmFsdWUucHVzaCh2YWwpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNJdGVtcygpO1xuICAgIHRoaXMub25DaGFuZ2UoWy4uLnRoaXMudmFsdWVdKTtcbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcbiAgICBsZXQgaXRlbXNUb1NlbGVjdDogYW55W10gPSBbXTtcbiAgICBpZiAodGhpcy5tYXhTZWxlY3Rpb25zKSB7XG4gICAgICBjb25zdCBhdmFpbGFibGVJdGVtcyA9IHRoaXMuaXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkICYmICF0aGlzLnZhbHVlLmluY2x1ZGVzKGl0ZW0udmFsdWUpKVxuICAgICAgICAuc2xpY2UoMCwgdGhpcy5hdmFpbGFibGVTZWxlY3Rpb25zKVxuICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgICBpdGVtc1RvU2VsZWN0ID0gWy4uLnRoaXMudmFsdWUsIC4uLmF2YWlsYWJsZUl0ZW1zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNUb1NlbGVjdCA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gaXRlbXNUb1NlbGVjdDtcbiAgICB0aGlzLnN5bmNJdGVtcygpO1xuICAgIHRoaXMub25DaGFuZ2UoWy4uLnRoaXMudmFsdWVdKTtcbiAgfVxuXG4gIGNsZWFyQWxsKCkge1xuICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICB0aGlzLnN5bmNJdGVtcygpO1xuICAgIHRoaXMub25DaGFuZ2UoW10pO1xuICB9XG5cbiAgcmVtb3ZlVmFsdWUoZXZlbnQ6IE1vdXNlRXZlbnQsIHZhbDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGVWYWx1ZSh2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jSXRlbXMoKSB7XG4gICAgaWYgKCF0aGlzLml0ZW1zKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUuaW5jbHVkZXMoaXRlbS52YWx1ZSk7XG4gICAgICBpZiAoaXRlbS5zZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh7IGxhYmVsOiBpdGVtLmdldExhYmVsKCksIHZhbHVlOiBpdGVtLnZhbHVlIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0aW9ucyAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm1heFNlbGVjdGlvbnMpIHtcbiAgICAgICAgaXRlbS5kaXNhYmxlZCA9ICF0aGlzLnZhbHVlLmluY2x1ZGVzKGl0ZW0udmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VhcmNoQ2hhbmdlKHE6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlciA9IChxIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGxldCB2aXNpYmxlQ291bnQgPSAwO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IGl0ZW0uZ2V0TGFiZWwoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICBpdGVtLmhpZGRlbiA9ICFpc1Zpc2libGU7XG4gICAgICBpZiAoaXNWaXNpYmxlKSB2aXNpYmxlQ291bnQrKztcbiAgICB9KTtcbiAgICB0aGlzLm5vUmVzdWx0cyA9IHZpc2libGVDb3VudCA9PT0gMCAmJiBmaWx0ZXIgIT09ICcnO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlcik7XG4gICAgaWYgKHRoaXMuY2xlYW51cCkgdGhpcy5jbGVhbnVwKCk7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcbiAgd3JpdGVWYWx1ZSh2OiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdO1xuICAgIHRoaXMuc3luY0l0ZW1zKCk7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG4iXX0=
|
|
639
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbXVsdGktc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQStCLFVBQVUsRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFpR25ELE1BQU0sT0FBTyxvQkFBb0I7SUE0Qlg7SUEzQlgsV0FBVyxHQUFHLG1CQUFtQixDQUFDO0lBQ2xDLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsYUFBYSxDQUFVO0lBQ3ZCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLGlDQUFpQztJQUVu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LEVBQUUsY0FBYyxDQUFDO29CQUNwRSxTQUFTLEVBQUU7d0JBQ1QsYUFBYTt3QkFDYixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQy9FO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFGVDtpQkFDRjtrRkFFVSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRWdCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQzRCLFdBQVc7c0JBQTFELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDZSxLQUFLO3NCQUFqRSxlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBBZnRlckNvbnRlbnRJbml0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21wdXRlUG9zaXRpb24sIGZsaXAsIHNoaWZ0LCBvZmZzZXQsIGF1dG9VcGRhdGUsIHNpemUgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IFNlbGVjdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHsgSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYWRnZUNvbXBvbmVudCB9IGZyb20gJy4vYmFkZ2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtbXVsdGktc2VsZWN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIEJhZGdlQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFNlbGVjdFNlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IE11bHRpU2VsZWN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiICNjb250YWluZXI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICN0cmlnZ2VyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImlzT3BlbiA/IGFjdGl2ZURlc2NlbmRhbnRJZCA6IG51bGxcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRUcmlnZ2VyQ2xhc3NcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgaXRlbXMtY2VudGVyIG1heC13LVs5NSVdXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlLmxlbmd0aDsgZWxzZSBwbGFjZWhvbGRlclRwbFwiPlxuICAgICAgICAgICAgPHRvbGxlLWJhZGdlICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRpc3BsYXlJdGVtc1wiIHNpemU9XCJ4c1wiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiAob25SZW1vdmUpPVwicmVtb3ZlVmFsdWUoJGV2ZW50LCBpdGVtLnZhbHVlKVwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICA8L3RvbGxlLWJhZGdlPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleGNlZWRzRGlzcGxheUxpbWl0XCIgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0xXCI+XG4gICAgICAgICAgICAgICt7eyB2YWx1ZS5sZW5ndGggLSBtYXhEaXNwbGF5SXRlbXMgfX0gbW9yZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhTZWxlY3Rpb25zICYmIHZhbHVlLmxlbmd0aCA+PSBtYXhTZWxlY3Rpb25zXCIgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0xXCI+XG4gICAgICAgICAgICAgIChNYXggcmVhY2hlZClcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVHBsPjxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpIFtjbGFzc109XCJjbigncmktYXJyb3ctZG93bi1zLWxpbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1sLTIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwJywgaXNPcGVuID8gJ3JvdGF0ZS0xODAnIDogJycpXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXYgI3BvcG92ZXIgKm5nSWY9XCJpc09wZW5cIlxuICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgIGNsYXNzPVwiZml4ZWQgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCB6LVs5OTldIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgc2hhZG93LW1kIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyB0b3A6IDA7IGxlZnQ6IDA7XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXItYiBib3JkZXItYm9yZGVyIHNwYWNlLXktMiBiZy1wb3BvdmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC0xIHRleHQteHNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgIHt7IHZhbHVlLmxlbmd0aCB9fSBzZWxlY3RlZFxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1heFNlbGVjdGlvbnNcIj4vIHt7IG1heFNlbGVjdGlvbnMgfX0gbWF4PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhTZWxlY3Rpb25zICYmIHZhbHVlLmxlbmd0aCA+PSBtYXhTZWxlY3Rpb25zXCIgY2xhc3M9XCJ0ZXh0LWRlc3RydWN0aXZlIHRleHQteHMgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgTWF4aW11bSByZWFjaGVkXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8dG9sbGUtaW5wdXQgKm5nSWY9XCJzZWFyY2hhYmxlXCIgI3NlYXJjaElucHV0IHNpemU9XCJ4c1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIiAoa2V5ZG93bik9XCJvblNlYXJjaEtleURvd24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGkgcHJlZml4IGNsYXNzPVwicmktc2VhcmNoLWxpbmVcIj48L2k+XG4gICAgICAgICAgPC90b2xsZS1pbnB1dD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhKG1heFNlbGVjdGlvbnMgJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IG1heFNlbGVjdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LVsxMHB4XSBmb250LWJvbGQgdXBwZXJjYXNlIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtYXhTZWxlY3Rpb25zICYmIHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPiBtYXhTZWxlY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1wcmltYXJ5IGhvdmVyOnVuZGVybGluZSdcbiAgICAgICAgICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgICBTZWxlY3QgQWxsXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGVhckFsbCgpXCIgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgQ2xlYXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0xIG1heC1oLTYwIG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9SZXN1bHRzXCIgY2xhc3M9XCJweS00IHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICBObyByZXN1bHRzIGZvdW5kIGZvciBcInt7c2VhcmNoUXVlcnl9fVwiXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm1heFNlbGVjdGlvbnMgJiYgdmFsdWUubGVuZ3RoID49IG1heFNlbGVjdGlvbnNcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgdGV4dC1jZW50ZXIgYm9yZGVyLXQgYm9yZGVyLWJvcmRlciBiZy1tdXRlZC8yMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZGVzdHJ1Y3RpdmVcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJyaS1hbGVydC1saW5lIG1yLTFcIj48L2k+XG4gICAgICAgICAgICAgIE1heGltdW0gc2VsZWN0aW9uIGxpbWl0IHJlYWNoZWQgKHt7bWF4U2VsZWN0aW9uc319KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBvcHRpb25zLi4uJztcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIEBJbnB1dCgpIG1heFNlbGVjdGlvbnM/OiBudW1iZXI7XG4gIEBJbnB1dCgpIG1heERpc3BsYXlJdGVtcyA9IDM7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7IC8vIEFkZGVkIHRvIHN1cHBvcnQgZXJyb3Igc3R5bGluZ1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXInKSB0cmlnZ2VyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIHBvcG92ZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZWFyY2hJbnB1dD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAQ29udGVudENoaWxkcmVuKFNlbGVjdEl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgaXRlbXMhOiBRdWVyeUxpc3Q8U2VsZWN0SXRlbUNvbXBvbmVudD47XG5cbiAgdmFsdWU6IGFueVtdID0gW107XG4gIHNlbGVjdGVkSXRlbXM6IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IGFueSB9W10gPSBbXTtcbiAgaXNPcGVuID0gZmFsc2U7XG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XG4gIG5vUmVzdWx0cyA9IGZhbHNlO1xuICBwcml2YXRlIGNsZWFudXA/OiAoKSA9PiB2b2lkO1xuXG4gIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gKGFjdGl2ZS1kZXNjZW5kYW50KSBzdGF0ZVxuICBhY3RpdmVJbmRleCA9IC0xO1xuICBwcml2YXRlIHR5cGVhaGVhZEJ1ZmZlciA9ICcnO1xuICBwcml2YXRlIHR5cGVhaGVhZFRpbWUgPSAwO1xuICBwcml2YXRlIHBlbmRpbmdUeXBlYWhlYWRDaGFyID0gJyc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWxlY3RTZXJ2aWNlOiBTZWxlY3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkVmFsdWUkLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaXNPcGVuKSB0aGlzLnRvZ2dsZVZhbHVlKHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBORVc6IE1hdGNoZXMgSW5wdXRDb21wb25lbnQgc3R5bGVzIGV4YWN0bHlcbiAgZ2V0IGNvbXB1dGVkVHJpZ2dlckNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugc3R5bGVzXG4gICAgICAnZmxleCBtaW4taC0xMCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLW1kIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaC1hdXRvJyxcbiAgICAgICdiZy1iYWNrZ3JvdW5kIHRleHQtc20nLFxuXG4gICAgICAvLyBCb3JkZXIgYW5kIHNoYWRvd1xuICAgICAgJ2JvcmRlci1pbnB1dCBzaGFkb3ctc20nLFxuXG4gICAgICAvLyBQYWRkaW5nIGJhc2VkIG9uIHNpemUgKGFsaWduZWQgd2l0aCBJbnB1dENvbXBvbmVudCBsb2dpYylcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAncHgtMiBweS0xJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiAncHgtMyBweS0xLjUnLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgJ3B4LTMgcHktMicsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgJ3B4LTQgcHktMicsXG5cbiAgICAgIC8vIEZvY3VzIHN0YXRlIC0gWkFSRFVJIFNUWUxFIChTb2Z0IHJpbmcsIG5vIG9mZnNldClcbiAgICAgICF0aGlzLmRpc2FibGVkICYmIFtcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy00JyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy1yaW5nLzMwJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMCcsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOnNoYWRvdy1ub25lJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6Ym9yZGVyLXByaW1hcnkvODAnIC8vIERhcmtlbnMgYm9yZGVyIG9uIGZvY3VzXG4gICAgICBdLFxuXG4gICAgICAvLyBIb3ZlciBzdGF0ZVxuICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgJ2hvdmVyOmJvcmRlci1hY2NlbnQnLFxuXG4gICAgICAvLyBFcnJvciBzdGF0ZVxuICAgICAgdGhpcy5lcnJvciAmJiBbXG4gICAgICAgICdib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICAhdGhpcy5kaXNhYmxlZCAmJiBbXG4gICAgICAgICAgJ2ZvY3VzLXZpc2libGU6Ym9yZGVyLWRlc3RydWN0aXZlLzgwJyxcbiAgICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzMwJ1xuICAgICAgICBdXG4gICAgICBdLFxuXG4gICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiBbXG4gICAgICAgICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCcsXG4gICAgICAgICdib3JkZXItb3BhY2l0eS01MCdcbiAgICAgIF0sXG5cbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuc3luY0l0ZW1zKCk7XG4gICAgdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN5bmNJdGVtcygpKTtcbiAgfVxuXG4gIGdldCBkaXNwbGF5SXRlbXMoKTogeyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55IH1bXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5zbGljZSgwLCB0aGlzLm1heERpc3BsYXlJdGVtcyk7XG4gIH1cblxuICBnZXQgZXhjZWVkc0Rpc3BsYXlMaW1pdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGggPiB0aGlzLm1heERpc3BsYXlJdGVtcztcbiAgfVxuXG4gIGdldCBzZWxlY3RhYmxlSXRlbXMoKTogU2VsZWN0SXRlbUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyA/IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpIDogW107XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlU2VsZWN0aW9ucygpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5tYXhTZWxlY3Rpb25zKSByZXR1cm4gSW5maW5pdHk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMubWF4U2VsZWN0aW9ucyAtIHRoaXMudmFsdWUubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgX291dHNpZGVDbGlja0hhbmRsZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgIXRoaXMucG9wb3Zlcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNPcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIpO1xuICAgICAgdGhpcy5pbml0QWN0aXZlQWZ0ZXJPcGVuKCk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB0aGlzLnJlc2V0QWN0aXZlKCk7XG4gICAgaWYgKHRoaXMuY2xlYW51cCkgdGhpcy5jbGVhbnVwKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlcik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgIGlmICghdGhpcy50cmlnZ2VyIHx8ICF0aGlzLnBvcG92ZXIpIHJldHVybjtcblxuICAgIHRoaXMuY2xlYW51cCA9IGF1dG9VcGRhdGUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQsIHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LCAoKSA9PiB7XG4gICAgICBjb21wdXRlUG9zaXRpb24odGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQsIHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICBtaWRkbGV3YXJlOiBbXG4gICAgICAgICAgb2Zmc2V0KDQpLFxuICAgICAgICAgIGZsaXAoKSxcbiAgICAgICAgICBzaGlmdCh7IHBhZGRpbmc6IDggfSksXG4gICAgICAgICAgc2l6ZSh7XG4gICAgICAgICAgICBhcHBseSh7IHJlY3RzLCBlbGVtZW50cywgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50cy5mbG9hdGluZy5zdHlsZSwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtyZWN0cy5yZWZlcmVuY2Uud2lkdGh9cHhgLFxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KS50aGVuKCh7IHgsIHksIHN0cmF0ZWd5IH0pID0+IHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBvcG92ZXIubmF0aXZlRWxlbWVudC5zdHlsZSwge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdHJhdGVneSxcbiAgICAgICAgICBsZWZ0OiBgJHt4fXB4YCxcbiAgICAgICAgICB0b3A6IGAke3l9cHhgLFxuICAgICAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVZhbHVlKHZhbDogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlLmluZGV4T2YodmFsKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3Rpb25zICYmIHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMubWF4U2VsZWN0aW9ucykgcmV0dXJuO1xuICAgICAgdGhpcy52YWx1ZS5wdXNoKHZhbCk7XG4gICAgfVxuICAgIHRoaXMuc3luY0l0ZW1zKCk7XG4gICAgdGhpcy5vbkNoYW5nZShbLi4udGhpcy52YWx1ZV0pO1xuICB9XG5cbiAgc2VsZWN0QWxsKCkge1xuICAgIGlmICghdGhpcy5pdGVtcykgcmV0dXJuO1xuICAgIGxldCBpdGVtc1RvU2VsZWN0OiBhbnlbXSA9IFtdO1xuICAgIGlmICh0aGlzLm1heFNlbGVjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUl0ZW1zID0gdGhpcy5pdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQgJiYgIXRoaXMudmFsdWUuaW5jbHVkZXMoaXRlbS52YWx1ZSkpXG4gICAgICAgIC5zbGljZSgwLCB0aGlzLmF2YWlsYWJsZVNlbGVjdGlvbnMpXG4gICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgIGl0ZW1zVG9TZWxlY3QgPSBbLi4udGhpcy52YWx1ZSwgLi4uYXZhaWxhYmxlSXRlbXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc1RvU2VsZWN0ID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBpdGVtc1RvU2VsZWN0O1xuICAgIHRoaXMuc3luY0l0ZW1zKCk7XG4gICAgdGhpcy5vbkNoYW5nZShbLi4udGhpcy52YWx1ZV0pO1xuICB9XG5cbiAgY2xlYXJBbGwoKSB7XG4gICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIHRoaXMuc3luY0l0ZW1zKCk7XG4gICAgdGhpcy5vbkNoYW5nZShbXSk7XG4gIH1cblxuICByZW1vdmVWYWx1ZShldmVudDogTW91c2VFdmVudCwgdmFsOiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZVZhbHVlKHZhbCk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNJdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gdGhpcy52YWx1ZS5pbmNsdWRlcyhpdGVtLnZhbHVlKTtcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHsgbGFiZWw6IGl0ZW0uZ2V0TGFiZWwoKSwgdmFsdWU6IGl0ZW0udmFsdWUgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3Rpb25zICYmIHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMubWF4U2VsZWN0aW9ucykge1xuICAgICAgICBpdGVtLmRpc2FibGVkID0gIXRoaXMudmFsdWUuaW5jbHVkZXMoaXRlbS52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgaXRlbS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hDaGFuZ2UocTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyID0gKHEgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IHZpc2libGVDb3VudCA9IDA7XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gaXRlbS5nZXRMYWJlbCgpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgIGl0ZW0uaGlkZGVuID0gIWlzVmlzaWJsZTtcbiAgICAgIGlmIChpc1Zpc2libGUpIHZpc2libGVDb3VudCsrO1xuICAgIH0pO1xuICAgIHRoaXMubm9SZXN1bHRzID0gdmlzaWJsZUNvdW50ID09PSAwICYmIGZpbHRlciAhPT0gJyc7XG5cbiAgICAvLyBSZS1hbmNob3IgdGhlIGFjdGl2ZSBvcHRpb24gdG8gdGhlIGZpcnN0IHZpc2libGUgbWF0Y2ggd2hpbGUgb3Blbi5cbiAgICBpZiAodGhpcy5pc09wZW4pIHRoaXMuc2V0QWN0aXZlKDApO1xuICB9XG5cbiAgLy8gLS0tLSBLZXlib2FyZCBuYXZpZ2F0aW9uIChXQUktQVJJQSBsaXN0Ym94IHBhdHRlcm4pIC0tLS1cblxuICBwcml2YXRlIGdldCBuYXZpZ2FibGVJdGVtcygpOiBTZWxlY3RJdGVtQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zID8gdGhpcy5pdGVtcy5maWx0ZXIoaSA9PiAhaS5oaWRkZW4gJiYgIWkuZGlzYWJsZWQpIDogW107XG4gIH1cblxuICBnZXQgYWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUluZGV4ID49IDAgJiYgdGhpcy5hY3RpdmVJbmRleCA8IGxpc3QubGVuZ3RoXG4gICAgICA/IGxpc3RbdGhpcy5hY3RpdmVJbmRleF0uaWRcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWN0aXZlU3RhdGVzKCkge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUluZGV4ID49IDAgPyBsaXN0W3RoaXMuYWN0aXZlSW5kZXhdID8/IG51bGwgOiBudWxsO1xuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goaSA9PiAoaS5hY3RpdmUgPSBpID09PSBhY3RpdmVJdGVtKSk7XG4gICAgdGhpcy5zeW5jQWN0aXZlRGVzY2VuZGFudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQWN0aXZlRGVzY2VuZGFudCgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQ7XG4gICAgaWYgKGlkKSBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGlkKTtcbiAgICBlbHNlIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMubmF2aWdhYmxlSXRlbXM7XG4gICAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xO1xuICAgICAgdGhpcy51cGRhdGVBY3RpdmVTdGF0ZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0Lmxlbmd0aCAtIDEpKTtcbiAgICB0aGlzLnVwZGF0ZUFjdGl2ZVN0YXRlcygpO1xuICAgIGxpc3RbdGhpcy5hY3RpdmVJbmRleF0/LnNjcm9sbEludG9BY3RpdmVWaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUl0ZW0oaXRlbTogU2VsZWN0SXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMubmF2aWdhYmxlSXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaWR4ID49IDApIHRoaXMuc2V0QWN0aXZlKGlkeCk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVBY3RpdmUoZGVsdGE6IG51bWJlcikge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5hY3RpdmVJbmRleCA8IDAgPyAoZGVsdGEgPiAwID8gMCA6IGxpc3QubGVuZ3RoIC0gMSkgOiB0aGlzLmFjdGl2ZUluZGV4ICsgZGVsdGE7XG4gICAgdGhpcy5zZXRBY3RpdmUobmV4dCk7IC8vIHNldEFjdGl2ZSBjbGFtcHMgKG5vIHdyYXAsIG1hdGNoaW5nIHNoYWRjbilcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlVG9TZWxlY3RlZE9yRmlyc3QoKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMubmF2aWdhYmxlSXRlbXM7XG4gICAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xO1xuICAgICAgdGhpcy51cGRhdGVBY3RpdmVTdGF0ZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsSWR4ID0gbGlzdC5maW5kSW5kZXgoaSA9PiB0aGlzLnZhbHVlLmluY2x1ZGVzKGkudmFsdWUpKTtcbiAgICB0aGlzLnNldEFjdGl2ZShzZWxJZHggPj0gMCA/IHNlbElkeCA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QWN0aXZlQWZ0ZXJPcGVuKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdUeXBlYWhlYWRDaGFyKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5wZW5kaW5nVHlwZWFoZWFkQ2hhcjtcbiAgICAgIHRoaXMucGVuZGluZ1R5cGVhaGVhZENoYXIgPSAnJztcbiAgICAgIHRoaXMuc2V0QWN0aXZlVG9TZWxlY3RlZE9yRmlyc3QoKTtcbiAgICAgIHRoaXMudHlwZWFoZWFkKGMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVRvU2VsZWN0ZWRPckZpcnN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFjdGl2ZSgpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gLTE7XG4gICAgdGhpcy50eXBlYWhlYWRCdWZmZXIgPSAnJztcbiAgICB0aGlzLnBlbmRpbmdUeXBlYWhlYWRDaGFyID0gJyc7XG4gICAgdGhpcy5pdGVtcz8uZm9yRWFjaChpID0+IChpLmFjdGl2ZSA9IGZhbHNlKSk7XG4gIH1cblxuICBwcml2YXRlIGlzVHlwZWFoZWFkQ2hhcihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVudC5rZXkubGVuZ3RoID09PSAxICYmIGV2ZW50LmtleSAhPT0gJyAnICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXk7XG4gIH1cblxuICBwcml2YXRlIHR5cGVhaGVhZChjaGFyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIC8vIFJlc2V0IHRoZSBidWZmZXIgYmFzZWQgb24gZWxhcHNlZCB0aW1lIChjb3JyZWN0bmVzcyBpcyBub3QgdGltZXItZHJpdmVuKS5cbiAgICBpZiAobm93IC0gdGhpcy50eXBlYWhlYWRUaW1lID4gNTAwKSB0aGlzLnR5cGVhaGVhZEJ1ZmZlciA9ICcnO1xuICAgIHRoaXMudHlwZWFoZWFkVGltZSA9IG5vdztcbiAgICB0aGlzLnR5cGVhaGVhZEJ1ZmZlciArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLm5hdmlnYWJsZUl0ZW1zLmZpbmQoaSA9PlxuICAgICAgaS5nZXRMYWJlbCgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0aGlzLnR5cGVhaGVhZEJ1ZmZlcilcbiAgICApO1xuICAgIGlmIChtYXRjaCkgdGhpcy5zZXRBY3RpdmVJdGVtKG1hdGNoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0QWN0aXZlKCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm5hdmlnYWJsZUl0ZW1zW3RoaXMuYWN0aXZlSW5kZXhdO1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICAgIC8vIE11bHRpLXNlbGVjdDogbWlycm9yIFNlbGVjdEl0ZW1Db21wb25lbnQub25DbGljayDigJQgdG9nZ2xlIGFuZCBzdGF5IG9wZW4uXG4gICAgaXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuICAgIHRoaXMuc2VsZWN0U2VydmljZS5yZWdpc3RlckNsaWNrKGl0ZW0udmFsdWUsIGl0ZW0uZ2V0TGFiZWwoKSk7XG4gICAgLy8gc3luY0l0ZW1zKCkgcmFuIHN5bmNocm9ub3VzbHkgdmlhIHRoZSBzZXJ2aWNlIHN1YnNjcmlwdGlvbjsga2VlcCB0aGVcbiAgICAvLyBzYW1lIG9wdGlvbiBoaWdobGlnaHRlZCAoaXRzIGluZGV4IG1heSBoYXZlIHNoaWZ0ZWQpLlxuICAgIHRoaXMuc2V0QWN0aXZlSXRlbShpdGVtKTtcbiAgfVxuXG4gIG9uVHJpZ2dlcktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcblxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0VudGVyJyB8fCBrZXkgPT09ICcgJyB8fCBrZXkgPT09ICdIb21lJyB8fCBrZXkgPT09ICdFbmQnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1R5cGVhaGVhZENoYXIoZXZlbnQpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1R5cGVhaGVhZENoYXIgPSBrZXk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLm1vdmVBY3RpdmUoMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgtMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnSG9tZSc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2V0QWN0aXZlKDApOyBicmVhaztcbiAgICAgIGNhc2UgJ0VuZCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2V0QWN0aXZlKHRoaXMubmF2aWdhYmxlSXRlbXMubGVuZ3RoIC0gMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1R5cGVhaGVhZENoYXIoZXZlbnQpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnR5cGVhaGVhZChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5ZG93biB3aGlsZSB0aGUgKG9wdGlvbmFsKSBzZWFyY2ggaW5wdXQgaXMgZm9jdXNlZC4gQXJyb3dzL0VudGVyL0VzY2FwZVxuICAvLyBkcml2ZSB0aGUgbGlzdDsgb3RoZXIga2V5cyBmYWxsIHRocm91Z2ggc28gdGhlIHVzZXIgY2FuIHR5cGUgdG8gZmlsdGVyLlxuICBvblNlYXJjaEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgxKTsgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzogZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5tb3ZlQWN0aXZlKC0xKTsgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2VsZWN0QWN0aXZlKCk7IGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5jbGVhbnVwKSB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuICB3cml0ZVZhbHVlKHY6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkodikgPyB2IDogW107XG4gICAgdGhpcy5zeW5jSXRlbXMoKTtcbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cblxuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cbiJdfQ==
|
|
@@ -38,6 +38,7 @@ export class OtpComponent {
|
|
|
38
38
|
writeValue(value) { this.value = value || ''; this.cdr.markForCheck(); }
|
|
39
39
|
registerOnChange(fn) { this.onChange = fn; }
|
|
40
40
|
registerOnTouched(fn) { this.onTouched = fn; }
|
|
41
|
+
setDisabledState(isDisabled) { this.disabled = isDisabled; this.cdr.markForCheck(); }
|
|
41
42
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OtpComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
42
43
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: OtpComponent, isStandalone: true, selector: "tolle-otp", inputs: { length: "length", disabled: "disabled", auto: "auto" }, providers: [{
|
|
43
44
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -50,12 +51,13 @@ export class OtpComponent {
|
|
|
50
51
|
type="text"
|
|
51
52
|
inputmode="numeric"
|
|
52
53
|
autocomplete="one-time-code"
|
|
54
|
+
aria-label="One-time code"
|
|
53
55
|
[maxLength]="length"
|
|
54
56
|
class="absolute inset-0 opacity-0 cursor-default z-20"
|
|
55
57
|
[(ngModel)]="value"
|
|
56
58
|
(input)="onInputChange($event)"
|
|
57
59
|
(focus)="isFocused = true"
|
|
58
|
-
(blur)="isFocused = false"
|
|
60
|
+
(blur)="isFocused = false; onTouched()"
|
|
59
61
|
[disabled]="disabled"
|
|
60
62
|
/>
|
|
61
63
|
|
|
@@ -96,12 +98,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
96
98
|
type="text"
|
|
97
99
|
inputmode="numeric"
|
|
98
100
|
autocomplete="one-time-code"
|
|
101
|
+
aria-label="One-time code"
|
|
99
102
|
[maxLength]="length"
|
|
100
103
|
class="absolute inset-0 opacity-0 cursor-default z-20"
|
|
101
104
|
[(ngModel)]="value"
|
|
102
105
|
(input)="onInputChange($event)"
|
|
103
106
|
(focus)="isFocused = true"
|
|
104
|
-
(blur)="isFocused = false"
|
|
107
|
+
(blur)="isFocused = false; onTouched()"
|
|
105
108
|
[disabled]="disabled"
|
|
106
109
|
/>
|
|
107
110
|
|
|
@@ -131,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
131
134
|
}], auto: [{
|
|
132
135
|
type: Input
|
|
133
136
|
}] } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvb3RwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUErQ2hDLE1BQU0sT0FBTyxZQUFZO0lBcUJIO0lBcEJwQixJQUNJLE1BQU0sQ0FBQyxHQUFXO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUVYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUVaLEtBQUssR0FBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdDLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVsQixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFM0IsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBSSxDQUFDO0lBRS9DLGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsWUFBWSxDQUFDLEtBQWE7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUM7UUFFL0QsT0FBTyxFQUFFLENBQ1AseUhBQXlILEVBQ3pILEtBQUssS0FBSyxDQUFDLElBQUksdUJBQXVCLEVBQ3RDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxjQUFjLEVBQzNDLFFBQVEsSUFBSSw4Q0FBOEMsQ0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxJQUFVLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25GLGdCQUFnQixDQUFDLEVBQU8sSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsaUJBQWlCLENBQUMsRUFBTyxJQUFVLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxnQkFBZ0IsQ0FBQyxVQUFtQixJQUFVLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0dBN0N6RixZQUFZOzRGQUFaLFlBQVksMEhBekNaLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQywwQkFDUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDVCwyREF4Q1MsWUFBWSwrUEFBRSxXQUFXOzs0RkEwQ3hCLFlBQVk7a0JBN0N4QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztvQkFDcEMsU0FBUyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDOzRCQUMzQyxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO29CQUNGLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDVDtpQkFDRjtzRkFHSyxNQUFNO3NCQURULEtBQUs7Z0JBU0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1vdHAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPdHBDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNoaWRkZW5JbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvbmUtdGltZS1jb2RlXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIk9uZS10aW1lIGNvZGVcIlxuICAgICAgICBbbWF4TGVuZ3RoXT1cImxlbmd0aFwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBvcGFjaXR5LTAgY3Vyc29yLWRlZmF1bHQgei0yMFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cImlzRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICAoYmx1cik9XCJpc0ZvY3VzZWQgPSBmYWxzZTsgb25Ub3VjaGVkKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiAqbmdJZj1cImF1dG9cIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgXyBvZiBzbG90czsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0U2xvdENsYXNzKGkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB2YWx1ZVtpXSB8fCAnJyB9fVxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRm9jdXNlZCAmJiB2YWx1ZS5sZW5ndGggPT09IGlcIiBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNCB3LXB4IGFuaW1hdGUtY2FyZXQtYmxpbmsgYmctZm9yZWdyb3VuZCBkdXJhdGlvbi0xMDAwXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cIiFhdXRvXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE90cENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KClcbiAgc2V0IGxlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IG51bWVyaWNWYWwgPSBOdW1iZXIodmFsKTtcbiAgICB0aGlzLl9sZW5ndGggPSBudW1lcmljVmFsO1xuICAgIHRoaXMuc2xvdHMgPSBBcnJheShudW1lcmljVmFsKS5maWxsKDApO1xuICB9XG4gIGdldCBsZW5ndGgoKSB7IHJldHVybiB0aGlzLl9sZW5ndGg7IH1cbiAgcHJpdmF0ZSBfbGVuZ3RoID0gNjtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRvID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHNsb3RzOiBudW1iZXJbXSA9IEFycmF5KDYpLmZpbGwoMCk7XG5cbiAgdmFsdWU6IHN0cmluZyA9ICcnO1xuICBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbCA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gVmlzdWFsIGxvZ2ljIGZvciB0aGUgYXV0b21hdGVkIHNsb3RzXG4gIGdldFNsb3RDbGFzcyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmlzRm9jdXNlZCAmJiB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gaW5kZXg7XG5cbiAgICByZXR1cm4gY24oXG4gICAgICAncmVsYXRpdmUgZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci15IGJvcmRlci1yIGJvcmRlci1pbnB1dCB0ZXh0LXNtIHRyYW5zaXRpb24tYWxsIGJnLWJhY2tncm91bmQnLFxuICAgICAgaW5kZXggPT09IDAgJiYgJ3JvdW5kZWQtbC1tZCBib3JkZXItbCcsXG4gICAgICBpbmRleCA9PT0gdGhpcy5sZW5ndGggLSAxICYmICdyb3VuZGVkLXItbWQnLFxuICAgICAgaXNBY3RpdmUgJiYgJ3otMzAgcmluZy0yIHJpbmctcmluZyByaW5nLW9mZnNldC1iYWNrZ3JvdW5kJ1xuICAgICk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHsgdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnOyB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTsgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyB9XG59XG4iXX0=
|