valtech-components 4.0.563 → 4.0.565

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 (55) hide show
  1. package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +2 -2
  2. package/esm2022/lib/components/molecules/request-form/request-form.component.mjs +2 -2
  3. package/esm2022/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.mjs +2 -2
  4. package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +2 -2
  5. package/esm2022/lib/components/organisms/change-email-modal/change-email-modal.component.mjs +2 -2
  6. package/esm2022/lib/components/organisms/change-password-modal/change-password-modal.component.mjs +1 -1
  7. package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.component.mjs +2 -2
  8. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +1 -1
  9. package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +2 -2
  10. package/esm2022/lib/components/organisms/form/form.component.mjs +27 -3
  11. package/esm2022/lib/components/organisms/login/login.component.mjs +21 -3
  12. package/esm2022/lib/components/organisms/login/types.mjs +1 -1
  13. package/esm2022/lib/components/organisms/menu/menu.component.mjs +130 -9
  14. package/esm2022/lib/components/organisms/menu/types.mjs +1 -1
  15. package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +2 -2
  16. package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +16 -2
  17. package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +59 -16
  18. package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +178 -18
  19. package/esm2022/lib/components/organisms/mini-games/christianity-card.component.mjs +3 -9
  20. package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +13 -3
  21. package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +17 -3
  22. package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
  23. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +34 -29
  24. package/esm2022/lib/components/organisms/organization-view/types.mjs +1 -1
  25. package/esm2022/lib/components/organisms/profile-view/profile-content.component.mjs +2 -2
  26. package/esm2022/lib/services/auth/guards.mjs +11 -3
  27. package/esm2022/lib/services/forms/form-schema-builder.service.mjs +2 -1
  28. package/esm2022/lib/services/forms/types.mjs +1 -1
  29. package/esm2022/lib/version.mjs +2 -2
  30. package/esm2022/mini-games/public-api.mjs +54 -2
  31. package/fesm2022/valtech-components-mini-games.mjs +54 -2
  32. package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
  33. package/fesm2022/valtech-components.mjs +509 -97
  34. package/fesm2022/valtech-components.mjs.map +1 -1
  35. package/lib/components/organisms/form/form.component.d.ts +3 -1
  36. package/lib/components/organisms/login/login.component.d.ts +3 -1
  37. package/lib/components/organisms/login/types.d.ts +6 -1
  38. package/lib/components/organisms/menu/menu.component.d.ts +17 -1
  39. package/lib/components/organisms/menu/types.d.ts +14 -0
  40. package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +1 -1
  41. package/lib/components/organisms/mini-games/chessimals-engine.d.ts +2 -1
  42. package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +13 -2
  43. package/lib/components/organisms/mini-games/christianity-game.component.d.ts +1 -0
  44. package/lib/components/organisms/mini-games/types.d.ts +2 -0
  45. package/lib/components/organisms/organization-view/types.d.ts +5 -0
  46. package/lib/services/forms/types.d.ts +2 -0
  47. package/lib/version.d.ts +1 -1
  48. package/mini-games/public-api.d.ts +11 -0
  49. package/package.json +1 -1
  50. package/src/lib/assets/games/chessimals/challenge-avatars/sprinter.png +0 -0
  51. package/src/lib/assets/games/chessimals/mode-icons/path-borderless.png +0 -0
  52. package/src/lib/assets/games/chessimals/mode-icons/path.jpg +0 -0
  53. package/src/lib/assets/games/chessimals/rules/capture.jpg +0 -0
  54. package/src/lib/assets/games/chessimals/tutorial-solo-clean.png +0 -0
  55. package/src/lib/components/styles/overrides.scss +5 -0
@@ -1,5 +1,5 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, computed, inject, Input } from '@angular/core';
2
+ import { Component, computed, ElementRef, inject, Input, signal, } from '@angular/core';
3
3
  import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonMenu, IonMenuToggle, IonToolbar, MenuController, } from '@ionic/angular/standalone';
4
4
  import { ImageComponent } from '../../atoms/image/image.component';
5
5
  import { ButtonComponent } from '../../atoms/button/button.component';
@@ -33,6 +33,9 @@ export class MenuComponent {
33
33
  constructor() {
34
34
  this.menuCtrl = inject(MenuController);
35
35
  this.i18n = inject(I18nService);
36
+ this.elementRef = inject(ElementRef);
37
+ this.splitPaneOriginalStyles = new Map();
38
+ this.isDesktopCollapsed = signal(false);
36
39
  /**
37
40
  * Menu configuration.
38
41
  */
@@ -49,20 +52,108 @@ export class MenuComponent {
49
52
  return this.props.closeButtonText || this.i18n.t('close');
50
53
  });
51
54
  }
55
+ ngOnChanges(changes) {
56
+ const propsChange = changes['props'];
57
+ if (!propsChange)
58
+ return;
59
+ const previous = propsChange.previousValue;
60
+ if (!this.retractableMenuEnabled()) {
61
+ this.isDesktopCollapsed.set(false);
62
+ }
63
+ else if (propsChange.firstChange ||
64
+ previous?.desktopCollapsed !== this.props.desktopCollapsed ||
65
+ previous?.retractableMenu !== this.props.retractableMenu) {
66
+ this.isDesktopCollapsed.set(!!this.props.desktopCollapsed);
67
+ }
68
+ this.syncSplitPaneWidth();
69
+ }
70
+ ngAfterViewInit() {
71
+ this.syncSplitPaneWidth();
72
+ }
73
+ ngOnDestroy() {
74
+ this.restoreSplitPaneWidth();
75
+ }
52
76
  /**
53
77
  * Closes the menu.
54
78
  */
