@seniorsistemas/angular-components 19.9.2 → 19.9.3-feat-sds-595-2de50a46

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.
Files changed (90) hide show
  1. package/README.md +99 -13
  2. package/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
  3. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +8 -0
  4. package/content-generator/lib/content-generator/content-generator.component.d.ts +2 -2
  5. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +2 -0
  6. package/editor/lib/editor/editor.component.d.ts +1 -1
  7. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
  8. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +17 -5
  9. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +9 -8
  10. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +18 -3
  11. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
  12. package/esm2022/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.mjs +4 -3
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +3 -3
  15. package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +4 -3
  16. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
  17. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  18. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
  19. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
  20. package/esm2022/editor/lib/editor/editor.component.mjs +8 -8
  21. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +45 -34
  22. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
  23. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
  24. package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
  25. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
  26. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -3
  27. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +19 -8
  28. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
  29. package/esm2022/select/lib/select/select.component.mjs +3 -3
  30. package/esm2022/slider/lib/slider/slider.component.mjs +3 -3
  31. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +54 -8
  32. package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
  33. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
  34. package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
  35. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
  36. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +16 -4
  37. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
  39. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +8 -6
  41. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +17 -2
  43. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +20 -20
  45. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-editor.mjs +7 -7
  47. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  48. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +44 -33
  49. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
  51. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
  53. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
  55. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +20 -9
  57. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  58. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  59. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-slider.mjs +2 -2
  61. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +53 -7
  63. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  64. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
  65. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
  67. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
  69. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  70. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
  71. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  72. package/fieldset/README.md +77 -15
  73. package/fieldset/lib/fieldset/fieldset.component.d.ts +28 -14
  74. package/global-search/lib/global-search/global-search.module.d.ts +1 -1
  75. package/package.json +7 -9
  76. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +3 -1
  77. package/schematics/collection.json +26 -1
  78. package/schematics/migrations/migrate-dynamic-form-v19/index.js +15 -34
  79. package/schematics/migrations/migrate-dynamic-form-v19/index.js.map +1 -1
  80. package/schematics/migrations/migrate-fieldset-body-template/index.d.ts +2 -0
  81. package/schematics/migrations/migrate-fieldset-body-template/index.js +421 -0
  82. package/schematics/migrations/migrate-fieldset-body-template/index.js.map +1 -0
  83. package/schematics/migrations/migrate-steps-to-stepper/index.js +1 -19
  84. package/schematics/migrations/migrate-steps-to-stepper/index.js.map +1 -1
  85. package/schematics/migrations.json +5 -0
  86. package/schematics/utils/ast-utils.d.ts +33 -1
  87. package/schematics/utils/ast-utils.js +175 -4
  88. package/schematics/utils/ast-utils.js.map +1 -1
  89. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +2 -1
  90. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
package/README.md CHANGED
@@ -1,25 +1,111 @@
1
- # AngularComponents
1
+ # @seniorsistemas/angular-components
2
2
 
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.
3
+ Biblioteca de componentes Angular reutilizáveis da Senior Sistemas, construída com Angular 18 e Tailwind CSS.
4
4
 
5
- ## Code scaffolding
5
+ Inclui mais de 70 componentes, diretivas e pipes para construção de interfaces — desde inputs e formulários dinâmicos até tabelas, kanban, chat e muito mais.
6
6
 
7
- Run `ng generate component component-name --project angular-components` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project angular-components`.
7
+ ## Documentação
8
8
 
9
- > Note: Don't forget to add `--project angular-components` or else it will be added to the default project in your `angular.json` file.
9
+ A documentação oficial é feita via **Storybook**. Cada componente tem stories com exemplos interativos, descrição de inputs/outputs e variantes visuais.
10
10
 
11
- ## Build
11
+ ### Rodar o Storybook localmente
12
12
 
13
- Run `ng build angular-components` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+ ```bash
14
+ npm run storybook
15
+ ```
14
16
 
15
- ## Publishing
17
+ Acesse em `http://localhost:6006`.
16
18
 
17
- After building your library with `ng build angular-components`, go to the dist folder `cd dist/angular-components` and run `npm publish`.
19
+ ### Build do Storybook
18
20
 
19
- ## Running unit tests
21
+ ```bash
22
+ npm run build-storybook
23
+ ```
20
24
 
21
- Run `ng test angular-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
25
+ O output é gerado em `storybook-static/`.
22
26
 
23
- ## Further help
27
+ ## Showcase
28
+
29
+ Além do Storybook, há um projeto de showcase com exemplos reais de uso:
30
+
31
+ ```bash
32
+ npm run start
33
+ ```
34
+
35
+ Acesse em `http://localhost:4200`.
36
+
37
+ ## Estrutura do monorepo
38
+
39
+ ```
40
+ projects/
41
+ angular-components/ # Biblioteca de componentes
42
+ <nome-componente>/ # Cada componente é um sub-pacote independente
43
+ src/lib/
44
+ ng-package.json
45
+ showcase/ # Aplicação de demonstração
46
+ ```
47
+
48
+ ## Instalação
49
+
50
+ ```bash
51
+ npm install @seniorsistemas/angular-components
52
+ ```
53
+
54
+ Cada componente é importado individualmente pelo seu sub-pacote:
55
+
56
+ ```typescript
57
+ import { ButtonModule } from '@seniorsistemas/angular-components/button';
58
+ import { DynamicFormModule } from '@seniorsistemas/angular-components/dynamic-form';
59
+ ```
60
+
61
+ ## Schematics de migração
62
+
63
+ A biblioteca oferece schematics de migração via `ng update`, então é boa prática sempre atualizar a versão instalada com esse comando em vez de só trocar o número no `package.json` — além de atualizar a dependência, ele aplica automaticamente as migrations necessárias no seu projeto e mostra o que há de novo relevante para o seu código:
64
+
65
+ ```bash
66
+ ng update @seniorsistemas/angular-components
67
+ ```
68
+
69
+ Migrations disponíveis (por versão em que passam a ser aplicadas):
70
+
71
+ | Versão | Migration | O que faz |
72
+ | -------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
73
+ | `19.0.0` | `migration-v19-0-0-dynamic-form` | Migra o `DynamicForm` de v18 para v19: construtores → plain objects, enums → string literals, `[fields]` → `[configs]`, `Editor` → `provideEditorField()`, estilos → `angular.json` |
74
+ | `19.0.0` | `migration-v19-0-0-steps-to-stepper` | Migra `Steps` para `Stepper`: `<s-steps>` → `<s-stepper>`, import de `.../steps` → `.../stepper`, `StepsComponent` → `StepperComponent`, e remove o `StepsModule` (componente agora standalone) substituindo por `StepperComponent` |
75
+ | `19.6.0` | `migration-v19-6-0-p-datepicker` | Migra `p-datepicker` (PrimeNG) para `s-datepicker` (`@seniorsistemas/angular-components`) |
76
+ | `19.6.0` | `migration-v19-6-0-p-editor` | Migra `p-editor` (PrimeNG/Quill) para `s-editor`: renomeia tag e eventos, remove atributos sem equivalente, limpa configs legadas do `DynamicForm` e atualiza dependências do `package.json` |
77
+ | `19.6.2` | `migration-v19-6-2-s-chips-outputs` | Renomeia outputs legados do `s-chips`: `onAdd`→`added`, `onRemove`→`removed`, `onChipClick`→`chipClicked`, `onFocus`→`focused`, `onBlur`→`focusLost` |
78
+ | `19.9.3` | `migration-v19-9-3-fieldset-body-template` | Envolve o conteúdo projetado do `s-fieldset` em `<ng-template sTemplate="body">`, mantendo templates de slot como `sTemplate="header"` fora do body, e garante o `TemplateDirective` no escopo do componente (standalone ou via `NgModule`) |
79
+
80
+ A lista completa, com a `version` que dispara cada migration e a `factory` correspondente, fica em [`projects/angular-components/schematics/migrations.json`](projects/angular-components/schematics/migrations.json).
81
+
82
+ ### Executando uma migration individualmente
83
+
84
+ Se você já está na versão instalada (não chegou até ela via `ng update`) e só precisa aplicar uma migration específica no seu projeto, sem atualizar nada, há duas formas:
85
+
86
+ **Via `ng generate`** (mais simples) — cada migration também está disponível com um nome curto, sem o prefixo de versão (`migrate-<nome>` em vez de `migration-v<versão>-<nome>`):
87
+
88
+ ```bash
89
+ ng generate @seniorsistemas/angular-components:migrate-fieldset-body-template
90
+ ```
91
+
92
+ **Via `ng update --name`** (mais completo) — usa o nome versionado, o mesmo que aparece na tabela acima:
93
+
94
+ ```bash
95
+ ng update @seniorsistemas/angular-components --name migration-v19-9-3-fieldset-body-template
96
+ ```
97
+
98
+ Os dois rodam exatamente a mesma migration e nenhum dos dois altera a versão instalada ou reinstala dependências.
99
+
100
+ ## Build da biblioteca
101
+
102
+ ```bash
103
+ npm run build
104
+ ```
105
+
106
+ ## Testes
107
+
108
+ ```bash
109
+ npm run test
110
+ ```
24
111
 
