@schenkerjon/ng-govbr-tw 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,32 @@
1
- import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, FormsModule, } from '@angular/forms';
1
+ import { Component, EventEmitter, Input, Optional, Output, Self, ViewEncapsulation, } from '@angular/core';
2
+ import { FormsModule, } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/forms";
5
5
  export class BrInputComponent {
6
- constructor() {
6
+ static { this.nextId = 0; }
7
+ static { this.defaultErrorMessages = {
8
+ required: 'Campo obrigatório',
9
+ email: 'Email inválido',
10
+ minlength: (err) => {
11
+ const e = err;
12
+ return `Mínimo de ${e.requiredLength} caracteres`;
13
+ },
14
+ maxlength: (err) => {
15
+ const e = err;
16
+ return `Máximo de ${e.requiredLength} caracteres`;
17
+ },
18
+ min: (err) => {
19
+ const e = err;
20
+ return `Valor mínimo: ${e.min}`;
21
+ },
22
+ max: (err) => {
23
+ const e = err;
24
+ return `Valor máximo: ${e.max}`;
25
+ },
26
+ pattern: 'Formato inválido',
27
+ }; }
28
+ constructor(ngControl) {
29
+ this.ngControl = ngControl;
7
30
  this.type = 'text';
8
31
  this.placeholder = '';
9
32
  this.required = false;
@@ -12,6 +35,8 @@ export class BrInputComponent {
12
35
  this.highlight = false;
13
36
  this.inline = false;
14
37
  this.rows = 3;
38
+ /** Mensagens customizadas para erros de validação */
39
+ this.errorMessages = {};
15
40
  this.fileSelected = new EventEmitter();
16
41
  this.searchSubmit = new EventEmitter();
17
42
  this.value = '';
@@ -21,8 +46,10 @@ export class BrInputComponent {
21
46
  this.inputId = `br-input-${BrInputComponent.nextId++}`;
22
47
  this.onChange = () => { };
23
48
  this.onTouched = () => { };
49
+ if (this.ngControl) {
50
+ this.ngControl.valueAccessor = this;
51
+ }
24
52
  }
25
- static { this.nextId = 0; }
26
53
  get isStandardInput() {
27
54
  return this.type !== 'select' && this.type !== 'file' && this.type !== 'textarea';
28
55
  }
@@ -37,6 +64,42 @@ export class BrInputComponent {
37
64
  get containerClasses() {
38
65
  return this.type !== 'file' ? 'relative' : '';
39
66
  }
67
+ /**
68
+ * Retorna a mensagem de erro a ser exibida.
69
+ * Prioridade: error manual > erro do validator (se touched/dirty)
70
+ */
71
+ get displayError() {
72
+ // Erro manual sempre tem prioridade
73
+ if (this.error) {
74
+ return this.error;
75
+ }
76
+ // Se não tem NgControl, não há erro automático
77
+ if (!this.ngControl?.control) {
78
+ return undefined;
79
+ }
80
+ const control = this.ngControl.control;
81
+ // Só mostra erro se o controle foi tocado ou modificado E está inválido
82
+ if (!control.errors || (!control.touched && !control.dirty)) {
83
+ return undefined;
84
+ }
85
+ // Busca a primeira mensagem de erro
86
+ return this.getFirstErrorMessage(control.errors);
87
+ }
88
+ getFirstErrorMessage(errors) {
89
+ for (const key of Object.keys(errors)) {
90
+ // Primeiro verifica mensagens customizadas do usuário
91
+ if (this.errorMessages[key]) {
92
+ return this.errorMessages[key];
93
+ }
94
+ // Depois verifica mensagens padrão
95
+ const defaultMsg = BrInputComponent.defaultErrorMessages[key];
96
+ if (defaultMsg) {
97
+ return typeof defaultMsg === 'function' ? defaultMsg(errors[key]) : defaultMsg;
98
+ }
99
+ }
100
+ // Fallback genérico
101
+ return 'Campo inválido';
102
+ }
40
103
  get inputClasses() {
41
104
  const densityStyles = {
42
105
  small: 'text-govbr-sm',
@@ -57,7 +120,7 @@ export class BrInputComponent {
57
120
  const highlightCls = this.highlight
58
121
  ? 'h-[var(--govbr-input-highlight)] bg-govbr-gray-2 border-transparent text-govbr-lg px-6'
59
122
  : '';
60
- const statusCls = this.error
123
+ const statusCls = this.displayError
61
124
  ? 'govbr-input--danger'
62
125
  : this.successMessage
63
126
  ? 'govbr-input--success'
@@ -108,14 +171,8 @@ export class BrInputComponent {
108
171
  this.fileSelected.emit(file);
109
172
  }
110
173
  }
111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BrInputComponent, isStandalone: true, selector: "br-input", inputs: { label: "label", type: "type", placeholder: "placeholder", required: "required", error: "error", successMessage: "successMessage", warningMessage: "warningMessage", infoMessage: "infoMessage", helperText: "helperText", icon: "icon", iconRight: "iconRight", density: "density", highlight: "highlight", inline: "inline", maxLength: "maxLength", rows: "rows" }, outputs: { fileSelected: "fileSelected", searchSubmit: "searchSubmit" }, providers: [
113
- {
114
- provide: NG_VALUE_ACCESSOR,
115
- useExisting: forwardRef(() => BrInputComponent),
116
- multi: true,
117
- },
118
- ], ngImport: i0, template: `
174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrInputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
175
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BrInputComponent, isStandalone: true, selector: "br-input", inputs: { label: "label", type: "type", placeholder: "placeholder", required: "required", error: "error", successMessage: "successMessage", warningMessage: "warningMessage", infoMessage: "infoMessage", helperText: "helperText", icon: "icon", iconRight: "iconRight", density: "density", highlight: "highlight", inline: "inline", maxLength: "maxLength", rows: "rows", errorMessages: "errorMessages" }, outputs: { fileSelected: "fileSelected", searchSubmit: "searchSubmit" }, ngImport: i0, template: `
119
176
  <div class="mb-4 font-rawline" [class.inline-input]="inline">
120
177
  @if (label) {
121
178
  <label
@@ -256,25 +313,25 @@ export class BrInputComponent {
256
313
  }
257
314
 
258
315
  <!-- Feedback messages -->
259
- @if (error) {
316
+ @if (displayError) {
260
317
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-danger">
261
- <i class="fa-solid fa-times-circle mr-1"></i>{{ error }}
318
+ <i class="fa-solid fa-times-circle mr-1"></i>{{ displayError }}
262
319
  </span>
263
320
  }
264
-
265
- @if (successMessage && !error) {
321
+
322
+ @if (successMessage && !displayError) {
266
323
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-success">
267
324
  <i class="fa-solid fa-check-circle mr-1"></i>{{ successMessage }}
268
325
  </span>
269
326
  }
270
-
271
- @if (warningMessage && !error && !successMessage) {
327
+
328
+ @if (warningMessage && !displayError && !successMessage) {
272
329
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-warning">
273
330
  <i class="fa-solid fa-exclamation-triangle mr-1"></i>{{ warningMessage }}
274
331
  </span>
275
332
  }
276
-
277
- @if (infoMessage && !error && !successMessage && !warningMessage) {
333
+
334
+ @if (infoMessage && !displayError && !successMessage && !warningMessage) {
278
335
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-info">
279
336
  <i class="fa-solid fa-info-circle mr-1"></i>{{ infoMessage }}
280
337
  </span>
@@ -289,13 +346,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
289
346
  standalone: true,
290
347
  imports: [FormsModule],
291
348
  encapsulation: ViewEncapsulation.None,
292
- providers: [
293
- {
294
- provide: NG_VALUE_ACCESSOR,
295
- useExisting: forwardRef(() => BrInputComponent),
296
- multi: true,
297
- },
298
- ],
299
349
  template: `
300
350
  <div class="mb-4 font-rawline" [class.inline-input]="inline">
301
351
  @if (label) {
@@ -437,25 +487,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
437
487
  }
438
488
 
439
489
  <!-- Feedback messages -->
440
- @if (error) {
490
+ @if (displayError) {
441
491
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-danger">
442
- <i class="fa-solid fa-times-circle mr-1"></i>{{ error }}
492
+ <i class="fa-solid fa-times-circle mr-1"></i>{{ displayError }}
443
493
  </span>
444
494
  }
445
-
446
- @if (successMessage && !error) {
495
+
496
+ @if (successMessage && !displayError) {
447
497
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-success">
448
498
  <i class="fa-solid fa-check-circle mr-1"></i>{{ successMessage }}
449
499
  </span>
450
500
  }
451
-
452
- @if (warningMessage && !error && !successMessage) {
501
+
502
+ @if (warningMessage && !displayError && !successMessage) {
453
503
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-warning">
454
504
  <i class="fa-solid fa-exclamation-triangle mr-1"></i>{{ warningMessage }}
455
505
  </span>
456
506
  }
457
-
458
- @if (infoMessage && !error && !successMessage && !warningMessage) {
507
+
508
+ @if (infoMessage && !displayError && !successMessage && !warningMessage) {
459
509
  <span class="flex items-center mt-1 text-govbr-sm text-govbr-info">
460
510
  <i class="fa-solid fa-info-circle mr-1"></i>{{ infoMessage }}
461
511
  </span>
@@ -463,7 +513,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
463
513
  </div>
464
514
  `,
465
515
  }]
466
- }], propDecorators: { label: [{
516
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
517
+ type: Self
518
+ }, {
519
+ type: Optional
520
+ }] }], propDecorators: { label: [{
467
521
  type: Input
468
522
  }], type: [{
469
523
  type: Input
@@ -495,9 +549,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
495
549
  type: Input
496
550
  }], rows: [{
497
551
  type: Input
552
+ }], errorMessages: [{
553
+ type: Input
498
554
  }], fileSelected: [{
499
555
  type: Output
500
556
  }], searchSubmit: [{
501
557
  type: Output
502
558
  }] } });
503
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnItaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZ292YnItdHcvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2JyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixXQUFXLEdBQ1osTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBcUx4QixNQUFNLE9BQU8sZ0JBQWdCO0lBbkw3QjtRQXFMVyxTQUFJLEdBUUksTUFBTSxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQU9qQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBaUMsUUFBUSxDQUFDO1FBQ2pELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmLFNBQUksR0FBRyxDQUFDLENBQUM7UUFFUixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXBELFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsWUFBTyxHQUFHLFlBQVksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUVsRCxhQUFRLEdBQTRCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM3QyxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0tBMEdsQzthQTlHZ0Is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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FxS1A7aUJBQ0o7OEJBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFTRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnItaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEJySW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibWItNCBmb250LXJhd2xpbmVcIiBbY2xhc3MuaW5saW5lLWlucHV0XT1cImlubGluZVwiPlxuICAgICAgQGlmIChsYWJlbCkge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBbZm9yXT1cImlucHV0SWRcIlxuICAgICAgICAgIGNsYXNzPVwiYmxvY2sgdGV4dC1nb3Zici1zbSBmb250LXNlbWlib2xkIHRleHQtZ292YnItZ3JheS04MCBtYi0xXCJcbiAgICAgICAgICBbY2xhc3Muc3Itb25seV09XCJpbmxpbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICAgIEBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1nb3Zici1kYW5nZXIgbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgXG4gICAgICBAaWYgKGhlbHBlclRleHQgJiYgIWVycm9yICYmICFzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImJsb2NrIHRleHQtZ292YnIteHMgdGV4dC1nb3Zici1ncmF5LTYwIG1iLTFcIj5cbiAgICAgICAgICB7eyBoZWxwZXJUZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICBcbiAgICAgIDxkaXYgW2NsYXNzXT1cImNvbnRhaW5lckNsYXNzZXNcIj5cbiAgICAgICAgPCEtLSBJY29uIChsZWZ0KSAtLT5cbiAgICAgICAgQGlmIChpY29uICYmICFpY29uUmlnaHQpIHtcbiAgICAgICAgICA8aVxuICAgICAgICAgICAgW2NsYXNzXT1cIidmYS1zb2xpZCBmYS0nICsgaWNvbiArICcgYWJzb2x1dGUgbGVmdC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWdvdmJyLWdyYXktNDAgcG9pbnRlci1ldmVudHMtbm9uZSdcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBTZWxlY3QgLS0+XG4gICAgICAgIEBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiaW5wdXRDbGFzc2VzXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIFtzZWxlY3RlZF09XCIhdmFsdWVcIj57eyBwbGFjZWhvbGRlciB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICB9XG4gICAgXG4gICAgICAgIDwhLS0gVGV4dGFyZWEgLS0+XG4gICAgICAgIEBpZiAodHlwZSA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzZXNcIlxuICAgICAgICAgICAgW3Jvd3NdPVwicm93c1wiXG4gICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4TGVuZ3RoIHx8IG51bGxcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICB9XG4gICAgXG4gICAgICAgIDwhLS0gRmlsZSAtLT5cbiAgICAgICAgQGlmICh0eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbZm9yXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgYmctZ292YnItcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtZ292YnItcGlsbCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1nb3Zici1wcmltYXJ5LWRhcmsgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1nb3Zici1zbSBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3Itbm90LWFsbG93ZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS11cGxvYWQgbXItMlwiPjwvaT5cbiAgICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfHwgJ1NlbGVjaW9uYXIgYXJxdWl2bycgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHRleHQtZ292YnItc20gdGV4dC1nb3Zici1ncmF5LTYwXCI+e3sgZmlsZU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBUZXh0IC8gRW1haWwgLyBQYXNzd29yZCAvIE51bWJlciAvIFNlYXJjaCAtLT5cbiAgICAgICAgQGlmIChpc1N0YW5kYXJkSW5wdXQpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgIFt0eXBlXT1cImFjdHVhbFR5cGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzZXNcIlxuICAgICAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIm1heExlbmd0aCB8fCBudWxsXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBQYXNzd29yZCB0b2dnbGUgYnV0dG9uIC0tPlxuICAgICAgICBAaWYgKHR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMyB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC1nb3Zici1wcmltYXJ5IGhvdmVyOnRleHQtZ292YnItcHJpbWFyeS1kYXJrIGdvdmJyLWZvY3VzLXJpbmdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzaG93UGFzc3dvcmQgPyAnT2N1bHRhciBzZW5oYScgOiAnTW9zdHJhciBzZW5oYSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cInNob3dQYXNzd29yZCA/ICdmYS1zb2xpZCBmYS1leWUtc2xhc2gnIDogJ2ZhLXNvbGlkIGZhLWV5ZSdcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBJY29uIChyaWdodCkgLS0+XG4gICAgICAgIEBpZiAoaWNvbiAmJiBpY29uUmlnaHQgJiYgdHlwZSAhPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgIDxpXG4gICAgICAgICAgICBbY2xhc3NdPVwiJ2ZhLXNvbGlkIGZhLScgKyBpY29uICsgJyBhYnNvbHV0ZSByaWdodC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWdvdmJyLWdyYXktNDAgcG9pbnRlci1ldmVudHMtbm9uZSdcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBTZWFyY2ggYnV0dG9uIC0tPlxuICAgICAgICBAaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTEgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHctOCBoLTggcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ292YnItcHJpbWFyeSBob3ZlcjpiZy1nb3Zici1wcmltYXJ5LWxpZ2h0ZXN0IGdvdmJyLWZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJ1c2NhclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoU3VibWl0LmVtaXQodmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtbWFnbmlmeWluZy1nbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgXG4gICAgICA8IS0tIENoYXJhY3RlciBjb3VudGVyIC0tPlxuICAgICAgQGlmIChtYXhMZW5ndGggJiYgKHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgaXNTdGFuZGFyZElucHV0KSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBtdC0wLjVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ292YnIteHMgdGV4dC1nb3Zici1ncmF5LTQwXCI+XG4gICAgICAgICAgICB7eyB2YWx1ZT8ubGVuZ3RoIHx8IDAgfX0ve3sgbWF4TGVuZ3RoIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICBcbiAgICAgIDwhLS0gRmVlZGJhY2sgbWVzc2FnZXMgLS0+XG4gICAgICBAaWYgKGVycm9yKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtMSB0ZXh0LWdvdmJyLXNtIHRleHQtZ292YnItZGFuZ2VyXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10aW1lcy1jaXJjbGUgbXItMVwiPjwvaT57eyBlcnJvciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgXG4gICAgICBAaWYgKHN1Y2Nlc3NNZXNzYWdlICYmICFlcnJvcikge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LTEgdGV4dC1nb3Zici1zbSB0ZXh0LWdvdmJyLXN1Y2Nlc3NcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZWNrLWNpcmNsZSBtci0xXCI+PC9pPnt7IHN1Y2Nlc3NNZXNzYWdlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICBcbiAgICAgIEBpZiAod2FybmluZ01lc3NhZ2UgJiYgIWVycm9yICYmICFzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LTEgdGV4dC1nb3Zici1zbSB0ZXh0LWdvdmJyLXdhcm5pbmdcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIG1yLTFcIj48L2k+e3sgd2FybmluZ01lc3NhZ2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIFxuICAgICAgQGlmIChpbmZvTWVzc2FnZSAmJiAhZXJyb3IgJiYgIXN1Y2Nlc3NNZXNzYWdlICYmICF3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LTEgdGV4dC1nb3Zici1zbSB0ZXh0LWdvdmJyLWluZm9cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWluZm8tY2lyY2xlIG1yLTFcIj48L2k+e3sgaW5mb01lc3NhZ2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIGAsXG59KVxuZXhwb3J0IGNsYXNzIEJySW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOlxuICAgIHwgJ3RleHQnXG4gICAgfCAnZW1haWwnXG4gICAgfCAncGFzc3dvcmQnXG4gICAgfCAnc2VsZWN0J1xuICAgIHwgJ2ZpbGUnXG4gICAgfCAnbnVtYmVyJ1xuICAgIHwgJ3NlYXJjaCdcbiAgICB8ICd0ZXh0YXJlYScgPSAndGV4dCc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBzdWNjZXNzTWVzc2FnZT86IHN0cmluZztcbiAgQElucHV0KCkgd2FybmluZ01lc3NhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluZm9NZXNzYWdlPzogc3RyaW5nO1xuICBASW5wdXQoKSBoZWxwZXJUZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBpY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSBpY29uUmlnaHQgPSBmYWxzZTtcbiAgQElucHV0KCkgZGVuc2l0eTogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyA9ICdtZWRpdW0nO1xuICBASW5wdXQoKSBoaWdobGlnaHQgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5saW5lID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KCkgcm93cyA9IDM7XG5cbiAgQE91dHB1dCgpIGZpbGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaFN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xuICBmaWxlTmFtZSA9ICcnO1xuICBzaG93UGFzc3dvcmQgPSBmYWxzZTtcblxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xuICBpbnB1dElkID0gYGJyLWlucHV0LSR7QnJJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBnZXQgaXNTdGFuZGFyZElucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgIT09ICdzZWxlY3QnICYmIHRoaXMudHlwZSAhPT0gJ2ZpbGUnICYmIHRoaXMudHlwZSAhPT0gJ3RleHRhcmVhJztcbiAgfVxuXG4gIGdldCBhY3R1YWxUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1Bhc3N3b3JkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJztcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NlYXJjaCcpIHJldHVybiAndGV4dCc7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBjb250YWluZXJDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSAhPT0gJ2ZpbGUnID8gJ3JlbGF0aXZlJyA6ICcnO1xuICB9XG5cbiAgZ2V0IGlucHV0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlbnNpdHlTdHlsZXMgPSB7XG4gICAgICBzbWFsbDogJ3RleHQtZ292YnItc20nLFxuICAgICAgbWVkaXVtOiAndGV4dC1nb3Zici1iYXNlJyxcbiAgICAgIGxhcmdlOiAndGV4dC1nb3Zici1sZycsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIGNvbnN0IGRlbnNpdHlIZWlnaHRzID0ge1xuICAgICAgc21hbGw6ICdoLVt2YXIoLS1nb3Zici1pbnB1dC1zbWFsbCldJyxcbiAgICAgIG1lZGl1bTogJ2gtW3ZhcigtLWdvdmJyLWlucHV0LW1lZGl1bSldJyxcbiAgICAgIGxhcmdlOiAnaC1bdmFyKC0tZ292YnItaW5wdXQtbGFyZ2UpXScsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIGNvbnN0IGJhc2UgPSBbXG4gICAgICAndy1mdWxsIHB4LTQgZm9udC1yYXdsaW5lIGdvdmJyLWlucHV0JyxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3RleHRhcmVhJyA/ICdweS0yJyA6ICcnLFxuICAgIF0uam9pbignICcpO1xuXG4gICAgY29uc3QgZGVuc2l0eSA9IGRlbnNpdHlTdHlsZXNbdGhpcy5kZW5zaXR5XTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnR5cGUgIT09ICd0ZXh0YXJlYScgPyBkZW5zaXR5SGVpZ2h0c1t0aGlzLmRlbnNpdHldIDogJyc7XG5cbiAgICBjb25zdCBoaWdobGlnaHRDbHMgPSB0aGlzLmhpZ2hsaWdodFxuICAgICAgPyAnaC1bdmFyKC0tZ292YnItaW5wdXQtaGlnaGxpZ2h0KV0gYmctZ292YnItZ3JheS0yIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LWdvdmJyLWxnIHB4LTYnXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2xzID0gdGhpcy5lcnJvclxuICAgICAgPyAnZ292YnItaW5wdXQtLWRhbmdlcidcbiAgICAgIDogdGhpcy5zdWNjZXNzTWVzc2FnZVxuICAgICAgICA/ICdnb3Zici1pbnB1dC0tc3VjY2VzcydcbiAgICAgICAgOiB0aGlzLndhcm5pbmdNZXNzYWdlXG4gICAgICAgICAgPyAnZ292YnItaW5wdXQtLXdhcm5pbmcnXG4gICAgICAgICAgOiAnJztcblxuICAgIGNvbnN0IGRpc2FibGVkQ2xzID0gdGhpcy5pc0Rpc2FibGVkXG4gICAgICA/ICdiZy1nb3Zici1ncmF5LTIgdGV4dC1nb3Zici1ncmF5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgIDogJ2JnLXdoaXRlIHRleHQtZ292YnItZ3JheS04MCc7XG5cbiAgICBjb25zdCBpY29uUGFkZGluZ0xlZnQgPSB0aGlzLmljb24gJiYgIXRoaXMuaWNvblJpZ2h0ID8gJ3BsLTEwJyA6ICcnO1xuICAgIGNvbnN0IGljb25QYWRkaW5nUmlnaHQgPVxuICAgICAgKHRoaXMuaWNvbiAmJiB0aGlzLmljb25SaWdodCkgfHwgdGhpcy50eXBlID09PSAncGFzc3dvcmQnIHx8IHRoaXMudHlwZSA9PT0gJ3NlYXJjaCdcbiAgICAgICAgPyAncHItMTAnXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gW2Jhc2UsIGRlbnNpdHksIGhlaWdodCwgaGlnaGxpZ2h0Q2xzLCBzdGF0dXNDbHMsIGRpc2FibGVkQ2xzLCBpY29uUGFkZGluZ0xlZnQsIGljb25QYWRkaW5nUmlnaHRdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlID8/ICcnO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgdG9nZ2xlUGFzc3dvcmQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UGFzc3dvcmQgPSAhdGhpcy5zaG93UGFzc3dvcmQ7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0aGlzLnZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIG9uU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbCA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xuICB9XG5cbiAgb25GaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICB0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGZpbGUpO1xuICAgIH1cbiAgfVxufVxuIl19
559
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnItaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZ292YnItdHcvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2JyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFHTCxXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBOEt4QixNQUFNLE9BQU8sZ0JBQWdCO2FBc0NaLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSzthQUdGLHlCQUFvQixHQUF3RDtRQUNsRyxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLEtBQUssRUFBRSxnQkFBZ0I7UUFDdkIsU0FBUyxFQUFFLENBQUMsR0FBWSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxDQUFDLEdBQUcsR0FBaUMsQ0FBQztZQUM1QyxPQUFPLGFBQWEsQ0FBQyxDQUFDLGNBQWMsYUFBYSxDQUFDO1FBQ3BELENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFZLEVBQUUsRUFBRTtZQUMxQixNQUFNLENBQUMsR0FBRyxHQUFpQyxDQUFDO1lBQzVDLE9BQU8sYUFBYSxDQUFDLENBQUMsY0FBYyxhQUFhLENBQUM7UUFDcEQsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLEdBQVksRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxHQUFHLEdBQXNCLENBQUM7WUFDakMsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxHQUFZLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsR0FBRyxHQUFzQixDQUFDO1lBQ2pDLE9BQU8saUJBQWlCLENBQUMs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O3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBGb3Jtc01vZHVsZSxcbiAgTmdDb250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JyLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibWItNCBmb250LXJhd2xpbmVcIiBbY2xhc3MuaW5saW5lLWlucHV0XT1cImlubGluZVwiPlxuICAgICAgQGlmIChsYWJlbCkge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBbZm9yXT1cImlucHV0SWRcIlxuICAgICAgICAgIGNsYXNzPVwiYmxvY2sgdGV4dC1nb3Zici1zbSBmb250LXNlbWlib2xkIHRleHQtZ292YnItZ3JheS04MCBtYi0xXCJcbiAgICAgICAgICBbY2xhc3Muc3Itb25seV09XCJpbmxpbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICAgIEBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1nb3Zici1kYW5nZXIgbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgXG4gICAgICBAaWYgKGhlbHBlclRleHQgJiYgIWVycm9yICYmICFzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImJsb2NrIHRleHQtZ292YnIteHMgdGV4dC1nb3Zici1ncmF5LTYwIG1iLTFcIj5cbiAgICAgICAgICB7eyBoZWxwZXJUZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICBcbiAgICAgIDxkaXYgW2NsYXNzXT1cImNvbnRhaW5lckNsYXNzZXNcIj5cbiAgICAgICAgPCEtLSBJY29uIChsZWZ0KSAtLT5cbiAgICAgICAgQGlmIChpY29uICYmICFpY29uUmlnaHQpIHtcbiAgICAgICAgICA8aVxuICAgICAgICAgICAgW2NsYXNzXT1cIidmYS1zb2xpZCBmYS0nICsgaWNvbiArICcgYWJzb2x1dGUgbGVmdC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWdvdmJyLWdyYXktNDAgcG9pbnRlci1ldmVudHMtbm9uZSdcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBTZWxlY3QgLS0+XG4gICAgICAgIEBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiaW5wdXRDbGFzc2VzXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIFtzZWxlY3RlZF09XCIhdmFsdWVcIj57eyBwbGFjZWhvbGRlciB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICB9XG4gICAgXG4gICAgICAgIDwhLS0gVGV4dGFyZWEgLS0+XG4gICAgICAgIEBpZiAodHlwZSA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzZXNcIlxuICAgICAgICAgICAgW3Jvd3NdPVwicm93c1wiXG4gICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4TGVuZ3RoIHx8IG51bGxcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICB9XG4gICAgXG4gICAgICAgIDwhLS0gRmlsZSAtLT5cbiAgICAgICAgQGlmICh0eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbZm9yXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgYmctZ292YnItcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtZ292YnItcGlsbCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1nb3Zici1wcmltYXJ5LWRhcmsgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1nb3Zici1zbSBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3Itbm90LWFsbG93ZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS11cGxvYWQgbXItMlwiPjwvaT5cbiAgICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfHwgJ1NlbGVjaW9uYXIgYXJxdWl2bycgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHRleHQtZ292YnItc20gdGV4dC1nb3Zici1ncmF5LTYwXCI+e3sgZmlsZU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBUZXh0IC8gRW1haWwgLyBQYXNzd29yZCAvIE51bWJlciAvIFNlYXJjaCAtLT5cbiAgICAgICAgQGlmIChpc1N0YW5kYXJkSW5wdXQpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgIFt0eXBlXT1cImFjdHVhbFR5cGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzZXNcIlxuICAgICAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIm1heExlbmd0aCB8fCBudWxsXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBQYXNzd29yZCB0b2dnbGUgYnV0dG9uIC0tPlxuICAgICAgICBAaWYgKHR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMyB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC1nb3Zici1wcmltYXJ5IGhvdmVyOnRleHQtZ292YnItcHJpbWFyeS1kYXJrIGdvdmJyLWZvY3VzLXJpbmdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzaG93UGFzc3dvcmQgPyAnT2N1bHRhciBzZW5oYScgOiAnTW9zdHJhciBzZW5oYSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cInNob3dQYXNzd29yZCA/ICdmYS1zb2xpZCBmYS1leWUtc2xhc2gnIDogJ2ZhLXNvbGlkIGZhLWV5ZSdcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBJY29uIChyaWdodCkgLS0+XG4gICAgICAgIEBpZiAoaWNvbiAmJiBpY29uUmlnaHQgJiYgdHlwZSAhPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgIDxpXG4gICAgICAgICAgICBbY2xhc3NdPVwiJ2ZhLXNvbGlkIGZhLScgKyBpY29uICsgJyBhYnNvbHV0ZSByaWdodC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWdvdmJyLWdyYXktNDAgcG9pbnRlci1ldmVudHMtbm9uZSdcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgPCEtLSBTZWFyY2ggYnV0dG9uIC0tPlxuICAgICAgICBAaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTEgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHctOCBoLTggcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ292YnItcHJpbWFyeSBob3ZlcjpiZy1nb3Zici1wcmltYXJ5LWxpZ2h0ZXN0IGdvdmJyLWZvY3VzLXJpbmcgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJ1c2NhclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoU3VibWl0LmVtaXQodmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtbWFnbmlmeWluZy1nbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgXG4gICAgICA8IS0tIENoYXJhY3RlciBjb3VudGVyIC0tPlxuICAgICAgQGlmIChtYXhMZW5ndGggJiYgKHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgaXNTdGFuZGFyZElucHV0KSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBtdC0wLjVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ292YnIteHMgdGV4dC1nb3Zici1ncmF5LTQwXCI+XG4gICAgICAgICAgICB7eyB2YWx1ZT8ubGVuZ3RoIHx8IDAgfX0ve3sgbWF4TGVuZ3RoIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICBcbiAgICAgIDwhLS0gRmVlZGJhY2sgbWVzc2FnZXMgLS0+XG4gICAgICBAaWYgKGRpc3BsYXlFcnJvcikge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LTEgdGV4dC1nb3Zici1zbSB0ZXh0LWdvdmJyLWRhbmdlclwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtdGltZXMtY2lyY2xlIG1yLTFcIj48L2k+e3sgZGlzcGxheUVycm9yIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzdWNjZXNzTWVzc2FnZSAmJiAhZGlzcGxheUVycm9yKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtMSB0ZXh0LWdvdmJyLXNtIHRleHQtZ292YnItc3VjY2Vzc1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hlY2stY2lyY2xlIG1yLTFcIj48L2k+e3sgc3VjY2Vzc01lc3NhZ2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHdhcm5pbmdNZXNzYWdlICYmICFkaXNwbGF5RXJyb3IgJiYgIXN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtMSB0ZXh0LWdvdmJyLXNtIHRleHQtZ292YnItd2FybmluZ1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgbXItMVwiPjwvaT57eyB3YXJuaW5nTWVzc2FnZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaW5mb01lc3NhZ2UgJiYgIWRpc3BsYXlFcnJvciAmJiAhc3VjY2Vzc01lc3NhZ2UgJiYgIXdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtMSB0ZXh0LWdvdmJyLXNtIHRleHQtZ292YnItaW5mb1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtaW5mby1jaXJjbGUgbXItMVwiPjwvaT57eyBpbmZvTWVzc2FnZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQnJJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHR5cGU6XG4gICAgfCAndGV4dCdcbiAgICB8ICdlbWFpbCdcbiAgICB8ICdwYXNzd29yZCdcbiAgICB8ICdzZWxlY3QnXG4gICAgfCAnZmlsZSdcbiAgICB8ICdudW1iZXInXG4gICAgfCAnc2VhcmNoJ1xuICAgIHwgJ3RleHRhcmVhJyA9ICd0ZXh0JztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgLyoqIE1lbnNhZ2VtIGRlIGVycm8gbWFudWFsIChzb2JyZXNjcmV2ZSBlcnJvcyBhdXRvbcOhdGljb3MgZG8gdmFsaWRhdG9yKSAqL1xuICBASW5wdXQoKSBlcnJvcj86IHN0cmluZztcbiAgQElucHV0KCkgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdhcm5pbmdNZXNzYWdlPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbmZvTWVzc2FnZT86IHN0cmluZztcbiAgQElucHV0KCkgaGVscGVyVGV4dD86IHN0cmluZztcbiAgQElucHV0KCkgaWNvbj86IHN0cmluZztcbiAgQElucHV0KCkgaWNvblJpZ2h0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRlbnNpdHk6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJztcbiAgQElucHV0KCkgaGlnaGxpZ2h0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlubGluZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHJvd3MgPSAzO1xuXG4gIC8qKiBNZW5zYWdlbnMgY3VzdG9taXphZGFzIHBhcmEgZXJyb3MgZGUgdmFsaWRhw6fDo28gKi9cbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIEBPdXRwdXQoKSBmaWxlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICB2YWx1ZTogc3RyaW5nID0gJyc7XG4gIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgZmlsZU5hbWUgPSAnJztcbiAgc2hvd1Bhc3N3b3JkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcbiAgaW5wdXRJZCA9IGBici1pbnB1dC0ke0JySW5wdXRDb21wb25lbnQubmV4dElkKyt9YDtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBkZWZhdWx0RXJyb3JNZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgKChlcnI6IHVua25vd24pID0+IHN0cmluZyk+ID0ge1xuICAgIHJlcXVpcmVkOiAnQ2FtcG8gb2JyaWdhdMOzcmlvJyxcbiAgICBlbWFpbDogJ0VtYWlsIGludsOhbGlkbycsXG4gICAgbWlubGVuZ3RoOiAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBlID0gZXJyIGFzIHsgcmVxdWlyZWRMZW5ndGg6IG51bWJlciB9O1xuICAgICAgcmV0dXJuIGBNw61uaW1vIGRlICR7ZS5yZXF1aXJlZExlbmd0aH0gY2FyYWN0ZXJlc2A7XG4gICAgfSxcbiAgICBtYXhsZW5ndGg6IChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIGNvbnN0IGUgPSBlcnIgYXMgeyByZXF1aXJlZExlbmd0aDogbnVtYmVyIH07XG4gICAgICByZXR1cm4gYE3DoXhpbW8gZGUgJHtlLnJlcXVpcmVkTGVuZ3RofSBjYXJhY3RlcmVzYDtcbiAgICB9LFxuICAgIG1pbjogKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgZSA9IGVyciBhcyB7IG1pbjogbnVtYmVyIH07XG4gICAgICByZXR1cm4gYFZhbG9yIG3DrW5pbW86ICR7ZS5taW59YDtcbiAgICB9LFxuICAgIG1heDogKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgZSA9IGVyciBhcyB7IG1heDogbnVtYmVyIH07XG4gICAgICByZXR1cm4gYFZhbG9yIG3DoXhpbW86ICR7ZS5tYXh9YDtcbiAgICB9LFxuICAgIHBhdHRlcm46ICdGb3JtYXRvIGludsOhbGlkbycsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgZ2V0IGlzU3RhbmRhcmRJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICE9PSAnc2VsZWN0JyAmJiB0aGlzLnR5cGUgIT09ICdmaWxlJyAmJiB0aGlzLnR5cGUgIT09ICd0ZXh0YXJlYSc7XG4gIH1cblxuICBnZXQgYWN0dWFsVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dQYXNzd29yZCA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnKSByZXR1cm4gJ3RleHQnO1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXQgY29udGFpbmVyQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnR5cGUgIT09ICdmaWxlJyA/ICdyZWxhdGl2ZScgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIGEgbWVuc2FnZW0gZGUgZXJybyBhIHNlciBleGliaWRhLlxuICAgKiBQcmlvcmlkYWRlOiBlcnJvciBtYW51YWwgPiBlcnJvIGRvIHZhbGlkYXRvciAoc2UgdG91Y2hlZC9kaXJ0eSlcbiAgICovXG4gIGdldCBkaXNwbGF5RXJyb3IoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBFcnJvIG1hbnVhbCBzZW1wcmUgdGVtIHByaW9yaWRhZGVcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gU2UgbsOjbyB0ZW0gTmdDb250cm9sLCBuw6NvIGjDoSBlcnJvIGF1dG9tw6F0aWNvXG4gICAgaWYgKCF0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgIC8vIFPDsyBtb3N0cmEgZXJybyBzZSBvIGNvbnRyb2xlIGZvaSB0b2NhZG8gb3UgbW9kaWZpY2FkbyBFIGVzdMOhIGludsOhbGlkb1xuICAgIGlmICghY29udHJvbC5lcnJvcnMgfHwgKCFjb250cm9sLnRvdWNoZWQgJiYgIWNvbnRyb2wuZGlydHkpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEJ1c2NhIGEgcHJpbWVpcmEgbWVuc2FnZW0gZGUgZXJyb1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0RXJyb3JNZXNzYWdlKGNvbnRyb2wuZXJyb3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3RFcnJvck1lc3NhZ2UoZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzKTogc3RyaW5nIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlcnJvcnMpKSB7XG4gICAgICAvLyBQcmltZWlybyB2ZXJpZmljYSBtZW5zYWdlbnMgY3VzdG9taXphZGFzIGRvIHVzdcOhcmlvXG4gICAgICBpZiAodGhpcy5lcnJvck1lc3NhZ2VzW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlc1trZXldO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXBvaXMgdmVyaWZpY2EgbWVuc2FnZW5zIHBhZHLDo29cbiAgICAgIGNvbnN0IGRlZmF1bHRNc2cgPSBCcklucHV0Q29tcG9uZW50LmRlZmF1bHRFcnJvck1lc3NhZ2VzW2tleV07XG4gICAgICBpZiAoZGVmYXVsdE1zZykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRlZmF1bHRNc2cgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0TXNnKGVycm9yc1trZXldKSA6IGRlZmF1bHRNc2c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZ2Vuw6lyaWNvXG4gICAgcmV0dXJuICdDYW1wbyBpbnbDoWxpZG8nO1xuICB9XG5cbiAgZ2V0IGlucHV0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlbnNpdHlTdHlsZXMgPSB7XG4gICAgICBzbWFsbDogJ3RleHQtZ292YnItc20nLFxuICAgICAgbWVkaXVtOiAndGV4dC1nb3Zici1iYXNlJyxcbiAgICAgIGxhcmdlOiAndGV4dC1nb3Zici1sZycsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIGNvbnN0IGRlbnNpdHlIZWlnaHRzID0ge1xuICAgICAgc21hbGw6ICdoLVt2YXIoLS1nb3Zici1pbnB1dC1zbWFsbCldJyxcbiAgICAgIG1lZGl1bTogJ2gtW3ZhcigtLWdvdmJyLWlucHV0LW1lZGl1bSldJyxcbiAgICAgIGxhcmdlOiAnaC1bdmFyKC0tZ292YnItaW5wdXQtbGFyZ2UpXScsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIGNvbnN0IGJhc2UgPSBbXG4gICAgICAndy1mdWxsIHB4LTQgZm9udC1yYXdsaW5lIGdvdmJyLWlucHV0JyxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3RleHRhcmVhJyA/ICdweS0yJyA6ICcnLFxuICAgIF0uam9pbignICcpO1xuXG4gICAgY29uc3QgZGVuc2l0eSA9IGRlbnNpdHlTdHlsZXNbdGhpcy5kZW5zaXR5XTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnR5cGUgIT09ICd0ZXh0YXJlYScgPyBkZW5zaXR5SGVpZ2h0c1t0aGlzLmRlbnNpdHldIDogJyc7XG5cbiAgICBjb25zdCBoaWdobGlnaHRDbHMgPSB0aGlzLmhpZ2hsaWdodFxuICAgICAgPyAnaC1bdmFyKC0tZ292YnItaW5wdXQtaGlnaGxpZ2h0KV0gYmctZ292YnItZ3JheS0yIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LWdvdmJyLWxnIHB4LTYnXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2xzID0gdGhpcy5kaXNwbGF5RXJyb3JcbiAgICAgID8gJ2dvdmJyLWlucHV0LS1kYW5nZXInXG4gICAgICA6IHRoaXMuc3VjY2Vzc01lc3NhZ2VcbiAgICAgICAgPyAnZ292YnItaW5wdXQtLXN1Y2Nlc3MnXG4gICAgICAgIDogdGhpcy53YXJuaW5nTWVzc2FnZVxuICAgICAgICAgID8gJ2dvdmJyLWlucHV0LS13YXJuaW5nJ1xuICAgICAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkaXNhYmxlZENscyA9IHRoaXMuaXNEaXNhYmxlZFxuICAgICAgPyAnYmctZ292YnItZ3JheS0yIHRleHQtZ292YnItZ3JheS00MCBjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgICA6ICdiZy13aGl0ZSB0ZXh0LWdvdmJyLWdyYXktODAnO1xuXG4gICAgY29uc3QgaWNvblBhZGRpbmdMZWZ0ID0gdGhpcy5pY29uICYmICF0aGlzLmljb25SaWdodCA/ICdwbC0xMCcgOiAnJztcbiAgICBjb25zdCBpY29uUGFkZGluZ1JpZ2h0ID1cbiAgICAgICh0aGlzLmljb24gJiYgdGhpcy5pY29uUmlnaHQpIHx8IHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyB8fCB0aGlzLnR5cGUgPT09ICdzZWFyY2gnXG4gICAgICAgID8gJ3ByLTEwJ1xuICAgICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIFtiYXNlLCBkZW5zaXR5LCBoZWlnaHQsIGhpZ2hsaWdodENscywgc3RhdHVzQ2xzLCBkaXNhYmxlZENscywgaWNvblBhZGRpbmdMZWZ0LCBpY29uUGFkZGluZ1JpZ2h0XVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHRvZ2dsZVBhc3N3b3JkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Bhc3N3b3JkID0gIXRoaXMuc2hvd1Bhc3N3b3JkO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBvblNlbGVjdENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIHRoaXMub25DaGFuZ2UodmFsKTtcbiAgfVxuXG4gIG9uRmlsZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbMF07XG4gICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZS5uYW1lO1xuICAgICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChmaWxlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,270 @@
1
+ import { Component, Input, Optional, Self, ViewEncapsulation, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/forms";
4
+ export class BrInputCnpjComponent {
5
+ static { this.nextId = 0; }
6
+ static { this.defaultErrorMessages = {
7
+ required: 'Campo obrigatório',
8
+ cnpjInvalid: 'CNPJ inválido',
9
+ cnpjIncomplete: 'CNPJ incompleto',
10
+ }; }
11
+ constructor(ngControl) {
12
+ this.ngControl = ngControl;
13
+ this.placeholder = '00.000.000/0000-00';
14
+ this.required = false;
15
+ this.density = 'medium';
16
+ /** Mensagens customizadas para erros */
17
+ this.errorMessages = {};
18
+ this.displayValue = '';
19
+ this.isDisabled = false;
20
+ this.rawValue = '';
21
+ this.inputId = `br-input-cnpj-${BrInputCnpjComponent.nextId++}`;
22
+ this.onChange = () => { };
23
+ this.onTouched = () => { };
24
+ this.onValidatorChange = () => { };
25
+ if (this.ngControl) {
26
+ this.ngControl.valueAccessor = this;
27
+ }
28
+ }
29
+ get displayError() {
30
+ if (this.error)
31
+ return this.error;
32
+ if (!this.ngControl?.control)
33
+ return undefined;
34
+ const control = this.ngControl.control;
35
+ if (!control.errors || (!control.touched && !control.dirty))
36
+ return undefined;
37
+ return this.getFirstErrorMessage(control.errors);
38
+ }
39
+ getFirstErrorMessage(errors) {
40
+ for (const key of Object.keys(errors)) {
41
+ if (this.errorMessages[key])
42
+ return this.errorMessages[key];
43
+ const defaultMsg = BrInputCnpjComponent.defaultErrorMessages[key];
44
+ if (defaultMsg)
45
+ return defaultMsg;
46
+ }
47
+ return 'Campo inválido';
48
+ }
49
+ get inputClasses() {
50
+ const densityHeights = {
51
+ small: 'h-[var(--govbr-input-small)] text-govbr-sm',
52
+ medium: 'h-[var(--govbr-input-medium)] text-govbr-base',
53
+ large: 'h-[var(--govbr-input-large)] text-govbr-lg',
54
+ };
55
+ const base = `w-full px-4 pr-10 font-rawline govbr-input ${densityHeights[this.density]}`;
56
+ const statusCls = this.displayError ? 'govbr-input--danger' : '';
57
+ const disabledCls = this.isDisabled
58
+ ? 'bg-govbr-gray-2 text-govbr-gray-40 cursor-not-allowed'
59
+ : 'bg-white text-govbr-gray-80';
60
+ return [base, statusCls, disabledCls].filter(Boolean).join(' ');
61
+ }
62
+ onInput(event) {
63
+ const input = event.target;
64
+ const digits = input.value.replace(/\D/g, '').slice(0, 14);
65
+ this.rawValue = digits;
66
+ this.displayValue = this.formatCnpj(digits);
67
+ this.onChange(digits);
68
+ setTimeout(() => {
69
+ input.value = this.displayValue;
70
+ });
71
+ }
72
+ onBlur() {
73
+ this.onTouched();
74
+ }
75
+ formatCnpj(digits) {
76
+ if (!digits)
77
+ return '';
78
+ let formatted = digits;
79
+ // 00.000.000/0000-00
80
+ if (digits.length > 2) {
81
+ formatted = digits.slice(0, 2) + '.' + digits.slice(2);
82
+ }
83
+ if (digits.length > 5) {
84
+ formatted = formatted.slice(0, 6) + '.' + formatted.slice(6);
85
+ }
86
+ if (digits.length > 8) {
87
+ formatted = formatted.slice(0, 10) + '/' + formatted.slice(10);
88
+ }
89
+ if (digits.length > 12) {
90
+ formatted = formatted.slice(0, 15) + '-' + formatted.slice(15);
91
+ }
92
+ return formatted;
93
+ }
94
+ // ControlValueAccessor
95
+ writeValue(value) {
96
+ const digits = (value || '').replace(/\D/g, '').slice(0, 14);
97
+ this.rawValue = digits;
98
+ this.displayValue = this.formatCnpj(digits);
99
+ }
100
+ registerOnChange(fn) {
101
+ this.onChange = fn;
102
+ }
103
+ registerOnTouched(fn) {
104
+ this.onTouched = fn;
105
+ }
106
+ setDisabledState(isDisabled) {
107
+ this.isDisabled = isDisabled;
108
+ }
109
+ // Validator
110
+ validate(control) {
111
+ const value = control.value;
112
+ if (!value) {
113
+ return this.required ? { required: true } : null;
114
+ }
115
+ const digits = value.replace(/\D/g, '');
116
+ if (digits.length < 14) {
117
+ return { cnpjIncomplete: true };
118
+ }
119
+ if (!this.isValidCnpj(digits)) {
120
+ return { cnpjInvalid: true };
121
+ }
122
+ return null;
123
+ }
124
+ registerOnValidatorChange(fn) {
125
+ this.onValidatorChange = fn;
126
+ }
127
+ isValidCnpj(cnpj) {
128
+ const digits = cnpj.replace(/\D/g, '');
129
+ if (digits.length !== 14)
130
+ return false;
131
+ // Verifica se todos os dígitos são iguais
132
+ if (/^(\d)\1+$/.test(digits))
133
+ return false;
134
+ // Calcula primeiro dígito verificador
135
+ const weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
136
+ let sum = 0;
137
+ for (let i = 0; i < 12; i++) {
138
+ sum += parseInt(digits[i], 10) * weights1[i];
139
+ }
140
+ let remainder = sum % 11;
141
+ const digit1 = remainder < 2 ? 0 : 11 - remainder;
142
+ if (digit1 !== parseInt(digits[12], 10))
143
+ return false;
144
+ // Calcula segundo dígito verificador
145
+ const weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
146
+ sum = 0;
147
+ for (let i = 0; i < 13; i++) {
148
+ sum += parseInt(digits[i], 10) * weights2[i];
149
+ }
150
+ remainder = sum % 11;
151
+ const digit2 = remainder < 2 ? 0 : 11 - remainder;
152
+ if (digit2 !== parseInt(digits[13], 10))
153
+ return false;
154
+ return true;
155
+ }
156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrInputCnpjComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BrInputCnpjComponent, isStandalone: true, selector: "br-input-cnpj", inputs: { label: "label", placeholder: "placeholder", required: "required", helperText: "helperText", error: "error", density: "density", errorMessages: "errorMessages" }, ngImport: i0, template: `
158
+ <div class="mb-4 font-rawline">
159
+ @if (label) {
160
+ <label
161
+ [for]="inputId"
162
+ class="block text-govbr-sm font-semibold text-govbr-gray-80 mb-1"
163
+ >
164
+ {{ label }}
165
+ @if (required) {
166
+ <span class="text-govbr-danger ml-0.5">*</span>
167
+ }
168
+ </label>
169
+ }
170
+
171
+ @if (helperText && !displayError) {
172
+ <span class="block text-govbr-xs text-govbr-gray-60 mb-1">
173
+ {{ helperText }}
174
+ </span>
175
+ }
176
+
177
+ <div class="relative">
178
+ <input
179
+ [id]="inputId"
180
+ type="text"
181
+ inputmode="numeric"
182
+ [placeholder]="placeholder"
183
+ [disabled]="isDisabled"
184
+ [class]="inputClasses"
185
+ [value]="displayValue"
186
+ (input)="onInput($event)"
187
+ (blur)="onBlur()"
188
+ maxlength="18"
189
+ />
190
+ <i class="fa-solid fa-building absolute right-3 top-1/2 -translate-y-1/2 text-govbr-gray-40 pointer-events-none"></i>
191
+ </div>
192
+
193
+ @if (displayError) {
194
+ <span class="flex items-center mt-1 text-govbr-sm text-govbr-danger">
195
+ <i class="fa-solid fa-times-circle mr-1"></i>{{ displayError }}
196
+ </span>
197
+ }
198
+ </div>
199
+ `, isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrInputCnpjComponent, decorators: [{
202
+ type: Component,
203
+ args: [{
204
+ selector: 'br-input-cnpj',
205
+ standalone: true,
206
+ encapsulation: ViewEncapsulation.None,
207
+ template: `
208
+ <div class="mb-4 font-rawline">
209
+ @if (label) {
210
+ <label
211
+ [for]="inputId"
212
+ class="block text-govbr-sm font-semibold text-govbr-gray-80 mb-1"
213
+ >
214
+ {{ label }}
215
+ @if (required) {
216
+ <span class="text-govbr-danger ml-0.5">*</span>
217
+ }
218
+ </label>
219
+ }
220
+
221
+ @if (helperText && !displayError) {
222
+ <span class="block text-govbr-xs text-govbr-gray-60 mb-1">
223
+ {{ helperText }}
224
+ </span>
225
+ }
226
+
227
+ <div class="relative">
228
+ <input
229
+ [id]="inputId"
230
+ type="text"
231
+ inputmode="numeric"
232
+ [placeholder]="placeholder"
233
+ [disabled]="isDisabled"
234
+ [class]="inputClasses"
235
+ [value]="displayValue"
236
+ (input)="onInput($event)"
237
+ (blur)="onBlur()"
238
+ maxlength="18"
239
+ />
240
+ <i class="fa-solid fa-building absolute right-3 top-1/2 -translate-y-1/2 text-govbr-gray-40 pointer-events-none"></i>
241
+ </div>
242
+
243
+ @if (displayError) {
244
+ <span class="flex items-center mt-1 text-govbr-sm text-govbr-danger">
245
+ <i class="fa-solid fa-times-circle mr-1"></i>{{ displayError }}
246
+ </span>
247
+ }
248
+ </div>
249
+ `,
250
+ }]
251
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
252
+ type: Self
253
+ }, {
254
+ type: Optional
255
+ }] }], propDecorators: { label: [{
256
+ type: Input
257
+ }], placeholder: [{
258
+ type: Input
259
+ }], required: [{
260
+ type: Input
261
+ }], helperText: [{
262
+ type: Input
263
+ }], error: [{
264
+ type: Input
265
+ }], density: [{
266
+ type: Input
267
+ }], errorMessages: [{
268
+ type: Input
269
+ }] } });
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnItaW5wdXQtY25wai5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1nb3Zici10dy9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQtY25wai9ici1pbnB1dC1jbnBqLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBb0R2QixNQUFNLE9BQU8sb0JBQW9CO2FBZWhCLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSzthQU9GLHlCQUFvQixHQUEyQjtRQUNyRSxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLFdBQVcsRUFBRSxlQUFlO1FBQzVCLGNBQWMsRUFBRSxpQkFBaUI7S0FDbEMsQUFKMkMsQ0FJMUM7SUFFRixZQUF3QyxTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBMUJuRCxnQkFBVyxHQUFHLG9CQUFvQixDQUFDO1FBQ25DLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsWUFBTyxHQUFpQyxRQUFRLENBQUM7UUFFMUQsd0NBQXdDO1FBQy9CLGtCQUFhLEdBQTJCLEVBQUUsQ0FBQztRQUVwRCxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ1gsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUd0QixZQUFPLEdBQUcsaUJBQWlCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFM0QsYUFBUSxHQUE0QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDN0MsY0FBUyxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNqQyxzQkFBaUIsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFTdkMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENB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ImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNlbGYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYnItaW5wdXQtY25waicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItNCBmb250LXJhd2xpbmVcIj5cclxuICAgICAgQGlmIChsYWJlbCkge1xyXG4gICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgW2Zvcl09XCJpbnB1dElkXCJcclxuICAgICAgICAgIGNsYXNzPVwiYmxvY2sgdGV4dC1nb3Zici1zbSBmb250LXNlbWlib2xkIHRleHQtZ292YnItZ3JheS04MCBtYi0xXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBsYWJlbCB9fVxyXG4gICAgICAgICAgQGlmIChyZXF1aXJlZCkge1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ292YnItZGFuZ2VyIG1sLTAuNVwiPio8L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgfVxyXG5cclxuICAgICAgQGlmIChoZWxwZXJUZXh0ICYmICFkaXNwbGF5RXJyb3IpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJsb2NrIHRleHQtZ292YnIteHMgdGV4dC1nb3Zici1ncmF5LTYwIG1iLTFcIj5cclxuICAgICAgICAgIHt7IGhlbHBlclRleHQgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3Nlc1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcclxuICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgbWF4bGVuZ3RoPVwiMThcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1idWlsZGluZyBhYnNvbHV0ZSByaWdodC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWdvdmJyLWdyYXktNDAgcG9pbnRlci1ldmVudHMtbm9uZVwiPjwvaT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBAaWYgKGRpc3BsYXlFcnJvcikge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtMSB0ZXh0LWdvdmJyLXNtIHRleHQtZ292YnItZGFuZ2VyXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRpbWVzLWNpcmNsZSBtci0xXCI+PC9pPnt7IGRpc3BsYXlFcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJySW5wdXRDbnBqQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnMDAuMDAwLjAwMC8wMDAwLTAwJztcclxuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhlbHBlclRleHQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXJyb3I/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVuc2l0eTogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyA9ICdtZWRpdW0nO1xyXG5cclxuICAvKiogTWVuc2FnZW5zIGN1c3RvbWl6YWRhcyBwYXJhIGVycm9zICovXHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG5cclxuICBkaXNwbGF5VmFsdWUgPSAnJztcclxuICBpc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByYXdWYWx1ZSA9ICcnO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIGlucHV0SWQgPSBgYnItaW5wdXQtY25wai0ke0JySW5wdXRDbnBqQ29tcG9uZW50Lm5leHRJZCsrfWA7XHJcblxyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gIG9uVmFsaWRhdG9yQ2hhbmdlOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRFcnJvck1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgcmVxdWlyZWQ6ICdDYW1wbyBvYnJpZ2F0w7NyaW8nLFxyXG4gICAgY25wakludmFsaWQ6ICdDTlBKIGludsOhbGlkbycsXHJcbiAgICBjbnBqSW5jb21wbGV0ZTogJ0NOUEogaW5jb21wbGV0bycsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzcGxheUVycm9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5lcnJvcikgcmV0dXJuIHRoaXMuZXJyb3I7XHJcblxyXG4gICAgaWYgKCF0aGlzLm5nQ29udHJvbD8uY29udHJvbCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcclxuICAgIGlmICghY29udHJvbC5lcnJvcnMgfHwgKCFjb250cm9sLnRvdWNoZWQgJiYgIWNvbnRyb2wuZGlydHkpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmdldEZpcnN0RXJyb3JNZXNzYWdlKGNvbnRyb2wuZXJyb3JzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rmlyc3RFcnJvck1lc3NhZ2UoZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzKTogc3RyaW5nIHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVycm9ycykpIHtcclxuICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlc1trZXldKSByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2VzW2tleV07XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRNc2cgPSBCcklucHV0Q25wakNvbXBvbmVudC5kZWZhdWx0RXJyb3JNZXNzYWdlc1trZXldO1xyXG4gICAgICBpZiAoZGVmYXVsdE1zZykgcmV0dXJuIGRlZmF1bHRNc2c7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ0NhbXBvIGludsOhbGlkbyc7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5wdXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkZW5zaXR5SGVpZ2h0cyA9IHtcclxuICAgICAgc21hbGw6ICdoLVt2YXIoLS1nb3Zici1pbnB1dC1zbWFsbCldIHRleHQtZ292YnItc20nLFxyXG4gICAgICBtZWRpdW06ICdoLVt2YXIoLS1nb3Zici1pbnB1dC1tZWRpdW0pXSB0ZXh0LWdvdmJyLWJhc2UnLFxyXG4gICAgICBsYXJnZTogJ2gtW3ZhcigtLWdvdmJyLWlucHV0LWxhcmdlKV0gdGV4dC1nb3Zici1sZycsXHJcbiAgICB9IGFzIGNvbnN0O1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSBgdy1mdWxsIHB4LTQgcHItMTAgZm9udC1yYXdsaW5lIGdvdmJyLWlucHV0ICR7ZGVuc2l0eUhlaWdodHNbdGhpcy5kZW5zaXR5XX1gO1xyXG4gICAgY29uc3Qgc3RhdHVzQ2xzID0gdGhpcy5kaXNwbGF5RXJyb3IgPyAnZ292YnItaW5wdXQtLWRhbmdlcicgOiAnJztcclxuICAgIGNvbnN0IGRpc2FibGVkQ2xzID0gdGhpcy5pc0Rpc2FibGVkXHJcbiAgICAgID8gJ2JnLWdvdmJyLWdyYXktMiB0ZXh0LWdvdmJyLWdyYXktNDAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xyXG4gICAgICA6ICdiZy13aGl0ZSB0ZXh0LWdvdmJyLWdyYXktODAnO1xyXG5cclxuICAgIHJldHVybiBbYmFzZSwgc3RhdHVzQ2xzLCBkaXNhYmxlZENsc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgZGlnaXRzID0gaW5wdXQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKS5zbGljZSgwLCAxNCk7XHJcbiAgICB0aGlzLnJhd1ZhbHVlID0gZGlnaXRzO1xyXG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdENucGooZGlnaXRzKTtcclxuICAgIHRoaXMub25DaGFuZ2UoZGlnaXRzKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0Q25waihkaWdpdHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRpZ2l0cykgcmV0dXJuICcnO1xyXG4gICAgbGV0IGZvcm1hdHRlZCA9IGRpZ2l0cztcclxuICAgIC8vIDAwLjAwMC4wMDAvMDAwMC0wMFxyXG4gICAgaWYgKGRpZ2l0cy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGZvcm1hdHRlZCA9IGRpZ2l0cy5zbGljZSgwLCAyKSArICcuJyArIGRpZ2l0cy5zbGljZSgyKTtcclxuICAgIH1cclxuICAgIGlmIChkaWdpdHMubGVuZ3RoID4gNSkge1xyXG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQuc2xpY2UoMCwgNikgKyAnLicgKyBmb3JtYXR0ZWQuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlnaXRzLmxlbmd0aCA+IDgpIHtcclxuICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnNsaWNlKDAsIDEwKSArICcvJyArIGZvcm1hdHRlZC5zbGljZSgxMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlnaXRzLmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5zbGljZSgwLCAxNSkgKyAnLScgKyBmb3JtYXR0ZWQuc2xpY2UoMTUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdHRlZDtcclxuICB9XHJcblxyXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaWdpdHMgPSAodmFsdWUgfHwgJycpLnJlcGxhY2UoL1xcRC9nLCAnJykuc2xpY2UoMCwgMTQpO1xyXG4gICAgdGhpcy5yYXdWYWx1ZSA9IGRpZ2l0cztcclxuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXRDbnBqKGRpZ2l0cyk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBWYWxpZGF0b3JcclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZCA/IHsgcmVxdWlyZWQ6IHRydWUgfSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlnaXRzID0gdmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIGlmIChkaWdpdHMubGVuZ3RoIDwgMTQpIHtcclxuICAgICAgcmV0dXJuIHsgY25wakluY29tcGxldGU6IHRydWUgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZENucGooZGlnaXRzKSkge1xyXG4gICAgICByZXR1cm4geyBjbnBqSW52YWxpZDogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1ZhbGlkQ25waihjbnBqOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRpZ2l0cyA9IGNucGoucmVwbGFjZSgvXFxEL2csICcnKTtcclxuXHJcbiAgICBpZiAoZGlnaXRzLmxlbmd0aCAhPT0gMTQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBWZXJpZmljYSBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpc1xyXG4gICAgaWYgKC9eKFxcZClcXDErJC8udGVzdChkaWdpdHMpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gQ2FsY3VsYSBwcmltZWlybyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICBjb25zdCB3ZWlnaHRzMSA9IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuICAgIGxldCBzdW0gPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XHJcbiAgICAgIHN1bSArPSBwYXJzZUludChkaWdpdHNbaV0sIDEwKSAqIHdlaWdodHMxW2ldO1xyXG4gICAgfVxyXG4gICAgbGV0IHJlbWFpbmRlciA9IHN1bSAlIDExO1xyXG4gICAgY29uc3QgZGlnaXQxID0gcmVtYWluZGVyIDwgMiA/IDAgOiAxMSAtIHJlbWFpbmRlcjtcclxuICAgIGlmIChkaWdpdDEgIT09IHBhcnNlSW50KGRpZ2l0c1sxMl0sIDEwKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vIENhbGN1bGEgc2VndW5kbyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICBjb25zdCB3ZWlnaHRzMiA9IFs2LCA1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuICAgIHN1bSA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEzOyBpKyspIHtcclxuICAgICAgc3VtICs9IHBhcnNlSW50KGRpZ2l0c1tpXSwgMTApICogd2VpZ2h0czJbaV07XHJcbiAgICB9XHJcbiAgICByZW1haW5kZXIgPSBzdW0gJSAxMTtcclxuICAgIGNvbnN0IGRpZ2l0MiA9IHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XHJcbiAgICBpZiAoZGlnaXQyICE9PSBwYXJzZUludChkaWdpdHNbMTNdLCAxMCkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19