55
79
  async closeMenu() {
56
80
  await this.menuCtrl.close(this.props.id);
57
81
  }
82
+ toggleDesktopCollapse() {
83
+ if (!this.retractableMenuEnabled())
84
+ return;
85
+ this.isDesktopCollapsed.update(collapsed => !collapsed);
86
+ this.syncSplitPaneWidth();
87
+ }
88
+ retractableMenuEnabled() {
89
+ return !!(this.props.retractableMenu ?? this.props.desktopCollapsible);
90
+ }
91
+ desktopCollapseButtonLabel() {
92
+ return this.isDesktopCollapsed()
93
+ ? this.props.desktopExpandLabel || 'Expandir menú'
94
+ : this.props.desktopCollapseLabel || 'Contraer menú';
95
+ }
96
+ desktopCollapseIcon() {
97
+ const isEnd = this.props.side === 'end';
98
+ if (this.isDesktopCollapsed()) {
99
+ return isEnd ? 'chevron-back-outline' : 'chevron-forward-outline';
100
+ }
101
+ return isEnd ? 'chevron-forward-outline' : 'chevron-back-outline';
102
+ }
103
+ syncSplitPaneWidth() {
104
+ if (!this.retractableMenuEnabled()) {
105
+ this.restoreSplitPaneWidth();
106
+ return;
107
+ }
108
+ const splitPane = this.findSplitPane();
109
+ if (!splitPane)
110
+ return;
111
+ this.captureOriginalSplitPaneStyles(splitPane);
112
+ const width = this.isDesktopCollapsed()
113
+ ? this.props.desktopCollapsedWidth || '4.75rem'
114
+ : this.props.desktopExpandedWidth || 'min(40vw, 22rem)';
115
+ splitPane.style.setProperty('--side-width', width);
116
+ splitPane.style.setProperty('--side-min-width', width);
117
+ splitPane.style.setProperty('--side-max-width', width);
118
+ }
119
+ findSplitPane() {
120
+ if (this.splitPane?.isConnected)
121
+ return this.splitPane;
122
+ this.splitPane = this.elementRef.nativeElement.closest('ion-split-pane') || undefined;
123
+ return this.splitPane;
124
+ }
125
+ captureOriginalSplitPaneStyles(splitPane) {
126
+ for (const property of ['--side-width', '--side-min-width', '--side-max-width']) {
127
+ if (!this.splitPaneOriginalStyles.has(property)) {
128
+ this.splitPaneOriginalStyles.set(property, splitPane.style.getPropertyValue(property));
129
+ }
130
+ }
131
+ }
132
+ restoreSplitPaneWidth() {
133
+ const splitPane = this.findSplitPane();
134
+ if (!splitPane || !this.splitPaneOriginalStyles.size)
135
+ return;
136
+ for (const [property, value] of this.splitPaneOriginalStyles) {
137
+ if (value) {
138
+ splitPane.style.setProperty(property, value);
139
+ }
140
+ else {
141
+ splitPane.style.removeProperty(property);
142
+ }
143
+ }
144
+ }
58
145
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
59
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MenuComponent, isStandalone: true, selector: "val-menu", inputs: { props: "props" }, ngImport: i0, template: `
146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MenuComponent, isStandalone: true, selector: "val-menu", inputs: { props: "props" }, usesOnChanges: true, ngImport: i0, template: `
60
147
  <ion-menu
61
148
  [menuId]="props.id"
62
149
  [contentId]="props.contentId"
63
150
  [type]="props.type || 'overlay'"
64
151
  [side]="props.side || 'start'"
65
152
  [swipeGesture]="props.swipe !== false"
153
+ [class.is-desktop-collapsible]="retractableMenuEnabled()"
154
+ [class.is-desktop-collapsed]="isDesktopCollapsed()"
155
+ [style.--val-menu-expanded-width]="props.desktopExpandedWidth || null"
156
+ [style.--val-menu-collapsed-width]="props.desktopCollapsedWidth || null"
66
157
  >
67
158
  <ion-header [class.ion-no-border]="true">
68
159
  <ion-toolbar>
