@seniorsistemas/angular-components 19.9.2 → 19.9.3-feat-sds-595-78653c0e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -13
- package/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.mjs +4 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +4 -4
- package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +45 -34
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -3
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +6 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +10 -10
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +44 -33
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -9
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fieldset/README.md +77 -15
- package/fieldset/lib/fieldset/fieldset.component.d.ts +28 -14
- package/global-search/lib/global-search/global-search.module.d.ts +1 -1
- package/package.json +1 -3
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +1 -1
- package/schematics/collection.json +26 -1
- package/schematics/migrations/migrate-dynamic-form-v19/index.js +15 -34
- package/schematics/migrations/migrate-dynamic-form-v19/index.js.map +1 -1
- package/schematics/migrations/migrate-fieldset-body-template/index.d.ts +2 -0
- package/schematics/migrations/migrate-fieldset-body-template/index.js +421 -0
- package/schematics/migrations/migrate-fieldset-body-template/index.js.map +1 -0
- package/schematics/migrations/migrate-steps-to-stepper/index.js +1 -19
- package/schematics/migrations/migrate-steps-to-stepper/index.js.map +1 -1
- package/schematics/migrations.json +5 -0
- package/schematics/utils/ast-utils.d.ts +33 -1
- package/schematics/utils/ast-utils.js +175 -4
- package/schematics/utils/ast-utils.js.map +1 -1
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
package/README.md
CHANGED
|
@@ -1,25 +1,111 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @seniorsistemas/angular-components
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Biblioteca de componentes Angular reutilizáveis da Senior Sistemas, construída com Angular 18 e Tailwind CSS.
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
7
|
+
## Documentação
|
|
8
8
|
|
|
9
|
-
|
|
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
|
-
|
|
11
|
+
### Rodar o Storybook localmente
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
```bash
|
|
14
|
+
npm run storybook
|
|
15
|
+
```
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
Acesse em `http://localhost:6006`.
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
### Build do Storybook
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
```bash
|
|
22
|
+
npm run build-storybook
|
|
23
|
+
```
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
O output é gerado em `storybook-static/`.
|
|
22
26
|
|
|
23
|
-
##
|
|
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";
|
|
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
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, computed, forwardRef, input, model,
|
|
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"
|
|
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=
|