25
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -28,11 +28,6 @@ export declare class CheckboxComponent implements ControlValueAccessor {
28
28
  ariaLabel: import("@angular/core").InputSignal<string | undefined>;
29
29
  /** @description ID do elemento que descreve o checkbox (para usar `<label for="...">`). Opcional. */
30
30
  ariaLabelledBy: import("@angular/core").InputSignal<string | undefined>;
31
- /**
32
- * @description Emitido quando o valor do checkbox é alterado pelo usuário.
33
- * Emite o novo valor booleano (`true` para marcado, `false` para desmarcado).
34
- */
35
- readonly checkedChange: import("@angular/core").OutputEmitterRef<boolean>;
36
31
  private _onChange;
37
32
  private _onTouched;
38
33
  private _hasUserInteracted;
@@ -49,5 +44,5 @@ export declare class CheckboxComponent implements ControlValueAccessor {
49
44
  setDisabledState(disabled: boolean): void;
50
45
  onBlur(): void;
51
46
  static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
52
- static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "s-checkbox", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "checked": "checkedChange"; "checkedChange": "checkedChange"; }, never, never, true, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "s-checkbox", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "checked": "checkedChange"; }, never, never, true, never>;
53
48
  }
@@ -24,13 +24,21 @@ export declare class CheckboxListComponent implements ControlValueAccessor {
24
24
  * Campo obrigatório.
25
25
  */
26
26
  data: CheckboxListData;
27
+ /**
28
+ * @description Instância do nó pai na árvore recursiva, obtida via DI (`@SkipSelf`).
29
+ * `null` para o nó raiz. Usada para herdar o estado `disabled` sem expor um `@Input`
30
+ * paralelo ao contrato de `ControlValueAccessor`.
31
+ */
32
+ private readonly _parent;
27
33
  state: CheckboxListState;
28
34
  private _onChange;
29
35
  private _onTouched;
30
36
  writeValue(value: CheckboxListState): void;
31
37
  get renderType(): "inline" | "block";
38
+ get isDisabled(): boolean;
32
39
  registerOnChange(onChange: (value: CheckboxListState) => void): void;
33
40
  registerOnTouched(onTouched: () => void): void;
41
+ setDisabledState(isDisabled: boolean): void;
34
42
  private _initializeChildren;
35
43
  getCheckboxState(item: CheckboxListChildren | undefined, label: string): {};
36
44
  updateParent(): void;
@@ -25,10 +25,9 @@ import * as i1 from "@seniorsistemas/angular-components/common/deprecated-select
25
25
  export declare class ContentGeneratorComponent implements OnInit, ControlValueAccessor {
26
26
  private readonly _iassistService;
27
27
  private readonly _formBuilder;
28
- private readonly _translateService;
29
28
  speechRecognitionService: SpeechRecognitionService;
30
- private injector;
31
29
  private readonly _destroyRef;
30
+ disabled: import("@angular/core").WritableSignal<boolean>;
32
31
  textArea: import("@angular/core").Signal<TextAreaComponent | undefined>;
33
32
  private static id;
34
33
  /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */
@@ -64,6 +63,7 @@ export declare class ContentGeneratorComponent implements OnInit, ControlValueAc
64
63
  private _onTouched?;
65
64
  ngOnInit(): void;
66
65
  writeValue(value: string): void;
66
+ setDisabledState(isDisabled: boolean): void;
67
67
  registerOnChange(onChange: (value: string) => void): void;
68
68
  registerOnTouched(onTouched: () => void): void;
69
69
  onValueChange(value: string): void;
@@ -53,6 +53,7 @@ export declare class CountryPhonePickerComponent implements OnInit, ControlValue
53
53
  phoneInput: ElementRef | null;
54
54
  private readonly filterInput;
55
55
  isFocused: boolean;
56
+ disabled: boolean;
56
57
  mask: string | null;
57
58
  selectedItem: CountryPhoneData | null;
58
59
  currentItemIndex: number;
@@ -81,6 +82,7 @@ export declare class CountryPhonePickerComponent implements OnInit, ControlValue
81
82
  writeValue(value: PhoneSelectionData): void;
82
83
  registerOnChange(onChange: (value: PhoneSelectionData) => void): void;
83
84
  registerOnTouched(onTouched: (value: PhoneSelectionData) => void): void;
85
+ setDisabledState(isDisabled: boolean): void;
84
86
  ngOnInit(): void;
85
87
  onSelectItem(country: CountryPhoneData): void;
86
88
  onCleanFilter(): void;
@@ -60,10 +60,10 @@ export declare class EditorComponent implements AfterViewInit, OnDestroy, Contro
60
60
  * @description Emitido quando a seleção de texto no editor muda.
61
61
  */
62
62
  selectionChange: import("@angular/core").OutputEmitterRef<EditorSelectionChangeEvent>;
63
+ protected formDisabled: boolean;
63
64
  private editorContainer;
64
65
  private imageInput;
65
66
  private editor?;
66
- private _formDisabled;
67
67
  private _currentPlaceholder;
68
68
  activeStates: {
69
69
  isBold: boolean;
@@ -1,4 +1,4 @@
1
- import { Component, computed, forwardRef, input, model, output, signal } from '@angular/core';
1
+ import { Component, computed, forwardRef, input, model, signal } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
@@ -29,11 +29,6 @@ export class CheckboxComponent {
29
29
  ariaLabel = input(undefined);
30
30
  /** @description ID do elemento que descreve o checkbox (para usar `<label for="...">`). Opcional. */
31
31
  ariaLabelledBy = input(undefined);
32
- /**
33
- * @description Emitido quando o valor do checkbox é alterado pelo usuário.
34
- * Emite o novo valor booleano (`true` para marcado, `false` para desmarcado).
35
- */
36
- checkedChange = output();
37
32
  _onChange = () => { };
38
33
  _onTouched = () => { };
39
34
  _hasUserInteracted = signal(false);
@@ -59,7 +54,6 @@ export class CheckboxComponent {
59
54
  }
60
55
  emit(value) {
61
56
  this._onChange(value);
62
- this.checkedChange.emit(value);
63
57
  }
64
58
  writeValue(value) {
65
59
  this.checked.set(!!value);
@@ -77,7 +71,7 @@ export class CheckboxComponent {
77
71
  this._onTouched();
78
72
  }
79
73
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
80
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "s-checkbox", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "ariaLabelledBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", checked: "checkedChange", checkedChange: "checkedChange" }, providers: [
74
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "s-checkbox", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "ariaLabelledBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", checked: "checkedChange" }, providers: [
81
75
  {
82
76
  provide: NG_VALUE_ACCESSOR,
83
77
  useExisting: forwardRef(() => CheckboxComponent),
@@ -95,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
95
89
  },
96
90
  ], template: "<div\n class=\"group flex cursor-pointer select-none gap-3 outline-none\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || label() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"rounded flex h-5 w-5 flex-shrink-0 items-center justify-center border border-grayscale-30\n transition-all duration-200 hover:border-grayscale-50\n group-focus-visible:ring-2 group-focus-visible:ring-primary group-focus-visible:ring-offset-1\"\n [class.bg-primary]=\"checked() || isIndeterminate()\"\n [class.hover:bg-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.bg-grayscale-0]=\"!checked() && !isIndeterminate()\"\n [class.border-primary]=\"checked() || isIndeterminate()\"\n [class.hover:border-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.opacity-50]=\"disabled()\"\n >\n @if (isIndeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-grayscale-0 h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n\n @if (label()) {\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90 ml-2\"\n aria-hidden=\"true\"\n >\n {{ label() }}\n </span>\n }\n</div>\n" }]
97
91
  }] });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXpFOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBY0gsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixzRkFBc0Y7SUFDL0UsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQiw0RkFBNEY7SUFDckYsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5Qix3SUFBd0k7SUFDakksYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQywyRUFBMkU7SUFDcEUsS0FBSyxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUNqQyx3R0FBd0c7SUFDakcsU0FBUyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDeEQscUdBQXFHO0lBQzlGLGNBQWMsR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBRTdEOzs7T0FHRztJQUNhLGFBQWEsR0FBRyxNQUFNLEVBQVcsQ0FBQztJQUUxQyxTQUFTLEdBQTZCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUMvQyxVQUFVLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ2xDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzQzs7O09BR0c7SUFDYSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFFOUYsTUFBTTtRQUNULElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUVPLElBQUksQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBa0M7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFNBQXFCO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sTUFBTTtRQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQXJFUSxpQkFBaUI7NEZBQWpCLGlCQUFpQixzOEJBVGY7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osMEJDNUJMLDZ6RUErREE7OzRGRGhDYSxpQkFBaUI7a0JBYjdCLFNBQVM7K0JBQ0ksWUFBWSxjQUNWLElBQUksV0FDUCxFQUFFLGFBQ0E7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZm9yd2FyZFJlZiwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgY2FpeGEgZGUgc2VsZcOnw6NvIChjaGVja2JveCkgY29tIHN1cG9ydGUgYSB0csOqcyBlc3RhZG9zOlxyXG4gKiBtYXJjYWRvLCBkZXNtYXJjYWRvIGUgaW5kZXRlcm1pbmFkby4gSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmFcclxuICogaW50ZWdyYcOnw6NvIGNvbSBSZWFjdGl2ZSBGb3JtcyBlIFRlbXBsYXRlLWRyaXZlbiBGb3JtcyBkbyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLWNoZWNrYm94XHJcbiAqICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNlaXRvXCJcclxuICogICBsYWJlbD1cIkFjZWl0byBvcyB0ZXJtb3MgZGUgdXNvXCJcclxuICogICBbaW5kZXRlcm1pbmF0ZV09XCJwYXJjaWFsbWVudGVTZWxlY2lvbmFkb1wiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1jaGVja2JveCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDb250cm9sYSBvIGVzdGFkbyBkZXNhYmlsaXRhZG8gdmlhIHR3by13YXkgYmluZGluZy4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IG1vZGVsKGZhbHNlKTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gVmFsb3IgbWFyY2Fkby9kZXNtYXJjYWRvIGRvIGNoZWNrYm94IHZpYSB0d28td2F5IGJpbmRpbmcuIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgICBwdWJsaWMgY2hlY2tlZCA9IG1vZGVsKGZhbHNlKTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gUXVhbmRvIGB0cnVlYCwgbyBjaGVja2JveCBpbmljaWEgbm8gZXN0YWRvIGluZGV0ZXJtaW5hZG8gKHRyYcOnbykgYXTDqSBhIHByaW1laXJhIGludGVyYcOnw6NvIGRvIHVzdcOhcmlvLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gICAgcHVibGljIGluZGV0ZXJtaW5hdGUgPSBpbnB1dChmYWxzZSk7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFRleHRvIGRvIGxhYmVsIGV4aWJpZG8gYW8gbGFkbyBkbyBjaGVja2JveC4gQGRlZmF1bHQgJycgKi9cclxuICAgIHB1YmxpYyBsYWJlbCA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGFjZXNzw612ZWwgcGFyYSBsZWl0b3JlcyBkZSB0ZWxhLiBPcGNpb25hbCwgcG9yIHBhZHLDo28gdXNhIG8gdmFsb3IgZGUgYGxhYmVsYC4gKi9cclxuICAgIHB1YmxpYyBhcmlhTGFiZWwgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIElEIGRvIGVsZW1lbnRvIHF1ZSBkZXNjcmV2ZSBvIGNoZWNrYm94IChwYXJhIHVzYXIgYDxsYWJlbCBmb3I9XCIuLi5cIj5gKS4gT3BjaW9uYWwuICovXHJcbiAgICBwdWJsaWMgYXJpYUxhYmVsbGVkQnkgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB2YWxvciBkbyBjaGVja2JveCDDqSBhbHRlcmFkbyBwZWxvIHVzdcOhcmlvLlxyXG4gICAgICogRW1pdGUgbyBub3ZvIHZhbG9yIGJvb2xlYW5vIChgdHJ1ZWAgcGFyYSBtYXJjYWRvLCBgZmFsc2VgIHBhcmEgZGVzbWFyY2FkbykuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBjaGVja2VkQ2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcbiAgICBwcml2YXRlIF9oYXNVc2VySW50ZXJhY3RlZCA9IHNpZ25hbChmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0ZWQgcXVlIGluZGljYSBzZSBvIGVzdGFkbyBpbmRldGVybWluYWRvIGRldmUgc2VyIGV4aWJpZG8uXHJcbiAgICAgKiBSZXRvcm5hIGB0cnVlYCBlbnF1YW50byBgaW5kZXRlcm1pbmF0ZWAgZm9yIGB0cnVlYCBlIG8gdXN1w6FyaW8gbsOjbyB0aXZlciBpbnRlcmFnaWRvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNJbmRldGVybWluYXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbmRldGVybWluYXRlKCkgJiYgIXRoaXMuX2hhc1VzZXJJbnRlcmFjdGVkKCkpO1xyXG5cclxuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKCkgJiYgIXRoaXMuX2hhc1VzZXJJbnRlcmFjdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5faGFzVXNlckludGVyYWN0ZWQuc2V0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWQuc2V0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSAhdGhpcy5jaGVja2VkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZC5zZXQobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNoZWNrZWQuc2V0KCEhdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IG9uQ2hhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBvblRvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkLnNldChkaXNhYmxlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJncm91cCBmbGV4IGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGdhcC0zIG91dGxpbmUtbm9uZVwiXG4gICAgW2NsYXNzLmN1cnNvci1ub3QtYWxsb3dlZF09XCJkaXNhYmxlZCgpXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIHJvbGU9XCJjaGVja2JveFwiXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzSW5kZXRlcm1pbmF0ZSgpID8gJ21peGVkJyA6IGNoZWNrZWQoKVwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCgpIHx8IGxhYmVsKCkgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5KCkgfHwgbnVsbFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGUoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm91bmRlZCBmbGV4IGgtNSB3LTUgZmxleC1zaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyIGJvcmRlci1ncmF5c2NhbGUtMzBcbiAgICAgICAgICAgICAgIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3Zlcjpib3JkZXItZ3JheXNjYWxlLTUwXG4gICAgICAgICAgICAgICBncm91cC1mb2N1cy12aXNpYmxlOnJpbmctMiBncm91cC1mb2N1cy12aXNpYmxlOnJpbmctcHJpbWFyeSBncm91cC1mb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTFcIlxuICAgICAgICBbY2xhc3MuYmctcHJpbWFyeV09XCJjaGVja2VkKCkgfHwgaXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICBbY2xhc3MuaG92ZXI6YmctdGFyYXdlcmEtNTAwXT1cImNoZWNrZWQoKSB8fCBpc0luZGV0ZXJtaW5hdGUoKVwiXG4gICAgICAgIFtjbGFzcy5iZy1ncmF5c2NhbGUtMF09XCIhY2hlY2tlZCgpICYmICFpc0luZGV0ZXJtaW5hdGUoKVwiXG4gICAgICAgIFtjbGFzcy5ib3JkZXItcHJpbWFyeV09XCJjaGVja2VkKCkgfHwgaXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICBbY2xhc3MuaG92ZXI6Ym9yZGVyLXRhcmF3ZXJhLTUwMF09XCJjaGVja2VkKCkgfHwgaXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJkaXNhYmxlZCgpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaXNJbmRldGVybWluYXRlKCkpIHtcbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMyB3LTMgdGV4dC1ncmF5c2NhbGUtMFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI0XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxMmgxMlwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKGNoZWNrZWQoKSkge1xuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyYXlzY2FsZS0wIGgtMyB3LTNcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00LjUgMTIuNzVsNS41IDUuNSA5LjUtOS41XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChsYWJlbCgpKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ncmF5c2NhbGUtOTAgbWwtMlwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBsYWJlbCgpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9XG48L2Rpdj5cbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94L3NyYy9saWIvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFekU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFjSCxNQUFNLE9BQU8saUJBQWlCO0lBQzFCLHNGQUFzRjtJQUMvRSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLDRGQUE0RjtJQUNyRixPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLHdJQUF3STtJQUNqSSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLDJFQUEyRTtJQUNwRSxLQUFLLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLHdHQUF3RztJQUNqRyxTQUFTLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUN4RCxxR0FBcUc7SUFDOUYsY0FBYyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFFckQsU0FBUyxHQUE2QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDL0MsVUFBVSxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNsQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0M7OztPQUdHO0lBQ2EsZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBRTlGLE1BQU07UUFDVCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFFTyxJQUFJLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFFBQWtDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxTQUFxQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBaUI7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQzt3R0E5RFEsaUJBQWlCOzRGQUFqQixpQkFBaUIsczZCQVRmO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLDBCQzVCTCw2ekVBK0RBOzs0RkRoQ2EsaUJBQWlCO2tCQWI3QixTQUFTOytCQUNJLFlBQVksY0FDVixJQUFJLFdBQ1AsRUFBRSxhQUNBO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGZvcndhcmRSZWYsIGlucHV0LCBtb2RlbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBjYWl4YSBkZSBzZWxlw6fDo28gKGNoZWNrYm94KSBjb20gc3Vwb3J0ZSBhIHRyw6pzIGVzdGFkb3M6XHJcbiAqIG1hcmNhZG8sIGRlc21hcmNhZG8gZSBpbmRldGVybWluYWRvLiBJbXBsZW1lbnRhIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYVxyXG4gKiBpbnRlZ3Jhw6fDo28gY29tIFJlYWN0aXZlIEZvcm1zIGUgVGVtcGxhdGUtZHJpdmVuIEZvcm1zIGRvIEFuZ3VsYXIuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHMtY2hlY2tib3hcclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJhY2VpdG9cIlxyXG4gKiAgIGxhYmVsPVwiQWNlaXRvIG9zIHRlcm1vcyBkZSB1c29cIlxyXG4gKiAgIFtpbmRldGVybWluYXRlXT1cInBhcmNpYWxtZW50ZVNlbGVjaW9uYWRvXCIgLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLWNoZWNrYm94JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoZWNrYm94Q29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIENvbnRyb2xhIG8gZXN0YWRvIGRlc2FiaWxpdGFkbyB2aWEgdHdvLXdheSBiaW5kaW5nLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBWYWxvciBtYXJjYWRvL2Rlc21hcmNhZG8gZG8gY2hlY2tib3ggdmlhIHR3by13YXkgYmluZGluZy4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIHB1YmxpYyBjaGVja2VkID0gbW9kZWwoZmFsc2UpO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBvIGNoZWNrYm94IGluaWNpYSBubyBlc3RhZG8gaW5kZXRlcm1pbmFkbyAodHJhw6dvKSBhdMOpIGEgcHJpbWVpcmEgaW50ZXJhw6fDo28gZG8gdXN1w6FyaW8uIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgICBwdWJsaWMgaW5kZXRlcm1pbmF0ZSA9IGlucHV0KGZhbHNlKTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gVGV4dG8gZG8gbGFiZWwgZXhpYmlkbyBhbyBsYWRvIGRvIGNoZWNrYm94LiBAZGVmYXVsdCAnJyAqL1xyXG4gICAgcHVibGljIGxhYmVsID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gYWNlc3PDrXZlbCBwYXJhIGxlaXRvcmVzIGRlIHRlbGEuIE9wY2lvbmFsLCBwb3IgcGFkcsOjbyB1c2EgbyB2YWxvciBkZSBgbGFiZWxgLiAqL1xyXG4gICAgcHVibGljIGFyaWFMYWJlbCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gSUQgZG8gZWxlbWVudG8gcXVlIGRlc2NyZXZlIG8gY2hlY2tib3ggKHBhcmEgdXNhciBgPGxhYmVsIGZvcj1cIi4uLlwiPmApLiBPcGNpb25hbC4gKi9cclxuICAgIHB1YmxpYyBhcmlhTGFiZWxsZWRCeSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkID0gKCkgPT4ge307XHJcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICAgIHByaXZhdGUgX2hhc1VzZXJJbnRlcmFjdGVkID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRlZCBxdWUgaW5kaWNhIHNlIG8gZXN0YWRvIGluZGV0ZXJtaW5hZG8gZGV2ZSBzZXIgZXhpYmlkby5cclxuICAgICAqIFJldG9ybmEgYHRydWVgIGVucXVhbnRvIGBpbmRldGVybWluYXRlYCBmb3IgYHRydWVgIGUgbyB1c3XDoXJpbyBuw6NvIHRpdmVyIGludGVyYWdpZG8uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBpc0luZGV0ZXJtaW5hdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmluZGV0ZXJtaW5hdGUoKSAmJiAhdGhpcy5faGFzVXNlckludGVyYWN0ZWQoKSk7XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGUoKSAmJiAhdGhpcy5faGFzVXNlckludGVyYWN0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9oYXNVc2VySW50ZXJhY3RlZC5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZC5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9ICF0aGlzLmNoZWNrZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkLnNldChuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZW1pdCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkLnNldCghIXZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBvbkNoYW5nZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gb25Ub3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZC5zZXQoZGlzYWJsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZ3JvdXAgZmxleCBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBnYXAtMyBvdXRsaW5lLW5vbmVcIlxuICAgIFtjbGFzcy5jdXJzb3Itbm90LWFsbG93ZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICByb2xlPVwiY2hlY2tib3hcIlxuICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc0luZGV0ZXJtaW5hdGUoKSA/ICdtaXhlZCcgOiBjaGVja2VkKClcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwoKSB8fCBsYWJlbCgpIHx8IG51bGxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeSgpIHx8IG51bGxcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInJvdW5kZWQgZmxleCBoLTUgdy01IGZsZXgtc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlciBib3JkZXItZ3JheXNjYWxlLTMwXG4gICAgICAgICAgICAgICB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6Ym9yZGVyLWdyYXlzY2FsZS01MFxuICAgICAgICAgICAgICAgZ3JvdXAtZm9jdXMtdmlzaWJsZTpyaW5nLTIgZ3JvdXAtZm9jdXMtdmlzaWJsZTpyaW5nLXByaW1hcnkgZ3JvdXAtZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0xXCJcbiAgICAgICAgW2NsYXNzLmJnLXByaW1hcnldPVwiY2hlY2tlZCgpIHx8IGlzSW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgW2NsYXNzLmhvdmVyOmJnLXRhcmF3ZXJhLTUwMF09XCJjaGVja2VkKCkgfHwgaXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICBbY2xhc3MuYmctZ3JheXNjYWxlLTBdPVwiIWNoZWNrZWQoKSAmJiAhaXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICBbY2xhc3MuYm9yZGVyLXByaW1hcnldPVwiY2hlY2tlZCgpIHx8IGlzSW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgW2NsYXNzLmhvdmVyOmJvcmRlci10YXJhd2VyYS01MDBdPVwiY2hlY2tlZCgpIHx8IGlzSW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwiZGlzYWJsZWQoKVwiXG4gICAgPlxuICAgICAgICBAaWYgKGlzSW5kZXRlcm1pbmF0ZSgpKSB7XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTMgdy0zIHRleHQtZ3JheXNjYWxlLTBcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTJoMTJcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChjaGVja2VkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ncmF5c2NhbGUtMCBoLTMgdy0zXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNC41IDEyLjc1bDUuNSA1LjUgOS41LTkuNVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAobGFiZWwoKSkge1xuICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtZ3JheXNjYWxlLTkwIG1sLTJcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgbGFiZWwoKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgfVxuPC9kaXY+XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, forwardRef, Input } from '@angular/core';
