@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, forwardRef, inject, ViewChild, ChangeDetectorRef, Output, EventEmitter, } from '@angular/core';
|
|
1
|
+
import { Component, Input, forwardRef, inject, ViewChild, ElementRef, ChangeDetectorRef, Output, EventEmitter, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
4
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -38,6 +38,8 @@ export class CountrySelectorComponent {
|
|
|
38
38
|
searchQuery = '';
|
|
39
39
|
shadowCountries = [];
|
|
40
40
|
isFocused = false;
|
|
41
|
+
// Keyboard navigation (active-descendant) state over the filtered rows
|
|
42
|
+
activeIndex = -1;
|
|
41
43
|
onChange = () => { };
|
|
42
44
|
onTouched = () => { };
|
|
43
45
|
cn = cn;
|
|
@@ -57,12 +59,12 @@ export class CountrySelectorComponent {
|
|
|
57
59
|
'rounded-md',
|
|
58
60
|
// Focus state
|
|
59
61
|
!(this.readonly || this.disabled) && [
|
|
60
|
-
'focus:outline-none',
|
|
61
|
-
'focus:ring-4',
|
|
62
|
-
'focus:ring-ring/30',
|
|
63
|
-
'focus:ring-offset-0',
|
|
62
|
+
'focus-visible:outline-none',
|
|
63
|
+
'focus-visible:ring-4',
|
|
64
|
+
'focus-visible:ring-ring/30',
|
|
65
|
+
'focus-visible:ring-offset-0',
|
|
64
66
|
'shadow-none',
|
|
65
|
-
this.error ? 'focus:border-destructive/80' : 'focus:border-primary/80',
|
|
67
|
+
this.error ? 'focus-visible:border-destructive/80' : 'focus-visible:border-primary/80',
|
|
66
68
|
],
|
|
67
69
|
// External focus state (when controlled by parent)
|
|
68
70
|
!(this.readonly || this.disabled) &&
|
|
@@ -85,9 +87,17 @@ export class CountrySelectorComponent {
|
|
|
85
87
|
get iconClass() {
|
|
86
88
|
return cn('ri-arrow-down-s-line text-muted-foreground ml-2 transition-transform duration-200', this.popover?.isOpen ? 'rotate-180' : '', this.size === 'xs' || this.size === 'sm' ? 'text-[14px]' : 'text-[18px]', (this.disabled || this.readonly) && 'opacity-30');
|
|
87
89
|
}
|
|
88
|
-
getItemClass(country) {
|
|
90
|
+
getItemClass(country, index) {
|
|
89
91
|
const isSelected = this.selectedCountry?.isoAlpha2 === country.isoAlpha2;
|
|
90
|
-
|
|
92
|
+
const isActive = index === this.activeIndex;
|
|
93
|
+
return cn('flex items-center justify-between px-3 py-2 cursor-pointer transition-colors duration-150 rounded-sm w-full', isSelected ? 'bg-accent text-accent-foreground' : 'hover:bg-accent/50 text-foreground',
|
|
94
|
+
// Active-descendant (keyboard) highlight
|
|
95
|
+
isActive && 'bg-accent text-accent-foreground');
|
|
96
|
+
}
|
|
97
|
+
get activeDescendantId() {
|
|
98
|
+
return this.activeIndex >= 0 && this.activeIndex < this.shadowCountries.length
|
|
99
|
+
? `${this.id}-option-${this.activeIndex}`
|
|
100
|
+
: null;
|
|
91
101
|
}
|
|
92
102
|
getFlagUrl(flagBase64) {
|
|
93
103
|
return this.sanitizer.bypassSecurityTrustResourceUrl('data:image/*;base64,' + flagBase64);
|
|
@@ -97,6 +107,9 @@ export class CountrySelectorComponent {
|
|
|
97
107
|
this.shadowCountries = this.countryCodesService.countries.filter(c => c.name.toLowerCase().includes(filter) ||
|
|
98
108
|
c.dialCode.includes(filter) ||
|
|
99
109
|
c.isoAlpha2.toLowerCase().includes(filter));
|
|
110
|
+
// Re-anchor the active row to the first match after filtering.
|
|
111
|
+
this.activeIndex = this.shadowCountries.length ? 0 : -1;
|
|
112
|
+
this.syncActiveDescendant();
|
|
100
113
|
}
|
|
101
114
|
selectCountry(country) {
|
|
102
115
|
this.selectedCountry = country;
|
|
@@ -129,15 +142,102 @@ export class CountrySelectorComponent {
|
|
|
129
142
|
this.onBlurChange.emit();
|
|
130
143
|
}
|
|
131
144
|
onPopoverOpen() {
|
|
145
|
+
// Anchor the active row to the currently selected country (or the first).
|
|
146
|
+
const selIdx = this.selectedCountry
|
|
147
|
+
? this.shadowCountries.findIndex(c => c.isoAlpha2 === this.selectedCountry.isoAlpha2)
|
|
148
|
+
: -1;
|
|
149
|
+
this.activeIndex = selIdx >= 0 ? selIdx : (this.shadowCountries.length ? 0 : -1);
|
|
132
150
|
setTimeout(() => {
|
|
133
|
-
this.
|
|
151
|
+
this.getSearchInputEl()?.focus();
|
|
152
|
+
this.syncActiveDescendant();
|
|
153
|
+
this.scrollActiveIntoView();
|
|
134
154
|
}, 0);
|
|
135
155
|
}
|
|
136
156
|
onPopoverClose() {
|
|
137
157
|
this.searchQuery = '';
|
|
138
158
|
this.filterCountries('');
|
|
159
|
+
this.activeIndex = -1;
|
|
139
160
|
this.onBlur();
|
|
140
161
|
}
|
|
162
|
+
// ---- Keyboard navigation (WAI-ARIA listbox/combobox pattern) ----
|
|
163
|
+
getSearchInputEl() {
|
|
164
|
+
return this.searchInput?.nativeElement?.querySelector('input') ?? null;
|
|
165
|
+
}
|
|
166
|
+
syncActiveDescendant() {
|
|
167
|
+
const input = this.getSearchInputEl();
|
|
168
|
+
if (!input)
|
|
169
|
+
return;
|
|
170
|
+
const id = this.activeDescendantId;
|
|
171
|
+
if (id)
|
|
172
|
+
input.setAttribute('aria-activedescendant', id);
|
|
173
|
+
else
|
|
174
|
+
input.removeAttribute('aria-activedescendant');
|
|
175
|
+
}
|
|
176
|
+
scrollActiveIntoView() {
|
|
177
|
+
if (this.activeIndex < 0)
|
|
178
|
+
return;
|
|
179
|
+
document
|
|
180
|
+
.getElementById(`${this.id}-option-${this.activeIndex}`)
|
|
181
|
+
?.scrollIntoView({ block: 'nearest' });
|
|
182
|
+
}
|
|
183
|
+
moveActive(delta) {
|
|
184
|
+
if (!this.shadowCountries.length)
|
|
185
|
+
return;
|
|
186
|
+
const next = this.activeIndex < 0
|
|
187
|
+
? (delta > 0 ? 0 : this.shadowCountries.length - 1)
|
|
188
|
+
: this.activeIndex + delta;
|
|
189
|
+
// Clamp (no wrap, matching shadcn).
|
|
190
|
+
this.activeIndex = Math.max(0, Math.min(next, this.shadowCountries.length - 1));
|
|
191
|
+
this.syncActiveDescendant();
|
|
192
|
+
this.scrollActiveIntoView();
|
|
193
|
+
}
|
|
194
|
+
selectActive() {
|
|
195
|
+
const country = this.shadowCountries[this.activeIndex];
|
|
196
|
+
if (!country)
|
|
197
|
+
return;
|
|
198
|
+
this.selectCountry(country); // closes the popover
|
|
199
|
+
document.getElementById(this.id)?.focus();
|
|
200
|
+
}
|
|
201
|
+
onTriggerKeyDown(event) {
|
|
202
|
+
if (this.disabled || this.readonly)
|
|
203
|
+
return;
|
|
204
|
+
if (this.popover?.isOpen)
|
|
205
|
+
return; // once open, focus moves to the search input
|
|
206
|
+
const key = event.key;
|
|
207
|
+
if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ' || key === 'Home' || key === 'End') {
|
|
208
|
+
event.preventDefault();
|
|
209
|
+
this.popover.open();
|
|
210
|
+
}
|
|
211
|
+
else if (key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
|
|
212
|
+
// Any printable character opens the popover (focus moves to the search box).
|
|
213
|
+
this.popover.open();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Keydown while the search input is focused. Arrows/Enter/Escape drive the
|
|
217
|
+
// list; other keys (incl. Home/End for caret) fall through to text editing.
|
|
218
|
+
onSearchKeyDown(event) {
|
|
219
|
+
if (!this.popover?.isOpen)
|
|
220
|
+
return;
|
|
221
|
+
switch (event.key) {
|
|
222
|
+
case 'ArrowDown':
|
|
223
|
+
event.preventDefault();
|
|
224
|
+
this.moveActive(1);
|
|
225
|
+
break;
|
|
226
|
+
case 'ArrowUp':
|
|
227
|
+
event.preventDefault();
|
|
228
|
+
this.moveActive(-1);
|
|
229
|
+
break;
|
|
230
|
+
case 'Enter':
|
|
231
|
+
event.preventDefault();
|
|
232
|
+
this.selectActive();
|
|
233
|
+
break;
|
|
234
|
+
case 'Escape':
|
|
235
|
+
event.preventDefault();
|
|
236
|
+
this.popover.close();
|
|
237
|
+
document.getElementById(this.id)?.focus();
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
141
241
|
writeValue(value) {
|
|
142
242
|
this.value = value;
|
|
143
243
|
if (value) {
|
|
@@ -174,7 +274,7 @@ export class CountrySelectorComponent {
|
|
|
174
274
|
useExisting: forwardRef(() => CountrySelectorComponent),
|
|
175
275
|
multi: true,
|
|
176
276
|
},
|
|
177
|
-
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: `
|
|
277
|
+
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
178
278
|
<div class="flex w-full flex-col gap-1.5">
|
|
179
279
|
<label *ngIf="label" [for]="id" [class]="computedLabelClass">
|
|
180
280
|
{{ label }}
|
|
@@ -189,10 +289,15 @@ export class CountrySelectorComponent {
|
|
|
189
289
|
<button
|
|
190
290
|
type="button"
|
|
191
291
|
[id]="id"
|
|
292
|
+
role="combobox"
|
|
293
|
+
aria-haspopup="listbox"
|
|
294
|
+
[attr.aria-expanded]="popover?.isOpen"
|
|
295
|
+
[attr.aria-activedescendant]="popover?.isOpen ? activeDescendantId : null"
|
|
192
296
|
[disabled]="disabled"
|
|
193
297
|
[class]="computedTriggerClass"
|
|
194
298
|
(blur)="onBlur()"
|
|
195
299
|
(focus)="onFocus()"
|
|
300
|
+
(keydown)="onTriggerKeyDown($event)"
|
|
196
301
|
[attr.aria-invalid]="error"
|
|
197
302
|
[attr.aria-describedby]="error && errorMessage ? id + '-error' : null">
|
|
198
303
|
<div class="flex items-center gap-2 truncate">
|
|
@@ -213,7 +318,7 @@ export class CountrySelectorComponent {
|
|
|
213
318
|
</div>
|
|
214
319
|
|
|
215
320
|
<div
|
|
216
|
-
class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover shadow-md"
|
|
321
|
+
class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md"
|
|
217
322
|
(mousedown)="$event.stopPropagation()">
|
|
218
323
|
<div class="sticky top-0 z-10 border-b border-border bg-popover p-2 shadow-sm">
|
|
219
324
|
<tolle-input
|
|
@@ -221,17 +326,22 @@ export class CountrySelectorComponent {
|
|
|
221
326
|
placeholder="Search country..."
|
|
222
327
|
[(ngModel)]="searchQuery"
|
|
223
328
|
(ngModelChange)="filterCountries($event)"
|
|
329
|
+
(keydown)="onSearchKeyDown($event)"
|
|
224
330
|
class="w-full"
|
|
225
331
|
#searchInput>
|
|
226
332
|
<i prefix class="ri-search-line"></i>
|
|
227
333
|
</tolle-input>
|
|
228
334
|
</div>
|
|
229
335
|
|
|
230
|
-
<div class="max-h-[300px] overflow-y-auto p-1">
|
|
336
|
+
<div role="listbox" class="max-h-[300px] overflow-y-auto p-1">
|
|
231
337
|
<div
|
|
232
|
-
*ngFor="let country of shadowCountries"
|
|
338
|
+
*ngFor="let country of shadowCountries; let i = index"
|
|
339
|
+
[id]="id + '-option-' + i"
|
|
340
|
+
role="option"
|
|
341
|
+
[attr.aria-selected]="selectedCountry?.isoAlpha2 === country.isoAlpha2"
|
|
342
|
+
[attr.data-highlighted]="i === activeIndex ? '' : null"
|
|
233
343
|
(click)="selectCountry(country)"
|
|
234
|
-
[class]="getItemClass(country)">
|
|
344
|
+
[class]="getItemClass(country, i)">
|
|
235
345
|
<div class="flex w-full items-center gap-3">
|
|
236
346
|
<img
|
|
237
347
|
[src]="getFlagUrl(country.flag)"
|
|
@@ -298,10 +408,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
298
408
|
<button
|
|
299
409
|
type="button"
|
|
300
410
|
[id]="id"
|
|
411
|
+
role="combobox"
|
|
412
|
+
aria-haspopup="listbox"
|
|
413
|
+
[attr.aria-expanded]="popover?.isOpen"
|
|
414
|
+
[attr.aria-activedescendant]="popover?.isOpen ? activeDescendantId : null"
|
|
301
415
|
[disabled]="disabled"
|
|
302
416
|
[class]="computedTriggerClass"
|
|
303
417
|
(blur)="onBlur()"
|
|
304
418
|
(focus)="onFocus()"
|
|
419
|
+
(keydown)="onTriggerKeyDown($event)"
|
|
305
420
|
[attr.aria-invalid]="error"
|
|
306
421
|
[attr.aria-describedby]="error && errorMessage ? id + '-error' : null">
|
|
307
422
|
<div class="flex items-center gap-2 truncate">
|
|
@@ -322,7 +437,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
322
437
|
</div>
|
|
323
438
|
|
|
324
439
|
<div
|
|
325
|
-
class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover shadow-md"
|
|
440
|
+
class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md"
|
|
326
441
|
(mousedown)="$event.stopPropagation()">
|
|
327
442
|
<div class="sticky top-0 z-10 border-b border-border bg-popover p-2 shadow-sm">
|
|
328
443
|
<tolle-input
|
|
@@ -330,17 +445,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
330
445
|
placeholder="Search country..."
|
|
331
446
|
[(ngModel)]="searchQuery"
|
|
332
447
|
(ngModelChange)="filterCountries($event)"
|
|
448
|
+
(keydown)="onSearchKeyDown($event)"
|
|
333
449
|
class="w-full"
|
|
334
450
|
#searchInput>
|
|
335
451
|
<i prefix class="ri-search-line"></i>
|
|
336
452
|
</tolle-input>
|
|
337
453
|
</div>
|
|
338
454
|
|
|
339
|
-
<div class="max-h-[300px] overflow-y-auto p-1">
|
|
455
|
+
<div role="listbox" class="max-h-[300px] overflow-y-auto p-1">
|
|
340
456
|
<div
|
|
341
|
-
*ngFor="let country of shadowCountries"
|
|
457
|
+
*ngFor="let country of shadowCountries; let i = index"
|
|
458
|
+
[id]="id + '-option-' + i"
|
|
459
|
+
role="option"
|
|
460
|
+
[attr.aria-selected]="selectedCountry?.isoAlpha2 === country.isoAlpha2"
|
|
461
|
+
[attr.data-highlighted]="i === activeIndex ? '' : null"
|
|
342
462
|
(click)="selectCountry(country)"
|
|
343
|
-
[class]="getItemClass(country)">
|
|
463
|
+
[class]="getItemClass(country, i)">
|
|
344
464
|
<div class="flex w-full items-center gap-3">
|
|
345
465
|
<img
|
|
346
466
|
[src]="getFlagUrl(country.flag)"
|
|
@@ -420,6 +540,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
420
540
|
args: ['popover']
|
|
421
541
|
}], searchInput: [{
|
|
422
542
|
type: ViewChild,
|
|
423
|
-
args: ['searchInput']
|
|
543
|
+
args: ['searchInput', { read: ElementRef }]
|
|
424
544
|
}] } });
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUE2R2hDLE1BQU0sT0FBTyx3QkFBd0I7SUFDMUIsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxHQUFHLGdCQUFnQixDQUFDO0lBQy9C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QkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENvdW50cnlDb2Rlc1NlcnZpY2UgfSBmcm9tICcuL2NvdW50cnktY29kZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWNvdW50cnktc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUG9wb3ZlckNvbXBvbmVudCwgSW5wdXRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvdW50cnlTZWxlY3RvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtMS41XCI+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIiBbY2xhc3NdPVwiY29tcHV0ZWRMYWJlbENsYXNzXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8dG9sbGUtcG9wb3ZlclxuICAgICAgICAjcG9wb3ZlclxuICAgICAgICBbcGxhY2VtZW50XT1cIidib3R0b20tc3RhcnQnXCJcbiAgICAgICAgKG9uT3Blbik9XCJvblBvcG92ZXJPcGVuKClcIlxuICAgICAgICAob25DbG9zZSk9XCJvblBvcG92ZXJDbG9zZSgpXCI+XG4gICAgICAgIDxkaXYgdHJpZ2dlciBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRUcmlnZ2VyQ2xhc3NcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZXJyb3JcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJlcnJvciAmJiBlcnJvck1lc3NhZ2UgPyBpZCArICctZXJyb3InIDogbnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ291bnRyeVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJnZXRGbGFnVXJsKHNlbGVjdGVkQ291bnRyeS5mbGFnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTQgdy02IGZsZXgtc2hyaW5rLTAgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWJvcmRlciBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgIFthbHRdPVwic2VsZWN0ZWRDb3VudHJ5Lm5hbWVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkQ291bnRyeSAmJiBzaG93TmFtZVwiIGNsYXNzPVwidHJ1bmNhdGUgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvdW50cnkubmFtZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNlbGVjdGVkQ291bnRyeVwiIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IG1pbi13LVszMDBweF0gbWF4LXctWzQwMHB4XSBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHNoYWRvdy1tZFwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMiBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDx0b2xsZS1pbnB1dFxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb3VudHJ5Li4uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNvdW50cmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtaC1bMzAwcHhdIG92ZXJmbG93LXktYXV0byBwLTFcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvdW50cnkgb2Ygc2hhZG93Q291bnRyaWVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvdW50cnkoY291bnRyeSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0SXRlbUNsYXNzKGNvdW50cnkpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImdldEZsYWdVcmwoY291bnRyeS5mbGFnKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImgtNCB3LTYgZmxleC1zaHJpbmstMCByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbYWx0XT1cImNvdW50cnkubmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LTEgdHJ1bmNhdGUgdGV4dC1zbVwiPnt7IGNvdW50cnkubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgY291bnRyeS5kaWFsQ29kZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyaS1jaGVjay1saW5lIHRleHQtcHJpbWFyeVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaGFkb3dDb3VudHJpZXMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgIE5vIGNvdW50cmllcyBmb3VuZC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdG9sbGUtcG9wb3Zlcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNhYmxlZFwiPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiaGludCAmJiAhZXJyb3JcIlxuICAgICAgICAgIGNsYXNzPVwicHgtMSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICBbY2xhc3Mub3BhY2l0eS0wXT1cImlzRm9jdXNlZCAmJiBoaWRlSGludE9uRm9jdXNcIj5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImVycm9yICYmIGVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1lcnJvcidcIlxuICAgICAgICAgIGNsYXNzPVwicHgtMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZGVzdHJ1Y3RpdmVcIj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBpZCA9IGBjb3VudHJ5LXNlbGVjdG9yLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1cyA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBjb3VudHJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICBASW5wdXQoKSByZXR1cm5WYWx1ZTogJ29iamVjdCcgfCAnaXNvQWxwaGEyJyB8ICdkaWFsQ29kZScgfCAnbmFtZScgPSAnaXNvQWxwaGEyJztcbiAgQElucHV0KCkgc2hvd05hbWUgPSB0cnVlO1xuICBASW5wdXQoKSBleHRlcm5hbEZvY3VzZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgQE91dHB1dCgpIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkZvY3VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25CbHVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogUG9wb3ZlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBjb3VudHJ5Q29kZXNTZXJ2aWNlID0gaW5qZWN0KENvdW50cnlDb2Rlc1NlcnZpY2UpO1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgdmFsdWU6IGFueSA9IG51bGw7XG4gIHNlbGVjdGVkQ291bnRyeTogYW55ID0gbnVsbDtcbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgc2hhZG93Q291bnRyaWVzOiBhbnlbXSA9IFtdO1xuICBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZSAmJiAhdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5pc29BbHBoYTIgPT09IHRoaXMuZGVmYXVsdENvdW50cnlDb2RlXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZXh0ZXJuYWxGb2N1c2VkICE9PSB1bmRlZmluZWQgPyB0aGlzLmV4dGVybmFsRm9jdXNlZCA6IHRoaXMuaXNGb2N1c2VkO1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAnLFxuICAgICAgJ2JnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kJyxcbiAgICAgICdib3JkZXItaW5wdXQgc2hhZG93LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAnaC04IHB4LTIgdGV4dC14cycsXG4gICAgICB0aGlzLnNpemUgPT09ICdzbScgJiYgJ2gtOSBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgJ2gtMTAgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAnaC0xMSBweC00IHRleHQtYmFzZScsXG4gICAgICAvLyBSb3VuZGVkIGNvcm5lcnNcbiAgICAgICdyb3VuZGVkLW1kJyxcbiAgICAgIC8vIEZvY3VzIHN0YXRlXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgW1xuICAgICAgICAnZm9jdXM6b3V0bGluZS1ub25lJyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctNCcsXG4gICAgICAgICdmb2N1czpyaW5nLXJpbmcvMzAnLFxuICAgICAgICAnZm9jdXM6cmluZy1vZmZzZXQtMCcsXG4gICAgICAgICdzaGFkb3ctbm9uZScsXG4gICAgICAgIHRoaXMuZXJyb3IgPyAnZm9jdXM6Ym9yZGVyLWRlc3RydWN0aXZlLzgwJyA6ICdmb2N1czpib3JkZXItcHJpbWFyeS84MCcsXG4gICAgICBdLFxuICAgICAgLy8gRXh0ZXJuYWwgZm9jdXMgc3RhdGUgKHdoZW4gY29udHJvbGxlZCBieSBwYXJlbnQpXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiZcbiAgICAgICAgZm9jdXNlZCAmJiBbXG4gICAgICAgICAgJ3JpbmctNCcsXG4gICAgICAgICAgJ3JpbmctcmluZy8zMCcsXG4gICAgICAgICAgJ3Jpbmctb2Zmc2V0LTAnLFxuICAgICAgICAgICdzaGFkb3ctbm9uZScsXG4gICAgICAgICAgdGhpcy5lcnJvciA/ICdib3JkZXItZGVzdHJ1Y3RpdmUvODAnIDogJ2JvcmRlci1wcmltYXJ5LzgwJyxcbiAgICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICAvLyBFcnJvciBzdGF0ZVxuICAgICAgdGhpcy5lcnJvciAmJiBbXG4gICAgICAgICdib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgZm9jdXNlZCAmJiAncmluZy1kZXN0cnVjdGl2ZS8zMCcsXG4gICAgICBdLFxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAgYm9yZGVyLW9wYWNpdHktNTAnLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiAnY3Vyc29yLWRlZmF1bHQgYm9yZGVyLWRhc2hlZCcsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZExhYmVsQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3RleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwJyxcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgJ29wYWNpdHktNTAnXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLnBvcG92ZXI/LmlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnIHx8IHRoaXMuc2l6ZSA9PT0gJ3NtJyA/ICd0ZXh0LVsxNHB4XScgOiAndGV4dC1bMThweF0nLFxuICAgICAgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgJiYgJ29wYWNpdHktMzAnXG4gICAgKTtcbiAgfVxuXG4gIGdldEl0ZW1DbGFzcyhjb3VudHJ5OiBhbnkpIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTI7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC0zIHB5LTIgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwIHJvdW5kZWQtc20gdy1mdWxsJyxcbiAgICAgIGlzU2VsZWN0ZWQgPyAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnIDogJ2hvdmVyOmJnLWFjY2VudC81MCB0ZXh0LWZvcmVncm91bmQnXG4gICAgKTtcbiAgfVxuXG4gIGdldEZsYWdVcmwoZmxhZ0Jhc2U2NDogc3RyaW5nKTogU2FmZVJlc291cmNlVXJsIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCdkYXRhOmltYWdlLyo7YmFzZTY0LCcgKyBmbGFnQmFzZTY0KTtcbiAgfVxuXG4gIGZpbHRlckNvdW50cmllcyhxdWVyeTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyID0gKHF1ZXJ5IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICB0aGlzLnNoYWRvd0NvdW50cmllcyA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmlsdGVyKFxuICAgICAgYyA9PlxuICAgICAgICBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpIHx8XG4gICAgICAgIGMuZGlhbENvZGUuaW5jbHVkZXMoZmlsdGVyKSB8fFxuICAgICAgICBjLmlzb0FscGhhMi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcilcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0Q291bnRyeShjb3VudHJ5OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0UmV0dXJuVmFsdWUoY291bnRyeSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY291bnRyeSk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHVyblZhbHVlKGNvdW50cnk6IGFueSkge1xuICAgIHN3aXRjaCAodGhpcy5yZXR1cm5WYWx1ZSkge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnk7XG4gICAgICBjYXNlICdpc29BbHBoYTInOlxuICAgICAgICByZXR1cm4gY291bnRyeS5pc29BbHBoYTI7XG4gICAgICBjYXNlICdkaWFsQ29kZSc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5LmRpYWxDb2RlO1xuICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5Lm5hbWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY291bnRyeS5pc29BbHBoYTI7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgdGhpcy5vbkZvY3VzQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5vbkJsdXJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgb25Qb3BvdmVyT3BlbigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBvblBvcG92ZXJDbG9zZSgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5maWx0ZXJDb3VudHJpZXMoJycpO1xuICAgIHRoaXMub25CbHVyKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmluZChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlLmlzb0FscGhhMjtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdpc29BbHBoYTInKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ2RpYWxDb2RlJykgcmV0dXJuIGMuZGlhbENvZGUgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ25hbWUnKSByZXR1cm4gYy5uYW1lID09PSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
545
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULFVBQVUsRUFDVixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7O0FBdUhoQyxNQUFNLE9BQU8sd0JBQXdCO0lBQzFCLEVBQUUsR0FBRyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUMxQixXQUFXLEdBQWlELFdBQVcsQ0FBQztJQUN4RSxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLGVBQWUsQ0FBc0I7SUFFcEMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDekMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFNUIsT0FBTyxDQUFvQjtJQUNELFdBQVcsQ0FBMkI7SUFFOUUsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbEQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFeEMsS0FBSyxHQUFRLElBQUksQ0FBQztJQUNsQixlQUFlLEdBQVEsSUFBSSxDQUFDO0lBQzVCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLHVFQUF1RTtJQUN2RSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFakIsUUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUN6QixTQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRWhCLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUM1RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUM3QyxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0YsT0FBTyxFQUFFLENBQ1AsNkVBQTZFLEVBQzdFLCtCQUErQixFQUMvQix3QkFBd0IsRUFDeEIsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksa0JBQWtCLEVBQ3hDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLGtCQUFrQixFQUN4QyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxtQkFBbUIsRUFDOUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUkscUJBQXFCO1FBQzNDLGtCQUFrQjtRQUNsQixZQUFZO1FBQ1osY0FBYztRQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUNuQyw0QkFBNEI7WUFDNUIsc0JBQXNCO1lBQ3RCLDRCQUE0QjtZQUM1Qiw2QkFBNkI7WUFDN0IsYUFBYTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7U0FDdkY7UUFDRCxtREFBbUQ7UUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixPQUFPLElBQUk7WUFDVCxRQUFRO1lBQ1IsY0FBYztZQUNkLGVBQWU7WUFDZixhQUFhO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtTQUMzRCxFQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUI7UUFDMUQsY0FBYztRQUNkLElBQUksQ0FBQyxLQUFLLElBQUk7WUFDWixvQkFBb0I7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sSUFBSSxxQkFBcUI7U0FDdEUsRUFDRCxJQUFJLENBQUMsUUFBUSxJQUFJLGlEQUFpRCxFQUNsRSxJQUFJLENBQUMsUUFBUSxJQUFJLDhCQUE4QixFQUMvQyxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxFQUFFLENBQ1Asa0ZBQWtGLEVBQ2xGLElBQUksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sRUFBRSxDQUNQLG1GQUFtRixFQUNuRixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ3hDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFDeEUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxZQUFZLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQVksRUFBRSxLQUFhO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDekUsTUFBTSxRQUFRLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQ1AsNkdBQTZHLEVBQzdHLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztRQUN0Rix5Q0FBeUM7UUFDekMsUUFBUSxJQUFJLGtDQUFrQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDNUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FDRixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBWTtRQUNqQyxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzFCLEtBQUssTUFBTTtnQkFDVCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDdEI7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYTtRQUNYLDBFQUEwRTtRQUMxRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZTtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsb0VBQW9FO0lBRTVELGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ25DLElBQUksRUFBRTtZQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUM7O1lBQ25ELEtBQUssQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUNqQyxRQUFRO2FBQ0wsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsRUFBRSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUM3QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCO1FBQ2xELFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQUUsT0FBTyxDQUFDLDZDQUE2QztRQUMvRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNsSCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pGLDZFQUE2RTtZQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSxlQUFlLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTTtZQUFFLE9BQU87UUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxXQUFXO2dCQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU07WUFDcEUsS0FBSyxTQUFTO2dCQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsTUFBTTtZQUNuRSxLQUFLLE9BQU87Z0JBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFBQyxNQUFNO1lBQ2pFLEtBQUssUUFBUTtnQkFDWCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUMxQyxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzFFLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXO29CQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7Z0JBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVO29CQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7Z0JBQ2pFLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUM7Z0JBQ3pELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO3dHQXBTVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixraEJBakh4QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3ZELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixzTUFpSWlDLFVBQVUsNkJBaElsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3R1QsMkRBaEhTLFlBQVksK1BBQUUsV0FBVywrVkFBRSxnQkFBZ0IsaUhBQUUsY0FBYzs7NEZBa0gxRCx3QkFBd0I7a0JBckhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztvQkFDdEUsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0dUO2lCQUNGOzhCQUVVLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRWUsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUM0QixXQUFXO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ291bnRyeUNvZGVzU2VydmljZSB9IGZyb20gJy4vY291bnRyeS1jb2Rlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtY291bnRyeS1zZWxlY3RvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBQb3BvdmVyQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ291bnRyeVNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xLjVcIj5cbiAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2Zvcl09XCJpZFwiIFtjbGFzc109XCJjb21wdXRlZExhYmVsQ2xhc3NcIj5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDx0b2xsZS1wb3BvdmVyXG4gICAgICAgICNwb3BvdmVyXG4gICAgICAgIFtwbGFjZW1lbnRdPVwiJ2JvdHRvbS1zdGFydCdcIlxuICAgICAgICAob25PcGVuKT1cIm9uUG9wb3Zlck9wZW4oKVwiXG4gICAgICAgIChvbkNsb3NlKT1cIm9uUG9wb3ZlckNsb3NlKClcIj5cbiAgICAgICAgPGRpdiB0cmlnZ2VyIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicG9wb3Zlcj8uaXNPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJwb3BvdmVyPy5pc09wZW4gPyBhY3RpdmVEZXNjZW5kYW50SWQgOiBudWxsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRUcmlnZ2VyQ2xhc3NcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gaWQgKyAnLWVycm9yJyA6IG51bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChzZWxlY3RlZENvdW50cnkuZmxhZylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiBmbGV4LXNocmluay0wIHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1ib3JkZXIgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cInNlbGVjdGVkQ291bnRyeS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZENvdW50cnkgJiYgc2hvd05hbWVcIiBjbGFzcz1cInRydW5jYXRlIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb3VudHJ5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZENvdW50cnlcIiBjbGFzcz1cInRydW5jYXRlIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4tdy1bMzAwcHhdIG1heC13LVs0MDBweF0gZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWRcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreSB0b3AtMCB6LTEwIGJvcmRlci1iIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciBwLTIgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICA8dG9sbGUtaW5wdXRcbiAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY291bnRyeS4uLlwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDb3VudHJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uU2VhcmNoS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgcm9sZT1cImxpc3Rib3hcIiBjbGFzcz1cIm1heC1oLVszMDBweF0gb3ZlcmZsb3cteS1hdXRvIHAtMVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY291bnRyeSBvZiBzaGFkb3dDb3VudHJpZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgaVwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMlwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtaGlnaGxpZ2h0ZWRdPVwiaSA9PT0gYWN0aXZlSW5kZXggPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q291bnRyeShjb3VudHJ5KVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJnZXRJdGVtQ2xhc3MoY291bnRyeSwgaSlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChjb3VudHJ5LmZsYWcpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiBmbGV4LXNocmluay0wIHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1ib3JkZXIgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiY291bnRyeS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSB0cnVuY2F0ZSB0ZXh0LXNtXCI+e3sgY291bnRyeS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBjb3VudHJ5LmRpYWxDb2RlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMlwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJpLWNoZWNrLWxpbmUgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInNoYWRvd0NvdW50cmllcy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgTm8gY291bnRyaWVzIGZvdW5kLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90b2xsZS1wb3BvdmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJoaW50ICYmICFlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJweC0xIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNGb2N1c2VkICYmIGhpZGVIaW50T25Gb2N1c1wiPlxuICAgICAgICAgIHt7IGhpbnQgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiXG4gICAgICAgICAgY2xhc3M9XCJweC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1kZXN0cnVjdGl2ZVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ291bnRyeVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGlkID0gYGNvdW50cnktc2VsZWN0b3ItJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUhpbnRPbkZvY3VzID0gdHJ1ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IGNvdW50cnknO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAneHMnIHwgJ3NtJyB8ICdkZWZhdWx0JyB8ICdsZycgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIGRlZmF1bHRDb3VudHJ5Q29kZSA9ICdHSCc7XG4gIEBJbnB1dCgpIHJldHVyblZhbHVlOiAnb2JqZWN0JyB8ICdpc29BbHBoYTInIHwgJ2RpYWxDb2RlJyB8ICduYW1lJyA9ICdpc29BbHBoYTInO1xuICBASW5wdXQoKSBzaG93TmFtZSA9IHRydWU7XG4gIEBJbnB1dCgpIGV4dGVybmFsRm9jdXNlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uRm9jdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJsdXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIHBvcG92ZXIhOiBQb3BvdmVyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZWFyY2hJbnB1dD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgY291bnRyeUNvZGVzU2VydmljZSA9IGluamVjdChDb3VudHJ5Q29kZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHZhbHVlOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZENvdW50cnk6IGFueSA9IG51bGw7XG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XG4gIHNoYWRvd0NvdW50cmllczogYW55W10gPSBbXTtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgLy8gS2V5Ym9hcmQgbmF2aWdhdGlvbiAoYWN0aXZlLWRlc2NlbmRhbnQpIHN0YXRlIG92ZXIgdGhlIGZpbHRlcmVkIHJvd3NcbiAgYWN0aXZlSW5kZXggPSAtMTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZSAmJiAhdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5pc29BbHBoYTIgPT09IHRoaXMuZGVmYXVsdENvdW50cnlDb2RlXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZXh0ZXJuYWxGb2N1c2VkICE9PSB1bmRlZmluZWQgPyB0aGlzLmV4dGVybmFsRm9jdXNlZCA6IHRoaXMuaXNGb2N1c2VkO1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAnLFxuICAgICAgJ2JnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kJyxcbiAgICAgICdib3JkZXItaW5wdXQgc2hhZG93LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAnaC04IHB4LTIgdGV4dC14cycsXG4gICAgICB0aGlzLnNpemUgPT09ICdzbScgJiYgJ2gtOSBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgJ2gtMTAgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAnaC0xMSBweC00IHRleHQtYmFzZScsXG4gICAgICAvLyBSb3VuZGVkIGNvcm5lcnNcbiAgICAgICdyb3VuZGVkLW1kJyxcbiAgICAgIC8vIEZvY3VzIHN0YXRlXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgW1xuICAgICAgICAnZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLTQnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvMzAnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0wJyxcbiAgICAgICAgJ3NoYWRvdy1ub25lJyxcbiAgICAgICAgdGhpcy5lcnJvciA/ICdmb2N1cy12aXNpYmxlOmJvcmRlci1kZXN0cnVjdGl2ZS84MCcgOiAnZm9jdXMtdmlzaWJsZTpib3JkZXItcHJpbWFyeS84MCcsXG4gICAgICBdLFxuICAgICAgLy8gRXh0ZXJuYWwgZm9jdXMgc3RhdGUgKHdoZW4gY29udHJvbGxlZCBieSBwYXJlbnQpXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiZcbiAgICAgICAgZm9jdXNlZCAmJiBbXG4gICAgICAgICAgJ3JpbmctNCcsXG4gICAgICAgICAgJ3JpbmctcmluZy8zMCcsXG4gICAgICAgICAgJ3Jpbmctb2Zmc2V0LTAnLFxuICAgICAgICAgICdzaGFkb3ctbm9uZScsXG4gICAgICAgICAgdGhpcy5lcnJvciA/ICdib3JkZXItZGVzdHJ1Y3RpdmUvODAnIDogJ2JvcmRlci1wcmltYXJ5LzgwJyxcbiAgICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICAvLyBFcnJvciBzdGF0ZVxuICAgICAgdGhpcy5lcnJvciAmJiBbXG4gICAgICAgICdib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgZm9jdXNlZCAmJiAncmluZy1kZXN0cnVjdGl2ZS8zMCcsXG4gICAgICBdLFxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAgYm9yZGVyLW9wYWNpdHktNTAnLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiAnY3Vyc29yLWRlZmF1bHQgYm9yZGVyLWRhc2hlZCcsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZExhYmVsQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3RleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwJyxcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgJ29wYWNpdHktNTAnXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLnBvcG92ZXI/LmlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnIHx8IHRoaXMuc2l6ZSA9PT0gJ3NtJyA/ICd0ZXh0LVsxNHB4XScgOiAndGV4dC1bMThweF0nLFxuICAgICAgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgJiYgJ29wYWNpdHktMzAnXG4gICAgKTtcbiAgfVxuXG4gIGdldEl0ZW1DbGFzcyhjb3VudHJ5OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTI7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBpbmRleCA9PT0gdGhpcy5hY3RpdmVJbmRleDtcbiAgICByZXR1cm4gY24oXG4gICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTMgcHktMiBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgcm91bmRlZC1zbSB3LWZ1bGwnLFxuICAgICAgaXNTZWxlY3RlZCA/ICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcgOiAnaG92ZXI6YmctYWNjZW50LzUwIHRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAvLyBBY3RpdmUtZGVzY2VuZGFudCAoa2V5Ym9hcmQpIGhpZ2hsaWdodFxuICAgICAgaXNBY3RpdmUgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUluZGV4ID49IDAgJiYgdGhpcy5hY3RpdmVJbmRleCA8IHRoaXMuc2hhZG93Q291bnRyaWVzLmxlbmd0aFxuICAgICAgPyBgJHt0aGlzLmlkfS1vcHRpb24tJHt0aGlzLmFjdGl2ZUluZGV4fWBcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIGdldEZsYWdVcmwoZmxhZ0Jhc2U2NDogc3RyaW5nKTogU2FmZVJlc291cmNlVXJsIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCdkYXRhOmltYWdlLyo7YmFzZTY0LCcgKyBmbGFnQmFzZTY0KTtcbiAgfVxuXG4gIGZpbHRlckNvdW50cmllcyhxdWVyeTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyID0gKHF1ZXJ5IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICB0aGlzLnNoYWRvd0NvdW50cmllcyA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmlsdGVyKFxuICAgICAgYyA9PlxuICAgICAgICBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpIHx8XG4gICAgICAgIGMuZGlhbENvZGUuaW5jbHVkZXMoZmlsdGVyKSB8fFxuICAgICAgICBjLmlzb0FscGhhMi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcilcbiAgICApO1xuICAgIC8vIFJlLWFuY2hvciB0aGUgYWN0aXZlIHJvdyB0byB0aGUgZmlyc3QgbWF0Y2ggYWZ0ZXIgZmlsdGVyaW5nLlxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggPyAwIDogLTE7XG4gICAgdGhpcy5zeW5jQWN0aXZlRGVzY2VuZGFudCgpO1xuICB9XG5cbiAgc2VsZWN0Q291bnRyeShjb3VudHJ5OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0UmV0dXJuVmFsdWUoY291bnRyeSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY291bnRyeSk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHVyblZhbHVlKGNvdW50cnk6IGFueSkge1xuICAgIHN3aXRjaCAodGhpcy5yZXR1cm5WYWx1ZSkge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnk7XG4gICAgICBjYXNlICdpc29BbHBoYTInOlxuICAgICAgICByZXR1cm4gY291bnRyeS5pc29BbHBoYTI7XG4gICAgICBjYXNlICdkaWFsQ29kZSc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5LmRpYWxDb2RlO1xuICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5Lm5hbWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY291bnRyeS5pc29BbHBoYTI7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgdGhpcy5vbkZvY3VzQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5vbkJsdXJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgb25Qb3BvdmVyT3BlbigpIHtcbiAgICAvLyBBbmNob3IgdGhlIGFjdGl2ZSByb3cgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb3VudHJ5IChvciB0aGUgZmlyc3QpLlxuICAgIGNvbnN0IHNlbElkeCA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5XG4gICAgICA/IHRoaXMuc2hhZG93Q291bnRyaWVzLmZpbmRJbmRleChjID0+IGMuaXNvQWxwaGEyID09PSB0aGlzLnNlbGVjdGVkQ291bnRyeS5pc29BbHBoYTIpXG4gICAgICA6IC0xO1xuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBzZWxJZHggPj0gMCA/IHNlbElkeCA6ICh0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggPyAwIDogLTEpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5nZXRTZWFyY2hJbnB1dEVsKCk/LmZvY3VzKCk7XG4gICAgICB0aGlzLnN5bmNBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgICB0aGlzLnNjcm9sbEFjdGl2ZUludG9WaWV3KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBvblBvcG92ZXJDbG9zZSgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5maWx0ZXJDb3VudHJpZXMoJycpO1xuICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICB0aGlzLm9uQmx1cigpO1xuICB9XG5cbiAgLy8gLS0tLSBLZXlib2FyZCBuYXZpZ2F0aW9uIChXQUktQVJJQSBsaXN0Ym94L2NvbWJvYm94IHBhdHRlcm4pIC0tLS1cblxuICBwcml2YXRlIGdldFNlYXJjaElucHV0RWwoKTogSFRNTElucHV0RWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN5bmNBY3RpdmVEZXNjZW5kYW50KCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRTZWFyY2hJbnB1dEVsKCk7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQ7XG4gICAgaWYgKGlkKSBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGlkKTtcbiAgICBlbHNlIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbEFjdGl2ZUludG9WaWV3KCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgMCkgcmV0dXJuO1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZH0tb3B0aW9uLSR7dGhpcy5hY3RpdmVJbmRleH1gKVxuICAgICAgPy5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVBY3RpdmUoZGVsdGE6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5zaGFkb3dDb3VudHJpZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuYWN0aXZlSW5kZXggPCAwXG4gICAgICA/IChkZWx0YSA+IDAgPyAwIDogdGhpcy5zaGFkb3dDb3VudHJpZXMubGVuZ3RoIC0gMSlcbiAgICAgIDogdGhpcy5hY3RpdmVJbmRleCArIGRlbHRhO1xuICAgIC8vIENsYW1wIChubyB3cmFwLCBtYXRjaGluZyBzaGFkY24pLlxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuZXh0LCB0aGlzLnNoYWRvd0NvdW50cmllcy5sZW5ndGggLSAxKSk7XG4gICAgdGhpcy5zeW5jQWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlSW50b1ZpZXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0QWN0aXZlKCkge1xuICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLnNoYWRvd0NvdW50cmllc1t0aGlzLmFjdGl2ZUluZGV4XTtcbiAgICBpZiAoIWNvdW50cnkpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdENvdW50cnkoY291bnRyeSk7IC8vIGNsb3NlcyB0aGUgcG9wb3ZlclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQpPy5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlnZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBpZiAodGhpcy5wb3BvdmVyPy5pc09wZW4pIHJldHVybjsgLy8gb25jZSBvcGVuLCBmb2N1cyBtb3ZlcyB0byB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0VudGVyJyB8fCBrZXkgPT09ICcgJyB8fCBrZXkgPT09ICdIb21lJyB8fCBrZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5wb3BvdmVyLm9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuICAgICAgLy8gQW55IHByaW50YWJsZSBjaGFyYWN0ZXIgb3BlbnMgdGhlIHBvcG92ZXIgKGZvY3VzIG1vdmVzIHRvIHRoZSBzZWFyY2ggYm94KS5cbiAgICAgIHRoaXMucG9wb3Zlci5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5ZG93biB3aGlsZSB0aGUgc2VhcmNoIGlucHV0IGlzIGZvY3VzZWQuIEFycm93cy9FbnRlci9Fc2NhcGUgZHJpdmUgdGhlXG4gIC8vIGxpc3Q7IG90aGVyIGtleXMgKGluY2wuIEhvbWUvRW5kIGZvciBjYXJldCkgZmFsbCB0aHJvdWdoIHRvIHRleHQgZWRpdGluZy5cbiAgb25TZWFyY2hLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXI/LmlzT3BlbikgcmV0dXJuO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLm1vdmVBY3RpdmUoMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgtMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNlbGVjdEFjdGl2ZSgpOyBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKT8uZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZS5pc29BbHBoYTI7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnaXNvQWxwaGEyJykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdkaWFsQ29kZScpIHJldHVybiBjLmRpYWxDb2RlID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICduYW1lJykgcmV0dXJuIGMubmFtZSA9PT0gdmFsdWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iXX0=
|