@@ -83,7 +174,18 @@ export class MenuComponent {
83
174
  </ion-buttons>
84
175
 
85
176
  <ion-buttons slot="end">
86
- <ion-menu-toggle>
177
+ @if (retractableMenuEnabled()) {
178
+ <ion-button
179
+ class="menu-collapse-toggle"
180
+ fill="clear"
181
+ [attr.aria-label]="desktopCollapseButtonLabel()"
182
+ [attr.aria-pressed]="isDesktopCollapsed()"
183
+ (click)="toggleDesktopCollapse()"
184
+ >
185
+ <ion-icon color="dark" slot="icon-only" [name]="desktopCollapseIcon()"></ion-icon>
186
+ </ion-button>
187
+ }
188
+ <ion-menu-toggle class="menu-mobile-close">
87
189
  <ion-button>
88
190
  <ion-icon color="dark" slot="icon-only" name="close-outline"></ion-icon>
89
191
  </ion-button>
@@ -92,7 +194,9 @@ export class MenuComponent {
92
194
  </ion-toolbar>
93
195
  </ion-header>
94
196
  <ion-content>
95
- <ng-content></ng-content>
197
+ <div class="menu-projected-content" [attr.aria-hidden]="isDesktopCollapsed() ? 'true' : null" [attr.inert]="isDesktopCollapsed() ? '' : null">
198
+ <ng-content></ng-content>
199
+ </div>
96
200
  </ion-content>
97
201
  @if (props.showCloseButton) {
98
202
  <val-button
@@ -114,7 +218,7 @@ export class MenuComponent {
114
218
  />
115
219
  }
116
220
  </ion-menu>
117
- `, isInline: true, styles: [":host{display:contents}ion-menu{--min-width: 75%;--background: var(--ion-color-light)}@media (min-width: 768px){ion-menu{--min-width: 40%}}ion-menu ion-header{background:var(--ion-color-light)}ion-menu ion-content{--background: var(--ion-color-light)}.menu-close-button{display:block;text-align:center;padding:1rem .5rem;background:var(--ion-color-light)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }] }); }
221
+ `, isInline: true, styles: [":host{display:contents}ion-menu{--val-menu-expanded-width: 75%;--val-menu-collapsed-width: 4.75rem;--width: var(--val-menu-expanded-width);--min-width: var(--val-menu-expanded-width);--background: var(--ion-color-light);transition:--width .18s ease,--min-width .18s ease}@media (min-width: 768px){ion-menu{--val-menu-expanded-width: min(40vw, 22rem)}}ion-menu ion-header{background:var(--ion-color-light)}ion-menu ion-content{--background: var(--ion-color-light)}@media (min-width: 1200px){ion-menu.is-desktop-collapsible{--width: var(--val-menu-expanded-width);--min-width: var(--val-menu-expanded-width);--max-width: var(--val-menu-expanded-width)}ion-menu.is-desktop-collapsible .menu-mobile-close{display:none}}@media (min-width: 1200px){ion-menu.is-desktop-collapsed{--width: var(--val-menu-collapsed-width);--min-width: var(--val-menu-collapsed-width);--max-width: var(--val-menu-collapsed-width)}ion-menu.is-desktop-collapsed ion-toolbar{--padding-start: 0;--padding-end: 0}ion-menu.is-desktop-collapsed .menu-projected-content,ion-menu.is-desktop-collapsed .menu-close-button{visibility:hidden;opacity:0;pointer-events:none}}.menu-collapse-toggle{display:none}@media (min-width: 1200px){.menu-collapse-toggle{display:inline-flex}}.menu-projected-content{transition:opacity .16s ease,visibility .16s ease}.menu-close-button{display:block;text-align:center;padding:1rem .5rem;background:var(--ion-color-light)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }] }); }
118
222
  }
119
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuComponent, decorators: [{
120
224
  type: Component,
@@ -137,6 +241,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
137
241
  [type]="props.type || 'overlay'"
138
242
  [side]="props.side || 'start'"
139
243
  [swipeGesture]="props.swipe !== false"
244
+ [class.is-desktop-collapsible]="retractableMenuEnabled()"
245
+ [class.is-desktop-collapsed]="isDesktopCollapsed()"
246
+ [style.--val-menu-expanded-width]="props.desktopExpandedWidth || null"
247
+ [style.--val-menu-collapsed-width]="props.desktopCollapsedWidth || null"
140
248
  >
141
249
  <ion-header [class.ion-no-border]="true">
142
250
  <ion-toolbar>
@@ -157,7 +265,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
157
265
  </ion-buttons>
158
266
 
159
267
  <ion-buttons slot="end">
160
- <ion-menu-toggle>
268
+ @if (retractableMenuEnabled()) {
269
+ <ion-button
270
+ class="menu-collapse-toggle"
271
+ fill="clear"
272
+ [attr.aria-label]="desktopCollapseButtonLabel()"
273
+ [attr.aria-pressed]="isDesktopCollapsed()"
274
+ (click)="toggleDesktopCollapse()"
275
+ >
276
+ <ion-icon color="dark" slot="icon-only" [name]="desktopCollapseIcon()"></ion-icon>
277
+ </ion-button>
278
+ }
279
+ <ion-menu-toggle class="menu-mobile-close">
161
280
  <ion-button>
162
281
  <ion-icon color="dark" slot="icon-only" name="close-outline"></ion-icon>
163
282
  </ion-button>
@@ -166,7 +285,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
166
285
  </ion-toolbar>
167
286
  </ion-header>
168
287
  <ion-content>
169
- <ng-content></ng-content>
288
+ <div class="menu-projected-content" [attr.aria-hidden]="isDesktopCollapsed() ? 'true' : null" [attr.inert]="isDesktopCollapsed() ? '' : null">
289
+ <ng-content></ng-content>
290
+ </div>
170
291
  </ion-content>
171
292
  @if (props.showCloseButton) {
172
293
  <val-button
@@ -188,8 +309,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
188
309
  />
189
310
  }
190
311
  </ion-menu>
191
- `, styles: [":host{display:contents}ion-menu{--min-width: 75%;--background: var(--ion-color-light)}@media (min-width: 768px){ion-menu{--min-width: 40%}}ion-menu ion-header{background:var(--ion-color-light)}ion-menu ion-content{--background: var(--ion-color-light)}.menu-close-button{display:block;text-align:center;padding:1rem .5rem;background:var(--ion-color-light)}\n"] }]
312
+ `, styles: [":host{display:contents}ion-menu{--val-menu-expanded-width: 75%;--val-menu-collapsed-width: 4.75rem;--width: var(--val-menu-expanded-width);--min-width: var(--val-menu-expanded-width);--background: var(--ion-color-light);transition:--width .18s ease,--min-width .18s ease}@media (min-width: 768px){ion-menu{--val-menu-expanded-width: min(40vw, 22rem)}}ion-menu ion-header{background:var(--ion-color-light)}ion-menu ion-content{--background: var(--ion-color-light)}@media (min-width: 1200px){ion-menu.is-desktop-collapsible{--width: var(--val-menu-expanded-width);--min-width: var(--val-menu-expanded-width);--max-width: var(--val-menu-expanded-width)}ion-menu.is-desktop-collapsible .menu-mobile-close{display:none}}@media (min-width: 1200px){ion-menu.is-desktop-collapsed{--width: var(--val-menu-collapsed-width);--min-width: var(--val-menu-collapsed-width);--max-width: var(--val-menu-collapsed-width)}ion-menu.is-desktop-collapsed ion-toolbar{--padding-start: 0;--padding-end: 0}ion-menu.is-desktop-collapsed .menu-projected-content,ion-menu.is-desktop-collapsed .menu-close-button{visibility:hidden;opacity:0;pointer-events:none}}.menu-collapse-toggle{display:none}@media (min-width: 1200px){.menu-collapse-toggle{display:inline-flex}}.menu-projected-content{transition:opacity .16s ease,visibility .16s ease}.menu-close-button{display:block;text-align:center;padding:1rem .5rem;background:var(--ion-color-light)}\n"] }]
192
313
  }], propDecorators: { props: [{
193
314
  type: Input
194
315
  }] } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbnUvbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBQ1YsY0FBYyxHQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQThFSCxNQUFNLE9BQU8sYUFBYTtJQTdFMUI7UUE4RVUsYUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DOztXQUVHO1FBQ00sVUFBSyxHQUFpQjtZQUM3QixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO1FBRUY7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QjtZQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0tBUUo7SUFOQzs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBMUJVLGFBQWE7bUdBQWIsYUFBYSxnR0E3RGQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwRFQsOGFBdEVDLFlBQVksK0JBQ1osT0FBTyxrSkFDUCxVQUFVLDhFQUNWLGFBQWEsMEZBQ2IsU0FBUyxvUEFDVCxPQUFPLDJKQUNQLFNBQVMsb0dBQ1QsVUFBVSxtRkFDVixVQUFVLHdLQUNWLGNBQWMseUVBQ2QsZUFBZTs7NEZBK0ROLGFBQWE7a0JBN0V6QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixTQUFTO3dCQUNULE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxlQUFlO3FCQUNoQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERUOzhCQVVRLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTWVudSxcbiAgSW9uTWVudVRvZ2dsZSxcbiAgSW9uVG9vbGJhcixcbiAgTWVudUNvbnRyb2xsZXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudU1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuXG4vKipcbiAqIHZhbC1tZW51XG4gKlxuICogQSBzaWRlIG1lbnUgY29tcG9uZW50IHVzaW5nIElvbmljIElvbk1lbnUgd2l0aCBjdXN0b21pemFibGUgbG9nbyxcbiAqIGNsb3NlIGJ1dHRvbiwgYW5kIGNvbnRlbnQgcHJvamVjdGlvbiBmb3IgbWVudSBpdGVtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHZhbC1tZW51XG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgaWQ6ICdtYWluLW1lbnUnLFxuICogICAgIGNvbnRlbnRJZDogJ21haW4tY29udGVudCcsXG4gKiAgICAgc2lkZTogJ3N0YXJ0JyxcbiAqICAgICB0eXBlOiAnb3ZlcmxheScsXG4gKiAgICAgc3dpcGU6IHRydWUsXG4gKiAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gKiAgIH1cIlxuICogPlxuICogICA8dmFsLWxpbmtzLWFjY29yZGlvbiBbcHJvcHNdPVwibWVudUxpbmtzXCI+PC92YWwtbGlua3MtYWNjb3JkaW9uPlxuICogPC92YWwtbWVudT5cbiAqXG4gKiA8aW9uLXJvdXRlci1vdXRsZXQgaWQ9XCJtYWluLWNvbnRlbnRcIj48L2lvbi1yb3V0ZXItb3V0bGV0PlxuICpcbiAqIEBpbnB1dCBwcm9wcyAtIE1lbnUgY29uZmlndXJhdGlvblxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbWVudScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uTWVudSxcbiAgICBJb25CdXR0b25zLFxuICAgIElvbk1lbnVUb2dnbGUsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkljb24sXG4gICAgSW9uSGVhZGVyLFxuICAgIElvblRvb2xiYXIsXG4gICAgSW9uQ29udGVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1tZW51XG4gICAgICBbbWVudUlkXT1cInByb3BzLmlkXCJcbiAgICAgIFtjb250ZW50SWRdPVwicHJvcHMuY29udGVudElkXCJcbiAgICAgIFt0eXBlXT1cInByb3BzLnR5cGUgfHwgJ292ZXJsYXknXCJcbiAgICAgIFtzaWRlXT1cInByb3BzLnNpZGUgfHwgJ3N0YXJ0J1wiXG4gICAgICBbc3dpcGVHZXN0dXJlXT1cInByb3BzLnN3aXBlICE9PSBmYWxzZVwiXG4gICAgPlxuICAgICAgPGlvbi1oZWFkZXIgW2NsYXNzLmlvbi1uby1ib3JkZXJdPVwidHJ1ZVwiPlxuICAgICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAuNXJlbTtcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2VcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzcmM6ICctLW1haW4tbG9nby1taW5pJyxcbiAgICAgICAgICAgICAgICBhbHQ6ICdtZW51IGxvZ28nLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdib3gnLFxuICAgICAgICAgICAgICAgIHNoYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgbGltaXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgZmxleDogdHJ1ZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgICAgPGlvbi1tZW51LXRvZ2dsZT5cbiAgICAgICAgICAgICAgPGlvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFya1wiIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgICA8L2lvbi1oZWFkZXI+XG4gICAgICA8aW9uLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvaW9uLWNvbnRlbnQ+XG4gICAgICBAaWYgKHByb3BzLnNob3dDbG9zZUJ1dHRvbikge1xuICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWVudS1jbG9zZS1idXR0b25cIlxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICB0ZXh0OiBjbG9zZUJ1dHRvblRleHQoKSxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgIGljb246IHtcbiAgICAgICAgICAgICAgbmFtZTogJ2Nsb3NlLW91dGxpbmUnLFxuICAgICAgICAgICAgICBzbG90OiAnc3RhcnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAob25DbGljayk9XCJjbG9zZU1lbnUoKVwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9pb24tbWVudT5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBtZW51Q3RybCA9IGluamVjdChNZW51Q29udHJvbGxlcik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIE1lbnUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBNZW51TWV0YWRhdGEgPSB7XG4gICAgc2lkZTogJ3N0YXJ0JyxcbiAgICB0eXBlOiAnb3ZlcmxheScsXG4gICAgc3dpcGU6IHRydWUsXG4gIH07XG5cbiAgLyoqXG4gICAqIENsb3NlIGJ1dHRvbiB0ZXh0IC0gcmVhY3RpdmUgdG8gbGFuZ3VhZ2UgY2hhbmdlcy5cbiAgICovXG4gIGNsb3NlQnV0dG9uVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpOyAvLyBUcmFjayBsYW5ndWFnZSBjaGFuZ2VzXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2xvc2VCdXR0b25UZXh0IHx8IHRoaXMuaTE4bi50KCdjbG9zZScpO1xuICB9KTtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtZW51LlxuICAgKi9cbiAgYXN5bmMgY2xvc2VNZW51KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubWVudUN0cmwuY2xvc2UodGhpcy5wcm9wcy5pZCk7XG4gIH1cbn1cbiJdfQ==
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbnUvbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULE9BQU8sRUFDUCxPQUFPLEVBQ1AsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEdBQ2YsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBK0ZILE1BQU0sT0FBTyxhQUFhO0lBOUYxQjtRQStGVSxhQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xDLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsZUFBVSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFFekQsNEJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDekMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXREOztXQUVHO1FBQ00sVUFBSyxHQUFpQjtZQUM3QixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxF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QWM7d0JBQ2QsZUFBZTtxQkFDaEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkVUOzhCQWNRLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uSGVhZGVyLFxuICBJb25JY29uLFxuICBJb25NZW51LFxuICBJb25NZW51VG9nZ2xlLFxuICBJb25Ub29sYmFyLFxuICBNZW51Q29udHJvbGxlcixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW51TWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5cbi8qKlxuICogdmFsLW1lbnVcbiAqXG4gKiBBIHNpZGUgbWVudSBjb21wb25lbnQgdXNpbmcgSW9uaWMgSW9uTWVudSB3aXRoIGN1c3RvbWl6YWJsZSBsb2dvLFxuICogY2xvc2UgYnV0dG9uLCBhbmQgY29udGVudCBwcm9qZWN0aW9uIGZvciBtZW51IGl0ZW1zLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLW1lbnVcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBpZDogJ21haW4tbWVudScsXG4gKiAgICAgY29udGVudElkOiAnbWFpbi1jb250ZW50JyxcbiAqICAgICBzaWRlOiAnc3RhcnQnLFxuICogICAgIHR5cGU6ICdvdmVybGF5JyxcbiAqICAgICBzd2lwZTogdHJ1ZSxcbiAqICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAqICAgfVwiXG4gKiA+XG4gKiAgIDx2YWwtbGlua3MtYWNjb3JkaW9uIFtwcm9wc109XCJtZW51TGlua3NcIj48L3ZhbC1saW5rcy1hY2NvcmRpb24+XG4gKiA8L3ZhbC1tZW51PlxuICpcbiAqIDxpb24tcm91dGVyLW91dGxldCBpZD1cIm1haW4tY29udGVudFwiPjwvaW9uLXJvdXRlci1vdXRsZXQ+XG4gKlxuICogQGlucHV0IHByb3BzIC0gTWVudSBjb25maWd1cmF0aW9uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1tZW51JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25NZW51LFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uTWVudVRvZ2dsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uSWNvbixcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uVG9vbGJhcixcbiAgICBJb25Db250ZW50LFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLW1lbnVcbiAgICAgIFttZW51SWRdPVwicHJvcHMuaWRcIlxuICAgICAgW2NvbnRlbnRJZF09XCJwcm9wcy5jb250ZW50SWRcIlxuICAgICAgW3R5cGVdPVwicHJvcHMudHlwZSB8fCAnb3ZlcmxheSdcIlxuICAgICAgW3NpZGVdPVwicHJvcHMuc2lkZSB8fCAnc3RhcnQnXCJcbiAgICAgIFtzd2lwZUdlc3R1cmVdPVwicHJvcHMuc3dpcGUgIT09IGZhbHNlXCJcbiAgICAgIFtjbGFzcy5pcy1kZXNrdG9wLWNvbGxhcHNpYmxlXT1cInJldHJhY3RhYmxlTWVudUVuYWJsZWQoKVwiXG4gICAgICBbY2xhc3MuaXMtZGVza3RvcC1jb2xsYXBzZWRdPVwiaXNEZXNrdG9wQ29sbGFwc2VkKClcIlxuICAgICAgW3N0eWxlLi0tdmFsLW1lbnUtZXhwYW5kZWQtd2lkdGhdPVwicHJvcHMuZGVza3RvcEV4cGFuZGVkV2lkdGggfHwgbnVsbFwiXG4gICAgICBbc3R5bGUuLS12YWwtbWVudS1jb2xsYXBzZWQtd2lkdGhdPVwicHJvcHMuZGVza3RvcENvbGxhcHNlZFdpZHRoIHx8IG51bGxcIlxuICAgID5cbiAgICAgIDxpb24taGVhZGVyIFtjbGFzcy5pb24tbm8tYm9yZGVyXT1cInRydWVcIj5cbiAgICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogLjVyZW07XCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc3JjOiAnLS1tYWluLWxvZ28tbWluaScsXG4gICAgICAgICAgICAgICAgYWx0OiAnbWVudSBsb2dvJyxcbiAgICAgICAgICAgICAgICBtb2RlOiAnYm94JyxcbiAgICAgICAgICAgICAgICBzaGFkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGxpbWl0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgICAgICAgIGZsZXg6IHRydWUsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICAgIEBpZiAocmV0cmFjdGFibGVNZW51RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LWNvbGxhcHNlLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRlc2t0b3BDb2xsYXBzZUJ1dHRvbkxhYmVsKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJpc0Rlc2t0b3BDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURlc2t0b3BDb2xsYXBzZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhcmtcIiBzbG90PVwiaWNvbi1vbmx5XCIgW25hbWVdPVwiZGVza3RvcENvbGxhcHNlSWNvbigpXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGlvbi1tZW51LXRvZ2dsZSBjbGFzcz1cIm1lbnUtbW9iaWxlLWNsb3NlXCI+XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhcmtcIiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1tZW51LXRvZ2dsZT5cbiAgICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgICA8L2lvbi10b29sYmFyPlxuICAgICAgPC9pb24taGVhZGVyPlxuICAgICAgPGlvbi1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1wcm9qZWN0ZWQtY29udGVudFwiIFthdHRyLmFyaWEtaGlkZGVuXT1cImlzRGVza3RvcENvbGxhcHNlZCgpID8gJ3RydWUnIDogbnVsbFwiIFthdHRyLmluZXJ0XT1cImlzRGVza3RvcENvbGxhcHNlZCgpID8gJycgOiBudWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaW9uLWNvbnRlbnQ+XG4gICAgICBAaWYgKHByb3BzLnNob3dDbG9zZUJ1dHRvbikge1xuICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWVudS1jbG9zZS1idXR0b25cIlxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICB0ZXh0OiBjbG9zZUJ1dHRvblRleHQoKSxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgIGljb246IHtcbiAgICAgICAgICAgICAgbmFtZTogJ2Nsb3NlLW91dGxpbmUnLFxuICAgICAgICAgICAgICBzbG90OiAnc3RhcnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAob25DbGljayk9XCJjbG9zZU1lbnUoKVwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9pb24tbWVudT5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG1lbnVDdHJsID0gaW5qZWN0KE1lbnVDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBzcGxpdFBhbmU/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBzcGxpdFBhbmVPcmlnaW5hbFN0eWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc0Rlc2t0b3BDb2xsYXBzZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBNZW51IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogTWVudU1ldGFkYXRhID0ge1xuICAgIHNpZGU6ICdzdGFydCcsXG4gICAgdHlwZTogJ292ZXJsYXknLFxuICAgIHN3aXBlOiB0cnVlLFxuICB9O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9wc0NoYW5nZSA9IGNoYW5nZXNbJ3Byb3BzJ107XG4gICAgaWYgKCFwcm9wc0NoYW5nZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldmlvdXMgPSBwcm9wc0NoYW5nZS5wcmV2aW91c1ZhbHVlIGFzIE1lbnVNZXRhZGF0YSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXRoaXMucmV0cmFjdGFibGVNZW51RW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmlzRGVza3RvcENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwcm9wc0NoYW5nZS5maXJzdENoYW5nZSB8fFxuICAgICAgcHJldmlvdXM/LmRlc2t0b3BDb2xsYXBzZWQgIT09IHRoaXMucHJvcHMuZGVza3RvcENvbGxhcHNlZCB8fFxuICAgICAgcHJldmlvdXM/LnJldHJhY3RhYmxlTWVudSAhPT0gdGhpcy5wcm9wcy5yZXRyYWN0YWJsZU1lbnVcbiAgICApIHtcbiAgICAgIHRoaXMuaXNEZXNrdG9wQ29sbGFwc2VkLnNldCghIXRoaXMucHJvcHMuZGVza3RvcENvbGxhcHNlZCk7XG4gICAgfVxuICAgIHRoaXMuc3luY1NwbGl0UGFuZVdpZHRoKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zeW5jU3BsaXRQYW5lV2lkdGgoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzdG9yZVNwbGl0UGFuZVdpZHRoKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYnV0dG9uIHRleHQgLSByZWFjdGl2ZSB0byBsYW5ndWFnZSBjaGFuZ2VzLlxuICAgKi9cbiAgY2xvc2VCdXR0b25UZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7IC8vIFRyYWNrIGxhbmd1YWdlIGNoYW5nZXNcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jbG9zZUJ1dHRvblRleHQgfHwgdGhpcy5pMThuLnQoJ2Nsb3NlJyk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1lbnUuXG4gICAqL1xuICBhc3luYyBjbG9zZU1lbnUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5tZW51Q3RybC5jbG9zZSh0aGlzLnByb3BzLmlkKTtcbiAgfVxuXG4gIHRvZ2dsZURlc2t0b3BDb2xsYXBzZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmV0cmFjdGFibGVNZW51RW5hYmxlZCgpKSByZXR1cm47XG4gICAgdGhpcy5pc0Rlc2t0b3BDb2xsYXBzZWQudXBkYXRlKGNvbGxhcHNlZCA9PiAhY29sbGFwc2VkKTtcbiAgICB0aGlzLnN5bmNTcGxpdFBhbmVXaWR0aCgpO1xuICB9XG5cbiAgcmV0cmFjdGFibGVNZW51RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9wcy5yZXRyYWN0YWJsZU1lbnUgPz8gdGhpcy5wcm9wcy5kZXNrdG9wQ29sbGFwc2libGUpO1xuICB9XG5cbiAgZGVza3RvcENvbGxhcHNlQnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc2t0b3BDb2xsYXBzZWQoKVxuICAgICAgPyB0aGlzLnByb3BzLmRlc2t0b3BFeHBhbmRMYWJlbCB8fCAnRXhwYW5kaXIgbWVuw7onXG4gICAgICA6IHRoaXMucHJvcHMuZGVza3RvcENvbGxhcHNlTGFiZWwgfHwgJ0NvbnRyYWVyIG1lbsO6JztcbiAgfVxuXG4gIGRlc2t0b3BDb2xsYXBzZUljb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBpc0VuZCA9IHRoaXMucHJvcHMuc2lkZSA9PT0gJ2VuZCc7XG4gICAgaWYgKHRoaXMuaXNEZXNrdG9wQ29sbGFwc2VkKCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/ICdjaGV2cm9uLWJhY2stb3V0bGluZScgOiAnY2hldnJvbi1mb3J3YXJkLW91dGxpbmUnO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmQgPyAnY2hldnJvbi1mb3J3YXJkLW91dGxpbmUnIDogJ2NoZXZyb24tYmFjay1vdXRsaW5lJztcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NwbGl0UGFuZVdpZHRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXRyYWN0YWJsZU1lbnVFbmFibGVkKCkpIHtcbiAgICAgIHRoaXMucmVzdG9yZVNwbGl0UGFuZVdpZHRoKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXRQYW5lID0gdGhpcy5maW5kU3BsaXRQYW5lKCk7XG4gICAgaWYgKCFzcGxpdFBhbmUpIHJldHVybjtcblxuICAgIHRoaXMuY2FwdHVyZU9yaWdpbmFsU3BsaXRQYW5lU3R5bGVzKHNwbGl0UGFuZSk7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmlzRGVza3RvcENvbGxhcHNlZCgpXG4gICAgICA/IHRoaXMucHJvcHMuZGVza3RvcENvbGxhcHNlZFdpZHRoIHx8ICc0Ljc1cmVtJ1xuICAgICAgOiB0aGlzLnByb3BzLmRlc2t0b3BFeHBhbmRlZFdpZHRoIHx8ICdtaW4oNDB2dywgMjJyZW0pJztcblxuICAgIHNwbGl0UGFuZS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zaWRlLXdpZHRoJywgd2lkdGgpO1xuICAgIHNwbGl0UGFuZS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zaWRlLW1pbi13aWR0aCcsIHdpZHRoKTtcbiAgICBzcGxpdFBhbmUuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2lkZS1tYXgtd2lkdGgnLCB3aWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRTcGxpdFBhbmUoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnNwbGl0UGFuZT8uaXNDb25uZWN0ZWQpIHJldHVybiB0aGlzLnNwbGl0UGFuZTtcbiAgICB0aGlzLnNwbGl0UGFuZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2lvbi1zcGxpdC1wYW5lJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5zcGxpdFBhbmU7XG4gIH1cblxuICBwcml2YXRlIGNhcHR1cmVPcmlnaW5hbFNwbGl0UGFuZVN0eWxlcyhzcGxpdFBhbmU6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbJy0tc2lkZS13aWR0aCcsICctLXNpZGUtbWluLXdpZHRoJywgJy0tc2lkZS1tYXgtd2lkdGgnXSkge1xuICAgICAgaWYgKCF0aGlzLnNwbGl0UGFuZU9yaWdpbmFsU3R5bGVzLmhhcyhwcm9wZXJ0eSkpIHtcbiAgICAgICAgdGhpcy5zcGxpdFBhbmVPcmlnaW5hbFN0eWxlcy5zZXQocHJvcGVydHksIHNwbGl0UGFuZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlU3BsaXRQYW5lV2lkdGgoKTogdm9pZCB7XG4gICAgY29uc3Qgc3BsaXRQYW5lID0gdGhpcy5maW5kU3BsaXRQYW5lKCk7XG4gICAgaWYgKCFzcGxpdFBhbmUgfHwgIXRoaXMuc3BsaXRQYW5lT3JpZ2luYWxTdHlsZXMuc2l6ZSkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIHZhbHVlXSBvZiB0aGlzLnNwbGl0UGFuZU9yaWdpbmFsU3R5bGVzKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgc3BsaXRQYW5lLnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGxpdFBhbmUuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbnUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVUeXBlLCBTaWRlIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL3R5cGVzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgbWVudSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVudU1ldGFkYXRhIHtcbiAgLyoqIE1lbnUgdHlwZTogJ292ZXJsYXknLCAncmV2ZWFsJywgb3IgJ3B1c2gnICovXG4gIHR5cGU/OiBNZW51VHlwZTtcbiAgLyoqIEVuYWJsZSBzd2lwZSBnZXN0dXJlIHRvIG9wZW4vY2xvc2UgKi9cbiAgc3dpcGU/OiBib29sZWFuO1xuICAvKiogSUQgb2YgdGhlIGNvbnRlbnQgZWxlbWVudCB0aGlzIG1lbnUgaXMgYXNzb2NpYXRlZCB3aXRoICovXG4gIGNvbnRlbnRJZD86IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVudSAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFdoaWNoIHNpZGUgdGhlIG1lbnUgYXBwZWFycyBvbiAqL1xuICBzaWRlPzogU2lkZTtcbiAgLyoqIFNob3cgYSBjbG9zZSBidXR0b24gYXQgdGhlIGJvdHRvbSAqL1xuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAvKiogQ2xvc2UgYnV0dG9uIHRleHQgKGRlZmF1bHQ6ICdDbG9zZScpICovXG4gIGNsb3NlQnV0dG9uVGV4dD86IHN0cmluZztcbiAgLyoqIExvZ28gaW1hZ2UgY29uZmlndXJhdGlvbiAqL1xuICBsb2dvPzogSW1hZ2VNZXRhZGF0YTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbnUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVUeXBlLCBTaWRlIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL3R5cGVzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgbWVudSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVudU1ldGFkYXRhIHtcbiAgLyoqIE1lbnUgdHlwZTogJ292ZXJsYXknLCAncmV2ZWFsJywgb3IgJ3B1c2gnICovXG4gIHR5cGU/OiBNZW51VHlwZTtcbiAgLyoqIEVuYWJsZSBzd2lwZSBnZXN0dXJlIHRvIG9wZW4vY2xvc2UgKi9cbiAgc3dpcGU/OiBib29sZWFuO1xuICAvKiogSUQgb2YgdGhlIGNvbnRlbnQgZWxlbWVudCB0aGlzIG1lbnUgaXMgYXNzb2NpYXRlZCB3aXRoICovXG4gIGNvbnRlbnRJZD86IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVudSAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFdoaWNoIHNpZGUgdGhlIG1lbnUgYXBwZWFycyBvbiAqL1xuICBzaWRlPzogU2lkZTtcbiAgLyoqIFNob3cgYSBjbG9zZSBidXR0b24gYXQgdGhlIGJvdHRvbSAqL1xuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAvKiogQ2xvc2UgYnV0dG9uIHRleHQgKGRlZmF1bHQ6ICdDbG9zZScpICovXG4gIGNsb3NlQnV0dG9uVGV4dD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSBhIGRlc2t0b3Agc3BsaXQtcGFuZSBtZW51IHJhaWwgdGhhdCBjYW4gZXhwYW5kIGFuZCBjb2xsYXBzZSAqL1xuICByZXRyYWN0YWJsZU1lbnU/OiBib29sZWFuO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIHJldHJhY3RhYmxlTWVudSBpbnN0ZWFkICovXG4gIGRlc2t0b3BDb2xsYXBzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBJbml0aWFsIGNvbGxhcHNlZCBzdGF0ZSBmb3IgZGVza3RvcCBzcGxpdC1wYW5lIG1lbnVzICovXG4gIGRlc2t0b3BDb2xsYXBzZWQ/OiBib29sZWFuO1xuICAvKiogRXhwYW5kZWQgd2lkdGggZm9yIGRlc2t0b3Agc3BsaXQtcGFuZSBtZW51cyAqL1xuICBkZXNrdG9wRXhwYW5kZWRXaWR0aD86IHN0cmluZztcbiAgLyoqIENvbGxhcHNlZCB3aWR0aCBmb3IgZGVza3RvcCBzcGxpdC1wYW5lIG1lbnVzICovXG4gIGRlc2t0b3BDb2xsYXBzZWRXaWR0aD86IHN0cmluZztcbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgZm9yIGNvbGxhcHNpbmcgdGhlIGRlc2t0b3AgbWVudSAqL1xuICBkZXNrdG9wQ29sbGFwc2VMYWJlbD86IHN0cmluZztcbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgZm9yIGV4cGFuZGluZyB0aGUgZGVza3RvcCBtZW51ICovXG4gIGRlc2t0b3BFeHBhbmRMYWJlbD86IHN0cmluZztcbiAgLyoqIExvZ28gaW1hZ2UgY29uZmlndXJhdGlvbiAqL1xuICBsb2dvPzogSW1hZ2VNZXRhZGF0YTtcbn1cbiJdfQ==