1
+ import { Component, forwardRef, inject, Input } from '@angular/core';
2
2
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/forms";
@@ -24,6 +24,12 @@ export class CheckboxListComponent {
24
24
  * Campo obrigatório.
25
25
  */
26
26
  data;
27
+ /**
28
+ * @description Instância do nó pai na árvore recursiva, obtida via DI (`@SkipSelf`).
29
+ * `null` para o nó raiz. Usada para herdar o estado `disabled` sem expor um `@Input`
30
+ * paralelo ao contrato de `ControlValueAccessor`.
31
+ */
32
+ _parent = inject(CheckboxListComponent, { skipSelf: true, optional: true });
27
33
  state = {
28
34
  checked: false,
29
35
  indeterminate: false,
@@ -47,12 +53,18 @@ export class CheckboxListComponent {
47
53
  get renderType() {
48
54
  return this.data.renderType ?? 'inline';
49
55
  }
56
+ get isDisabled() {
57
+ return !!this.state.disabled || !!this._parent?.isDisabled;
58
+ }
50
59
  registerOnChange(onChange) {
51
60
  this._onChange = onChange;
52
61
  }
53
62
  registerOnTouched(onTouched) {
54
63
  this._onTouched = onTouched;
55
64
  }
65
+ setDisabledState(isDisabled) {
66
+ this.state.disabled = isDisabled;
67
+ }
56
68
  _initializeChildren(item) {
57
69
  const childrenState = {};
58
70
  if (item.children) {
@@ -94,7 +106,7 @@ export class CheckboxListComponent {
94
106
  this._onTouched();
95
107
  }
96
108
  onCheckboxChange() {
97
- if (this.state.disabled) {
109
+ if (this.isDisabled) {
98
110
  return;
99
111
  }
100
112
  this.state.checked = !this.state.checked;
@@ -130,7 +142,7 @@ export class CheckboxListComponent {
130
142
  useExisting: forwardRef(() => CheckboxListComponent),
131
143
  multi: true,
132
144
  },
133
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-[10px] mb-[10px]\">\r\n <label>\r\n <div\r\n class=\"flex text-grayscale-90 font-open-sans text-sm gap-3\"\r\n [class.items-center]=\"renderType === 'inline'\"\r\n [class.flex-col-reverse]=\"renderType === 'block'\"\r\n [class.opacity-50]=\"state.disabled\"\r\n [class.cursor-auto]=\"state.disabled\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-input appearance-none border rounded-medium cursor-pointer shrink-0 h-5 w-5 relative\"\r\n [class.bg-grayscale-0]=\"!state.checked && !state.indeterminate\"\r\n [class.border-grayscale-30]=\"!state.checked && !state.indeterminate\"\r\n [class.bg-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.border-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.checkbox-input--checked]=\"state.checked\"\r\n [class.checkbox-input--indeterminate]=\"state.indeterminate\"\r\n [class.hover:bg-hippie-blue-50]=\"!state.disabled && !state.checked && !state.indeterminate\"\r\n [disabled]=\"state.disabled\"\r\n (change)=\"onCheckboxChange()\"\r\n [attr.aria-checked]=\"state.indeterminate ? 'mixed' : state.checked\"\r\n [attr.aria-disabled]=\"state.disabled\"\r\n />\r\n {{ data.label }}\r\n </div>\r\n </label>\r\n @if (data.children && data.children.length) {\r\n <div class=\"ml-5\">\r\n @for (child of data.children; track child) {\r\n <s-checkbox-list\r\n [data]=\"child\"\r\n [ngModel]=\"getCheckboxState(state.children, child.label)\"\r\n (ngModelChange)=\"updateParent()\"\r\n >\r\n </s-checkbox-list>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".checkbox-input--checked:after{border:solid white;border-width:0 2px 2px 0;content:\"\";height:12px;left:6px;position:absolute;top:2px;transform:rotate(45deg);width:6px}.checkbox-input--indeterminate:after{background-color:#fff;content:\"\";height:2px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:10px}\n"], dependencies: [{ kind: "component", type: CheckboxListComponent, selector: "s-checkbox-list", inputs: ["data"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
145
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-[10px] mb-[10px]\">\r\n <label>\r\n <div\r\n class=\"flex text-grayscale-90 font-open-sans text-sm gap-3\"\r\n [class.items-center]=\"renderType === 'inline'\"\r\n [class.flex-col-reverse]=\"renderType === 'block'\"\r\n [class.opacity-50]=\"isDisabled\"\r\n [class.cursor-default]=\"isDisabled\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-input appearance-none border rounded-medium shrink-0 h-5 w-5 relative\"\r\n [class.bg-grayscale-0]=\"!state.checked && !state.indeterminate\"\r\n [class.border-grayscale-30]=\"!state.checked && !state.indeterminate\"\r\n [class.bg-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.border-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.checkbox-input--checked]=\"state.checked\"\r\n [class.checkbox-input--indeterminate]=\"state.indeterminate\"\r\n [class.hover:bg-hippie-blue-50]=\"!isDisabled && !state.checked && !state.indeterminate\"\r\n [class.cursor-pointer]=\"!isDisabled\"\r\n [class.cursor-default]=\"isDisabled\"\r\n [disabled]=\"isDisabled\"\r\n (change)=\"onCheckboxChange()\"\r\n [attr.aria-checked]=\"state.indeterminate ? 'mixed' : state.checked\"\r\n [attr.aria-disabled]=\"isDisabled\"\r\n />\r\n {{ data.label }}\r\n </div>\r\n </label>\r\n @if (data.children && data.children.length) {\r\n <div class=\"ml-5\">\r\n @for (child of data.children; track child) {\r\n <s-checkbox-list\r\n [data]=\"child\"\r\n [ngModel]=\"getCheckboxState(state.children, child.label)\"\r\n (ngModelChange)=\"updateParent()\"\r\n >\r\n </s-checkbox-list>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".checkbox-input--checked:after{border:solid white;border-width:0 2px 2px 0;content:\"\";height:12px;left:6px;position:absolute;top:2px;transform:rotate(45deg);width:6px}.checkbox-input--indeterminate:after{background-color:#fff;content:\"\";height:2px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:10px}\n"], dependencies: [{ kind: "component", type: CheckboxListComponent, selector: "s-checkbox-list", inputs: ["data"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
134
146
  }
135
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxListComponent, decorators: [{
136
148
  type: Component,
@@ -140,9 +152,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
140
152
  useExisting: forwardRef(() => CheckboxListComponent),
141
153
  multi: true,
142
154
  },
143
- ], standalone: true, imports: [CheckboxListComponent, FormsModule], template: "<div class=\"flex flex-col gap-[10px] mb-[10px]\">\r\n <label>\r\n <div\r\n class=\"flex text-grayscale-90 font-open-sans text-sm gap-3\"\r\n [class.items-center]=\"renderType === 'inline'\"\r\n [class.flex-col-reverse]=\"renderType === 'block'\"\r\n [class.opacity-50]=\"state.disabled\"\r\n [class.cursor-auto]=\"state.disabled\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-input appearance-none border rounded-medium cursor-pointer shrink-0 h-5 w-5 relative\"\r\n [class.bg-grayscale-0]=\"!state.checked && !state.indeterminate\"\r\n [class.border-grayscale-30]=\"!state.checked && !state.indeterminate\"\r\n [class.bg-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.border-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.checkbox-input--checked]=\"state.checked\"\r\n [class.checkbox-input--indeterminate]=\"state.indeterminate\"\r\n [class.hover:bg-hippie-blue-50]=\"!state.disabled && !state.checked && !state.indeterminate\"\r\n [disabled]=\"state.disabled\"\r\n (change)=\"onCheckboxChange()\"\r\n [attr.aria-checked]=\"state.indeterminate ? 'mixed' : state.checked\"\r\n [attr.aria-disabled]=\"state.disabled\"\r\n />\r\n {{ data.label }}\r\n </div>\r\n </label>\r\n @if (data.children && data.children.length) {\r\n <div class=\"ml-5\">\r\n @for (child of data.children; track child) {\r\n <s-checkbox-list\r\n [data]=\"child\"\r\n [ngModel]=\"getCheckboxState(state.children, child.label)\"\r\n (ngModelChange)=\"updateParent()\"\r\n >\r\n </s-checkbox-list>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".checkbox-input--checked:after{border:solid white;border-width:0 2px 2px 0;content:\"\";height:12px;left:6px;position:absolute;top:2px;transform:rotate(45deg);width:6px}.checkbox-input--indeterminate:after{background-color:#fff;content:\"\";height:2px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:10px}\n"] }]
155
+ ], standalone: true, imports: [CheckboxListComponent, FormsModule], template: "<div class=\"flex flex-col gap-[10px] mb-[10px]\">\r\n <label>\r\n <div\r\n class=\"flex text-grayscale-90 font-open-sans text-sm gap-3\"\r\n [class.items-center]=\"renderType === 'inline'\"\r\n [class.flex-col-reverse]=\"renderType === 'block'\"\r\n [class.opacity-50]=\"isDisabled\"\r\n [class.cursor-default]=\"isDisabled\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-input appearance-none border rounded-medium shrink-0 h-5 w-5 relative\"\r\n [class.bg-grayscale-0]=\"!state.checked && !state.indeterminate\"\r\n [class.border-grayscale-30]=\"!state.checked && !state.indeterminate\"\r\n [class.bg-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.border-criticality-blue]=\"state.checked || state.indeterminate\"\r\n [class.checkbox-input--checked]=\"state.checked\"\r\n [class.checkbox-input--indeterminate]=\"state.indeterminate\"\r\n [class.hover:bg-hippie-blue-50]=\"!isDisabled && !state.checked && !state.indeterminate\"\r\n [class.cursor-pointer]=\"!isDisabled\"\r\n [class.cursor-default]=\"isDisabled\"\r\n [disabled]=\"isDisabled\"\r\n (change)=\"onCheckboxChange()\"\r\n [attr.aria-checked]=\"state.indeterminate ? 'mixed' : state.checked\"\r\n [attr.aria-disabled]=\"isDisabled\"\r\n />\r\n {{ data.label }}\r\n </div>\r\n </label>\r\n @if (data.children && data.children.length) {\r\n <div class=\"ml-5\">\r\n @for (child of data.children; track child) {\r\n <s-checkbox-list\r\n [data]=\"child\"\r\n [ngModel]=\"getCheckboxState(state.children, child.label)\"\r\n (ngModelChange)=\"updateParent()\"\r\n >\r\n </s-checkbox-list>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".checkbox-input--checked:after{border:solid white;border-width:0 2px 2px 0;content:\"\";height:12px;left:6px;position:absolute;top:2px;transform:rotate(45deg);width:6px}.checkbox-input--indeterminate:after{background-color:#fff;content:\"\";height:2px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:10px}\n"] }]
144
156
  }], propDecorators: { data: [{
145
157
  type: Input,
146
158
  args: [{ required: true }]
147
159
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY2hlY2tib3gtbGlzdC9zcmMvbGliL2NoZWNrYm94LWxpc3QvY2hlY2tib3gtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY2hlY2tib3gtbGlzdC9zcmMvbGliL2NoZWNrYm94LWxpc3QvY2hlY2tib3gtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBS3RGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBcUNILE1BQU0sT0FBTyxxQkFBcUI7SUFDOUI7Ozs7T0FJRztJQUVJLElBQUksQ0FBb0I7SUFFeEIsS0FBSyxHQUFzQjtRQUM5QixPQUFPLEVBQUUsS0FBSztRQUNkLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFFBQVEsRUFBRSxFQUFFO0tBQ2YsQ0FBQztJQUVNLFNBQVMsR0FBdUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFbkMsVUFBVSxDQUFDLEtBQXdCO1FBQ3RDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENB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Q0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQzt3R0F4SFEscUJBQXFCOzRGQUFyQixxQkFBcUIsd0ZBVm5CO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLDBCQ3JETCxzK0RBd0NBLHFZRGlCYSxxQkFBcUIsNkVBRkcsV0FBVzs7NEZBRW5DLHFCQUFxQjtrQkFwQ2pDLFNBQVM7K0JBQ0ksaUJBQWlCLGFBeUJoQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osY0FDVyxJQUFJLFdBQ1Asd0JBQXdCLFdBQVcsQ0FBQzs4QkFTdEMsSUFBSTtzQkFEVixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IENoZWNrYm94TGlzdERhdGEgfSBmcm9tICcuL21vZGVscy9jaGVja2JveC1saXN0LWRhdGEnO1xyXG5pbXBvcnQgeyBDaGVja2JveExpc3RDaGlsZHJlbiwgQ2hlY2tib3hMaXN0U3RhdGUgfSBmcm9tICcuL21vZGVscy9jaGVja2JveC1saXN0LXN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBsaXN0YSBkZSBjaGVja2JveGVzIGhpZXLDoXJxdWljYSwgY29tIHN1cG9ydGUgYSBlc3RhZG9zXHJcbiAqIHBhaS9maWxobyBlIGluZGV0ZXJtaW5hZG8uIEFvIG1hcmNhci9kZXNtYXJjYXIgbyBpdGVtIHBhaSwgdG9kb3Mgb3MgZmlsaG9zIHPDo29cclxuICogYWZldGFkb3MsIGUgbyBlc3RhZG8gZG8gcGFpIMOpIGNhbGN1bGFkbyBhdXRvbWF0aWNhbWVudGUgY29tIGJhc2Ugbm9zIGZpbGhvcy5cclxuICogSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgdXNvIGVtIGZvcm11bMOhcmlvcyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLWNoZWNrYm94LWxpc3RcclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJwZXJtaXNzb2VzXCJcclxuICogICBbZGF0YV09XCJlc3RydXR1cmFQZXJtaXNzb2VzXCIgLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLWNoZWNrYm94LWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbYFxyXG4gICAgICAgIC5jaGVja2JveC1pbnB1dC0tY2hlY2tlZDo6YWZ0ZXIge1xyXG4gICAgICAgICAgICBib3JkZXI6IHNvbGlkIHdoaXRlO1xyXG4gICAgICAgICAgICBib3JkZXItd2lkdGg6IDAgMnB4IDJweCAwO1xyXG4gICAgICAgICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEycHg7XHJcbiAgICAgICAgICAgIGxlZnQ6IDZweDtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB0b3A6IDJweDtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG4gICAgICAgICAgICB3aWR0aDogNnB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAuY2hlY2tib3gtaW5wdXQtLWluZGV0ZXJtaW5hdGU6OmFmdGVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgICAgICAgIGhlaWdodDogMnB4O1xyXG4gICAgICAgICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICB9XHJcbiAgICBgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoZWNrYm94TGlzdENvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtDaGVja2JveExpc3RDb21wb25lbnQsIEZvcm1zTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrYm94TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVzdHJ1dHVyYSBkZSBkYWRvcyBxdWUgZGVmaW5lIG8gaXRlbSByYWl6IGUgc2V1cyBmaWxob3MuXHJcbiAgICAgKiBDYWRhIGBDaGVja2JveExpc3REYXRhYCBwb2RlIGNvbnRlciBvIGxhYmVsLCBlc3RhZG8gaW5pY2lhbCBlIHVtYSBsaXN0YSBkZSBmaWxob3MgcmVjdXJzaXZhLlxyXG4gICAgICogQ2FtcG8gb2JyaWdhdMOzcmlvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHVibGljIGRhdGEhOiBDaGVja2JveExpc3REYXRhO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0ZTogQ2hlY2tib3hMaXN0U3RhdGUgPSB7XHJcbiAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXHJcbiAgICAgICAgY2hpbGRyZW46IHt9LFxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBDaGVja2JveExpc3RTdGF0ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IENoZWNrYm94TGlzdFN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4odGhpcy5kYXRhKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZW5kZXJUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucmVuZGVyVHlwZSA/PyAnaW5saW5lJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHZhbHVlOiBDaGVja2JveExpc3RTdGF0ZSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gb25DaGFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IG9uVG91Y2hlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2hpbGRyZW4oaXRlbTogQ2hlY2tib3hMaXN0RGF0YSk6IENoZWNrYm94TGlzdENoaWxkcmVuIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlblN0YXRlOiBDaGVja2JveExpc3RDaGlsZHJlbiA9IHt9O1xyXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuU3RhdGVbY2hpbGQubGFiZWxdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oY2hpbGQpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlblN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGVja2JveFN0YXRlKGl0ZW06IENoZWNrYm94TGlzdENoaWxkcmVuIHwgdW5kZWZpbmVkLCBsYWJlbDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bbGFiZWxdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVBhcmVudCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBfZ2V0UHJvcGVydHkgPSAob2JqOiBDaGVja2JveExpc3RDaGlsZHJlbiB8IHVuZGVmaW5lZCwgZmllbGQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmNoaWxkcmVuICYmIHRoaXMuZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbENoZWNrZWQgPSB0aGlzLmRhdGEuY2hpbGRyZW4uZXZlcnkoXHJcbiAgICAgICAgICAgICAgICAoY2hpbGQpID0+IF9nZXRQcm9wZXJ0eSh0aGlzLnN0YXRlLmNoaWxkcmVuLCBjaGlsZC5sYWJlbCk/LmNoZWNrZWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvbWVDaGVja2VkID0gdGhpcy5kYXRhLmNoaWxkcmVuLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAoY2hpbGQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgX2dldFByb3BlcnR5KHRoaXMuc3RhdGUuY2hpbGRyZW4sIGNoaWxkLmxhYmVsKT8uY2hlY2tlZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIF9nZXRQcm9wZXJ0eSh0aGlzLnN0YXRlLmNoaWxkcmVuLCBjaGlsZC5sYWJlbCk/LmluZGV0ZXJtaW5hdGUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY2hlY2tlZCA9IGFsbENoZWNrZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuaW5kZXRlcm1pbmF0ZSA9ICFhbGxDaGVja2VkICYmIHNvbWVDaGVja2VkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnN0YXRlKTtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlLmNoZWNrZWQgPSAhdGhpcy5zdGF0ZS5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMuc3RhdGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoaWxkcmVuQ2hlY2sodGhpcy5kYXRhLCB0aGlzLnN0YXRlLCB0aGlzLnN0YXRlLmNoZWNrZWQpO1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3RvZ2dsZUNoaWxkcmVuQ2hlY2soaXRlbTogQ2hlY2tib3hMaXN0RGF0YSwgc3RhdGU6IENoZWNrYm94TGlzdFN0YXRlLCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY2hpbGRyZW4gJiYgIXN0YXRlLmNoaWxkcmVuW2NoaWxkLmxhYmVsXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoaWxkcmVuW2NoaWxkLmxhYmVsXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKGNoaWxkKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hpbGRyZW5bY2hpbGQubGFiZWxdLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoaWxkcmVuW2NoaWxkLmxhYmVsXS5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgc3RhdGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVDaGlsZHJlbkNoZWNrKGNoaWxkLCBzdGF0ZS5jaGlsZHJlbltjaGlsZC5sYWJlbF0sIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLVsxMHB4XSBtYi1bMTBweF1cIj5cclxuICAgIDxsYWJlbD5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCB0ZXh0LWdyYXlzY2FsZS05MCBmb250LW9wZW4tc2FucyB0ZXh0LXNtIGdhcC0zXCJcclxuICAgICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCJyZW5kZXJUeXBlID09PSAnaW5saW5lJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5mbGV4LWNvbC1yZXZlcnNlXT1cInJlbmRlclR5cGUgPT09ICdibG9jaydcIlxyXG4gICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJzdGF0ZS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItYXV0b109XCJzdGF0ZS5kaXNhYmxlZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LWlucHV0IGFwcGVhcmFuY2Utbm9uZSBib3JkZXIgcm91bmRlZC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgc2hyaW5rLTAgaC01IHctNSByZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmctZ3JheXNjYWxlLTBdPVwiIXN0YXRlLmNoZWNrZWQgJiYgIXN0YXRlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1ncmF5c2NhbGUtMzBdPVwiIXN0YXRlLmNoZWNrZWQgJiYgIXN0YXRlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJnLWNyaXRpY2FsaXR5LWJsdWVdPVwic3RhdGUuY2hlY2tlZCB8fCBzdGF0ZS5pbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItY3JpdGljYWxpdHktYmx1ZV09XCJzdGF0ZS5jaGVja2VkIHx8IHN0YXRlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmNoZWNrYm94LWlucHV0LS1jaGVja2VkXT1cInN0YXRlLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmNoZWNrYm94LWlucHV0LS1pbmRldGVybWluYXRlXT1cInN0YXRlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmhvdmVyOmJnLWhpcHBpZS1ibHVlLTUwXT1cIiFzdGF0ZS5kaXNhYmxlZCAmJiAhc3RhdGUuY2hlY2tlZCAmJiAhc3RhdGUuaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3RhdGUuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInN0YXRlLmluZGV0ZXJtaW5hdGUgPyAnbWl4ZWQnIDogc3RhdGUuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInN0YXRlLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAge3sgZGF0YS5sYWJlbCB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9sYWJlbD5cclxuICAgIEBpZiAoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC01XCI+XHJcbiAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGRhdGEuY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICA8cy1jaGVja2JveC1saXN0XHJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiY2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldENoZWNrYm94U3RhdGUoc3RhdGUuY2hpbGRyZW4sIGNoaWxkLmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlUGFyZW50KClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWNoZWNrYm94LWxpc3Q+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuPC9kaXY+XHJcbiJdfQ==
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY2hlY2tib3gtbGlzdC9zcmMvbGliL2NoZWNrYm94LWxpc3QvY2hlY2tib3gtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY2hlY2tib3gtbGlzdC9zcmMvbGliL2NoZWNrYm94LWxpc3QvY2hlY2tib3gtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUt0Rjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQXFDSCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCOzs7O09BSUc7SUFFSSxJQUFJLENBQW9CO0lBRS9COzs7O09BSUc7SUFDYyxPQUFPLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV0RixLQUFLLEdBQXNCO1FBQzlCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsYUFBYSxFQUFFLEtBQUs7UUFDcEIsUUFBUSxFQUFFLEVBQUU7S0FDZixDQUFDO0lBRU0sU0FBUyxHQUF1QyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDekQsVUFBVSxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUVuQyxVQUFVLENBQUMsS0FBd0I7UUFDdEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxD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QUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBDaGVja2JveExpc3REYXRhIH0gZnJvbSAnLi9tb2RlbHMvY2hlY2tib3gtbGlzdC1kYXRhJztcclxuaW1wb3J0IHsgQ2hlY2tib3hMaXN0Q2hpbGRyZW4sIENoZWNrYm94TGlzdFN0YXRlIH0gZnJvbSAnLi9tb2RlbHMvY2hlY2tib3gtbGlzdC1zdGF0ZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgbGlzdGEgZGUgY2hlY2tib3hlcyBoaWVyw6FycXVpY2EsIGNvbSBzdXBvcnRlIGEgZXN0YWRvc1xyXG4gKiBwYWkvZmlsaG8gZSBpbmRldGVybWluYWRvLiBBbyBtYXJjYXIvZGVzbWFyY2FyIG8gaXRlbSBwYWksIHRvZG9zIG9zIGZpbGhvcyBzw6NvXHJcbiAqIGFmZXRhZG9zLCBlIG8gZXN0YWRvIGRvIHBhaSDDqSBjYWxjdWxhZG8gYXV0b21hdGljYW1lbnRlIGNvbSBiYXNlIG5vcyBmaWxob3MuXHJcbiAqIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIHVzbyBlbSBmb3JtdWzDoXJpb3MgQW5ndWxhci5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8cy1jaGVja2JveC1saXN0XHJcbiAqICAgZm9ybUNvbnRyb2xOYW1lPVwicGVybWlzc29lc1wiXHJcbiAqICAgW2RhdGFdPVwiZXN0cnV0dXJhUGVybWlzc29lc1wiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1jaGVja2JveC1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlczogW2BcclxuICAgICAgICAuY2hlY2tib3gtaW5wdXQtLWNoZWNrZWQ6OmFmdGVyIHtcclxuICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCB3aGl0ZTtcclxuICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAwIDJweCAycHggMDtcclxuICAgICAgICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xyXG4gICAgICAgICAgICBsZWZ0OiA2cHg7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgdG9wOiAycHg7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgd2lkdGg6IDZweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmNoZWNrYm94LWlucHV0LS1pbmRldGVybWluYXRlOjphZnRlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDJweDtcclxuICAgICAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICAgICAgICAgICAgd2lkdGg6IDEwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgYF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveExpc3RDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQ2hlY2tib3hMaXN0Q29tcG9uZW50LCBGb3Jtc01vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja2JveExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFc3RydXR1cmEgZGUgZGFkb3MgcXVlIGRlZmluZSBvIGl0ZW0gcmFpeiBlIHNldXMgZmlsaG9zLlxyXG4gICAgICogQ2FkYSBgQ2hlY2tib3hMaXN0RGF0YWAgcG9kZSBjb250ZXIgbyBsYWJlbCwgZXN0YWRvIGluaWNpYWwgZSB1bWEgbGlzdGEgZGUgZmlsaG9zIHJlY3Vyc2l2YS5cclxuICAgICAqIENhbXBvIG9icmlnYXTDs3Jpby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHB1YmxpYyBkYXRhITogQ2hlY2tib3hMaXN0RGF0YTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbnN0w6JuY2lhIGRvIG7DsyBwYWkgbmEgw6Fydm9yZSByZWN1cnNpdmEsIG9idGlkYSB2aWEgREkgKGBAU2tpcFNlbGZgKS5cclxuICAgICAqIGBudWxsYCBwYXJhIG8gbsOzIHJhaXouIFVzYWRhIHBhcmEgaGVyZGFyIG8gZXN0YWRvIGBkaXNhYmxlZGAgc2VtIGV4cG9yIHVtIGBASW5wdXRgXHJcbiAgICAgKiBwYXJhbGVsbyBhbyBjb250cmF0byBkZSBgQ29udHJvbFZhbHVlQWNjZXNzb3JgLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnQgPSBpbmplY3QoQ2hlY2tib3hMaXN0Q29tcG9uZW50LCB7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGU6IENoZWNrYm94TGlzdFN0YXRlID0ge1xyXG4gICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkcmVuOiB7fSxcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogQ2hlY2tib3hMaXN0U3RhdGUpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBDaGVja2JveExpc3RTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKHRoaXMuZGF0YSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVuZGVyVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnJlbmRlclR5cGUgPz8gJ2lubGluZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuc3RhdGUuZGlzYWJsZWQgfHwgISF0aGlzLl9wYXJlbnQ/LmlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogQ2hlY2tib3hMaXN0U3RhdGUpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IG9uQ2hhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBvblRvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhdGUuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDaGlsZHJlbihpdGVtOiBDaGVja2JveExpc3REYXRhKTogQ2hlY2tib3hMaXN0Q2hpbGRyZW4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuU3RhdGU6IENoZWNrYm94TGlzdENoaWxkcmVuID0ge307XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5TdGF0ZVtjaGlsZC5sYWJlbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuX2luaXRpYWxpemVDaGlsZHJlbihjaGlsZCksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuU3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoZWNrYm94U3RhdGUoaXRlbTogQ2hlY2tib3hMaXN0Q2hpbGRyZW4gfCB1bmRlZmluZWQsIGxhYmVsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbVtsYWJlbF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlUGFyZW50KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IF9nZXRQcm9wZXJ0eSA9IChvYmo6IENoZWNrYm94TGlzdENoaWxkcmVuIHwgdW5kZWZpbmVkLCBmaWVsZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuY2hpbGRyZW4gJiYgdGhpcy5kYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYWxsQ2hlY2tlZCA9IHRoaXMuZGF0YS5jaGlsZHJlbi5ldmVyeShcclxuICAgICAgICAgICAgICAgIChjaGlsZCkgPT4gX2dldFByb3BlcnR5KHRoaXMuc3RhdGUuY2hpbGRyZW4sIGNoaWxkLmxhYmVsKT8uY2hlY2tlZCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3Qgc29tZUNoZWNrZWQgPSB0aGlzLmRhdGEuY2hpbGRyZW4uc29tZShcclxuICAgICAgICAgICAgICAgIChjaGlsZCkgPT5cclxuICAgICAgICAgICAgICAgICAgICBfZ2V0UHJvcGVydHkodGhpcy5zdGF0ZS5jaGlsZHJlbiwgY2hpbGQubGFiZWwpPy5jaGVja2VkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgX2dldFByb3BlcnR5KHRoaXMuc3RhdGUuY2hpbGRyZW4sIGNoaWxkLmxhYmVsKT8uaW5kZXRlcm1pbmF0ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5jaGVja2VkID0gYWxsQ2hlY2tlZDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5pbmRldGVybWluYXRlID0gIWFsbENoZWNrZWQgJiYgc29tZUNoZWNrZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZS5jaGVja2VkID0gIXRoaXMuc3RhdGUuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnN0YXRlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90b2dnbGVDaGlsZHJlbkNoZWNrKHRoaXMuZGF0YSwgdGhpcy5zdGF0ZSwgdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnN0YXRlKTtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90b2dnbGVDaGlsZHJlbkNoZWNrKGl0ZW06IENoZWNrYm94TGlzdERhdGEsIHN0YXRlOiBDaGVja2JveExpc3RTdGF0ZSwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmNoaWxkcmVuICYmICFzdGF0ZS5jaGlsZHJlbltjaGlsZC5sYWJlbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGlsZHJlbltjaGlsZC5sYWJlbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuX2luaXRpYWxpemVDaGlsZHJlbihjaGlsZCksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoaWxkcmVuW2NoaWxkLmxhYmVsXS5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGlsZHJlbltjaGlsZC5sYWJlbF0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIHN0YXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ2hpbGRyZW5DaGVjayhjaGlsZCwgc3RhdGUuY2hpbGRyZW5bY2hpbGQubGFiZWxdLCBjaGVja2VkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC1bMTBweF0gbWItWzEwcHhdXCI+XHJcbiAgICA8bGFiZWw+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggdGV4dC1ncmF5c2NhbGUtOTAgZm9udC1vcGVuLXNhbnMgdGV4dC1zbSBnYXAtM1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwicmVuZGVyVHlwZSA9PT0gJ2lubGluZSdcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZmxleC1jb2wtcmV2ZXJzZV09XCJyZW5kZXJUeXBlID09PSAnYmxvY2snXCJcclxuICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItZGVmYXVsdF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtaW5wdXQgYXBwZWFyYW5jZS1ub25lIGJvcmRlciByb3VuZGVkLW1lZGl1bSBzaHJpbmstMCBoLTUgdy01IHJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5iZy1ncmF5c2NhbGUtMF09XCIhc3RhdGUuY2hlY2tlZCAmJiAhc3RhdGUuaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWdyYXlzY2FsZS0zMF09XCIhc3RhdGUuY2hlY2tlZCAmJiAhc3RhdGUuaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmctY3JpdGljYWxpdHktYmx1ZV09XCJzdGF0ZS5jaGVja2VkIHx8IHN0YXRlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1jcml0aWNhbGl0eS1ibHVlXT1cInN0YXRlLmNoZWNrZWQgfHwgc3RhdGUuaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2hlY2tib3gtaW5wdXQtLWNoZWNrZWRdPVwic3RhdGUuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2hlY2tib3gtaW5wdXQtLWluZGV0ZXJtaW5hdGVdPVwic3RhdGUuaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaG92ZXI6YmctaGlwcGllLWJsdWUtNTBdPVwiIWlzRGlzYWJsZWQgJiYgIXN0YXRlLmNoZWNrZWQgJiYgIXN0YXRlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItZGVmYXVsdF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJzdGF0ZS5pbmRldGVybWluYXRlID8gJ21peGVkJyA6IHN0YXRlLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAge3sgZGF0YS5sYWJlbCB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9sYWJlbD5cclxuICAgIEBpZiAoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC01XCI+XHJcbiAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGRhdGEuY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICA8cy1jaGVja2JveC1saXN0XHJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiY2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldENoZWNrYm94U3RhdGUoc3RhdGUuY2hpbGRyZW4sIGNoaWxkLmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlUGFyZW50KClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWNoZWNrYm94LWxpc3Q+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuPC9kaXY+XHJcbiJdfQ==