@tolle_/tolle-ui 0.0.19-beta → 0.0.21-beta

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.
@@ -21,10 +21,12 @@ export class MaskedInputComponent {
21
21
  error = false;
22
22
  size = 'default';
23
23
  returnRaw = false;
24
+ hideHintOnFocus = true;
24
25
  inputEl;
25
26
  hasPrefix = false;
26
27
  hasSuffix = false;
27
28
  displayValue = '';
29
+ isFocused = false;
28
30
  tokens = {
29
31
  '0': /\d/, '9': /\d/, 'a': /[a-z]/i, 'A': /[a-z]/i, '*': /[a-z0-9]/i
30
32
  };
@@ -43,19 +45,71 @@ export class MaskedInputComponent {
43
45
  this.cdr.detectChanges();
44
46
  }
45
47
  }
48
+ get computedLabelClass() {
49
+ return cn("text-sm font-medium text-foreground leading-none transition-opacity duration-200", this.disabled && "opacity-50");
50
+ }
46
51
  get computedContainerClass() {
47
- return cn("group relative flex items-center w-full rounded-md border transition-all shadow-sm", "bg-background ring-offset-background",
52
+ return cn(
53
+ // Base styles
54
+ "group relative flex items-center w-full rounded-md border transition-all duration-200", "bg-background",
55
+ // Border and shadow
56
+ "border-input shadow-sm",
48
57
  // Sizing
49
- this.size === 'xs' && "h-8 px-2 gap-1.5", this.size === 'sm' && "h-9 px-3 gap-2", this.size === 'default' && "h-10 px-3 gap-2", this.size === 'lg' && "h-11 px-4 gap-3",
50
- // Interaction States (Inherited from Input focus style)
51
- !(this.readonly || this.disabled) && "focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1",
52
- // Colors & Borders
53
- this.error ? "border-destructive focus-within:ring-destructive" : "border-input",
54
- // Disabled vs Readonly styling
55
- this.disabled && "cursor-not-allowed opacity-50", this.readonly && "cursor-default border-dashed focus-within:ring-0", this.containerClass);
58
+ this.size === 'xs' && "h-8 px-2 gap-1.5 text-xs", this.size === 'sm' && "h-9 px-3 gap-2 text-sm", this.size === 'default' && "h-10 px-3 gap-2 text-sm", this.size === 'lg' && "h-11 px-4 gap-3 text-base",
59
+ // Focus state - SIMPLE LIKE ZARDUI
60
+ !(this.readonly || this.disabled) && [
61
+ "focus-within:border-primary/80",
62
+ "focus-within:ring-4",
63
+ "focus-within:ring-ring/30",
64
+ "focus-within:ring-offset-0",
65
+ "focus-within:shadow-none",
66
+ ],
67
+ // Error state
68
+ this.error && [
69
+ "border-destructive",
70
+ !(this.readonly || this.disabled) && [
71
+ "focus-within:border-destructive/80",
72
+ "focus-within:ring-destructive/30"
73
+ ]
74
+ ],
75
+ // Disabled state
76
+ this.disabled && [
77
+ "cursor-not-allowed opacity-50",
78
+ "border-opacity-50"
79
+ ],
80
+ // Readonly state
81
+ this.readonly && [
82
+ "cursor-default",
83
+ "border-dashed",
84
+ !this.disabled && "focus-within:ring-0 focus-within:border-opacity-100"
85
+ ], this.containerClass);
56
86
  }
57
87
  get computedInputClass() {
58
- return cn("flex-1 bg-transparent border-none p-0 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-0", this.size === 'xs' && "text-xs", this.size === 'lg' && "text-base", this.disabled && "cursor-not-allowed", this.readonly && "cursor-default", this.class);
88
+ return cn(
89
+ // Base styles
90
+ "flex-1 bg-transparent border-none p-0", "placeholder:text-muted-foreground",
91
+ // Remove all default focus styles
92
+ "focus:outline-none focus:ring-0 focus:shadow-none",
93
+ // Text sizing
94
+ this.size === 'xs' && "text-xs", this.size === 'sm' && "text-sm", this.size === 'default' && "text-sm", this.size === 'lg' && "text-base",
95
+ // Cursor states
96
+ this.disabled && "cursor-not-allowed", this.readonly && "cursor-default",
97
+ // Text color
98
+ "text-foreground",
99
+ // Selection color
100
+ "selection:bg-primary/20 selection:text-foreground", this.class);
101
+ }
102
+ focusInput() {
103
+ if (!this.disabled && this.inputEl) {
104
+ this.inputEl.nativeElement.focus();
105
+ }
106
+ }
107
+ onFocus() {
108
+ this.isFocused = true;
109
+ }
110
+ onBlur() {
111
+ this.isFocused = false;
112
+ this.onTouched();
59
113
  }
60
114
  // --- Masking Logic ---
61
115
  onInput(event) {
@@ -94,20 +148,26 @@ export class MaskedInputComponent {
94
148
  }
95
149
  return formatted;
96
150
  }
97
- unmask(val) { return val.replace(/[^a-zA-Z0-9]/g, ''); }
151
+ unmask(val) {
152
+ return val.replace(/[^a-zA-Z0-9]/g, '');
153
+ }
98
154
  writeValue(value) {
99
155
  this.displayValue = value ? this.applyMask(this.unmask(value.toString())) : '';
100
156
  this.cdr.markForCheck();
101
157
  }
102
- registerOnChange(fn) { this.onChange = fn; }
103
- registerOnTouched(fn) { this.onTouched = fn; }
158
+ registerOnChange(fn) {
159
+ this.onChange = fn;
160
+ }
161
+ registerOnTouched(fn) {
162
+ this.onTouched = fn;
163
+ }
104
164
  setDisabledState(isDisabled) {
105
165
  this.disabled = isDisabled;
106
166
  this.cdr.markForCheck();
107
167
  }
108
168
  cn = cn;
109
169
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MaskedInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
110
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MaskedInputComponent, isStandalone: true, selector: "tolle-masked-input", inputs: { id: "id", label: "label", hint: "hint", errorMessage: "errorMessage", mask: "mask", placeholder: "placeholder", type: "type", disabled: "disabled", readonly: "readonly", class: "class", containerClass: "containerClass", error: "error", size: "size", returnRaw: "returnRaw" }, providers: [
170
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MaskedInputComponent, isStandalone: true, selector: "tolle-masked-input", inputs: { id: "id", label: "label", hint: "hint", errorMessage: "errorMessage", mask: "mask", placeholder: "placeholder", type: "type", disabled: "disabled", readonly: "readonly", class: "class", containerClass: "containerClass", error: "error", size: "size", returnRaw: "returnRaw", hideHintOnFocus: "hideHintOnFocus" }, providers: [
111
171
  {
112
172
  provide: NG_VALUE_ACCESSOR,
113
173
  useExisting: forwardRef(() => MaskedInputComponent),
@@ -118,15 +178,17 @@ export class MaskedInputComponent {
118
178
  <label
119
179
  *ngIf="label"
120
180
  [for]="id"
121
- [class.opacity-50]="disabled"
122
- class="text-sm font-medium text-foreground leading-none transition-opacity"
181
+ [class]="computedLabelClass"
123
182
  >
124
183
  {{ label }}
125
184
  </label>
126
185
 
127
- <div [class]="computedContainerClass">
186
+ <div
187
+ [class]="computedContainerClass"
188
+ (click)="focusInput()"
189
+ >
128
190
  <!-- Prefix Icon -->
129
- <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors">
191
+ <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors duration-200">
130
192
  <ng-content select="[prefix]"></ng-content>
131
193
  </div>
132
194
 
@@ -139,21 +201,32 @@ export class MaskedInputComponent {
139
201
  [readOnly]="readonly"
140
202
  [value]="displayValue"
141
203
  (input)="onInput($event)"
142
- (blur)="onTouched()"
204
+ (blur)="onBlur()"
205
+ (focus)="onFocus()"
143
206
  [class]="computedInputClass"
207
+ [attr.aria-invalid]="error"
208
+ [attr.aria-describedby]="error && errorMessage ? id + '-error' : null"
144
209
  />
145
210
 
146
211
  <!-- Suffix Icon -->
147
- <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors">
212
+ <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors duration-200">
148
213
  <ng-content select="[suffix]"></ng-content>
149
214
  </div>
150
215
  </div>
151
216
 
152
217
  <ng-container *ngIf="!disabled">
153
- <p *ngIf="hint && !error" class="text-xs text-muted-foreground px-1">
218
+ <p
219
+ *ngIf="hint && !error"
220
+ class="text-xs text-muted-foreground px-1 transition-opacity duration-200"
221
+ [class.opacity-0]="isFocused && hideHintOnFocus"
222
+ >
154
223
  {{ hint }}
155
224
  </p>
156
- <p *ngIf="error && errorMessage" class="text-xs text-destructive px-1">
225
+ <p
226
+ *ngIf="error && errorMessage"
227
+ [id]="id + '-error'"
228
+ class="text-xs text-destructive px-1"
229
+ >
157
230
  {{ errorMessage }}
158
231
  </p>
159
232
  </ng-container>
@@ -178,15 +251,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
178
251
  <label
179
252
  *ngIf="label"
180
253
  [for]="id"
181
- [class.opacity-50]="disabled"
182
- class="text-sm font-medium text-foreground leading-none transition-opacity"
254
+ [class]="computedLabelClass"
183
255
  >
184
256
  {{ label }}
185
257
  </label>
186
258
 
187
- <div [class]="computedContainerClass">
259
+ <div
260
+ [class]="computedContainerClass"
261
+ (click)="focusInput()"
262
+ >
188
263
  <!-- Prefix Icon -->
189
- <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors">
264
+ <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors duration-200">
190
265
  <ng-content select="[prefix]"></ng-content>
191
266
  </div>
192
267
 
@@ -199,21 +274,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
199
274
  [readOnly]="readonly"
200
275
  [value]="displayValue"
201
276
  (input)="onInput($event)"
202
- (blur)="onTouched()"
277
+ (blur)="onBlur()"
278
+ (focus)="onFocus()"
203
279
  [class]="computedInputClass"
280
+ [attr.aria-invalid]="error"
281
+ [attr.aria-describedby]="error && errorMessage ? id + '-error' : null"
204
282
  />
205
283
 
206
284
  <!-- Suffix Icon -->
207
- <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors">
285
+ <div class="flex items-center text-muted-foreground group-focus-within:text-primary transition-colors duration-200">
208
286
  <ng-content select="[suffix]"></ng-content>
209
287
  </div>
210
288
  </div>
211
289
 
212
290
  <ng-container *ngIf="!disabled">
213
- <p *ngIf="hint && !error" class="text-xs text-muted-foreground px-1">
291
+ <p
292
+ *ngIf="hint && !error"
293
+ class="text-xs text-muted-foreground px-1 transition-opacity duration-200"
294
+ [class.opacity-0]="isFocused && hideHintOnFocus"
295
+ >
214
296
  {{ hint }}
215
297
  </p>
216
- <p *ngIf="error && errorMessage" class="text-xs text-destructive px-1">
298
+ <p
299
+ *ngIf="error && errorMessage"
300
+ [id]="id + '-error'"
301
+ class="text-xs text-destructive px-1"
302
+ >
217
303
  {{ errorMessage }}
218
304
  </p>
219
305
  </ng-container>
@@ -248,8 +334,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
248
334
  type: Input
249
335
  }], returnRaw: [{
250
336
  type: Input
337
+ }], hideHintOnFocus: [{
338
+ type: Input
251
339
  }], inputEl: [{
252
340
  type: ViewChild,
253
341
  args: ['inputEl', { static: true }]
254
342
  }] } });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFza2VkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbWFza2VkLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWMsU0FBUyxFQUVwRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7QUE0RGhDLE1BQU0sT0FBTyxvQkFBb0I7SUE2Qlg7SUFBd0I7SUE1Qm5DLEVBQUUsR0FBVyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkUsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFZLEtBQUssQ0FBQztJQUN2QixJQUFJLEdBQW1DLFNBQVMsQ0FBQztJQUNqRCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWEsT0FBTyxDQUFnQztJQUUvRSxTQUFTLEdBQUcsS0FBSyxD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LFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q1Q7aUJBQ0Y7K0dBRVUsRUFBRTtzQkFBVixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFa0MsT0FBTztzQkFBOUMsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgRWxlbWVudFJlZiwgVmlld0NoaWxkLFxuICBBZnRlckNvbnRlbnRDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtbWFza2VkLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hc2tlZElucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xLjUgdy1mdWxsXCI+XG4gICAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICAgIFtmb3JdPVwiaWRcIlxuICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJkaXNhYmxlZFwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgbGVhZGluZy1ub25lIHRyYW5zaXRpb24tb3BhY2l0eVwiXG4gICAgICA+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENvbnRhaW5lckNsYXNzXCI+XG4gICAgICAgIDwhLS0gUHJlZml4IEljb24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZm9jdXMtd2l0aGluOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjaW5wdXRFbFxuICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgIFtjbGFzc109XCJjb21wdXRlZElucHV0Q2xhc3NcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDwhLS0gU3VmZml4IEljb24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZm9jdXMtd2l0aGluOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgIDxwICpuZ0lmPVwiaGludCAmJiAhZXJyb3JcIiBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTFcIj5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgKm5nSWY9XCJlcnJvciAmJiBlcnJvck1lc3NhZ2VcIiBjbGFzcz1cInRleHQteHMgdGV4dC1kZXN0cnVjdGl2ZSBweC0xXCI+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE1hc2tlZElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBASW5wdXQoKSBpZDogc3RyaW5nID0gYG1hc2tlZC1pbnB1dC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtYXNrOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgdHlwZSA9ICd0ZXh0JztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAneHMnIHwgJ3NtJyB8ICdkZWZhdWx0JyB8ICdsZycgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHJldHVyblJhdyA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dEVsITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBoYXNQcmVmaXggPSBmYWxzZTtcbiAgaGFzU3VmZml4ID0gZmFsc2U7XG4gIGRpc3BsYXlWYWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgdG9rZW5zOiB7IFtrZXk6IHN0cmluZ106IFJlZ0V4cCB9ID0ge1xuICAgICcwJzogL1xcZC8sICc5JzogL1xcZC8sICdhJzogL1thLXpdL2ksICdBJzogL1thLXpdL2ksICcqJzogL1thLXowLTldL2lcbiAgfTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3ByZWZpeF0nKTtcbiAgICBjb25zdCBzdWZmaXggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3N1ZmZpeF0nKTtcblxuICAgIGlmICh0aGlzLmhhc1ByZWZpeCAhPT0gISFwcmVmaXggfHwgdGhpcy5oYXNTdWZmaXggIT09ICEhc3VmZml4KSB7XG4gICAgICB0aGlzLmhhc1ByZWZpeCA9ICEhcHJlZml4O1xuICAgICAgdGhpcy5oYXNTdWZmaXggPSAhIXN1ZmZpeDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRDb250YWluZXJDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcImdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBzaGFkb3ctc21cIixcbiAgICAgIFwiYmctYmFja2dyb3VuZCByaW5nLW9mZnNldC1iYWNrZ3JvdW5kXCIsXG5cbiAgICAgIC8vIFNpemluZ1xuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmIFwiaC04IHB4LTIgZ2FwLTEuNVwiLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmIFwiaC05IHB4LTMgZ2FwLTJcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmIFwiaC0xMCBweC0zIGdhcC0yXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgXCJoLTExIHB4LTQgZ2FwLTNcIixcblxuICAgICAgLy8gSW50ZXJhY3Rpb24gU3RhdGVzIChJbmhlcml0ZWQgZnJvbSBJbnB1dCBmb2N1cyBzdHlsZSlcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBcImZvY3VzLXdpdGhpbjpyaW5nLTIgZm9jdXMtd2l0aGluOnJpbmctcmluZyBmb2N1cy13aXRoaW46cmluZy1vZmZzZXQtMVwiLFxuXG4gICAgICAvLyBDb2xvcnMgJiBCb3JkZXJzXG4gICAgICB0aGlzLmVycm9yID8gXCJib3JkZXItZGVzdHJ1Y3RpdmUgZm9jdXMtd2l0aGluOnJpbmctZGVzdHJ1Y3RpdmVcIiA6IFwiYm9yZGVyLWlucHV0XCIsXG5cbiAgICAgIC8vIERpc2FibGVkIHZzIFJlYWRvbmx5IHN0eWxpbmdcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgXCJjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MFwiLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiBcImN1cnNvci1kZWZhdWx0IGJvcmRlci1kYXNoZWQgZm9jdXMtd2l0aGluOnJpbmctMFwiLFxuXG4gICAgICB0aGlzLmNvbnRhaW5lckNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZElucHV0Q2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgXCJmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcC0wIHRleHQtc20gcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTBcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiBcInRleHQteHNcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiBcInRleHQtYmFzZVwiLFxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiBcImN1cnNvci1ub3QtYWxsb3dlZFwiLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiBcImN1cnNvci1kZWZhdWx0XCIsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLSBNYXNraW5nIExvZ2ljIC0tLVxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHJhdyA9IHRoaXMudW5tYXNrKGlucHV0LnZhbHVlKTtcbiAgICBjb25zdCBtYXNrZWQgPSB0aGlzLmFwcGx5TWFzayhyYXcpO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gbWFza2VkO1xuICAgIGlucHV0LnZhbHVlID0gbWFza2VkO1xuICAgIHRoaXMucmV0dXJuUmF3ID8gdGhpcy5vbkNoYW5nZShyYXcpIDogdGhpcy5vbkNoYW5nZShtYXNrZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseU1hc2socmF3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJhd0luZGV4ID0gMDsgbGV0IGZvcm1hdHRlZCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmF3SW5kZXggPj0gcmF3VmFsdWUubGVuZ3RoKSBicmVhaztcbiAgICAgIGNvbnN0IG1hc2tDaGFyID0gdGhpcy5tYXNrW2ldO1xuICAgICAgY29uc3QgcmF3Q2hhciA9IHJhd1ZhbHVlW3Jhd0luZGV4XTtcbiAgICAgIGlmICh0aGlzLnRva2Vuc1ttYXNrQ2hhcl0pIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zW21hc2tDaGFyXS50ZXN0KHJhd0NoYXIpKSB7IGZvcm1hdHRlZCArPSByYXdDaGFyOyByYXdJbmRleCsrOyB9XG4gICAgICAgIGVsc2UgeyByYXdJbmRleCsrOyBpLS07IH1cbiAgICAgIH0gZWxzZSB7IGZvcm1hdHRlZCArPSBtYXNrQ2hhcjsgaWYgKHJhd0NoYXIgPT09IG1hc2tDaGFyKSByYXdJbmRleCsrOyB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gIH1cblxuICBwcml2YXRlIHVubWFzayh2YWw6IHN0cmluZyk6IHN0cmluZyB7IHJldHVybiB2YWwucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKTsgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUgPyB0aGlzLmFwcGx5TWFzayh0aGlzLnVubWFzayh2YWx1ZS50b1N0cmluZygpKSkgOiAnJztcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cbiJdfQ==
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFza2VkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbWFza2VkLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWMsU0FBUyxFQUVwRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7QUF5RWhDLE1BQU0sT0FBTyxvQkFBb0I7SUErQlg7SUFBd0I7SUE5Qm5DLEVBQUUsR0FBVyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkUsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFZLEtBQUssQ0FBQztJQUN2QixJQUFJLEdBQW1DLFNBQVMsQ0FBQztJQUNqRCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGVBQWUsR0FBWSxJQUFJLENBQUM7SUFFRCxPQUFPLENB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aEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztvQkFDcEMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwRFQ7aUJBQ0Y7K0dBRVUsRUFBRTtzQkFBVixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVrQyxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1tYXNrZWQtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWFza2VkSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEuNSB3LWZ1bGxcIj5cbiAgICAgIDxsYWJlbFxuICAgICAgICAqbmdJZj1cImxhYmVsXCJcbiAgICAgICAgW2Zvcl09XCJpZFwiXG4gICAgICAgIFtjbGFzc109XCJjb21wdXRlZExhYmVsQ2xhc3NcIlxuICAgICAgPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGRpdlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDb250YWluZXJDbGFzc1wiXG4gICAgICAgIChjbGljayk9XCJmb2N1c0lucHV0KClcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFByZWZpeCBJY29uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGdyb3VwLWZvY3VzLXdpdGhpbjp0ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3ByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNpbnB1dEVsXG4gICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkSW5wdXRDbGFzc1wiXG4gICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImVycm9yICYmIGVycm9yTWVzc2FnZSA/IGlkICsgJy1lcnJvcicgOiBudWxsXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8IS0tIFN1ZmZpeCBJY29uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGdyb3VwLWZvY3VzLXdpdGhpbjp0ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGlzYWJsZWRcIj5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImhpbnQgJiYgIWVycm9yXCJcbiAgICAgICAgICBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTEgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ZvY3VzZWQgJiYgaGlkZUhpbnRPbkZvY3VzXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGhpbnQgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZGVzdHJ1Y3RpdmUgcHgtMVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTWFza2VkSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBgbWFza2VkLWlucHV0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaGludDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG1hc2s6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgcmV0dXJuUmF3ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1czogYm9vbGVhbiA9IHRydWU7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0RWwhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIGhhc1ByZWZpeCA9IGZhbHNlO1xuICBoYXNTdWZmaXggPSBmYWxzZTtcbiAgZGlzcGxheVZhbHVlID0gJyc7XG4gIGlzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdG9rZW5zOiB7IFtrZXk6IHN0cmluZ106IFJlZ0V4cCB9ID0ge1xuICAgICcwJzogL1xcZC8sICc5JzogL1xcZC8sICdhJzogL1thLXpdL2ksICdBJzogL1thLXpdL2ksICcqJzogL1thLXowLTldL2lcbiAgfTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3ByZWZpeF0nKTtcbiAgICBjb25zdCBzdWZmaXggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3N1ZmZpeF0nKTtcblxuICAgIGlmICh0aGlzLmhhc1ByZWZpeCAhPT0gISFwcmVmaXggfHwgdGhpcy5oYXNTdWZmaXggIT09ICEhc3VmZml4KSB7XG4gICAgICB0aGlzLmhhc1ByZWZpeCA9ICEhcHJlZml4O1xuICAgICAgdGhpcy5oYXNTdWZmaXggPSAhIXN1ZmZpeDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRMYWJlbENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIFwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgbGVhZGluZy1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIixcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgXCJvcGFjaXR5LTUwXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkQ29udGFpbmVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gQmFzZSBzdHlsZXNcbiAgICAgIFwiZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMFwiLFxuICAgICAgXCJiZy1iYWNrZ3JvdW5kXCIsXG5cbiAgICAgIC8vIEJvcmRlciBhbmQgc2hhZG93XG4gICAgICBcImJvcmRlci1pbnB1dCBzaGFkb3ctc21cIixcblxuICAgICAgLy8gU2l6aW5nXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgXCJoLTggcHgtMiBnYXAtMS41IHRleHQteHNcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiBcImgtOSBweC0zIGdhcC0yIHRleHQtc21cIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmIFwiaC0xMCBweC0zIGdhcC0yIHRleHQtc21cIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiBcImgtMTEgcHgtNCBnYXAtMyB0ZXh0LWJhc2VcIixcblxuICAgICAgLy8gRm9jdXMgc3RhdGUgLSBTSU1QTEUgTElLRSBaQVJEVUlcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgIFwiZm9jdXMtd2l0aGluOmJvcmRlci1wcmltYXJ5LzgwXCIsXG4gICAgICAgIFwiZm9jdXMtd2l0aGluOnJpbmctNFwiLFxuICAgICAgICBcImZvY3VzLXdpdGhpbjpyaW5nLXJpbmcvMzBcIixcbiAgICAgICAgXCJmb2N1cy13aXRoaW46cmluZy1vZmZzZXQtMFwiLFxuICAgICAgICBcImZvY3VzLXdpdGhpbjpzaGFkb3ctbm9uZVwiLFxuICAgICAgXSxcblxuICAgICAgLy8gRXJyb3Igc3RhdGVcbiAgICAgIHRoaXMuZXJyb3IgJiYgW1xuICAgICAgICBcImJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuICAgICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgW1xuICAgICAgICAgIFwiZm9jdXMtd2l0aGluOmJvcmRlci1kZXN0cnVjdGl2ZS84MFwiLFxuICAgICAgICAgIFwiZm9jdXMtd2l0aGluOnJpbmctZGVzdHJ1Y3RpdmUvMzBcIlxuICAgICAgICBdXG4gICAgICBdLFxuXG4gICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiBbXG4gICAgICAgIFwiY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTBcIixcbiAgICAgICAgXCJib3JkZXItb3BhY2l0eS01MFwiXG4gICAgICBdLFxuXG4gICAgICAvLyBSZWFkb25seSBzdGF0ZVxuICAgICAgdGhpcy5yZWFkb25seSAmJiBbXG4gICAgICAgIFwiY3Vyc29yLWRlZmF1bHRcIixcbiAgICAgICAgXCJib3JkZXItZGFzaGVkXCIsXG4gICAgICAgICF0aGlzLmRpc2FibGVkICYmIFwiZm9jdXMtd2l0aGluOnJpbmctMCBmb2N1cy13aXRoaW46Ym9yZGVyLW9wYWNpdHktMTAwXCJcbiAgICAgIF0sXG5cbiAgICAgIHRoaXMuY29udGFpbmVyQ2xhc3NcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkSW5wdXRDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAvLyBCYXNlIHN0eWxlc1xuICAgICAgXCJmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcC0wXCIsXG4gICAgICBcInBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiLFxuXG4gICAgICAvLyBSZW1vdmUgYWxsIGRlZmF1bHQgZm9jdXMgc3R5bGVzXG4gICAgICBcImZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6c2hhZG93LW5vbmVcIixcblxuICAgICAgLy8gVGV4dCBzaXppbmdcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiBcInRleHQteHNcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiBcInRleHQtc21cIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmIFwidGV4dC1zbVwiLFxuICAgICAgdGhpcy5zaXplID09PSAnbGcnICYmIFwidGV4dC1iYXNlXCIsXG5cbiAgICAgIC8vIEN1cnNvciBzdGF0ZXNcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgXCJjdXJzb3Itbm90LWFsbG93ZWRcIixcbiAgICAgIHRoaXMucmVhZG9ubHkgJiYgXCJjdXJzb3ItZGVmYXVsdFwiLFxuXG4gICAgICAvLyBUZXh0IGNvbG9yXG4gICAgICBcInRleHQtZm9yZWdyb3VuZFwiLFxuXG4gICAgICAvLyBTZWxlY3Rpb24gY29sb3JcbiAgICAgIFwic2VsZWN0aW9uOmJnLXByaW1hcnkvMjAgc2VsZWN0aW9uOnRleHQtZm9yZWdyb3VuZFwiLFxuXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuaW5wdXRFbCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvLyAtLS0gTWFza2luZyBMb2dpYyAtLS1cbiAgb25JbnB1dChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCByYXcgPSB0aGlzLnVubWFzayhpbnB1dC52YWx1ZSk7XG4gICAgY29uc3QgbWFza2VkID0gdGhpcy5hcHBseU1hc2socmF3KTtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG1hc2tlZDtcbiAgICBpbnB1dC52YWx1ZSA9IG1hc2tlZDtcbiAgICB0aGlzLnJldHVyblJhdyA/IHRoaXMub25DaGFuZ2UocmF3KSA6IHRoaXMub25DaGFuZ2UobWFza2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNYXNrKHJhd1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByYXdJbmRleCA9IDA7XG4gICAgbGV0IGZvcm1hdHRlZCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmF3SW5kZXggPj0gcmF3VmFsdWUubGVuZ3RoKSBicmVhaztcbiAgICAgIGNvbnN0IG1hc2tDaGFyID0gdGhpcy5tYXNrW2ldO1xuICAgICAgY29uc3QgcmF3Q2hhciA9IHJhd1ZhbHVlW3Jhd0luZGV4XTtcbiAgICAgIGlmICh0aGlzLnRva2Vuc1ttYXNrQ2hhcl0pIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zW21hc2tDaGFyXS50ZXN0KHJhd0NoYXIpKSB7XG4gICAgICAgICAgZm9ybWF0dGVkICs9IHJhd0NoYXI7XG4gICAgICAgICAgcmF3SW5kZXgrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByYXdJbmRleCsrO1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0dGVkICs9IG1hc2tDaGFyO1xuICAgICAgICBpZiAocmF3Q2hhciA9PT0gbWFza0NoYXIpIHJhd0luZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gIH1cblxuICBwcml2YXRlIHVubWFzayh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJycpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB2YWx1ZSA/IHRoaXMuYXBwbHlNYXNrKHRoaXMudW5tYXNrKHZhbHVlLnRvU3RyaW5nKCkpKSA6ICcnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuIl19
@@ -157,7 +157,7 @@ export class MultiSelectComponent {
157
157
  </div>
158
158
  </div>
159
159
  </div>
160
- `, 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"] }] });
160
+ `, 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"] }] });
161
161
  }
162
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MultiSelectComponent, decorators: [{
163
163
  type: Component,
@@ -5,23 +5,42 @@ import * as i0 from "@angular/core";
5
5
  export class OtpSlotComponent {
6
6
  char = '';
7
7
  isActive = false;
8
- isFirst = false; // New Input
9
- isLast = false; // New Input
8
+ isFirst = false;
9
+ isLast = false;
10
10
  class = '';
11
11
  cn = cn;
12
+ get computedClass() {
13
+ return cn(
14
+ // Base styles (matching input container)
15
+ 'relative flex h-10 w-10 items-center justify-center', 'transition-all duration-200', 'text-center font-medium select-none',
16
+ // Border styling - exactly like input
17
+ 'border border-input shadow-sm bg-background',
18
+ // FOCUS STYLING - EXACTLY LIKE INPUT COMPONENT
19
+ this.isActive && [
20
+ // Darker border on focus
21
+ 'border-primary/80',
22
+ // Remove shadow on focus
23
+ 'shadow-none',
24
+ // Focus ring with same styling as input
25
+ 'ring-4',
26
+ 'ring-ring/30',
27
+ 'ring-offset-0',
28
+ // Ensure it's above other slots
29
+ 'z-10'
30
+ ],
31
+ // Filled state
32
+ this.char && !this.isActive && 'border-primary/60',
33
+ // Border radius
34
+ this.isFirst && 'rounded-l-md', this.isLast && 'rounded-r-md',
35
+ // Remove left border for all but first slot
36
+ !this.isFirst && '-ml-px', this.class);
37
+ }
12
38
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OtpSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
39
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: OtpSlotComponent, isStandalone: true, selector: "tolle-otp-slot", inputs: { char: "char", isActive: "isActive", isFirst: "isFirst", isLast: "isLast", class: "class" }, ngImport: i0, template: `
14
- <div [class]="cn(
15
- 'relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all',
16
- 'bg-background',
17
- isFirst ? 'rounded-l-md border-l' : '',
18
- isLast ? 'rounded-r-md' : '',
19
- isActive ? 'z-10 ring-2 ring-ring ring-offset-background' : '',
20
- class
21
- )">
22
- {{ char || '' }}
40
+ <div [class]="computedClass">
41
+ <span class="text-lg font-medium">{{ char || '' }}</span>
23
42
  <div *ngIf="isActive && !char" class="pointer-events-none absolute inset-0 flex items-center justify-center">
24
- <div class="h-4 w-px animate-caret-blink bg-foreground duration-1000"></div>
43
+ <div class="h-6 w-0.5 animate-caret-blink bg-foreground"></div>
25
44
  </div>
26
45
  </div>
27
46
  `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -33,17 +52,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
33
52
  standalone: true,
34
53
  imports: [NgIf],
35
54
  template: `
36
- <div [class]="cn(
37
- 'relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all',
38
- 'bg-background',
39
- isFirst ? 'rounded-l-md border-l' : '',
40
- isLast ? 'rounded-r-md' : '',
41
- isActive ? 'z-10 ring-2 ring-ring ring-offset-background' : '',
42
- class
43
- )">
44
- {{ char || '' }}
55
+ <div [class]="computedClass">
56
+ <span class="text-lg font-medium">{{ char || '' }}</span>
45
57
  <div *ngIf="isActive && !char" class="pointer-events-none absolute inset-0 flex items-center justify-center">
46
- <div class="h-4 w-px animate-caret-blink bg-foreground duration-1000"></div>
58
+ <div class="h-6 w-0.5 animate-caret-blink bg-foreground"></div>
47
59
  </div>
48
60
  </div>
49
61
  `
@@ -59,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
59
71
  }], class: [{
60
72
  type: Input
61
73
  }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RwLXNsb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9vdHAtc2xvdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBc0J2QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLElBQUksR0FBdUIsRUFBRSxDQUFDO0lBQzlCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsT0FBTyxHQUFZLEtBQUssQ0FBQyxDQUFDLFlBQVk7SUFDdEMsTUFBTSxHQUFZLEtBQUssQ0FBQyxDQUFFLFlBQVk7SUFDdEMsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNsQixFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQU5QLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLGdMQWhCakI7Ozs7Ozs7Ozs7Ozs7O0dBY1QsNERBZlMsSUFBSTs7NEZBaUJILGdCQUFnQjtrQkFwQjVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztvQkFDZixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7aUJBQ0Y7OEJBRVUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gXCIuL3V0aWxzL2NuXCI7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtb3RwLXNsb3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY24oXG4gICAgICAncmVsYXRpdmUgZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci15IGJvcmRlci1yIGJvcmRlci1pbnB1dCB0ZXh0LXNtIHRyYW5zaXRpb24tYWxsJyxcbiAgICAgICdiZy1iYWNrZ3JvdW5kJyxcbiAgICAgIGlzRmlyc3QgPyAncm91bmRlZC1sLW1kIGJvcmRlci1sJyA6ICcnLFxuICAgICAgaXNMYXN0ID8gJ3JvdW5kZWQtci1tZCcgOiAnJyxcbiAgICAgIGlzQWN0aXZlID8gJ3otMTAgcmluZy0yIHJpbmctcmluZyByaW5nLW9mZnNldC1iYWNrZ3JvdW5kJyA6ICcnLFxuICAgICAgY2xhc3NcbiAgICApXCI+XG4gICAgICB7eyBjaGFyIHx8ICcnIH19XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNBY3RpdmUgJiYgIWNoYXJcIiBjbGFzcz1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IHctcHggYW5pbWF0ZS1jYXJldC1ibGluayBiZy1mb3JlZ3JvdW5kIGR1cmF0aW9uLTEwMDBcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE90cFNsb3RDb21wb25lbnQge1xuICBASW5wdXQoKSBjaGFyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgQElucHV0KCkgaXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNGaXJzdDogYm9vbGVhbiA9IGZhbHNlOyAvLyBOZXcgSW5wdXRcbiAgQElucHV0KCkgaXNMYXN0OiBib29sZWFuID0gZmFsc2U7ICAvLyBOZXcgSW5wdXRcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RwLXNsb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9vdHAtc2xvdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZXZDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsSUFBSSxHQUF1QixFQUFFLENBQUM7SUFDOUIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNsQixFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRWxCLElBQUksYUFBYTtRQUNmLE9BQU8sRUFBRTtRQUNQLHlDQUF5QztRQUN6QyxxREFBcUQsRUFDckQsNkJBQTZCLEVBQzdCLHFDQUFxQztRQUVyQyxzQ0FBc0M7UUFDdEMsNkNBQTZDO1FBRTdDLCtDQUErQztRQUMvQyxJQUFJLENBQUMsUUFBUSxJQUFJO1lBQ2YseUJBQXlCO1lBQ3pCLG1CQUFtQjtZQUNuQix5QkFBeUI7WUFDekIsYUFBYTtZQUNiLHdDQUF3QztZQUN4QyxRQUFRO1lBQ1IsY0FBYztZQUNkLGVBQWU7WUFDZixnQ0FBZ0M7WUFDaEMsTUFBTTtTQUNQO1FBRUQsZUFBZTtRQUNmLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLG1CQUFtQjtRQUVsRCxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxjQUFjLEVBQzlCLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYztRQUU3Qiw0Q0FBNEM7UUFDNUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsRUFFekIsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO0lBQ0osQ0FBQzt3R0E1Q1UsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsZ0xBVGpCOzs7Ozs7O0dBT1QsNERBUlMsSUFBSTs7NEZBVUgsZ0JBQWdCO2tCQWI1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ2YsUUFBUSxFQUFFOzs7Ozs7O0dBT1Q7aUJBQ0Y7OEJBRVUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gXCIuL3V0aWxzL2NuXCI7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtb3RwLXNsb3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+e3sgY2hhciB8fCAnJyB9fTwvc3Bhbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0FjdGl2ZSAmJiAhY2hhclwiIGNsYXNzPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTYgdy0wLjUgYW5pbWF0ZS1jYXJldC1ibGluayBiZy1mb3JlZ3JvdW5kXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBPdHBTbG90Q29tcG9uZW50IHtcbiAgQElucHV0KCkgY2hhcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG4gIEBJbnB1dCgpIGlzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMYXN0OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gQmFzZSBzdHlsZXMgKG1hdGNoaW5nIGlucHV0IGNvbnRhaW5lcilcbiAgICAgICdyZWxhdGl2ZSBmbGV4IGgtMTAgdy0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgJ3RyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCcsXG4gICAgICAndGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gc2VsZWN0LW5vbmUnLFxuXG4gICAgICAvLyBCb3JkZXIgc3R5bGluZyAtIGV4YWN0bHkgbGlrZSBpbnB1dFxuICAgICAgJ2JvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXNtIGJnLWJhY2tncm91bmQnLFxuXG4gICAgICAvLyBGT0NVUyBTVFlMSU5HIC0gRVhBQ1RMWSBMSUtFIElOUFVUIENPTVBPTkVOVFxuICAgICAgdGhpcy5pc0FjdGl2ZSAmJiBbXG4gICAgICAgIC8vIERhcmtlciBib3JkZXIgb24gZm9jdXNcbiAgICAgICAgJ2JvcmRlci1wcmltYXJ5LzgwJyxcbiAgICAgICAgLy8gUmVtb3ZlIHNoYWRvdyBvbiBmb2N1c1xuICAgICAgICAnc2hhZG93LW5vbmUnLFxuICAgICAgICAvLyBGb2N1cyByaW5nIHdpdGggc2FtZSBzdHlsaW5nIGFzIGlucHV0XG4gICAgICAgICdyaW5nLTQnLFxuICAgICAgICAncmluZy1yaW5nLzMwJyxcbiAgICAgICAgJ3Jpbmctb2Zmc2V0LTAnLFxuICAgICAgICAvLyBFbnN1cmUgaXQncyBhYm92ZSBvdGhlciBzbG90c1xuICAgICAgICAnei0xMCdcbiAgICAgIF0sXG5cbiAgICAgIC8vIEZpbGxlZCBzdGF0ZVxuICAgICAgdGhpcy5jaGFyICYmICF0aGlzLmlzQWN0aXZlICYmICdib3JkZXItcHJpbWFyeS82MCcsXG5cbiAgICAgIC8vIEJvcmRlciByYWRpdXNcbiAgICAgIHRoaXMuaXNGaXJzdCAmJiAncm91bmRlZC1sLW1kJyxcbiAgICAgIHRoaXMuaXNMYXN0ICYmICdyb3VuZGVkLXItbWQnLFxuXG4gICAgICAvLyBSZW1vdmUgbGVmdCBib3JkZXIgZm9yIGFsbCBidXQgZmlyc3Qgc2xvdFxuICAgICAgIXRoaXMuaXNGaXJzdCAmJiAnLW1sLXB4JyxcblxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -21,6 +21,7 @@ export class SelectComponent {
21
21
  readonly = false;
22
22
  trigger;
23
23
  popover;
24
+ container;
24
25
  items;
25
26
  sub = new Subscription();
26
27
  searchQuery = '';
@@ -44,15 +45,38 @@ export class SelectComponent {
44
45
  this.close();
45
46
  }));
46
47
  }
47
- // UPDATED: Centralized sizing logic for the trigger
48
+ // SIMPLIFIED: Zardui-inspired trigger styling
48
49
  get computedTriggerClass() {
49
- return cn('flex w-full items-center justify-between rounded-md border transition-all shadow-sm', 'bg-background ring-offset-background placeholder:text-muted-foreground',
50
+ return cn(
51
+ // Base styles
52
+ 'flex w-full items-center justify-between rounded-md border transition-all duration-200', 'bg-background text-foreground',
53
+ // Border and shadow
54
+ 'border-input shadow-sm',
50
55
  // Sizing
51
56
  this.size === 'xs' && 'h-8 px-2 text-xs', this.size === 'sm' && 'h-9 px-3 text-sm', this.size === 'default' && 'h-10 px-3 text-sm', this.size === 'lg' && 'h-11 px-4 text-base',
52
- // Interaction States (Focus ring disabled for Readonly/Disabled)
53
- !(this.readonly || this.disabled) && 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1',
54
- // Colors & Borders (Matching your Hex-based theme logic)
55
- this.disabled && 'cursor-not-allowed opacity-50 bg-muted/30 border-input', this.readonly && 'cursor-default bg-muted/10 border-dashed border-input focus:ring-0', !this.disabled && !this.readonly && 'border-input hover:border-accent cursor-pointer', this.class);
57
+ // Focus state - SIMPLE LIKE ZARDUI
58
+ !(this.readonly || this.disabled) && [
59
+ 'focus:outline-none',
60
+ 'focus:ring-4',
61
+ 'focus:ring-ring/30',
62
+ 'focus:ring-offset-0',
63
+ 'focus:shadow-none',
64
+ // Border darkens on focus automatically
65
+ 'focus:border-primary/80'
66
+ ],
67
+ // Hover state
68
+ !(this.readonly || this.disabled) && 'hover:border-accent',
69
+ // Disabled state
70
+ this.disabled && [
71
+ 'cursor-not-allowed opacity-50',
72
+ 'border-opacity-50'
73
+ ],
74
+ // Readonly state
75
+ this.readonly && [
76
+ 'cursor-default',
77
+ 'border-dashed',
78
+ !this.disabled && 'focus:ring-0 focus:border-opacity-100'
79
+ ], this.class);
56
80
  }
57
81
  // UPDATED: Dynamic icon sizing relative to the trigger size
58
82
  get iconClass() {
@@ -78,6 +102,8 @@ export class SelectComponent {
78
102
  }
79
103
  open() {
80
104
  this.isOpen = true;
105
+ // Trigger focus on the button for focus styling
106
+ this.trigger.nativeElement.focus();
81
107
  // Tick to ensure DOM is rendered before positioning
82
108
  setTimeout(() => this.updatePosition());
83
109
  }
@@ -146,7 +172,7 @@ export class SelectComponent {
146
172
  useExisting: forwardRef(() => SelectComponent),
147
173
  multi: true
148
174
  }
149
- ], 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: `
175
+ ], 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: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
150
176
  <div [class]="cn('w-full', 'size-' + size)" #container>
151
177
  <button
152
178
  type="button"
@@ -186,7 +212,7 @@ export class SelectComponent {
186
212
  </div>
187
213
  </div>
188
214
  </div>
189
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "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: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error"] }] });
215
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "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: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }] });
190
216
  }
191
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectComponent, decorators: [{
192
218
  type: Component,
@@ -262,6 +288,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
262
288
  }], popover: [{
263
289
  type: ViewChild,
264
290
  args: ['popover']
291
+ }], container: [{
292
+ type: ViewChild,
293
+ args: ['container']
265
294
  }], items: [{
266
295
  type: ContentChildren,
267
296
  args: [SelectItemComponent, { descendants: true }]
@@ -269,4 +298,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
269
298
  type: HostListener,
270
299
  args: ['document:mousedown', ['$event']]
271
300
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBRVYsU0FBUyxFQUVULFlBQVksRUFDWixlQUFlLEVBR2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBd0RuRCxNQUFNLE9BQU8sZUFBZTtJQXlCTjtJQXhCWCxXQUFXLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLEdBQW1DLFNBQVMsQ0FBQztJQUNqRCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRUosT0FBTyxDQUFjO0lBQ3JCLE9BQU8sQ0FBYztJQUNrQixLQUFLLENBQWtDO0lBRTVGLEdBQUcsR0FBRyxJQUFJLFlBQVks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cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIGZvcndhcmRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgT25EZXN0cm95LFxuICBIb3N0TGlzdGVuZXIsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBBZnRlckNvbnRlbnRJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21wdXRlUG9zaXRpb24sIGZsaXAsIHNoaWZ0LCBvZmZzZXQsIGF1dG9VcGRhdGUgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5pbXBvcnQgeyBTZWxlY3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vaW5wdXQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtc2VsZWN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIElucHV0Q29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjbigndy1mdWxsJywgJ3NpemUtJyArIHNpemUpXCIgI2NvbnRhaW5lcj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICN0cmlnZ2VyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtjbGFzc109XCJjb21wdXRlZFRyaWdnZXJDbGFzc1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIiBbY2xhc3MudGV4dC1tdXRlZC1mb3JlZ3JvdW5kXT1cIiFzZWxlY3RlZExhYmVsXCI+XG4gICAgICAgICAge3sgc2VsZWN0ZWRMYWJlbCB8fCBwbGFjZWhvbGRlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpIFtjbGFzc109XCJpY29uQ2xhc3NcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdlxuICAgICAgICAjcG9wb3ZlclxuICAgICAgICAqbmdJZj1cImlzT3BlblwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInttaW5XaWR0aDogY29udGFpbmVyLmNsaWVudFdpZHRoKydweCd9XCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBiZy1wb3BvdmVyIHotNTAgbWluLXctZnVsbCBtYXgtaC1bMzAwcHhdIG92ZXJmbG93LWF1dG8gZmxleCBmbGV4LWNvbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYm9yZGVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZFwiXG4gICAgICAgIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyB0b3A6IDA7IGxlZnQ6IDA7XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hhYmxlXCIgY2xhc3M9XCJwLTIgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIGgtYXV0b1wiPlxuICAgICAgICAgIDx0b2xsZS1pbnB1dFxuICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPGkgcHJlZml4IGNsYXNzPVwicmktc2VhcmNoLWxpbmVcIj48L2k+XG4gICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsYmFyLWhpZGRlbiBncm93IGgtZnVsbCB3LWZ1bGxcIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm5vUmVzdWx0c1wiIGNsYXNzPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgTm8gcmVzdWx0cyBmb3VuZC5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBhbiBvcHRpb24nO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJykgdHJpZ2dlciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogRWxlbWVudFJlZjtcbiAgQENvbnRlbnRDaGlsZHJlbihTZWxlY3RJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGl0ZW1zITogUXVlcnlMaXN0PFNlbGVjdEl0ZW1Db21wb25lbnQ+O1xuXG4gIHByaXZhdGUgc3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBub1Jlc3VsdHMgPSBmYWxzZTtcbiAgaXNPcGVuID0gZmFsc2U7XG4gIHZhbHVlOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZExhYmVsID0gJyc7XG4gIGNsZWFudXBBdXRvVXBkYXRlPzogKCkgPT4gdm9pZDtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWxlY3RTZXJ2aWNlOiBTZWxlY3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdWIuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkVmFsdWUkLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XG4gICAgICAgIHRoaXMudXBkYXRlSXRlbVNlbGVjdGlvbigpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWIuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkTGFiZWwkLnN1YnNjcmliZShsYWJlbCA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBVUERBVEVEOiBDZW50cmFsaXplZCBzaXppbmcgbG9naWMgZm9yIHRoZSB0cmlnZ2VyXG4gIGdldCBjb21wdXRlZFRyaWdnZXJDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLW1kIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBzaGFkb3ctc20nLFxuICAgICAgJ2JnLWJhY2tncm91bmQgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXG4gICAgICAvLyBTaXppbmdcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAnaC04IHB4LTIgdGV4dC14cycsXG4gICAgICB0aGlzLnNpemUgPT09ICdzbScgJiYgJ2gtOSBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgJ2gtMTAgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAnaC0xMSBweC00IHRleHQtYmFzZScsXG5cbiAgICAgIC8vIEludGVyYWN0aW9uIFN0YXRlcyAoRm9jdXMgcmluZyBkaXNhYmxlZCBmb3IgUmVhZG9ubHkvRGlzYWJsZWQpXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgJ2ZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTEnLFxuXG4gICAgICAvLyBDb2xvcnMgJiBCb3JkZXJzIChNYXRjaGluZyB5b3VyIEhleC1iYXNlZCB0aGVtZSBsb2dpYylcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgJ2N1cnNvci1ub3QtYWxsb3dlZCBvcGFjaXR5LTUwIGJnLW11dGVkLzMwIGJvcmRlci1pbnB1dCcsXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmICdjdXJzb3ItZGVmYXVsdCBiZy1tdXRlZC8xMCBib3JkZXItZGFzaGVkIGJvcmRlci1pbnB1dCBmb2N1czpyaW5nLTAnLFxuICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgJ2JvcmRlci1pbnB1dCBob3Zlcjpib3JkZXItYWNjZW50IGN1cnNvci1wb2ludGVyJyxcblxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cblxuICAvLyBVUERBVEVEOiBEeW5hbWljIGljb24gc2l6aW5nIHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyIHNpemVcbiAgZ2V0IGljb25DbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAncmktYXJyb3ctZG93bi1zLWxpbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1sLTIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwJyxcbiAgICAgIHRoaXMuaXNPcGVuID8gJ3JvdGF0ZS0xODAnIDogJycsXG4gICAgICAodGhpcy5zaXplID09PSAneHMnIHx8IHRoaXMuc2l6ZSA9PT0gJ3NtJykgPyAndGV4dC1bMTRweF0nIDogJ3RleHQtWzE4cHhdJyxcbiAgICAgIC8vIEhpZGUgb3IgZmFkZSBpY29uIHdoZW4gaW50ZXJhY3Rpb24gaXMgYmxvY2tlZFxuICAgICAgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgJiYgJ29wYWNpdHktMzAnXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUl0ZW1TZWxlY3Rpb24oKTtcbiAgICB0aGlzLml0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlSXRlbVNlbGVjdGlvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSXRlbVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIC8vIFRpY2sgdG8gZW5zdXJlIERPTSBpcyByZW5kZXJlZCBiZWZvcmUgcG9zaXRpb25pbmdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICBpZiAodGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSkgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlciB8fCAhdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlID0gYXV0b1VwZGF0ZShcbiAgICAgIHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbih0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCwgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgIG1pZGRsZXdhcmU6IFtvZmZzZXQoNCksIGZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiA4IH0pXSxcbiAgICAgICAgfSkudGhlbigoeyB4LCB5IH0pID0+IHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLCB7XG4gICAgICAgICAgICBsZWZ0OiBgJHt4fXB4YCxcbiAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBvblNlYXJjaENoYW5nZShxdWVyeTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyID0gKHF1ZXJ5IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBsZXQgdmlzaWJsZUNvdW50ID0gMDtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBpdGVtLmdldExhYmVsKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IHRleHQuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgIGl0ZW0uaGlkZGVuID0gIWlzVmlzaWJsZTtcbiAgICAgIGlmIChpc1Zpc2libGUpIHZpc2libGVDb3VudCsrO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ub1Jlc3VsdHMgPSB2aXNpYmxlQ291bnQgPT09IDAgJiYgZmlsdGVyICE9PSAnJztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUl0ZW1TZWxlY3Rpb24oKTtcbiAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZm91bmQpIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGZvdW5kLmdldExhYmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSkgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSgpO1xuICB9XG59XG4iXX0=
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBRVYsU0FBUyxFQUVULFlBQVksRUFDWixlQUFlLEVBR2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBd0RuRCxNQUFNLE9BQU8sZUFBZTtJQTBCTjtJQXpCWCxXQUFXLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLEdBQW1DLFNBQVMsQ0FBQztJQUNqRCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRUosT0FBTyxDQUFjO0lBQ3JCLE9BQU8sQ0FBYztJQUNuQixTQUFTLENBQWM7SUFDYyxLQUFLLENBQWtDO0lBRTVGLEdBQUcs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QUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUNFLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDSSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ3VDLEtBQUs7c0JBQWpFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQStKM0QsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgZm9yd2FyZFJlZixcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG4gIEhvc3RMaXN0ZW5lcixcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEFmdGVyQ29udGVudEluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IFNlbGVjdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlbGVjdFNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgSW5wdXRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtcbiAgICBTZWxlY3RTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCd3LWZ1bGwnLCAnc2l6ZS0nICsgc2l6ZSlcIiAjY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgI3RyaWdnZXJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkVHJpZ2dlckNsYXNzXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiIFtjbGFzcy50ZXh0LW11dGVkLWZvcmVncm91bmRdPVwiIXNlbGVjdGVkTGFiZWxcIj5cbiAgICAgICAgICB7eyBzZWxlY3RlZExhYmVsIHx8IHBsYWNlaG9sZGVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8ZGl2XG4gICAgICAgICNwb3BvdmVyXG4gICAgICAgICpuZ0lmPVwiaXNPcGVuXCJcbiAgICAgICAgW25nU3R5bGVdPVwie21pbldpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGgrJ3B4J31cIlxuICAgICAgICBjbGFzcz1cImFic29sdXRlIGJnLXBvcG92ZXIgei01MCBtaW4tdy1mdWxsIG1heC1oLVszMDBweF0gb3ZlcmZsb3ctYXV0byBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kXCJcbiAgICAgICAgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47IHRvcDogMDsgbGVmdDogMDtcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaGFibGVcIiBjbGFzcz1cInAtMiBib3JkZXItYiBib3JkZXItYm9yZGVyIGJnLXBvcG92ZXIgaC1hdXRvXCI+XG4gICAgICAgICAgPHRvbGxlLWlucHV0XG4gICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICA8aSBwcmVmaXggY2xhc3M9XCJyaS1zZWFyY2gtbGluZVwiPjwvaT5cbiAgICAgICAgICA8L3RvbGxlLWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0xIG92ZXJmbG93LXktYXV0byBzY3JvbGxiYXItaGlkZGVuIGdyb3cgaC1mdWxsIHctZnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9SZXN1bHRzXCIgY2xhc3M9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICBObyByZXN1bHRzIGZvdW5kLlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IGFuIG9wdGlvbic7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlYXJjaGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXInKSB0cmlnZ2VyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIHBvcG92ZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAQ29udGVudENoaWxkcmVuKFNlbGVjdEl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgaXRlbXMhOiBRdWVyeUxpc3Q8U2VsZWN0SXRlbUNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XG4gIG5vUmVzdWx0cyA9IGZhbHNlO1xuICBpc09wZW4gPSBmYWxzZTtcbiAgdmFsdWU6IGFueSA9IG51bGw7XG4gIHNlbGVjdGVkTGFiZWwgPSAnJztcbiAgY2xlYW51cEF1dG9VcGRhdGU/OiAoKSA9PiB2b2lkO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBwcm90ZWN0ZWQgY24gPSBjbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlbGVjdFNlcnZpY2U6IFNlbGVjdFNlcnZpY2UpIHtcbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnNlbGVjdFNlcnZpY2Uuc2VsZWN0ZWRWYWx1ZSQuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsKTtcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtU2VsZWN0aW9uKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnNlbGVjdFNlcnZpY2Uuc2VsZWN0ZWRMYWJlbCQuc3Vic2NyaWJlKGxhYmVsID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNJTVBMSUZJRUQ6IFphcmR1aS1pbnNwaXJlZCB0cmlnZ2VyIHN0eWxpbmdcbiAgZ2V0IGNvbXB1dGVkVHJpZ2dlckNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugc3R5bGVzXG4gICAgICAnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLW1kIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAnLFxuICAgICAgJ2JnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kJyxcblxuICAgICAgLy8gQm9yZGVyIGFuZCBzaGFkb3dcbiAgICAgICdib3JkZXItaW5wdXQgc2hhZG93LXNtJyxcblxuICAgICAgLy8gU2l6aW5nXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgJ2gtOCBweC0yIHRleHQteHMnLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmICdoLTkgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdoLTEwIHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgJ2gtMTEgcHgtNCB0ZXh0LWJhc2UnLFxuXG4gICAgICAvLyBGb2N1cyBzdGF0ZSAtIFNJTVBMRSBMSUtFIFpBUkRVSVxuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmIFtcbiAgICAgICAgJ2ZvY3VzOm91dGxpbmUtbm9uZScsXG4gICAgICAgICdmb2N1czpyaW5nLTQnLFxuICAgICAgICAnZm9jdXM6cmluZy1yaW5nLzMwJyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctb2Zmc2V0LTAnLFxuICAgICAgICAnZm9jdXM6c2hhZG93LW5vbmUnLFxuICAgICAgICAvLyBCb3JkZXIgZGFya2VucyBvbiBmb2N1cyBhdXRvbWF0aWNhbGx5XG4gICAgICAgICdmb2N1czpib3JkZXItcHJpbWFyeS84MCdcbiAgICAgIF0sXG5cbiAgICAgIC8vIEhvdmVyIHN0YXRlXG4gICAgICAhKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgJiYgJ2hvdmVyOmJvcmRlci1hY2NlbnQnLFxuXG4gICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgICAgdGhpcy5kaXNhYmxlZCAmJiBbXG4gICAgICAgICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCcsXG4gICAgICAgICdib3JkZXItb3BhY2l0eS01MCdcbiAgICAgIF0sXG5cbiAgICAgIC8vIFJlYWRvbmx5IHN0YXRlXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmIFtcbiAgICAgICAgJ2N1cnNvci1kZWZhdWx0JyxcbiAgICAgICAgJ2JvcmRlci1kYXNoZWQnLFxuICAgICAgICAhdGhpcy5kaXNhYmxlZCAmJiAnZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1vcGFjaXR5LTEwMCdcbiAgICAgIF0sXG5cbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgLy8gVVBEQVRFRDogRHluYW1pYyBpY29uIHNpemluZyByZWxhdGl2ZSB0byB0aGUgdHJpZ2dlciBzaXplXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLmlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnLFxuICAgICAgKHRoaXMuc2l6ZSA9PT0gJ3hzJyB8fCB0aGlzLnNpemUgPT09ICdzbScpID8gJ3RleHQtWzE0cHhdJyA6ICd0ZXh0LVsxOHB4XScsXG4gICAgICAvLyBIaWRlIG9yIGZhZGUgaWNvbiB3aGVuIGludGVyYWN0aW9uIGlzIGJsb2NrZWRcbiAgICAgICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpICYmICdvcGFjaXR5LTMwJ1xuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVJdGVtU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUl0ZW1TZWxlY3Rpb24oKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUl0ZW1TZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIHRoaXMuaXNPcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAvLyBUcmlnZ2VyIGZvY3VzIG9uIHRoZSBidXR0b24gZm9yIGZvY3VzIHN0eWxpbmdcbiAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIC8vIFRpY2sgdG8gZW5zdXJlIERPTSBpcyByZW5kZXJlZCBiZWZvcmUgcG9zaXRpb25pbmdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICBpZiAodGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSkgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlciB8fCAhdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlID0gYXV0b1VwZGF0ZShcbiAgICAgIHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbih0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCwgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgIG1pZGRsZXdhcmU6IFtvZmZzZXQoNCksIGZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiA4IH0pXSxcbiAgICAgICAgfSkudGhlbigoeyB4LCB5IH0pID0+IHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLCB7XG4gICAgICAgICAgICBsZWZ0OiBgJHt4fXB4YCxcbiAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBvblNlYXJjaENoYW5nZShxdWVyeTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyID0gKHF1ZXJ5IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBsZXQgdmlzaWJsZUNvdW50ID0gMDtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBpdGVtLmdldExhYmVsKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IHRleHQuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgIGl0ZW0uaGlkZGVuID0gIWlzVmlzaWJsZTtcbiAgICAgIGlmIChpc1Zpc2libGUpIHZpc2libGVDb3VudCsrO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ub1Jlc3VsdHMgPSB2aXNpYmxlQ291bnQgPT09IDAgJiYgZmlsdGVyICE9PSAnJztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUl0ZW1TZWxlY3Rpb24oKTtcbiAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZm91bmQpIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGZvdW5kLmdldExhYmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSkgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSgpO1xuICB9XG59XG4iXX0=