valtech-components 4.0.972 → 4.0.974

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,13 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild, inject, signal, } from '@angular/core';
1
+ import { Component, EventEmitter, Injector, Input, Output, ViewChild, inject, signal, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { IonButton, IonIcon } from '@ionic/angular/standalone';
3
+ import { IonButton, IonIcon, IonSpinner } from '@ionic/angular/standalone';
4
4
  import { addIcons } from 'ionicons';
5
- import { chatboxOutline, listOutline, removeOutline } from 'ionicons/icons';
5
+ import { chatboxOutline, imageOutline, listOutline, removeOutline } from 'ionicons/icons';
6
6
  import { Editor } from '@tiptap/core';
7
7
  import StarterKit from '@tiptap/starter-kit';
8
8
  import Image from '@tiptap/extension-image';
9
9
  import { I18nService } from '../../../services/i18n';
10
+ import { StorageService } from '../../../services/firebase/storage.service';
10
11
  import { RICH_EDITOR_I18N } from './rich-editor.i18n';
11
12
  import { tiptapDocToArticle } from './tiptap-to-article';
12
13
  import { articleToTiptapDoc } from './article-to-tiptap';
@@ -14,7 +15,7 @@ import * as i0 from "@angular/core";
14
15
  // Íconos de la toolbar. B/I/H2/H3 no tienen ícono Ionicons dedicado — se
15
16
  // renderizan como texto ("B", "I", "H2", "H3") directo en el botón, mismo
16
17
  // criterio que un editor de texto rico convencional (Google Docs, Notion).
17
- addIcons({ listOutline, chatboxOutline, removeOutline });
18
+ addIcons({ listOutline, chatboxOutline, removeOutline, imageOutline });
18
19
  /**
19
20
  * val-rich-editor
20
21
  *
@@ -40,11 +41,13 @@ export class RichEditorComponent {
40
41
  this.props = {};
41
42
  this.articleChange = new EventEmitter();
42
43
  this.i18n = inject(I18nService);
44
+ this.injector = inject(Injector);
43
45
  /** Se recalcula en cada `onUpdate`/`onSelectionUpdate` para reflejar el
44
46
  * mark/nodo activo bajo el cursor (ej. el botón "B" resaltado si el
45
47
  * cursor está dentro de texto en negrita). */
46
48
  this._toolbarTick = signal(0);
47
49
  this.toolbarButtons = signal([]);
50
+ this.uploadingImage = signal(false);
48
51
  this.i18n.registerDefaults('RichEditor', RICH_EDITOR_I18N);
49
52
  }
50
53
  t(key) {
@@ -175,6 +178,36 @@ export class RichEditorComponent {
175
178
  }
176
179
  this.refreshToolbar();
177
180
  }
181
+ /**
182
+ * Sube la imagen elegida vía `StorageService` (Regla #12 — nunca URL pegada
183
+ * a mano, siempre vía Storage) y la inserta en el punto del cursor.
184
+ * `StorageService` se resuelve perezosamente (vía `Injector`, no como
185
+ * campo de la clase): si la app consumer no configuró
186
+ * `provideValtechFirebase`, el editor sigue funcionando normal para todo
187
+ * lo demás — solo el botón de imagen queda sin efecto, con log de error en
188
+ * vez de romper el resto del componente.
189
+ */
190
+ async onImageSelected(event) {
191
+ const input = event.target;
192
+ const file = input.files?.[0];
193
+ input.value = ''; // permite re-seleccionar el mismo archivo después
194
+ if (!file || !this.editor)
195
+ return;
196
+ this.uploadingImage.set(true);
197
+ try {
198
+ const storage = this.injector.get(StorageService);
199
+ const path = `rich-editor/${Date.now()}-${file.name}`;
200
+ const result = await storage.uploadAndGetUrl(path, file);
201
+ this.editor.chain().focus().setImage({ src: result.downloadUrl, alt: file.name }).run();
202
+ this.emitArticle(this.editor.getJSON());
203
+ }
204
+ catch (err) {
205
+ console.error('[val-rich-editor] No se pudo subir la imagen — ¿la app configuró provideValtechFirebase?', err);
206
+ }
207
+ finally {
208
+ this.uploadingImage.set(false);
209
+ }
210
+ }
178
211
  ngOnDestroy() {
179
212
  this.editor?.destroy();
180
213
  }
@@ -221,15 +254,30 @@ export class RichEditorComponent {
221
254
  }
222
255
  </ion-button>
223
256
  }
257
+ <!-- Label trick (mismo patrón que val-attachment-uploader): el
258
+ <label> nativo reenvía el clic al input como gesto confiable,
259
+ ion-button + input.click() programático falla en iOS PWA. -->
260
+ <label
261
+ class="rich-editor__image-btn"
262
+ [class.rich-editor__image-btn--disabled]="uploadingImage()"
263
+ [attr.aria-label]="t('image')"
264
+ >
265
+ @if (uploadingImage()) {
266
+ <ion-spinner name="dots" />
267
+ } @else {
268
+ <ion-icon name="image-outline" />
269
+ }
270
+ <input type="file" accept="image/*" [disabled]="uploadingImage()" (change)="onImageSelected($event)" />
271
+ </label>
224
272
  </div>
225
273
  }
226
274
  <div #editorHost class="rich-editor__surface"></div>
227
275
  </div>
228
- `, isInline: true, styles: [".rich-editor{display:flex;flex-direction:column;gap:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;overflow:hidden}.rich-editor--disabled{opacity:.7}.rich-editor__toolbar{display:flex;flex-wrap:wrap;gap:2px;padding:6px 8px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-light, #f4f5f8)}.rich-editor__toolbar ion-button{--padding-start: 8px;--padding-end: 8px;margin:0;font-size:.8125rem;min-width:32px}.rich-editor__btn--active{--background: rgba(var(--ion-color-primary-rgb), .14);--color: var(--ion-color-primary);border-radius:6px}.rich-editor__surface{padding:12px 16px;min-height:160px}.rich-editor__surface ::ng-deep .ProseMirror{outline:none;min-height:140px;color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.5}.rich-editor__surface ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);float:left;height:0;pointer-events:none}.rich-editor__surface ::ng-deep .ProseMirror p{margin:0 0 .75em}.rich-editor__surface ::ng-deep .ProseMirror h1,.rich-editor__surface ::ng-deep .ProseMirror h2,.rich-editor__surface ::ng-deep .ProseMirror h3{margin:0 0 .5em;color:var(--ion-text-color, #000)}.rich-editor__surface ::ng-deep .ProseMirror blockquote{margin:0 0 .75em;padding-left:12px;border-left:3px solid var(--ion-color-primary, #3880ff);color:var(--ion-color-medium, #92949c)}.rich-editor__surface ::ng-deep .ProseMirror ul,.rich-editor__surface ::ng-deep .ProseMirror ol{margin:0 0 .75em;padding-left:24px}.rich-editor__surface ::ng-deep .ProseMirror img{max-width:100%;border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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"] }] }); }
276
+ `, isInline: true, styles: [".rich-editor{display:flex;flex-direction:column;gap:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;overflow:hidden}.rich-editor--disabled{opacity:.7}.rich-editor__toolbar{display:flex;flex-wrap:wrap;gap:2px;padding:6px 8px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-light, #f4f5f8)}.rich-editor__toolbar ion-button{--padding-start: 8px;--padding-end: 8px;margin:0;font-size:.8125rem;min-width:32px}.rich-editor__btn--active{--background: rgba(var(--ion-color-primary-rgb), .14);--color: var(--ion-color-primary);border-radius:6px}.rich-editor__image-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;margin:0 0 0 4px;border-radius:6px;color:var(--ion-color-dark, #232323);font-size:1.125rem;cursor:pointer}.rich-editor__image-btn:hover{background:#0000000f}.rich-editor__image-btn--disabled{opacity:.5;pointer-events:none}.rich-editor__image-btn input[type=file]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rich-editor__surface{padding:12px 16px;min-height:160px}.rich-editor__surface ::ng-deep .ProseMirror{outline:none;min-height:140px;color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.5}.rich-editor__surface ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);float:left;height:0;pointer-events:none}.rich-editor__surface ::ng-deep .ProseMirror p{margin:0 0 .75em}.rich-editor__surface ::ng-deep .ProseMirror h1,.rich-editor__surface ::ng-deep .ProseMirror h2,.rich-editor__surface ::ng-deep .ProseMirror h3{margin:0 0 .5em;color:var(--ion-text-color, #000)}.rich-editor__surface ::ng-deep .ProseMirror blockquote{margin:0 0 .75em;padding-left:12px;border-left:3px solid var(--ion-color-primary, #3880ff);color:var(--ion-color-medium, #92949c)}.rich-editor__surface ::ng-deep .ProseMirror ul,.rich-editor__surface ::ng-deep .ProseMirror ol{margin:0 0 .75em;padding-left:24px}.rich-editor__surface ::ng-deep .ProseMirror img{max-width:100%;border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] }); }
229
277
  }
230
278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RichEditorComponent, decorators: [{
231
279
  type: Component,
232
- args: [{ selector: 'val-rich-editor', standalone: true, imports: [CommonModule, IonButton, IonIcon], template: `
280
+ args: [{ selector: 'val-rich-editor', standalone: true, imports: [CommonModule, IonButton, IonIcon, IonSpinner], template: `
233
281
  <div class="rich-editor" [class.rich-editor--disabled]="props.disabled">
234
282
  @if (!props.disabled) {
235
283
  <div class="rich-editor__toolbar" role="toolbar">
@@ -271,11 +319,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
271
319
  }
272
320
  </ion-button>
273
321
  }
322
+ <!-- Label trick (mismo patrón que val-attachment-uploader): el
323
+ <label> nativo reenvía el clic al input como gesto confiable,
324
+ ion-button + input.click() programático falla en iOS PWA. -->
325
+ <label
326
+ class="rich-editor__image-btn"
327
+ [class.rich-editor__image-btn--disabled]="uploadingImage()"
328
+ [attr.aria-label]="t('image')"
329
+ >
330
+ @if (uploadingImage()) {
331
+ <ion-spinner name="dots" />
332
+ } @else {
333
+ <ion-icon name="image-outline" />
334
+ }
335
+ <input type="file" accept="image/*" [disabled]="uploadingImage()" (change)="onImageSelected($event)" />
336
+ </label>
274
337
  </div>
275
338
  }
276
339
  <div #editorHost class="rich-editor__surface"></div>
277
340
  </div>
278
- `, styles: [".rich-editor{display:flex;flex-direction:column;gap:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;overflow:hidden}.rich-editor--disabled{opacity:.7}.rich-editor__toolbar{display:flex;flex-wrap:wrap;gap:2px;padding:6px 8px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-light, #f4f5f8)}.rich-editor__toolbar ion-button{--padding-start: 8px;--padding-end: 8px;margin:0;font-size:.8125rem;min-width:32px}.rich-editor__btn--active{--background: rgba(var(--ion-color-primary-rgb), .14);--color: var(--ion-color-primary);border-radius:6px}.rich-editor__surface{padding:12px 16px;min-height:160px}.rich-editor__surface ::ng-deep .ProseMirror{outline:none;min-height:140px;color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.5}.rich-editor__surface ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);float:left;height:0;pointer-events:none}.rich-editor__surface ::ng-deep .ProseMirror p{margin:0 0 .75em}.rich-editor__surface ::ng-deep .ProseMirror h1,.rich-editor__surface ::ng-deep .ProseMirror h2,.rich-editor__surface ::ng-deep .ProseMirror h3{margin:0 0 .5em;color:var(--ion-text-color, #000)}.rich-editor__surface ::ng-deep .ProseMirror blockquote{margin:0 0 .75em;padding-left:12px;border-left:3px solid var(--ion-color-primary, #3880ff);color:var(--ion-color-medium, #92949c)}.rich-editor__surface ::ng-deep .ProseMirror ul,.rich-editor__surface ::ng-deep .ProseMirror ol{margin:0 0 .75em;padding-left:24px}.rich-editor__surface ::ng-deep .ProseMirror img{max-width:100%;border-radius:8px}\n"] }]
341
+ `, styles: [".rich-editor{display:flex;flex-direction:column;gap:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;overflow:hidden}.rich-editor--disabled{opacity:.7}.rich-editor__toolbar{display:flex;flex-wrap:wrap;gap:2px;padding:6px 8px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-light, #f4f5f8)}.rich-editor__toolbar ion-button{--padding-start: 8px;--padding-end: 8px;margin:0;font-size:.8125rem;min-width:32px}.rich-editor__btn--active{--background: rgba(var(--ion-color-primary-rgb), .14);--color: var(--ion-color-primary);border-radius:6px}.rich-editor__image-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;margin:0 0 0 4px;border-radius:6px;color:var(--ion-color-dark, #232323);font-size:1.125rem;cursor:pointer}.rich-editor__image-btn:hover{background:#0000000f}.rich-editor__image-btn--disabled{opacity:.5;pointer-events:none}.rich-editor__image-btn input[type=file]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rich-editor__surface{padding:12px 16px;min-height:160px}.rich-editor__surface ::ng-deep .ProseMirror{outline:none;min-height:140px;color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.5}.rich-editor__surface ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);float:left;height:0;pointer-events:none}.rich-editor__surface ::ng-deep .ProseMirror p{margin:0 0 .75em}.rich-editor__surface ::ng-deep .ProseMirror h1,.rich-editor__surface ::ng-deep .ProseMirror h2,.rich-editor__surface ::ng-deep .ProseMirror h3{margin:0 0 .5em;color:var(--ion-text-color, #000)}.rich-editor__surface ::ng-deep .ProseMirror blockquote{margin:0 0 .75em;padding-left:12px;border-left:3px solid var(--ion-color-primary, #3880ff);color:var(--ion-color-medium, #92949c)}.rich-editor__surface ::ng-deep .ProseMirror ul,.rich-editor__surface ::ng-deep .ProseMirror ol{margin:0 0 .75em;padding-left:24px}.rich-editor__surface ::ng-deep .ProseMirror img{max-width:100%;border-radius:8px}\n"] }]
279
342
  }], ctorParameters: () => [], propDecorators: { props: [{
280
343
  type: Input
281
344
  }], articleChange: [{
@@ -284,4 +347,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
284
347
  type: ViewChild,
285
348
  args: ['editorHost', { static: true }]
286
349
  }] } });
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9yaWNoLWVkaXRvci9yaWNoLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFFNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUd6RCx5RUFBeUU7QUFDekUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFFekQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0Ft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Z0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxNQUFNO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0F6SlUsbUJBQW1CO21HQUFuQixtQkFBbUIsaVNBakRwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVCw2c0RBL0NTLFlBQVksK0JBQUUsU0FBUyxvUEFBRSxPQUFPOzs0RkFrRC9CLG1CQUFtQjtrQkFyRC9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFDakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q1Q7d0RBSVEsS0FBSztzQkFBYixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRW9DLFVBQVU7c0JBQXBELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoYXRib3hPdXRsaW5lLCBsaXN0T3V0bGluZSwgcmVtb3ZlT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgU3RhcnRlcktpdCBmcm9tICdAdGlwdGFwL3N0YXJ0ZXIta2l0JztcbmltcG9ydCBJbWFnZSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBBcnRpY2xlTWV0YWRhdGEgfSBmcm9tICcuLi9hcnRpY2xlL3R5cGVzJztcbmltcG9ydCB7IFJpY2hFZGl0b3JNZXRhZGF0YSwgUmljaEVkaXRvclRvb2xiYXJCdXR0b24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFJJQ0hfRURJVE9SX0kxOE4gfSBmcm9tICcuL3JpY2gtZWRpdG9yLmkxOG4nO1xuaW1wb3J0IHsgdGlwdGFwRG9jVG9BcnRpY2xlIH0gZnJvbSAnLi90aXB0YXAtdG8tYXJ0aWNsZSc7XG5pbXBvcnQgeyBhcnRpY2xlVG9UaXB0YXBEb2MgfSBmcm9tICcuL2FydGljbGUtdG8tdGlwdGFwJztcbmltcG9ydCB0eXBlIHsgVGlwdGFwRG9jIH0gZnJvbSAnLi90aXB0YXAtdG8tYXJ0aWNsZSc7XG5cbi8vIMONY29ub3MgZGUgbGEgdG9vbGJhci4gQi9JL0gyL0gzIG5vIHRpZW5lbiDDrWNvbm8gSW9uaWNvbnMgZGVkaWNhZG8g4oCUIHNlXG4vLyByZW5kZXJpemFuIGNvbW8gdGV4dG8gKFwiQlwiLCBcIklcIiwgXCJIMlwiLCBcIkgzXCIpIGRpcmVjdG8gZW4gZWwgYm90w7NuLCBtaXNtb1xuLy8gY3JpdGVyaW8gcXVlIHVuIGVkaXRvciBkZSB0ZXh0byByaWNvIGNvbnZlbmNpb25hbCAoR29vZ2xlIERvY3MsIE5vdGlvbikuXG5hZGRJY29ucyh7IGxpc3RPdXRsaW5lLCBjaGF0Ym94T3V0bGluZSwgcmVtb3ZlT3V0bGluZSB9KTtcblxuLyoqXG4gKiB2YWwtcmljaC1lZGl0b3JcbiAqXG4gKiBPcmdhbmlzbTogZWRpdG9yIFdZU0lXWUcgcmV1c2FibGUgcGFyYSB0b2RhIGxhIHBsYXRhZm9ybWEsIHNvYnJlIFRpcFRhcC5cbiAqIEVtaXRlIGBBcnRpY2xlTWV0YWRhdGFgIOKAlCBlbCBtaXNtbyBjb250cmF0byBxdWUgYHZhbC1hcnRpY2xlYCByZW5kZXJpemEsXG4gKiBxdWUgdGFtYmnDqW4gcHJvZHVjZW4gTWFya2Rvd24gKGBwYXJzZU1hcmtkb3duQXJ0aWNsZWApIHkgKGEgZnV0dXJvKSBlbFxuICogcGFnZSBidWlsZGVyLiBFbCBjb25zdW1lciBudW5jYSB0b2NhIFRpcFRhcCBkaXJlY3RhbWVudGUuXG4gKlxuICogQ29iZXJ0dXJhIGRlIGxhIHRvb2xiYXIgdjE6IG5lZ3JpdGEsIGN1cnNpdmEsIHTDrXR1bG8gKEgyKSwgc3VidMOtdHVsbyAoSDMpLFxuICogbGlzdGEgY29uL3NpbiB2acOxZXRhcywgY2l0YSwgc2VwYXJhZG9yLCBpbWFnZW4uIFZlciBgdGlwdGFwLXRvLWFydGljbGUudHNgXG4gKiBwYXJhIHF1w6kgdGlwb3MgZGUgYEFydGljbGVFbGVtZW50YCBwdWVkZSBwcm9kdWNpciBlbCBlZGl0b3IgaG95LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dmFsLXJpY2gtZWRpdG9yXG4gKiAgIFtwcm9wc109XCJ7IGluaXRpYWxWYWx1ZTogcmVjaXBlLmRlc2NyaXB0aW9uQXJ0aWNsZSwgcGxhY2Vob2xkZXI6ICdFc2NyaWJlIGxhIHByZXBhcmFjacOzbi4uLicgfVwiXG4gKiAgIChhcnRpY2xlQ2hhbmdlKT1cIm9uQXJ0aWNsZUNoYW5nZSgkZXZlbnQpXCJcbiAqIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXJpY2gtZWRpdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmljaC1lZGl0b3JcIiBbY2xhc3MucmljaC1lZGl0b3ItLWRpc2FibGVkXT1cInByb3BzLmRpc2FibGVkXCI+XG4gICAgICBAaWYgKCFwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmljaC1lZGl0b3JfX3Rvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgIEBmb3IgKGJ0biBvZiB0b29sYmFyQnV0dG9ucygpOyB0cmFjayBidG4udG9rZW4pIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5yaWNoLWVkaXRvcl9fYnRuLS1hY3RpdmVdPVwiYnRuLmlzQWN0aXZlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYnRuLmxhYmVsXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImJ0bi5pc0FjdGl2ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJydW5Db21tYW5kKGJ0bi50b2tlbilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAc3dpdGNoIChidG4udG9rZW4pIHtcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ2JvbGQnKSB7XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkI8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKCdpdGFsaWMnKSB7XG4gICAgICAgICAgICAgICAgICA8ZW0+STwvZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnaGVhZGluZzInKSB7XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkgyPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnaGVhZGluZzMnKSB7XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkgzPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnYnVsbGV0TGlzdCcpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibGlzdC1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnb3JkZXJlZExpc3QnKSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImxpc3Qtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ3F1b3RlJykge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGF0Ym94LW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKCdzZXBhcmF0b3InKSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInJlbW92ZS1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgI2VkaXRvckhvc3QgY2xhc3M9XCJyaWNoLWVkaXRvcl9fc3VyZmFjZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybDogJy4vcmljaC1lZGl0b3IuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBSaWNoRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogUmljaEVkaXRvck1ldGFkYXRhID0ge307XG4gIEBPdXRwdXQoKSBhcnRpY2xlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnRpY2xlTWV0YWRhdGE+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9ySG9zdCcsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvckhvc3QhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGVkaXRvcj86IEVkaXRvcjtcblxuICAvKiogU2UgcmVjYWxjdWxhIGVuIGNhZGEgYG9uVXBkYXRlYC9gb25TZWxlY3Rpb25VcGRhdGVgIHBhcmEgcmVmbGVqYXIgZWxcbiAgICogbWFyay9ub2RvIGFjdGl2byBiYWpvIGVsIGN1cnNvciAoZWouIGVsIGJvdMOzbiBcIkJcIiByZXNhbHRhZG8gc2kgZWxcbiAgICogY3Vyc29yIGVzdMOhIGRlbnRybyBkZSB0ZXh0byBlbiBuZWdyaXRhKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdG9vbGJhclRpY2sgPSBzaWduYWwoMCk7XG4gIHJlYWRvbmx5IHRvb2xiYXJCdXR0b25zID0gc2lnbmFsPFJpY2hFZGl0b3JUb29sYmFyQnV0dG9uW10+KFtdKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnUmljaEVkaXRvcicsIFJJQ0hfRURJVE9SX0kxOE4pO1xuICB9XG5cbiAgcHJpdmF0ZSB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnUmljaEVkaXRvcicpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckhvc3QubmF0aXZlRWxlbWVudCxcbiAgICAgIGV4dGVuc2lvbnM6IFtTdGFydGVyS2l0LCBJbWFnZV0sXG4gICAgICBlZGl0YWJsZTogIXRoaXMucHJvcHMuZGlzYWJsZWQsXG4gICAgICBjb250ZW50OiB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZVxuICAgICAgICA/IChhcnRpY2xlVG9UaXB0YXBEb2ModGhpcy5wcm9wcy5pbml0aWFsVmFsdWUpIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgIDogJycsXG4gICAgICBlZGl0b3JQcm9wczoge1xuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgJ2RhdGEtcGxhY2Vob2xkZXInOiB0aGlzLnByb3BzLnBsYWNlaG9sZGVyID8/ICcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgICB0aGlzLmVtaXRBcnRpY2xlKGVkaXRvci5nZXRKU09OKCkgYXMgVGlwdGFwRG9jKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9vbGJhcigpO1xuICAgICAgfSxcbiAgICAgIG9uU2VsZWN0aW9uVXBkYXRlOiAoKSA9PiB0aGlzLnJlZnJlc2hUb29sYmFyKCksXG4gICAgfSk7XG4gICAgdGhpcy5yZWZyZXNoVG9vbGJhcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddPy5jdXJyZW50VmFsdWUgJiYgdGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldEVkaXRhYmxlKCF0aGlzLnByb3BzLmRpc2FibGVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRBcnRpY2xlKGRvYzogVGlwdGFwRG9jKTogdm9pZCB7XG4gICAgdGhpcy5hcnRpY2xlQ2hhbmdlLmVtaXQodGlwdGFwRG9jVG9BcnRpY2xlKGRvYykpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVG9vbGJhcigpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuICAgIHRoaXMudG9vbGJhckJ1dHRvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdib2xkJyxcbiAgICAgICAgaWNvbjogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnQoJ2JvbGQnKSxcbiAgICAgICAgaXNBY3RpdmU6IGVkaXRvci5pc0FjdGl2ZSgnYm9sZCcpLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0b2tlbjogJ2l0YWxpYycsXG4gICAgICAgIGljb246ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy50KCdpdGFsaWMnKSxcbiAgICAgICAgaXNBY3RpdmU6IGVkaXRvci5pc0FjdGl2ZSgnaXRhbGljJyksXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnaGVhZGluZzInLFxuICAgICAgICBpY29uOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnaGVhZGluZzInKSxcbiAgICAgICAgaXNBY3RpdmU6IGVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDIgfSksXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnaGVhZGluZzMnLFxuICAgICAgICBpY29uOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnaGVhZGluZzMnKSxcbiAgICAgICAgaXNBY3RpdmU6IGVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDMgfSksXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnYnVsbGV0TGlzdCcsXG4gICAgICAgIGljb246ICdsaXN0LW91dGxpbmUnLFxuICAgICAgICBsYWJlbDogdGhpcy50KCdidWxsZXRMaXN0JyksXG4gICAgICAgIGlzQWN0aXZlOiBlZGl0b3IuaXNBY3RpdmUoJ2J1bGxldExpc3QnKSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdvcmRlcmVkTGlzdCcsXG4gICAgICAgIGljb246ICdsaXN0LW91dGxpbmUnLFxuICAgICAgICBsYWJlbDogdGhpcy50KCdvcmRlcmVkTGlzdCcpLFxuICAgICAgICBpc0FjdGl2ZTogZWRpdG9yLmlzQWN0aXZlKCdvcmRlcmVkTGlzdCcpLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0b2tlbjogJ3F1b3RlJyxcbiAgICAgICAgaWNvbjogJ2NoYXRib3gtb3V0bGluZScsXG4gICAgICAgIGxhYmVsOiB0aGlzLnQoJ3F1b3RlJyksXG4gICAgICAgIGlzQWN0aXZlOiBlZGl0b3IuaXNBY3RpdmUoJ2Jsb2NrcXVvdGUnKSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdzZXBhcmF0b3InLFxuICAgICAgICBpY29uOiAncmVtb3ZlLW91dGxpbmUnLFxuICAgICAgICBsYWJlbDogdGhpcy50KCdzZXBhcmF0b3InKSxcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcnVuQ29tbWFuZCh0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCBjaGFpbiA9IGVkaXRvci5jaGFpbigpLmZvY3VzKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYm9sZCc6XG4gICAgICAgIGNoYWluLnRvZ2dsZUJvbGQoKS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpdGFsaWMnOlxuICAgICAgICBjaGFpbi50b2dnbGVJdGFsaWMoKS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoZWFkaW5nMic6XG4gICAgICAgIGNoYWluLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoZWFkaW5nMyc6XG4gICAgICAgIGNoYWluLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdidWxsZXRMaXN0JzpcbiAgICAgICAgY2hhaW4udG9nZ2xlQnVsbGV0TGlzdCgpLnJ1bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29yZGVyZWRMaXN0JzpcbiAgICAgICAgY2hhaW4udG9nZ2xlT3JkZXJlZExpc3QoKS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdxdW90ZSc6XG4gICAgICAgIGNoYWluLnRvZ2dsZUJsb2NrcXVvdGUoKS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZXBhcmF0b3InOlxuICAgICAgICBjaGFpbi5zZXRIb3Jpem9udGFsUnVsZSgpLnJ1bigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoVG9vbGJhcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9yaWNoLWVkaXRvci9yaWNoLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFFNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUc1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHekQseUVBQXlFO0FBQ3pFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQXFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBaUI5QjtRQWhCUyxVQUFLLEdBQXVCLEVBQUUsQ0FBQztRQUM5QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBSXRELFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUdwQzs7c0RBRThDO1FBQzdCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLG1CQUFjLEdBQUcsTUFBTSxDQUE0QixFQUFFLENBQUMsQ0FBQztRQUN2RCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUd0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxDQUFDLENBQUMsR0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQ3RDLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7WUFDL0IsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQzlCLENBQUMsQ0FBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBd0M7Z0JBQ3JGLENBQUMsQ0FBQyxFQUFFO1lBQ04sV0FBVyxFQUFFO2dCQUNYLFVBQVUsRUFBRTtvQkFDVixrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO2lCQUNqRDthQUNGO1lBQ0QsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQWUsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsQ0FBQztZQUNELGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsR0FBYztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1lBQ3RCO2dCQUNFLEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxFQUFFO2dCQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDckIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNqQyxRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxRQUFRO2dCQUNmLElBQUksRUFBRSxFQUFFO2dCQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxLQUFLLEVBQUUsVUFBVTtnQkFDakIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDdkMsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxLQUFLLEVBQUUsYUFBYTtnQkFDcEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDNUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUN4QyxRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUN2QyxRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxXQUFXO2dCQUNsQixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQzFCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxRQUFRLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxNQUFNO2dCQUNULEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN4QyxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsTUFBTTtZQUNSLEtBQUssWUFBWTtnQkFDZixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBWTtRQUNoQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxrREFBa0Q7UUFDcEUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBRyxlQUFlLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4RixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFlLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEZBQTBGLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakgsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDOytHQXhMVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixpU0FoRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRULDZyRUE5RFMsWUFBWSwrQkFBRSxTQUFTLG9QQUFFLE9BQU8sMkpBQUUsVUFBVTs7NEZBaUUzQyxtQkFBbUI7a0JBcEUvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxZQUM3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZEVDt3REFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFFb0MsVUFBVTtzQkFBcEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoYXRib3hPdXRsaW5lLCBpbWFnZU91dGxpbmUsIGxpc3RPdXRsaW5lLCByZW1vdmVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcbmltcG9ydCBTdGFydGVyS2l0IGZyb20gJ0B0aXB0YXAvc3RhcnRlci1raXQnO1xuaW1wb3J0IEltYWdlIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2Uvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFydGljbGVNZXRhZGF0YSB9IGZyb20gJy4uL2FydGljbGUvdHlwZXMnO1xuaW1wb3J0IHsgUmljaEVkaXRvck1ldGFkYXRhLCBSaWNoRWRpdG9yVG9vbGJhckJ1dHRvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUklDSF9FRElUT1JfSTE4TiB9IGZyb20gJy4vcmljaC1lZGl0b3IuaTE4bic7XG5pbXBvcnQgeyB0aXB0YXBEb2NUb0FydGljbGUgfSBmcm9tICcuL3RpcHRhcC10by1hcnRpY2xlJztcbmltcG9ydCB7IGFydGljbGVUb1RpcHRhcERvYyB9IGZyb20gJy4vYXJ0aWNsZS10by10aXB0YXAnO1xuaW1wb3J0IHR5cGUgeyBUaXB0YXBEb2MgfSBmcm9tICcuL3RpcHRhcC10by1hcnRpY2xlJztcblxuLy8gw41jb25vcyBkZSBsYSB0b29sYmFyLiBCL0kvSDIvSDMgbm8gdGllbmVuIMOtY29ubyBJb25pY29ucyBkZWRpY2FkbyDigJQgc2Vcbi8vIHJlbmRlcml6YW4gY29tbyB0ZXh0byAoXCJCXCIsIFwiSVwiLCBcIkgyXCIsIFwiSDNcIikgZGlyZWN0byBlbiBlbCBib3TDs24sIG1pc21vXG4vLyBjcml0ZXJpbyBxdWUgdW4gZWRpdG9yIGRlIHRleHRvIHJpY28gY29udmVuY2lvbmFsIChHb29nbGUgRG9jcywgTm90aW9uKS5cbmFkZEljb25zKHsgbGlzdE91dGxpbmUsIGNoYXRib3hPdXRsaW5lLCByZW1vdmVPdXRsaW5lLCBpbWFnZU91dGxpbmUgfSk7XG5cbi8qKlxuICogdmFsLXJpY2gtZWRpdG9yXG4gKlxuICogT3JnYW5pc206IGVkaXRvciBXWVNJV1lHIHJldXNhYmxlIHBhcmEgdG9kYSBsYSBwbGF0YWZvcm1hLCBzb2JyZSBUaXBUYXAuXG4gKiBFbWl0ZSBgQXJ0aWNsZU1ldGFkYXRhYCDigJQgZWwgbWlzbW8gY29udHJhdG8gcXVlIGB2YWwtYXJ0aWNsZWAgcmVuZGVyaXphLFxuICogcXVlIHRhbWJpw6luIHByb2R1Y2VuIE1hcmtkb3duIChgcGFyc2VNYXJrZG93bkFydGljbGVgKSB5IChhIGZ1dHVybykgZWxcbiAqIHBhZ2UgYnVpbGRlci4gRWwgY29uc3VtZXIgbnVuY2EgdG9jYSBUaXBUYXAgZGlyZWN0YW1lbnRlLlxuICpcbiAqIENvYmVydHVyYSBkZSBsYSB0b29sYmFyIHYxOiBuZWdyaXRhLCBjdXJzaXZhLCB0w610dWxvIChIMiksIHN1YnTDrXR1bG8gKEgzKSxcbiAqIGxpc3RhIGNvbi9zaW4gdmnDsWV0YXMsIGNpdGEsIHNlcGFyYWRvciwgaW1hZ2VuLiBWZXIgYHRpcHRhcC10by1hcnRpY2xlLnRzYFxuICogcGFyYSBxdcOpIHRpcG9zIGRlIGBBcnRpY2xlRWxlbWVudGAgcHVlZGUgcHJvZHVjaXIgZWwgZWRpdG9yIGhveS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHZhbC1yaWNoLWVkaXRvclxuICogICBbcHJvcHNdPVwieyBpbml0aWFsVmFsdWU6IHJlY2lwZS5kZXNjcmlwdGlvbkFydGljbGUsIHBsYWNlaG9sZGVyOiAnRXNjcmliZSBsYSBwcmVwYXJhY2nDs24uLi4nIH1cIlxuICogICAoYXJ0aWNsZUNoYW5nZSk9XCJvbkFydGljbGVDaGFuZ2UoJGV2ZW50KVwiXG4gKiAvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1yaWNoLWVkaXRvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU3Bpbm5lcl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJpY2gtZWRpdG9yXCIgW2NsYXNzLnJpY2gtZWRpdG9yLS1kaXNhYmxlZF09XCJwcm9wcy5kaXNhYmxlZFwiPlxuICAgICAgQGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJpY2gtZWRpdG9yX190b29sYmFyXCIgcm9sZT1cInRvb2xiYXJcIj5cbiAgICAgICAgICBAZm9yIChidG4gb2YgdG9vbGJhckJ1dHRvbnMoKTsgdHJhY2sgYnRuLnRva2VuKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbY2xhc3MucmljaC1lZGl0b3JfX2J0bi0tYWN0aXZlXT1cImJ0bi5pc0FjdGl2ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ0bi5sYWJlbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJidG4uaXNBY3RpdmVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicnVuQ29tbWFuZChidG4udG9rZW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQHN3aXRjaCAoYnRuLnRva2VuKSB7XG4gICAgICAgICAgICAgICAgQGNhc2UgKCdib2xkJykge1xuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5CPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnaXRhbGljJykge1xuICAgICAgICAgICAgICAgICAgPGVtPkk8L2VtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ2hlYWRpbmcyJykge1xuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5IMjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ2hlYWRpbmczJykge1xuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5IMzwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ2J1bGxldExpc3QnKSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImxpc3Qtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ29yZGVyZWRMaXN0Jykge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJsaXN0LW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKCdxdW90ZScpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hhdGJveC1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnc2VwYXJhdG9yJykge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJyZW1vdmUtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIExhYmVsIHRyaWNrIChtaXNtbyBwYXRyw7NuIHF1ZSB2YWwtYXR0YWNobWVudC11cGxvYWRlcik6IGVsXG4gICAgICAgICAgICAgICA8bGFiZWw+IG5hdGl2byByZWVudsOtYSBlbCBjbGljIGFsIGlucHV0IGNvbW8gZ2VzdG8gY29uZmlhYmxlLFxuICAgICAgICAgICAgICAgaW9uLWJ1dHRvbiArIGlucHV0LmNsaWNrKCkgcHJvZ3JhbcOhdGljbyBmYWxsYSBlbiBpT1MgUFdBLiAtLT5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwicmljaC1lZGl0b3JfX2ltYWdlLWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MucmljaC1lZGl0b3JfX2ltYWdlLWJ0bi0tZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAodXBsb2FkaW5nSW1hZ2UoKSkge1xuICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiaW1hZ2Utb3V0bGluZVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgW2Rpc2FibGVkXT1cInVwbG9hZGluZ0ltYWdlKClcIiAoY2hhbmdlKT1cIm9uSW1hZ2VTZWxlY3RlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgI2VkaXRvckhvc3QgY2xhc3M9XCJyaWNoLWVkaXRvcl9fc3VyZmFjZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybDogJy4vcmljaC1lZGl0b3IuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBSaWNoRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogUmljaEVkaXRvck1ldGFkYXRhID0ge307XG4gIEBPdXRwdXQoKSBhcnRpY2xlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnRpY2xlTWV0YWRhdGE+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9ySG9zdCcsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvckhvc3QhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBlZGl0b3I/OiBFZGl0b3I7XG5cbiAgLyoqIFNlIHJlY2FsY3VsYSBlbiBjYWRhIGBvblVwZGF0ZWAvYG9uU2VsZWN0aW9uVXBkYXRlYCBwYXJhIHJlZmxlamFyIGVsXG4gICAqIG1hcmsvbm9kbyBhY3Rpdm8gYmFqbyBlbCBjdXJzb3IgKGVqLiBlbCBib3TDs24gXCJCXCIgcmVzYWx0YWRvIHNpIGVsXG4gICAqIGN1cnNvciBlc3TDoSBkZW50cm8gZGUgdGV4dG8gZW4gbmVncml0YSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rvb2xiYXJUaWNrID0gc2lnbmFsKDApO1xuICByZWFkb25seSB0b29sYmFyQnV0dG9ucyA9IHNpZ25hbDxSaWNoRWRpdG9yVG9vbGJhckJ1dHRvbltdPihbXSk7XG4gIHJlYWRvbmx5IHVwbG9hZGluZ0ltYWdlID0gc2lnbmFsKGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnUmljaEVkaXRvcicsIFJJQ0hfRURJVE9SX0kxOE4pO1xuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ1JpY2hFZGl0b3InKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgZWxlbWVudDogdGhpcy5lZGl0b3JIb3N0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBleHRlbnNpb25zOiBbU3RhcnRlcktpdCwgSW1hZ2VdLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLnByb3BzLmRpc2FibGVkLFxuICAgICAgY29udGVudDogdGhpcy5wcm9wcy5pbml0aWFsVmFsdWVcbiAgICAgICAgPyAoYXJ0aWNsZVRvVGlwdGFwRG9jKHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlKSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICA6ICcnLFxuICAgICAgZWRpdG9yUHJvcHM6IHtcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICdkYXRhLXBsYWNlaG9sZGVyJzogdGhpcy5wcm9wcy5wbGFjZWhvbGRlciA/PyAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5lbWl0QXJ0aWNsZShlZGl0b3IuZ2V0SlNPTigpIGFzIFRpcHRhcERvYyk7XG4gICAgICAgIHRoaXMucmVmcmVzaFRvb2xiYXIoKTtcbiAgICAgIH0sXG4gICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4gdGhpcy5yZWZyZXNoVG9vbGJhcigpLFxuICAgIH0pO1xuICAgIHRoaXMucmVmcmVzaFRvb2xiYXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXT8uY3VycmVudFZhbHVlICYmIHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRFZGl0YWJsZSghdGhpcy5wcm9wcy5kaXNhYmxlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0QXJ0aWNsZShkb2M6IFRpcHRhcERvYyk6IHZvaWQge1xuICAgIHRoaXMuYXJ0aWNsZUNoYW5nZS5lbWl0KHRpcHRhcERvY1RvQXJ0aWNsZShkb2MpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFRvb2xiYXIoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICB0aGlzLnRvb2xiYXJCdXR0b25zLnNldChbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnYm9sZCcsXG4gICAgICAgIGljb246ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy50KCdib2xkJyksXG4gICAgICAgIGlzQWN0aXZlOiBlZGl0b3IuaXNBY3RpdmUoJ2JvbGQnKSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdpdGFsaWMnLFxuICAgICAgICBpY29uOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnaXRhbGljJyksXG4gICAgICAgIGlzQWN0aXZlOiBlZGl0b3IuaXNBY3RpdmUoJ2l0YWxpYycpLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0b2tlbjogJ2hlYWRpbmcyJyxcbiAgICAgICAgaWNvbjogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnQoJ2hlYWRpbmcyJyksXG4gICAgICAgIGlzQWN0aXZlOiBlZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiAyIH0pLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0b2tlbjogJ2hlYWRpbmczJyxcbiAgICAgICAgaWNvbjogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnQoJ2hlYWRpbmczJyksXG4gICAgICAgIGlzQWN0aXZlOiBlZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiAzIH0pLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0b2tlbjogJ2J1bGxldExpc3QnLFxuICAgICAgICBpY29uOiAnbGlzdC1vdXRsaW5lJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnYnVsbGV0TGlzdCcpLFxuICAgICAgICBpc0FjdGl2ZTogZWRpdG9yLmlzQWN0aXZlKCdidWxsZXRMaXN0JyksXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnb3JkZXJlZExpc3QnLFxuICAgICAgICBpY29uOiAnbGlzdC1vdXRsaW5lJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnb3JkZXJlZExpc3QnKSxcbiAgICAgICAgaXNBY3RpdmU6IGVkaXRvci5pc0FjdGl2ZSgnb3JkZXJlZExpc3QnKSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdxdW90ZScsXG4gICAgICAgIGljb246ICdjaGF0Ym94LW91dGxpbmUnLFxuICAgICAgICBsYWJlbDogdGhpcy50KCdxdW90ZScpLFxuICAgICAgICBpc0FjdGl2ZTogZWRpdG9yLmlzQWN0aXZlKCdibG9ja3F1b3RlJyksXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnc2VwYXJhdG9yJyxcbiAgICAgICAgaWNvbjogJ3JlbW92ZS1vdXRsaW5lJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnc2VwYXJhdG9yJyksXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJ1bkNvbW1hbmQodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgY29uc3QgY2hhaW4gPSBlZGl0b3IuY2hhaW4oKS5mb2N1cygpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2JvbGQnOlxuICAgICAgICBjaGFpbi50b2dnbGVCb2xkKCkucnVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXRhbGljJzpcbiAgICAgICAgY2hhaW4udG9nZ2xlSXRhbGljKCkucnVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGVhZGluZzInOlxuICAgICAgICBjaGFpbi50b2dnbGVIZWFkaW5nKHsgbGV2ZWw6IDIgfSkucnVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGVhZGluZzMnOlxuICAgICAgICBjaGFpbi50b2dnbGVIZWFkaW5nKHsgbGV2ZWw6IDMgfSkucnVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYnVsbGV0TGlzdCc6XG4gICAgICAgIGNoYWluLnRvZ2dsZUJ1bGxldExpc3QoKS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcmRlcmVkTGlzdCc6XG4gICAgICAgIGNoYWluLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncXVvdGUnOlxuICAgICAgICBjaGFpbi50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2VwYXJhdG9yJzpcbiAgICAgICAgY2hhaW4uc2V0SG9yaXpvbnRhbFJ1bGUoKS5ydW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRvb2xiYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJlIGxhIGltYWdlbiBlbGVnaWRhIHbDrWEgYFN0b3JhZ2VTZXJ2aWNlYCAoUmVnbGEgIzEyIOKAlCBudW5jYSBVUkwgcGVnYWRhXG4gICAqIGEgbWFubywgc2llbXByZSB2w61hIFN0b3JhZ2UpIHkgbGEgaW5zZXJ0YSBlbiBlbCBwdW50byBkZWwgY3Vyc29yLlxuICAgKiBgU3RvcmFnZVNlcnZpY2VgIHNlIHJlc3VlbHZlIHBlcmV6b3NhbWVudGUgKHbDrWEgYEluamVjdG9yYCwgbm8gY29tb1xuICAgKiBjYW1wbyBkZSBsYSBjbGFzZSk6IHNpIGxhIGFwcCBjb25zdW1lciBubyBjb25maWd1csOzXG4gICAqIGBwcm92aWRlVmFsdGVjaEZpcmViYXNlYCwgZWwgZWRpdG9yIHNpZ3VlIGZ1bmNpb25hbmRvIG5vcm1hbCBwYXJhIHRvZG9cbiAgICogbG8gZGVtw6FzIOKAlCBzb2xvIGVsIGJvdMOzbiBkZSBpbWFnZW4gcXVlZGEgc2luIGVmZWN0bywgY29uIGxvZyBkZSBlcnJvciBlblxuICAgKiB2ZXogZGUgcm9tcGVyIGVsIHJlc3RvIGRlbCBjb21wb25lbnRlLlxuICAgKi9cbiAgYXN5bmMgb25JbWFnZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG4gICAgaW5wdXQudmFsdWUgPSAnJzsgLy8gcGVybWl0ZSByZS1zZWxlY2Npb25hciBlbCBtaXNtbyBhcmNoaXZvIGRlc3B1w6lzXG4gICAgaWYgKCFmaWxlIHx8ICF0aGlzLmVkaXRvcikgcmV0dXJuO1xuXG4gICAgdGhpcy51cGxvYWRpbmdJbWFnZS5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmluamVjdG9yLmdldChTdG9yYWdlU2VydmljZSk7XG4gICAgICBjb25zdCBwYXRoID0gYHJpY2gtZWRpdG9yLyR7RGF0ZS5ub3coKX0tJHtmaWxlLm5hbWV9YDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UudXBsb2FkQW5kR2V0VXJsKHBhdGgsIGZpbGUpO1xuICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldEltYWdlKHsgc3JjOiByZXN1bHQuZG93bmxvYWRVcmwsIGFsdDogZmlsZS5uYW1lIH0pLnJ1bigpO1xuICAgICAgdGhpcy5lbWl0QXJ0aWNsZSh0aGlzLmVkaXRvci5nZXRKU09OKCkgYXMgVGlwdGFwRG9jKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1t2YWwtcmljaC1lZGl0b3JdIE5vIHNlIHB1ZG8gc3ViaXIgbGEgaW1hZ2VuIOKAlCDCv2xhIGFwcCBjb25maWd1csOzIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2U/JywgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51cGxvYWRpbmdJbWFnZS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yPy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
@@ -12,6 +12,7 @@ export const RICH_EDITOR_I18N = {
12
12
  orderedList: 'Lista numerada',
13
13
  quote: 'Cita',
14
14
  separator: 'Separador',
15
+ image: 'Insertar imagen',
15
16
  },
16
17
  en: {
17
18
  bold: 'Bold',
@@ -22,6 +23,7 @@ export const RICH_EDITOR_I18N = {
22
23
  orderedList: 'Numbered list',
23
24
  quote: 'Quote',
24
25
  separator: 'Separator',
26
+ image: 'Insert image',
25
27
  },
26
28
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1lZGl0b3IuaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvcmljaC1lZGl0b3IvcmljaC1lZGl0b3IuaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFVBQVUsRUFBRSxtQkFBbUI7UUFDL0IsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixLQUFLLEVBQUUsTUFBTTtRQUNiLFNBQVMsRUFBRSxXQUFXO0tBQ3ZCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLE1BQU07UUFDWixNQUFNLEVBQUUsUUFBUTtRQUNoQixRQUFRLEVBQUUsU0FBUztRQUNuQixRQUFRLEVBQUUsWUFBWTtRQUN0QixVQUFVLEVBQUUsYUFBYTtRQUN6QixXQUFXLEVBQUUsZUFBZTtRQUM1QixLQUFLLEVBQUUsT0FBTztRQUNkLFNBQVMsRUFBRSxXQUFXO0tBQ3ZCO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVmYXVsdHMgaTE4biAoZXMvZW4pIGRlbCBgdmFsLXJpY2gtZWRpdG9yYC4gQXV0by1yZWdpc3RyYWRvcyBlbiBlbFxuICogY29uc3RydWN0b3IgKG5hbWVzcGFjZSBgUmljaEVkaXRvcmApIOKAlCBlbCBjb25zdW1lciBudW5jYSBsb3MgcmVnaXN0cmEuXG4gKi9cbmV4cG9ydCBjb25zdCBSSUNIX0VESVRPUl9JMThOID0ge1xuICBlczoge1xuICAgIGJvbGQ6ICdOZWdyaXRhJyxcbiAgICBpdGFsaWM6ICdDdXJzaXZhJyxcbiAgICBoZWFkaW5nMjogJ1TDrXR1bG8nLFxuICAgIGhlYWRpbmczOiAnU3VidMOtdHVsbycsXG4gICAgYnVsbGV0TGlzdDogJ0xpc3RhIGNvbiB2acOxZXRhcycsXG4gICAgb3JkZXJlZExpc3Q6ICdMaXN0YSBudW1lcmFkYScsXG4gICAgcXVvdGU6ICdDaXRhJyxcbiAgICBzZXBhcmF0b3I6ICdTZXBhcmFkb3InLFxuICB9LFxuICBlbjoge1xuICAgIGJvbGQ6ICdCb2xkJyxcbiAgICBpdGFsaWM6ICdJdGFsaWMnLFxuICAgIGhlYWRpbmcyOiAnSGVhZGluZycsXG4gICAgaGVhZGluZzM6ICdTdWJoZWFkaW5nJyxcbiAgICBidWxsZXRMaXN0OiAnQnVsbGV0IGxpc3QnLFxuICAgIG9yZGVyZWRMaXN0OiAnTnVtYmVyZWQgbGlzdCcsXG4gICAgcXVvdGU6ICdRdW90ZScsXG4gICAgc2VwYXJhdG9yOiAnU2VwYXJhdG9yJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1lZGl0b3IuaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvcmljaC1lZGl0b3IvcmljaC1lZGl0b3IuaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFVBQVUsRUFBRSxtQkFBbUI7UUFDL0IsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixLQUFLLEVBQUUsTUFBTTtRQUNiLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLEtBQUssRUFBRSxpQkFBaUI7S0FDekI7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFdBQVcsRUFBRSxlQUFlO1FBQzVCLEtBQUssRUFBRSxPQUFPO1FBQ2QsU0FBUyxFQUFFLFdBQVc7UUFDdEIsS0FBSyxFQUFFLGNBQWM7S0FDdEI7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWZhdWx0cyBpMThuIChlcy9lbikgZGVsIGB2YWwtcmljaC1lZGl0b3JgLiBBdXRvLXJlZ2lzdHJhZG9zIGVuIGVsXG4gKiBjb25zdHJ1Y3RvciAobmFtZXNwYWNlIGBSaWNoRWRpdG9yYCkg4oCUIGVsIGNvbnN1bWVyIG51bmNhIGxvcyByZWdpc3RyYS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJJQ0hfRURJVE9SX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgYm9sZDogJ05lZ3JpdGEnLFxuICAgIGl0YWxpYzogJ0N1cnNpdmEnLFxuICAgIGhlYWRpbmcyOiAnVMOtdHVsbycsXG4gICAgaGVhZGluZzM6ICdTdWJ0w610dWxvJyxcbiAgICBidWxsZXRMaXN0OiAnTGlzdGEgY29uIHZpw7FldGFzJyxcbiAgICBvcmRlcmVkTGlzdDogJ0xpc3RhIG51bWVyYWRhJyxcbiAgICBxdW90ZTogJ0NpdGEnLFxuICAgIHNlcGFyYXRvcjogJ1NlcGFyYWRvcicsXG4gICAgaW1hZ2U6ICdJbnNlcnRhciBpbWFnZW4nLFxuICB9LFxuICBlbjoge1xuICAgIGJvbGQ6ICdCb2xkJyxcbiAgICBpdGFsaWM6ICdJdGFsaWMnLFxuICAgIGhlYWRpbmcyOiAnSGVhZGluZycsXG4gICAgaGVhZGluZzM6ICdTdWJoZWFkaW5nJyxcbiAgICBidWxsZXRMaXN0OiAnQnVsbGV0IGxpc3QnLFxuICAgIG9yZGVyZWRMaXN0OiAnTnVtYmVyZWQgbGlzdCcsXG4gICAgcXVvdGU6ICdRdW90ZScsXG4gICAgc2VwYXJhdG9yOiAnU2VwYXJhdG9yJyxcbiAgICBpbWFnZTogJ0luc2VydCBpbWFnZScsXG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
@@ -381,15 +381,20 @@ export class StorageService {
381
381
  * Elimina un archivo.
382
382
  *
383
383
  * @param path - Ruta del archivo a eliminar
384
+ * @param options.skipPrefix - Si es true, no aplica el prefix de appId (para
385
+ * borrar un archivo subido con `uploadAndGetUrl(path, file, { skipPrefix:
386
+ * true })` hay que pasar el mismo flag, o el path queda mal armado y el
387
+ * delete falla contra un objeto que no existe).
384
388
  *
385
389
  * @example
386
390
  * ```typescript
387
391
  * await storage.delete('images/old-photo.jpg');
392
+ * await storage.delete('apps/merotz/orgs/x/public/images/parts/y/z.png', { skipPrefix: true });
388
393
  * ```
389
394
  */
390
- async delete(path) {
395
+ async delete(path, options) {
391
396
  try {
392
- const prefixedPath = this.prefixStoragePath(path);
397
+ const prefixedPath = this.prefixStoragePath(path, options?.skipPrefix);
393
398
  const storageRef = ref(this.storage, prefixedPath);
394
399
  await deleteObject(storageRef);
395
400
  }
@@ -596,4 +601,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
596
601
  type: Injectable,
597
602
  args: [{ providedIn: 'root' }]
598
603
  }], ctorParameters: () => [{ type: i1.Storage }] });
599
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCw4RUFBOEU7QUFDOUUsMkRBQTJEO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLE9BQU8sRUFDUCxHQUFHLEVBRUgsb0JBQW9CLEdBR3JCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQVNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFBb0IsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUY1QixXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFOUIsQ0FBQztJQUV4Qzs7Ozs7OztPQU9HO0lBQ0ssaUJBQWlCLENBQUMsSUFBWSxFQUFFLFVBQVUsR0FBRyxLQUFLO1FBQ3hELElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkQsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsU0FBUztJQUNULDhFQUE4RTtJQUU5RTs7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LEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFJLEtBQTJCLENBQUMsSUFBSSxDQUFDO1lBRS9DLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSywwQkFBMEI7b0JBQzdCLE9BQU8sc0JBQXNCLENBQUM7Z0JBQ2hDLEtBQUssc0JBQXNCO29CQUN6QixPQUFPLCtDQUErQyxDQUFDO2dCQUN6RCxLQUFLLGtCQUFrQjtvQkFDckIsT0FBTyw0QkFBNEIsQ0FBQztnQkFDdEMsS0FBSyx3QkFBd0I7b0JBQzNCLE9BQU8sMkNBQTJDLENBQUM7Z0JBQ3JELEtBQUssMEJBQTBCO29CQUM3QixPQUFPLDBCQUEwQixDQUFDO2dCQUNwQyxLQUFLLDhCQUE4QjtvQkFDakMsT0FBTyxxQ0FBcUMsQ0FBQztnQkFDL0MsS0FBSyxxQkFBcUI7b0JBQ3hCLE9BQU8seUJBQXlCLENBQUM7Z0JBQ25DLEtBQUssMEJBQTBCO29CQUM3QixPQUFPLG9CQUFvQixDQUFDO2dCQUM5QjtvQkFDRSxPQUFPLEtBQUssQ0FBQyxPQUFPLElBQUkscUNBQXFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLHFDQUFxQyxDQUFDO0lBQy9DLENBQUM7K0dBMWxCVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0b3JhZ2UgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgb3BlcmFjaW9uZXMgZGUgRmlyZWJhc2UgU3RvcmFnZS5cbiAqIFNvcG9ydGEgdXBsb2FkIGNvbiB0cmFja2luZyBkZSBwcm9ncmVzbywgZG93bmxvYWQgeSBnZXN0acOzbiBkZSBhcmNoaXZvcy5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIGdldEF1dGg6IHNvbG8gcGFyYSBlbCBmYWxsYmFjayBSRVNUIGRlIHVwbG9hZEFuZEdldFVybCDigJQgZWwgaWRUb2tlbiBjb24gcXVlXG4vLyBzZSBmaXJtYSBlbCByZWludGVudG8gY3VhbmRvIGVsIGNhbmFsIFhIUiBkZWwgU0RLIGZhbGxhLlxuaW1wb3J0IHsgZ2V0QXV0aCB9IGZyb20gJ2ZpcmViYXNlL2F1dGgnO1xuaW1wb3J0IHtcbiAgZGVsZXRlT2JqZWN0LFxuICBnZXREb3dubG9hZFVSTCxcbiAgZ2V0TWV0YWRhdGEsXG4gIGxpc3RBbGwsXG4gIHJlZixcbiAgU3RvcmFnZSxcbiAgdXBsb2FkQnl0ZXNSZXN1bWFibGUsXG4gIFVwbG9hZE1ldGFkYXRhLFxuICBVcGxvYWRUYXNrU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvc3RvcmFnZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBTdG9yYWdlTGlzdFJlc3VsdCxcbiAgU3RvcmFnZU1ldGFkYXRhLFxuICBVcGxvYWRQcm9ncmVzcyxcbiAgVXBsb2FkUmVzdWx0LFxuICBVcGxvYWRTdGF0ZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBGaXJlYmFzZSBTdG9yYWdlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQge1xuICogICBwcml2YXRlIHN0b3JhZ2UgPSBpbmplY3QoU3RvcmFnZVNlcnZpY2UpO1xuICpcbiAqICAgdXBsb2FkUHJvZ3Jlc3MgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAqICAgZG93bmxvYWRVcmwgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gKlxuICogICBhc3luYyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAqICAgICBjb25zdCBmaWxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uWzBdO1xuICogICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICpcbiAqICAgICAvLyBVcGxvYWQgY29uIHByb2dyZXNvXG4gKiAgICAgdGhpcy5zdG9yYWdlLnVwbG9hZChgdXBsb2Fkcy8ke2ZpbGUubmFtZX1gLCBmaWxlKS5zdWJzY3JpYmUoe1xuICogICAgICAgbmV4dDogKHByb2dyZXNzKSA9PiB0aGlzLnVwbG9hZFByb2dyZXNzLnNldChwcm9ncmVzcy5wZXJjZW50YWdlKSxcbiAqICAgICAgIGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XG4gKiAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXREb3dubG9hZFVybChgdXBsb2Fkcy8ke2ZpbGUubmFtZX1gKTtcbiAqICAgICAgICAgdGhpcy5kb3dubG9hZFVybC5zZXQodXJsKTtcbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RvcmFnZVNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UpIHt9XG5cbiAgLyoqXG4gICAqIFByZWZpamEgZWwgcGF0aCBkZSBzdG9yYWdlIGNvbiBlbCBhcHBJZCBzaSBlc3TDoSBjb25maWd1cmFkby5cbiAgICogU2kgbm8gaGF5IGFwcElkIG8gc2tpcFByZWZpeCBlcyB0cnVlLCByZXRvcm5hIGVsIHBhdGggc2luIG1vZGlmaWNhci5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSdXRhIG9yaWdpbmFsXG4gICAqIEBwYXJhbSBza2lwUHJlZml4IC0gU2kgZXMgdHJ1ZSwgbm8gYXBsaWNhIGVsIHByZWZpeCAow7p0aWwgcGFyYSBwYXRocyBjb21wYXJ0aWRvcyBjb21vIGF2YXRhcmVzKVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcHJlZml4U3RvcmFnZVBhdGgocGF0aDogc3RyaW5nLCBza2lwUHJlZml4ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmIChza2lwUHJlZml4IHx8ICF0aGlzLmNvbmZpZz8uYXBwSWQpIHJldHVybiBwYXRoO1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcHBJZH0vJHtwYXRofWA7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVVBMT0FEXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTdWJlIHVuIGFyY2hpdm8gY29uIHRyYWNraW5nIGRlIHByb2dyZXNvLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZW4gU3RvcmFnZSBkb25kZSBndWFyZGFyIGVsIGFyY2hpdm9cbiAgICogQHBhcmFtIGZpbGUgLSBBcmNoaXZvIGEgc3ViaXIgKEZpbGUgbyBCbG9iKVxuICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBNZXRhZGF0YSBvcGNpb25hbCAoY29udGVudFR5cGUsIGN1c3RvbU1ldGFkYXRhKVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBlbCBwcm9ncmVzbyB5IGNvbXBsZXRhIGN1YW5kbyB0ZXJtaW5hXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXBsb2FkIGLDoXNpY29cbiAgICogc3RvcmFnZS51cGxvYWQoJ2ltYWdlcy9waG90by5qcGcnLCBmaWxlKS5zdWJzY3JpYmUoe1xuICAgKiAgIG5leHQ6IChwcm9ncmVzcykgPT4gY29uc29sZS5sb2coYCR7cHJvZ3Jlc3MucGVyY2VudGFnZX0lYCksXG4gICAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdVcGxvYWQgY29tcGxldGFkbycpXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBDb24gbWV0YWRhdGFcbiAgICogc3RvcmFnZS51cGxvYWQoJ2RvY3MvcmVwb3J0LnBkZicsIGZpbGUsIHtcbiAgICogICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAqICAgY3VzdG9tTWV0YWRhdGE6IHsgdXBsb2FkZWRCeTogJ3VzZXIxMjMnIH1cbiAgICogfSkuc3Vic2NyaWJlKC4uLik7XG4gICAqIGBgYFxuICAgKi9cbiAgdXBsb2FkKHBhdGg6IHN0cmluZywgZmlsZTogRmlsZSB8IEJsb2IsIG1ldGFkYXRhPzogU3RvcmFnZU1ldGFkYXRhKTogT2JzZXJ2YWJsZTxVcGxvYWRQcm9ncmVzcz4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4U3RvcmFnZVBhdGgocGF0aCwgbWV0YWRhdGE/LnNraXBQcmVmaXgpO1xuICAgIGNvbnN0IHN0b3JhZ2VSZWYgPSByZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IHVwbG9hZE1ldGFkYXRhOiBVcGxvYWRNZXRhZGF0YSA9IHtcbiAgICAgIGNvbnRlbnRUeXBlOiBtZXRhZGF0YT8uY29udGVudFR5cGUgfHwgKGZpbGUgaW5zdGFuY2VvZiBGaWxlID8gZmlsZS50eXBlIDogdW5kZWZpbmVkKSxcbiAgICAgIGN1c3RvbU1ldGFkYXRhOiBtZXRhZGF0YT8uY3VzdG9tTWV0YWRhdGEsXG4gICAgICAvLyBEZWZhdWx0IGFncmVzaXZvOiBnZXREb3dubG9hZFVSTCBkZXZ1ZWx2ZSBVUkxzIGNvbiB0b2tlbiDDum5pY28gcG9yXG4gICAgICAvLyB2ZXJzacOzbiBkZWwgb2JqZXRvIOKGkiByZS1zdWJpciBlbCBhcmNoaXZvIGNhbWJpYSBlbCBVUkwgKGNhY2hlLWJ1c3RcbiAgICAgIC8vIG5hdHVyYWwpLiBFbCBjb25zdW1pZG9yIHB1ZWRlIG92ZXJyaWRlIHBhc2FuZG8gY2FjaGVDb250cm9sIGV4cGzDrWNpdG8uXG4gICAgICBjYWNoZUNvbnRyb2w6IG1ldGFkYXRhPy5jYWNoZUNvbnRyb2wgPz8gJ3B1YmxpYywgbWF4LWFnZT0zMTUzNjAwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhc2sgPSB1cGxvYWRCeXRlc1Jlc3VtYWJsZShzdG9yYWdlUmVmLCBmaWxlLCB1cGxvYWRNZXRhZGF0YSk7XG4gICAgY29uc3QgcHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRQcm9ncmVzcz4oe1xuICAgICAgYnl0ZXNUcmFuc2ZlcnJlZDogMCxcbiAgICAgIHRvdGFsQnl0ZXM6IGZpbGUuc2l6ZSxcbiAgICAgIHBlcmNlbnRhZ2U6IDAsXG4gICAgICBzdGF0ZTogJ3J1bm5pbmcnLFxuICAgIH0pO1xuXG4gICAgdGFzay5vbihcbiAgICAgICdzdGF0ZV9jaGFuZ2VkJyxcbiAgICAgIChzbmFwc2hvdDogVXBsb2FkVGFza1NuYXBzaG90KSA9PiB7XG4gICAgICAgIHByb2dyZXNzJC5uZXh0KHtcbiAgICAgICAgICBieXRlc1RyYW5zZmVycmVkOiBzbmFwc2hvdC5ieXRlc1RyYW5zZmVycmVkLFxuICAgICAgICAgIHRvdGFsQnl0ZXM6IHNuYXBzaG90LnRvdGFsQnl0ZXMsXG4gICAgICAgICAgcGVyY2VudGFnZTogTWF0aC5yb3VuZCgoc25hcHNob3QuYnl0ZXNUcmFuc2ZlcnJlZCAvIHNuYXBzaG90LnRvdGFsQnl0ZXMpICogMTAwKSxcbiAgICAgICAgICBzdGF0ZTogdGhpcy5tYXBUYXNrU3RhdGUoc25hcHNob3Quc3RhdGUpLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIHByb2dyZXNzJC5uZXh0KHtcbiAgICAgICAgICBieXRlc1RyYW5zZmVycmVkOiAwLFxuICAgICAgICAgIHRvdGFsQnl0ZXM6IGZpbGUuc2l6ZSxcbiAgICAgICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgICAgIHN0YXRlOiAnZXJyb3InLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvZ3Jlc3MkLmVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBwcm9ncmVzcyQubmV4dCh7XG4gICAgICAgICAgYnl0ZXNUcmFuc2ZlcnJlZDogZmlsZS5zaXplLFxuICAgICAgICAgIHRvdGFsQnl0ZXM6IGZpbGUuc2l6ZSxcbiAgICAgICAgICBwZXJjZW50YWdlOiAxMDAsXG4gICAgICAgICAgc3RhdGU6ICdzdWNjZXNzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2dyZXNzJC5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExlZSBlbCBhcmNoaXZvIENPTVBMRVRPIGEgbWVtb3JpYSB5IGRldnVlbHZlIHVuIEJsb2IgYXV0b2NvbnRlbmlkby5cbiAgICpcbiAgICogTm8gZXMgdW5hIGNvcGlhIHBvciBndXN0bzogZW4gU2FmYXJpLCB1biBgRmlsZWAgcXVlIG5vIGVzdMOhIHBsZW5hbWVudGVcbiAgICogbWF0ZXJpYWxpemFkbyBlbiBkaXNjbyDigJQgdMOtcGljbyBkZSBmb3RvcyBsbGVnYWRhcyBkZWwgaVBob25lIHbDrWFcbiAgICogRm90b3MvaUNsb3VkIOKAlCBoYWNlIGZhbGxhciBsYSBsZWN0dXJhIGRlbCBTREsgZGUgU3RvcmFnZSBlbiBlbCBlbnbDrW8sIHBvclxuICAgKiBzdXMgZG9zIGNhbWlub3MgKHVwbG9hZEJ5dGVzIHkgdXBsb2FkQnl0ZXNSZXN1bWFibGUpLCBjb24gdW5cbiAgICogYHN0b3JhZ2UvdW5rbm93bmAgb3BhY28uIEVsIG1pc21vIFNhZmFyaSBzdWJlIHNpbiBwcm9ibGVtYSBhcmNoaXZvcyBsb2NhbGVzXG4gICAqIGRlIG90cmEgcHJvY2VkZW5jaWEsIGFzw60gcXVlIGVsIGJ1ZyBhcGFyZWNlIFwiYSB2ZWNlc1wiIHkgc2luIG1lbnNhamUgw7p0aWwuXG4gICAqIGBhcnJheUJ1ZmZlcigpYCBmdWVyemEgbGEgbGVjdHVyYSBjb21wbGV0YTsgZWwgQmxvYiByZXN1bHRhbnRlIHlhIG5vXG4gICAqIGRlcGVuZGUgZGVsIGJhY2tpbmcgZmlsZS4gQ2FzbyByZWFsOiBiaW5nbyBpbWFnZS1waWNrZXIsIDIwMjYtMDgtMDUuXG4gICAqXG4gICAqIFVuIEJsb2IgKG5vLUZpbGUpIHlhIG5hY2nDsyBlbiBtZW1vcmlhIOKAlCBzZSBkZXZ1ZWx2ZSB0YWwgY3VhbC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIG1hdGVyaWFsaXplKGZpbGU6IEZpbGUgfCBCbG9iKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSByZXR1cm4gZmlsZTtcbiAgICBjb25zdCBjb250ZW5pZG8gPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtjb250ZW5pZG9dLCB7IHR5cGU6IGZpbGUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWludGVudG8gcG9yIFJFU1QgY3VhbmRvIGVsIFNESyBmYWxsYSBsYSBzdWJpZGEuXG4gICAqXG4gICAqIEVsIFNESyB2YSBwb3IgWE1MSHR0cFJlcXVlc3QgeSBzdSBkZXRhbGxlIGRlIGVycm9yIGVzIGB4aHIuc3RhdHVzVGV4dGAsIHF1ZVxuICAgKiBzb2JyZSBIVFRQLzIgdmllbmUgc2llbXByZSB2YWPDrW8g4oCUIHVuIGZhbGxvIGRlbCBTREsgZXMgaWxlZ2libGUgeSwgZW4gbG9zXG4gICAqIGVudG9ybm9zIGRvbmRlIGFsZ28gaW50ZXJmaWVyZSBjb24gWEhSLCBhZGVtw6FzIGV2aXRhYmxlOiBlc3RlIGNhbWlubyB1c2FcbiAgICogYGZldGNoYCBjb24gYHVwbG9hZFR5cGU9bWVkaWFgIChjdWVycG8gYmluYXJpbyBzaW1wbGUpLiBMYSBVUkwgc2UgYXJtYSBjb25cbiAgICogZWwgZG93bmxvYWRUb2tlbiBkZSBsYSByZXNwdWVzdGEgcG9ycXVlIGdldERvd25sb2FkVVJMIHRhbWJpw6luIHZhIHBvciBYSFIuXG4gICAqXG4gICAqIERldnVlbHZlIG51bGwgc2kgdGFtcG9jbyBwdWRvIOKAlCBlbCBjYWxsZXIgcmVwb3J0YSBlbCBlcnJvciBvcmlnaW5hbCBkZWwgU0RLLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkVmlhUmVzdChcbiAgICBwcmVmaXhlZFBhdGg6IHN0cmluZyxcbiAgICBibG9iOiBCbG9iLFxuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxVcGxvYWRSZXN1bHQgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QXV0aCgpLmN1cnJlbnRVc2VyPy5nZXRJZFRva2VuKCk7XG4gICAgICBjb25zdCBidWNrZXQgPSB0aGlzLnN0b3JhZ2UuYXBwLm9wdGlvbnMuc3RvcmFnZUJ1Y2tldDtcbiAgICAgIGlmICghdG9rZW4gfHwgIWJ1Y2tldCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IG5vbWJyZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcmVmaXhlZFBhdGgpO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi8ke2J1Y2tldH0vbz9uYW1lPSR7bm9tYnJlfSZ1cGxvYWRUeXBlPW1lZGlhYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEZpcmViYXNlICR7dG9rZW59YCwgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlIH0sXG4gICAgICAgICAgYm9keTogYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTdG9yYWdlXSBSRVNUIGZhbGxiYWNrIGZhaWxlZDonLCB7XG4gICAgICAgICAgcGF0aDogcHJlZml4ZWRQYXRoLFxuICAgICAgICAgIHN0YXR1czogcmVzcC5zdGF0dXMsXG4gICAgICAgICAgYm9keTogKGF3YWl0IHJlc3AudGV4dCgpKS5yZXBsYWNlKC9cXHMrL2csICcgJykuc2xpY2UoMCwgMzAwKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YSA9IChhd2FpdCByZXNwLmpzb24oKSkgYXMge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBzaXplPzogc3RyaW5nO1xuICAgICAgICBjb250ZW50VHlwZT86IHN0cmluZztcbiAgICAgICAgZG93bmxvYWRUb2tlbnM/OiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgLy8gVW4gMjAwIG5vIHBydWViYSBxdWUgbGxlZ8OzIGVsIGNvbnRlbmlkbzogU2FmYXJpIGhhIGVudmlhZG8gY3VlcnBvc1xuICAgICAgLy8gdmFjw61vcyBxdWUgU3RvcmFnZSBhY2VwdGEgY29tbyBvYmpldG9zIGRlIDAgYnl0ZXMuIFZlcmlmaWNhciB5IGxpbXBpYXIuXG4gICAgICBpZiAoTnVtYmVyKG1ldGEuc2l6ZSA/PyAtMSkgIT09IGJsb2Iuc2l6ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU3RvcmFnZV0gUkVTVCBmYWxsYmFjayBzaXplIG1pc21hdGNoOicsIHtcbiAgICAgICAgICBwYXRoOiBwcmVmaXhlZFBhdGgsXG4gICAgICAgICAgZXNwZXJhZG86IGJsb2Iuc2l6ZSxcbiAgICAgICAgICBndWFyZGFkbzogbWV0YS5zaXplLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgZmV0Y2goYGh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvJHtidWNrZXR9L28vJHtub21icmV9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgRmlyZWJhc2UgJHt0b2tlbn1gIH0sXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZHQgPSBtZXRhLmRvd25sb2FkVG9rZW5zPy5zcGxpdCgnLCcpWzBdO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPVxuICAgICAgICBgaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi8ke2J1Y2tldH0vby8ke25vbWJyZX0/YWx0PW1lZGlhYCArXG4gICAgICAgIChkdCA/IGAmdG9rZW49JHtkdH1gIDogJycpO1xuICAgICAgY29uc29sZS5sb2coJ1tTdG9yYWdlXSB1cGxvYWQgT0sgKFJFU1QgZmFsbGJhY2spOicsIHsgcGF0aDogcHJlZml4ZWRQYXRoIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG93bmxvYWRVcmwsXG4gICAgICAgIGZ1bGxQYXRoOiBwcmVmaXhlZFBhdGgsXG4gICAgICAgIG5hbWU6IHByZWZpeGVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8IHByZWZpeGVkUGF0aCxcbiAgICAgICAgc2l6ZTogYmxvYi5zaXplLFxuICAgICAgICBjb250ZW50VHlwZTogbWV0YS5jb250ZW50VHlwZSB8fCBjb250ZW50VHlwZSxcbiAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW1N0b3JhZ2VdIFJFU1QgZmFsbGJhY2sgdGhyZXc6JywgeyBwYXRoOiBwcmVmaXhlZFBhdGgsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YmUgdW4gYXJjaGl2byB5IHJldG9ybmEgbGEgVVJMIGRlIGRlc2NhcmdhIGFsIGNvbXBsZXRhci5cbiAgICpcbiAgICogUm9idXN0ZWNpZG8gcGFyYSBlbCBjYXNvIFNhZmFyaS9pUGhvbmUgKHZlciBgbWF0ZXJpYWxpemVgKTogbGVlIGVsIGFyY2hpdm9cbiAgICogYSBtZW1vcmlhIGFudGVzIGRlIHN1YmlybG8sIHZlcmlmaWNhIHF1ZSBlbCB0YW1hw7FvIGd1YXJkYWRvIGNvaW5jaWRhIHksIHNpXG4gICAqIGVsIFNESyBmYWxsYSwgcmVpbnRlbnRhIHVuYSB2ZXogcG9yIFJFU1QgYW50ZXMgZGUgcmVjaGF6YXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gUnV0YSBlbiBTdG9yYWdlXG4gICAqIEBwYXJhbSBmaWxlIC0gQXJjaGl2byBhIHN1YmlyXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIE1ldGFkYXRhIG9wY2lvbmFsXG4gICAqIEByZXR1cm5zIFJlc3VsdGFkbyBkZWwgdXBsb2FkIGNvbiBVUkwgZGUgZGVzY2FyZ2FcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLnVwbG9hZEFuZEdldFVybCgnYXZhdGFycy91c2VyMTIzLmpwZycsIGZpbGUpO1xuICAgKiBjb25zb2xlLmxvZygnVVJMOicsIHJlc3VsdC5kb3dubG9hZFVybCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdXBsb2FkQW5kR2V0VXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlOiBGaWxlIHwgQmxvYixcbiAgICBtZXRhZGF0YT86IFN0b3JhZ2VNZXRhZGF0YVxuICApOiBQcm9taXNlPFVwbG9hZFJlc3VsdD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4U3RvcmFnZVBhdGgocGF0aCwgbWV0YWRhdGE/LnNraXBQcmVmaXgpO1xuICAgIGNvbnNvbGUubG9nKCdbU3RvcmFnZV0gdXBsb2FkQW5kR2V0VXJsIHN0YXJ0OicsIHsgcGF0aDogcHJlZml4ZWRQYXRoLCBzaXplOiBmaWxlLnNpemUgfSk7XG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1ldGFkYXRhPy5jb250ZW50VHlwZSB8fCBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMubWF0ZXJpYWxpemUoZmlsZSk7XG5cbiAgICBjb25zdCBzZGtSZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZTxVcGxvYWRSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMudXBsb2FkKHBhdGgsIGJsb2IsIHsgLi4ubWV0YWRhdGEsIGNvbnRlbnRUeXBlIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VSZWYgPSByZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpO1xuICAgICAgICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSBhd2FpdCBnZXREb3dubG9hZFVSTChzdG9yYWdlUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZE1ldGFkYXRhID0gYXdhaXQgZ2V0TWV0YWRhdGEoc3RvcmFnZVJlZik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1N0b3JhZ2VdIHVwbG9hZCBPSzonLCB7XG4gICAgICAgICAgICAgIHBhdGg6IHByZWZpeGVkUGF0aCxcbiAgICAgICAgICAgICAgdXJsOiBkb3dubG9hZFVybC5zbGljZSgwLCA2MCkgKyAn4oCmJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGRvd25sb2FkVXJsLFxuICAgICAgICAgICAgICBmdWxsUGF0aDogc3RvcmVkTWV0YWRhdGEuZnVsbFBhdGgsXG4gICAgICAgICAgICAgIG5hbWU6IHN0b3JlZE1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAgIHNpemU6IHN0b3JlZE1ldGFkYXRhLnNpemUsXG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBzdG9yZWRNZXRhZGF0YS5jb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHN0b3JlZE1ldGFkYXRhLmN1c3RvbU1ldGFkYXRhIHx8IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTdG9yYWdlXSBnZXREb3dubG9hZFVSTC9tZXRhZGF0YSBmYWlsZWQ6Jywge1xuICAgICAgICAgICAgICBwYXRoOiBwcmVmaXhlZFBhdGgsXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWplY3QodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1N0b3JhZ2VdIHVwbG9hZCBmYWlsZWQ6JywgeyBwYXRoOiBwcmVmaXhlZFBhdGgsIGVycm9yIH0pO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChhc3luYyBvcmlnaW5hbEVycm9yID0+IHtcbiAgICAgIGNvbnN0IHJlc2NhdGFkbyA9IGF3YWl0IHRoaXMudXBsb2FkVmlhUmVzdChwcmVmaXhlZFBhdGgsIGJsb2IsIGNvbnRlbnRUeXBlKTtcbiAgICAgIGlmIChyZXNjYXRhZG8pIHJldHVybiByZXNjYXRhZG87XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH0pO1xuXG4gICAgLy8gVmVyaWZpY2FjacOzbiBkZSBjb250ZW5pZG8gdGFtYmnDqW4gZW4gZWwgY2FtaW5vIFNESzogdW4gb2JqZXRvIGRlIDAgYnl0ZXNcbiAgICAvLyBjb24gVVJMIHbDoWxpZGEgZXMgcGVvciBxdWUgdW4gZXJyb3Ig4oCUIGxhIGltYWdlbiBcInN1YmVcIiB5IG51bmNhIGNhcmdhLlxuICAgIGlmIChzZGtSZXN1bHQuc2l6ZSAhPT0gYmxvYi5zaXplKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbU3RvcmFnZV0gc2l6ZSBtaXNtYXRjaCB0cmFzIHN1YmlyOicsIHtcbiAgICAgICAgcGF0aDogcHJlZml4ZWRQYXRoLFxuICAgICAgICBlc3BlcmFkbzogYmxvYi5zaXplLFxuICAgICAgICBndWFyZGFkbzogc2RrUmVzdWx0LnNpemUsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGRlbGV0ZU9iamVjdChyZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbCBhcmNoaXZvIG5vIHNlIHN1YmnDsyBjb21wbGV0by4gSW50w6ludGFsbyBkZSBudWV2by4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHNka1Jlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJlIHVuIGFyY2hpdm8gZGVzZGUgdW5hIERhdGEgVVJMIChiYXNlNjQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZW4gU3RvcmFnZVxuICAgKiBAcGFyYW0gZGF0YVVybCAtIERhdGEgVVJMIChlajogJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwuLi4nKVxuICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBNZXRhZGF0YSBvcGNpb25hbFxuICAgKiBAcmV0dXJucyBSZXN1bHRhZG8gZGVsIHVwbG9hZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlc2RlIGNhbnZhc1xuICAgKiBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UudXBsb2FkRnJvbURhdGFVcmwoJ2ltYWdlcy9kcmF3aW5nLnBuZycsIGRhdGFVcmwpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHVwbG9hZEZyb21EYXRhVXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBkYXRhVXJsOiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBTdG9yYWdlTWV0YWRhdGFcbiAgKTogUHJvbWlzZTxVcGxvYWRSZXN1bHQ+IHtcbiAgICAvLyBFeHRyYWVyIGNvbnRlbnQgdHlwZSB5IGRhdG9zIGJhc2U2NFxuICAgIGNvbnN0IG1hdGNoZXMgPSBkYXRhVXJsLm1hdGNoKC9eZGF0YTooW147XSspO2Jhc2U2NCwoLispJC8pO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIFVSTCBpbnbDoWxpZGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1hdGNoZXNbMV07XG4gICAgY29uc3QgYmFzZTY0RGF0YSA9IG1hdGNoZXNbMl07XG5cbiAgICAvLyBDb252ZXJ0aXIgYmFzZTY0IGEgQmxvYlxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcbiAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcblxuICAgIHJldHVybiB0aGlzLnVwbG9hZEFuZEdldFVybChwYXRoLCBibG9iLCB7XG4gICAgICBjb250ZW50VHlwZSxcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERPV05MT0FEXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIFVSTCBkZSBkZXNjYXJnYSBkZSB1biBhcmNoaXZvLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZGVsIGFyY2hpdm8gZW4gU3RvcmFnZVxuICAgKiBAcmV0dXJucyBVUkwgZGUgZGVzY2FyZ2FcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB1cmwgPSBhd2FpdCBzdG9yYWdlLmdldERvd25sb2FkVXJsKCdpbWFnZXMvcGhvdG8uanBnJyk7XG4gICAqIC8vIFVzYXIgZW4gPGltZyBbc3JjXT1cInVybFwiPlxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldERvd25sb2FkVXJsKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4U3RvcmFnZVBhdGgocGF0aCk7XG4gICAgICBjb25zdCBzdG9yYWdlUmVmID0gcmVmKHRoaXMuc3RvcmFnZSwgcHJlZml4ZWRQYXRoKTtcbiAgICAgIHJldHVybiBhd2FpdCBnZXREb3dubG9hZFVSTChzdG9yYWdlUmVmKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgbWV0YWRhdGEgZGUgdW4gYXJjaGl2by5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSdXRhIGRlbCBhcmNoaXZvXG4gICAqIEByZXR1cm5zIE1ldGFkYXRhIGRlbCBhcmNoaXZvXG4gICAqL1xuICBhc3luYyBnZXRNZXRhZGF0YShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFN0b3JhZ2VNZXRhZGF0YSAmIHsgc2l6ZTogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeFN0b3JhZ2VQYXRoKHBhdGgpO1xuICAgICAgY29uc3Qgc3RvcmFnZVJlZiA9IHJlZih0aGlzLnN0b3JhZ2UsIHByZWZpeGVkUGF0aCk7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGdldE1ldGFkYXRhKHN0b3JhZ2VSZWYpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudFR5cGU6IG1ldGFkYXRhLmNvbnRlbnRUeXBlLFxuICAgICAgICBjdXN0b21NZXRhZGF0YTogbWV0YWRhdGEuY3VzdG9tTWV0YWRhdGEsXG4gICAgICAgIGNhY2hlQ29udHJvbDogbWV0YWRhdGEuY2FjaGVDb250cm9sLFxuICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERFTEVURVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBhcmNoaXZvLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZGVsIGFyY2hpdm8gYSBlbGltaW5hclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IHN0b3JhZ2UuZGVsZXRlKCdpbWFnZXMvb2xkLXBob3RvLmpwZycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhTdG9yYWdlUGF0aChwYXRoKTtcbiAgICAgIGNvbnN0IHN0b3JhZ2VSZWYgPSByZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpO1xuICAgICAgYXdhaXQgZGVsZXRlT2JqZWN0KHN0b3JhZ2VSZWYpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBtw7psdGlwbGVzIGFyY2hpdm9zLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aHMgLSBBcnJheSBkZSBydXRhcyBhIGVsaW1pbmFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgc3RvcmFnZS5kZWxldGVNdWx0aXBsZShbXG4gICAqICAgJ2ltYWdlcy9waG90bzEuanBnJyxcbiAgICogICAnaW1hZ2VzL3Bob3RvMi5qcGcnXG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZU11bHRpcGxlKHBhdGhzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHBhdGhzLm1hcChwYXRoID0+IHRoaXMuZGVsZXRlKHBhdGgpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTElTVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogTGlzdGEgYXJjaGl2b3MgZW4gdW4gZGlyZWN0b3Jpby5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSdXRhIGRlbCBkaXJlY3RvcmlvXG4gICAqIEByZXR1cm5zIExpc3RhIGRlIHJ1dGFzIGRlIGFyY2hpdm9zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5saXN0KCdpbWFnZXMvJyk7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5pdGVtcyk7IC8vIFsnaW1hZ2VzL3Bob3RvMS5qcGcnLCAnaW1hZ2VzL3Bob3RvMi5qcGcnXVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGxpc3QocGF0aDogc3RyaW5nKTogUHJvbWlzZTxTdG9yYWdlTGlzdFJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeFN0b3JhZ2VQYXRoKHBhdGgpO1xuICAgICAgY29uc3Qgc3RvcmFnZVJlZiA9IHJlZih0aGlzLnN0b3JhZ2UsIHByZWZpeGVkUGF0aCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBsaXN0QWxsKHN0b3JhZ2VSZWYpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogcmVzdWx0Lml0ZW1zLm1hcChpdGVtID0+IGl0ZW0uZnVsbFBhdGgpLFxuICAgICAgICBuZXh0UGFnZVRva2VuOiB1bmRlZmluZWQsIC8vIGxpc3RBbGwgbm8gc29wb3J0YSBwYWdpbmFjacOzblxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBub21icmUgZGUgYXJjaGl2byDDum5pY28gY29uIHRpbWVzdGFtcC5cbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsTmFtZSAtIE5vbWJyZSBvcmlnaW5hbCBkZWwgYXJjaGl2b1xuICAgKiBAcGFyYW0gcHJlZml4IC0gUHJlZmlqbyBvcGNpb25hbFxuICAgKiBAcmV0dXJucyBOb21icmUgw7puaWNvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdW5pcXVlTmFtZSA9IHN0b3JhZ2UuZ2VuZXJhdGVGaWxlTmFtZSgncGhvdG8uanBnJywgJ3VzZXIxMjMnKTtcbiAgICogLy8gPT4gJ3VzZXIxMjNfMTcwMzA5MTIzNDU2N19waG90by5qcGcnXG4gICAqIGBgYFxuICAgKi9cbiAgZ2VuZXJhdGVGaWxlTmFtZShvcmlnaW5hbE5hbWU6IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBvcmlnaW5hbE5hbWUucmVwbGFjZSgvW15hLXpBLVowLTkuLV0vZywgJ18nKTtcblxuICAgIGlmIChwcmVmaXgpIHtcbiAgICAgIHJldHVybiBgJHtwcmVmaXh9XyR7dGltZXN0YW1wfV8ke3Nhbml0aXplZE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RpbWVzdGFtcH1fJHtzYW5pdGl6ZWROYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIHVuYSBydXRhIMO6bmljYSBwYXJhIHVuIGFyY2hpdm8uXG4gICAqXG4gICAqIEBwYXJhbSBkaXJlY3RvcnkgLSBEaXJlY3RvcmlvIGJhc2VcbiAgICogQHBhcmFtIG9yaWdpbmFsTmFtZSAtIE5vbWJyZSBvcmlnaW5hbFxuICAgKiBAcGFyYW0gcHJlZml4IC0gUHJlZmlqbyBvcGNpb25hbFxuICAgKiBAcmV0dXJucyBSdXRhIGNvbXBsZXRhIMO6bmljYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhdGggPSBzdG9yYWdlLmdlbmVyYXRlUGF0aCgndXBsb2FkcycsICdwaG90by5qcGcnLCAndXNlcjEyMycpO1xuICAgKiAvLyA9PiAndXBsb2Fkcy91c2VyMTIzXzE3MDMwOTEyMzQ1NjdfcGhvdG8uanBnJ1xuICAgKiBgYGBcbiAgICovXG4gIGdlbmVyYXRlUGF0aChkaXJlY3Rvcnk6IHN0cmluZywgb3JpZ2luYWxOYW1lOiBzdHJpbmcsIHByZWZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlRmlsZU5hbWUob3JpZ2luYWxOYW1lLCBwcmVmaXgpO1xuICAgIGNvbnN0IGNsZWFuRGlyID0gZGlyZWN0b3J5LnJlcGxhY2UoL1xcLyskLywgJycpOyAvLyBSZW1vdmVyIC8gZmluYWxcbiAgICByZXR1cm4gYCR7Y2xlYW5EaXJ9LyR7ZmlsZU5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGV4dGVuc2nDs24gZGUgdW4gYXJjaGl2by5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVuYW1lIC0gTm9tYnJlIGRlbCBhcmNoaXZvXG4gICAqIEByZXR1cm5zIEV4dGVuc2nDs24gKHNpbiBlbCBwdW50bylcbiAgICovXG4gIGdldEV4dGVuc2lvbihmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IGZpbGVuYW1lLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0cy5wb3AoKSEudG9Mb3dlckNhc2UoKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGFyY2hpdm8gZXMgdW5hIGltYWdlbiBiYXPDoW5kb3NlIGVuIHN1IGV4dGVuc2nDs24uXG4gICAqL1xuICBpc0ltYWdlKGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBleHQgPSB0aGlzLmdldEV4dGVuc2lvbihmaWxlbmFtZSk7XG4gICAgcmV0dXJuIFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ2dpZicsICd3ZWJwJywgJ3N2ZycsICdibXAnXS5pbmNsdWRlcyhleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGFyY2hpdm8gZXMgdW4gZG9jdW1lbnRvLlxuICAgKi9cbiAgaXNEb2N1bWVudChmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZXh0ID0gdGhpcy5nZXRFeHRlbnNpb24oZmlsZW5hbWUpO1xuICAgIHJldHVybiBbJ3BkZicsICdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwcHQnLCAncHB0eCcsICd0eHQnXS5pbmNsdWRlcyhleHQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVTRVIgQVZBVEFSIEhFTFBFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBsYSBVUkwgZGUgYXZhdGFyIGRlIHVuIHVzdWFyaW8uXG4gICAqXG4gICAqIExvcyBhdmF0YXJlcyBzZSBhbG1hY2VuYW4gZW4gcGF0aHMgcHJlZGVjaWJsZXM6IGB1c2Vycy97dXNlcklkfS9hdmF0YXIuanBnYFxuICAgKiBFc3RvIHBlcm1pdGUgcXVlIGN1YWxxdWllciBhcHAgcHVlZGEgbW9zdHJhciBhdmF0YXJlcyBzaW4gcGVkaXIgbGEgVVJMIGFsIGJhY2tlbmQsXG4gICAqIHNvbG8gbmVjZXNpdGEgZWwgdXNlcklkLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gSUQgZGVsIHVzdWFyaW8gKFVMSUQpXG4gICAqIEBwYXJhbSB0eXBlIC0gJ2F2YXRhcicgcGFyYSBpbWFnZW4gY29tcGxldGEsICd0aHVtYicgcGFyYSB0aHVtYm5haWxcbiAgICogQHJldHVybnMgVVJMIGRpcmVjdGEgZGUgRmlyZWJhc2UgU3RvcmFnZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIE1vc3RyYXIgYXZhdGFyIGRlIGN1YWxxdWllciB1c3VhcmlvXG4gICAqIGNvbnN0IGF2YXRhclVybCA9IHN0b3JhZ2UuZ2V0VXNlckF2YXRhclVybCgnMDFBQkNELi4uJyk7XG4gICAqIGNvbnN0IHRodW1iVXJsID0gc3RvcmFnZS5nZXRVc2VyQXZhdGFyVXJsKCcwMUFCQ0QuLi4nLCAndGh1bWInKTtcbiAgICpcbiAgICogLy8gQ29uIGNhY2hlLWJ1c3RpbmdcbiAgICogY29uc3QgZnJlc2hVcmwgPSBzdG9yYWdlLmdldFVzZXJBdmF0YXJVcmwodXNlcklkKSArIGAmdD0ke0RhdGUubm93KCl9YDtcbiAgICogYGBgXG4gICAqL1xuICBnZXRVc2VyQXZhdGFyVXJsKHVzZXJJZDogc3RyaW5nLCB0eXBlOiAnYXZhdGFyJyB8ICd0aHVtYicgPSAnYXZhdGFyJyk6IHN0cmluZyB7XG4gICAgY29uc3QgYnVja2V0ID0gdGhpcy5jb25maWc/LmZpcmViYXNlPy5zdG9yYWdlQnVja2V0IHx8ICdteXZhbHRlY2gtZGV2LmZpcmViYXNlc3RvcmFnZS5hcHAnO1xuICAgIGNvbnN0IHBhdGggPSBgdXNlcnMvJHt1c2VySWR9LyR7dHlwZX0uanBnYDtcbiAgICByZXR1cm4gYGh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvJHtidWNrZXR9L28vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9P2FsdD1tZWRpYWA7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE1hcGVhIGVsIGVzdGFkbyBkZSBsYSB0YXJlYSBkZSB1cGxvYWRcbiAgICovXG4gIHByaXZhdGUgbWFwVGFza1N0YXRlKHN0YXRlOiBzdHJpbmcpOiBVcGxvYWRTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgIHJldHVybiAncnVubmluZyc7XG4gICAgICBjYXNlICdwYXVzZWQnOlxuICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIGNhc2UgJ2NhbmNlbGVkJzpcbiAgICAgICAgcmV0dXJuICdjYW5jZWxlZCc7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdydW5uaW5nJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmllcnRlIGVycm9yZXMgZGUgU3RvcmFnZSBhIG1lbnNhamVzIGVuIGVzcGHDsW9sXG4gICAqL1xuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG5cbiAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlICdzdG9yYWdlL29iamVjdC1ub3QtZm91bmQnOlxuICAgICAgICAgIHJldHVybiAnRWwgYXJjaGl2byBubyBleGlzdGUnO1xuICAgICAgICBjYXNlICdzdG9yYWdlL3VuYXV0aG9yaXplZCc6XG4gICAgICAgICAgcmV0dXJuICdObyB0aWVuZXMgcGVybWlzbyBwYXJhIGFjY2VkZXIgYSBlc3RlIGFyY2hpdm8nO1xuICAgICAgICBjYXNlICdzdG9yYWdlL2NhbmNlbGVkJzpcbiAgICAgICAgICByZXR1cm4gJ0xhIG9wZXJhY2nDs24gZnVlIGNhbmNlbGFkYSc7XG4gICAgICAgIGNhc2UgJ3N0b3JhZ2UvcXVvdGEtZXhjZWVkZWQnOlxuICAgICAgICAgIHJldHVybiAnU2UgaGEgZXhjZWRpZG8gbGEgY3VvdGEgZGUgYWxtYWNlbmFtaWVudG8nO1xuICAgICAgICBjYXNlICdzdG9yYWdlL2ludmFsaWQtY2hlY2tzdW0nOlxuICAgICAgICAgIHJldHVybiAnRWwgYXJjaGl2byBlc3TDoSBjb3JydXB0byc7XG4gICAgICAgIGNhc2UgJ3N0b3JhZ2UvcmV0cnktbGltaXQtZXhjZWVkZWQnOlxuICAgICAgICAgIHJldHVybiAnRXJyb3IgZGUgY29uZXhpw7NuLiBJbnRlbnRhIGRlIG51ZXZvJztcbiAgICAgICAgY2FzZSAnc3RvcmFnZS9pbnZhbGlkLXVybCc6XG4gICAgICAgICAgcmV0dXJuICdVUkwgZGUgYXJjaGl2byBpbnbDoWxpZGEnO1xuICAgICAgICBjYXNlICdzdG9yYWdlL2ludmFsaWQtYXJndW1lbnQnOlxuICAgICAgICAgIHJldHVybiAnQXJndW1lbnRvIGludsOhbGlkbyc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ0Vycm9yIGRlIGFsbWFjZW5hbWllbnRvIGRlc2Nvbm9jaWRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ0Vycm9yIGRlIGFsbWFjZW5hbWllbnRvIGRlc2Nvbm9jaWRvJztcbiAgfVxufVxuIl19
604
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCw4RUFBOEU7QUFDOUUsMkRBQTJEO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLE9BQU8sRUFDUCxHQUFHLEVBRUgsb0JBQW9CLEdBR3JCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQVNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFBb0IsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUY1QixXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFOUIsQ0FBQztJQUV4Qzs7Ozs7OztPQU9HO0lBQ0ssaUJBQWlCLENBQUMsSUFBWSxFQUFFLFVBQVUsR0FBRyxLQUFLO1FBQ3hELElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkQsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsU0FBUztJQUNULDhFQUE4RTtJQUU5RTs7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LGVBQWUsQ0FBQyxLQUFjO1FBQ3BDLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFJLEtBQTJCLENBQUMsSUFBSSxDQUFDO1lBRS9DLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSywwQkFBMEI7b0JBQzdCLE9BQU8sc0JBQXNCLENBQUM7Z0JBQ2hDLEtBQUssc0JBQXNCO29CQUN6QixPQUFPLCtDQUErQyxDQUFDO2dCQUN6RCxLQUFLLGtCQUFrQjtvQkFDckIsT0FBTyw0QkFBNEIsQ0FBQztnQkFDdEMsS0FBSyx3QkFBd0I7b0JBQzNCLE9BQU8sMkNBQTJDLENBQUM7Z0JBQ3JELEtBQUssMEJBQTBCO29CQUM3QixPQUFPLDBCQUEwQixDQUFDO2dCQUNwQyxLQUFLLDhCQUE4QjtvQkFDakMsT0FBTyxxQ0FBcUMsQ0FBQztnQkFDL0MsS0FBSyxxQkFBcUI7b0JBQ3hCLE9BQU8seUJBQXlCLENBQUM7Z0JBQ25DLEtBQUssMEJBQTBCO29CQUM3QixPQUFPLG9CQUFvQixDQUFDO2dCQUM5QjtvQkFDRSxPQUFPLEtBQUssQ0FBQyxPQUFPLElBQUkscUNBQXFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLHFDQUFxQyxDQUFDO0lBQy9DLENBQUM7K0dBL2xCVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0b3JhZ2UgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgb3BlcmFjaW9uZXMgZGUgRmlyZWJhc2UgU3RvcmFnZS5cbiAqIFNvcG9ydGEgdXBsb2FkIGNvbiB0cmFja2luZyBkZSBwcm9ncmVzbywgZG93bmxvYWQgeSBnZXN0acOzbiBkZSBhcmNoaXZvcy5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIGdldEF1dGg6IHNvbG8gcGFyYSBlbCBmYWxsYmFjayBSRVNUIGRlIHVwbG9hZEFuZEdldFVybCDigJQgZWwgaWRUb2tlbiBjb24gcXVlXG4vLyBzZSBmaXJtYSBlbCByZWludGVudG8gY3VhbmRvIGVsIGNhbmFsIFhIUiBkZWwgU0RLIGZhbGxhLlxuaW1wb3J0IHsgZ2V0QXV0aCB9IGZyb20gJ2ZpcmViYXNlL2F1dGgnO1xuaW1wb3J0IHtcbiAgZGVsZXRlT2JqZWN0LFxuICBnZXREb3dubG9hZFVSTCxcbiAgZ2V0TWV0YWRhdGEsXG4gIGxpc3RBbGwsXG4gIHJlZixcbiAgU3RvcmFnZSxcbiAgdXBsb2FkQnl0ZXNSZXN1bWFibGUsXG4gIFVwbG9hZE1ldGFkYXRhLFxuICBVcGxvYWRUYXNrU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvc3RvcmFnZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBTdG9yYWdlTGlzdFJlc3VsdCxcbiAgU3RvcmFnZU1ldGFkYXRhLFxuICBVcGxvYWRQcm9ncmVzcyxcbiAgVXBsb2FkUmVzdWx0LFxuICBVcGxvYWRTdGF0ZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBGaXJlYmFzZSBTdG9yYWdlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQge1xuICogICBwcml2YXRlIHN0b3JhZ2UgPSBpbmplY3QoU3RvcmFnZVNlcnZpY2UpO1xuICpcbiAqICAgdXBsb2FkUHJvZ3Jlc3MgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAqICAgZG93bmxvYWRVcmwgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gKlxuICogICBhc3luYyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAqICAgICBjb25zdCBmaWxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uWzBdO1xuICogICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICpcbiAqICAgICAvLyBVcGxvYWQgY29uIHByb2dyZXNvXG4gKiAgICAgdGhpcy5zdG9yYWdlLnVwbG9hZChgdXBsb2Fkcy8ke2ZpbGUubmFtZX1gLCBmaWxlKS5zdWJzY3JpYmUoe1xuICogICAgICAgbmV4dDogKHByb2dyZXNzKSA9PiB0aGlzLnVwbG9hZFByb2dyZXNzLnNldChwcm9ncmVzcy5wZXJjZW50YWdlKSxcbiAqICAgICAgIGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XG4gKiAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXREb3dubG9hZFVybChgdXBsb2Fkcy8ke2ZpbGUubmFtZX1gKTtcbiAqICAgICAgICAgdGhpcy5kb3dubG9hZFVybC5zZXQodXJsKTtcbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RvcmFnZVNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UpIHt9XG5cbiAgLyoqXG4gICAqIFByZWZpamEgZWwgcGF0aCBkZSBzdG9yYWdlIGNvbiBlbCBhcHBJZCBzaSBlc3TDoSBjb25maWd1cmFkby5cbiAgICogU2kgbm8gaGF5IGFwcElkIG8gc2tpcFByZWZpeCBlcyB0cnVlLCByZXRvcm5hIGVsIHBhdGggc2luIG1vZGlmaWNhci5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSdXRhIG9yaWdpbmFsXG4gICAqIEBwYXJhbSBza2lwUHJlZml4IC0gU2kgZXMgdHJ1ZSwgbm8gYXBsaWNhIGVsIHByZWZpeCAow7p0aWwgcGFyYSBwYXRocyBjb21wYXJ0aWRvcyBjb21vIGF2YXRhcmVzKVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcHJlZml4U3RvcmFnZVBhdGgocGF0aDogc3RyaW5nLCBza2lwUHJlZml4ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmIChza2lwUHJlZml4IHx8ICF0aGlzLmNvbmZpZz8uYXBwSWQpIHJldHVybiBwYXRoO1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcHBJZH0vJHtwYXRofWA7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVVBMT0FEXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTdWJlIHVuIGFyY2hpdm8gY29uIHRyYWNraW5nIGRlIHByb2dyZXNvLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZW4gU3RvcmFnZSBkb25kZSBndWFyZGFyIGVsIGFyY2hpdm9cbiAgICogQHBhcmFtIGZpbGUgLSBBcmNoaXZvIGEgc3ViaXIgKEZpbGUgbyBCbG9iKVxuICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBNZXRhZGF0YSBvcGNpb25hbCAoY29udGVudFR5cGUsIGN1c3RvbU1ldGFkYXRhKVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBlbCBwcm9ncmVzbyB5IGNvbXBsZXRhIGN1YW5kbyB0ZXJtaW5hXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXBsb2FkIGLDoXNpY29cbiAgICogc3RvcmFnZS51cGxvYWQoJ2ltYWdlcy9waG90by5qcGcnLCBmaWxlKS5zdWJzY3JpYmUoe1xuICAgKiAgIG5leHQ6IChwcm9ncmVzcykgPT4gY29uc29sZS5sb2coYCR7cHJvZ3Jlc3MucGVyY2VudGFnZX0lYCksXG4gICAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdVcGxvYWQgY29tcGxldGFkbycpXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBDb24gbWV0YWRhdGFcbiAgICogc3RvcmFnZS51cGxvYWQoJ2RvY3MvcmVwb3J0LnBkZicsIGZpbGUsIHtcbiAgICogICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAqICAgY3VzdG9tTWV0YWRhdGE6IHsgdXBsb2FkZWRCeTogJ3VzZXIxMjMnIH1cbiAgICogfSkuc3Vic2NyaWJlKC4uLik7XG4gICAqIGBgYFxuICAgKi9cbiAgdXBsb2FkKHBhdGg6IHN0cmluZywgZmlsZTogRmlsZSB8IEJsb2IsIG1ldGFkYXRhPzogU3RvcmFnZU1ldGFkYXRhKTogT2JzZXJ2YWJsZTxVcGxvYWRQcm9ncmVzcz4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4U3RvcmFnZVBhdGgocGF0aCwgbWV0YWRhdGE/LnNraXBQcmVmaXgpO1xuICAgIGNvbnN0IHN0b3JhZ2VSZWYgPSByZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IHVwbG9hZE1ldGFkYXRhOiBVcGxvYWRNZXRhZGF0YSA9IHtcbiAgICAgIGNvbnRlbnRUeXBlOiBtZXRhZGF0YT8uY29udGVudFR5cGUgfHwgKGZpbGUgaW5zdGFuY2VvZiBGaWxlID8gZmlsZS50eXBlIDogdW5kZWZpbmVkKSxcbiAgICAgIGN1c3RvbU1ldGFkYXRhOiBtZXRhZGF0YT8uY3VzdG9tTWV0YWRhdGEsXG4gICAgICAvLyBEZWZhdWx0IGFncmVzaXZvOiBnZXREb3dubG9hZFVSTCBkZXZ1ZWx2ZSBVUkxzIGNvbiB0b2tlbiDDum5pY28gcG9yXG4gICAgICAvLyB2ZXJzacOzbiBkZWwgb2JqZXRvIOKGkiByZS1zdWJpciBlbCBhcmNoaXZvIGNhbWJpYSBlbCBVUkwgKGNhY2hlLWJ1c3RcbiAgICAgIC8vIG5hdHVyYWwpLiBFbCBjb25zdW1pZG9yIHB1ZWRlIG92ZXJyaWRlIHBhc2FuZG8gY2FjaGVDb250cm9sIGV4cGzDrWNpdG8uXG4gICAgICBjYWNoZUNvbnRyb2w6IG1ldGFkYXRhPy5jYWNoZUNvbnRyb2wgPz8gJ3B1YmxpYywgbWF4LWFnZT0zMTUzNjAwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhc2sgPSB1cGxvYWRCeXRlc1Jlc3VtYWJsZShzdG9yYWdlUmVmLCBmaWxlLCB1cGxvYWRNZXRhZGF0YSk7XG4gICAgY29uc3QgcHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRQcm9ncmVzcz4oe1xuICAgICAgYnl0ZXNUcmFuc2ZlcnJlZDogMCxcbiAgICAgIHRvdGFsQnl0ZXM6IGZpbGUuc2l6ZSxcbiAgICAgIHBlcmNlbnRhZ2U6IDAsXG4gICAgICBzdGF0ZTogJ3J1bm5pbmcnLFxuICAgIH0pO1xuXG4gICAgdGFzay5vbihcbiAgICAgICdzdGF0ZV9jaGFuZ2VkJyxcbiAgICAgIChzbmFwc2hvdDogVXBsb2FkVGFza1NuYXBzaG90KSA9PiB7XG4gICAgICAgIHByb2dyZXNzJC5uZXh0KHtcbiAgICAgICAgICBieXRlc1RyYW5zZmVycmVkOiBzbmFwc2hvdC5ieXRlc1RyYW5zZmVycmVkLFxuICAgICAgICAgIHRvdGFsQnl0ZXM6IHNuYXBzaG90LnRvdGFsQnl0ZXMsXG4gICAgICAgICAgcGVyY2VudGFnZTogTWF0aC5yb3VuZCgoc25hcHNob3QuYnl0ZXNUcmFuc2ZlcnJlZCAvIHNuYXBzaG90LnRvdGFsQnl0ZXMpICogMTAwKSxcbiAgICAgICAgICBzdGF0ZTogdGhpcy5tYXBUYXNrU3RhdGUoc25hcHNob3Quc3RhdGUpLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIHByb2dyZXNzJC5uZXh0KHtcbiAgICAgICAgICBieXRlc1RyYW5zZmVycmVkOiAwLFxuICAgICAgICAgIHRvdGFsQnl0ZXM6IGZpbGUuc2l6ZSxcbiAgICAgICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgICAgIHN0YXRlOiAnZXJyb3InLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvZ3Jlc3MkLmVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBwcm9ncmVzcyQubmV4dCh7XG4gICAgICAgICAgYnl0ZXNUcmFuc2ZlcnJlZDogZmlsZS5zaXplLFxuICAgICAgICAgIHRvdGFsQnl0ZXM6IGZpbGUuc2l6ZSxcbiAgICAgICAgICBwZXJjZW50YWdlOiAxMDAsXG4gICAgICAgICAgc3RhdGU6ICdzdWNjZXNzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2dyZXNzJC5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExlZSBlbCBhcmNoaXZvIENPTVBMRVRPIGEgbWVtb3JpYSB5IGRldnVlbHZlIHVuIEJsb2IgYXV0b2NvbnRlbmlkby5cbiAgICpcbiAgICogTm8gZXMgdW5hIGNvcGlhIHBvciBndXN0bzogZW4gU2FmYXJpLCB1biBgRmlsZWAgcXVlIG5vIGVzdMOhIHBsZW5hbWVudGVcbiAgICogbWF0ZXJpYWxpemFkbyBlbiBkaXNjbyDigJQgdMOtcGljbyBkZSBmb3RvcyBsbGVnYWRhcyBkZWwgaVBob25lIHbDrWFcbiAgICogRm90b3MvaUNsb3VkIOKAlCBoYWNlIGZhbGxhciBsYSBsZWN0dXJhIGRlbCBTREsgZGUgU3RvcmFnZSBlbiBlbCBlbnbDrW8sIHBvclxuICAgKiBzdXMgZG9zIGNhbWlub3MgKHVwbG9hZEJ5dGVzIHkgdXBsb2FkQnl0ZXNSZXN1bWFibGUpLCBjb24gdW5cbiAgICogYHN0b3JhZ2UvdW5rbm93bmAgb3BhY28uIEVsIG1pc21vIFNhZmFyaSBzdWJlIHNpbiBwcm9ibGVtYSBhcmNoaXZvcyBsb2NhbGVzXG4gICAqIGRlIG90cmEgcHJvY2VkZW5jaWEsIGFzw60gcXVlIGVsIGJ1ZyBhcGFyZWNlIFwiYSB2ZWNlc1wiIHkgc2luIG1lbnNhamUgw7p0aWwuXG4gICAqIGBhcnJheUJ1ZmZlcigpYCBmdWVyemEgbGEgbGVjdHVyYSBjb21wbGV0YTsgZWwgQmxvYiByZXN1bHRhbnRlIHlhIG5vXG4gICAqIGRlcGVuZGUgZGVsIGJhY2tpbmcgZmlsZS4gQ2FzbyByZWFsOiBiaW5nbyBpbWFnZS1waWNrZXIsIDIwMjYtMDgtMDUuXG4gICAqXG4gICAqIFVuIEJsb2IgKG5vLUZpbGUpIHlhIG5hY2nDsyBlbiBtZW1vcmlhIOKAlCBzZSBkZXZ1ZWx2ZSB0YWwgY3VhbC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIG1hdGVyaWFsaXplKGZpbGU6IEZpbGUgfCBCbG9iKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSByZXR1cm4gZmlsZTtcbiAgICBjb25zdCBjb250ZW5pZG8gPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtjb250ZW5pZG9dLCB7IHR5cGU6IGZpbGUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWludGVudG8gcG9yIFJFU1QgY3VhbmRvIGVsIFNESyBmYWxsYSBsYSBzdWJpZGEuXG4gICAqXG4gICAqIEVsIFNESyB2YSBwb3IgWE1MSHR0cFJlcXVlc3QgeSBzdSBkZXRhbGxlIGRlIGVycm9yIGVzIGB4aHIuc3RhdHVzVGV4dGAsIHF1ZVxuICAgKiBzb2JyZSBIVFRQLzIgdmllbmUgc2llbXByZSB2YWPDrW8g4oCUIHVuIGZhbGxvIGRlbCBTREsgZXMgaWxlZ2libGUgeSwgZW4gbG9zXG4gICAqIGVudG9ybm9zIGRvbmRlIGFsZ28gaW50ZXJmaWVyZSBjb24gWEhSLCBhZGVtw6FzIGV2aXRhYmxlOiBlc3RlIGNhbWlubyB1c2FcbiAgICogYGZldGNoYCBjb24gYHVwbG9hZFR5cGU9bWVkaWFgIChjdWVycG8gYmluYXJpbyBzaW1wbGUpLiBMYSBVUkwgc2UgYXJtYSBjb25cbiAgICogZWwgZG93bmxvYWRUb2tlbiBkZSBsYSByZXNwdWVzdGEgcG9ycXVlIGdldERvd25sb2FkVVJMIHRhbWJpw6luIHZhIHBvciBYSFIuXG4gICAqXG4gICAqIERldnVlbHZlIG51bGwgc2kgdGFtcG9jbyBwdWRvIOKAlCBlbCBjYWxsZXIgcmVwb3J0YSBlbCBlcnJvciBvcmlnaW5hbCBkZWwgU0RLLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkVmlhUmVzdChcbiAgICBwcmVmaXhlZFBhdGg6IHN0cmluZyxcbiAgICBibG9iOiBCbG9iLFxuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxVcGxvYWRSZXN1bHQgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QXV0aCgpLmN1cnJlbnRVc2VyPy5nZXRJZFRva2VuKCk7XG4gICAgICBjb25zdCBidWNrZXQgPSB0aGlzLnN0b3JhZ2UuYXBwLm9wdGlvbnMuc3RvcmFnZUJ1Y2tldDtcbiAgICAgIGlmICghdG9rZW4gfHwgIWJ1Y2tldCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IG5vbWJyZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcmVmaXhlZFBhdGgpO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi8ke2J1Y2tldH0vbz9uYW1lPSR7bm9tYnJlfSZ1cGxvYWRUeXBlPW1lZGlhYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEZpcmViYXNlICR7dG9rZW59YCwgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlIH0sXG4gICAgICAgICAgYm9keTogYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTdG9yYWdlXSBSRVNUIGZhbGxiYWNrIGZhaWxlZDonLCB7XG4gICAgICAgICAgcGF0aDogcHJlZml4ZWRQYXRoLFxuICAgICAgICAgIHN0YXR1czogcmVzcC5zdGF0dXMsXG4gICAgICAgICAgYm9keTogKGF3YWl0IHJlc3AudGV4dCgpKS5yZXBsYWNlKC9cXHMrL2csICcgJykuc2xpY2UoMCwgMzAwKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YSA9IChhd2FpdCByZXNwLmpzb24oKSkgYXMge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBzaXplPzogc3RyaW5nO1xuICAgICAgICBjb250ZW50VHlwZT86IHN0cmluZztcbiAgICAgICAgZG93bmxvYWRUb2tlbnM/OiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgLy8gVW4gMjAwIG5vIHBydWViYSBxdWUgbGxlZ8OzIGVsIGNvbnRlbmlkbzogU2FmYXJpIGhhIGVudmlhZG8gY3VlcnBvc1xuICAgICAgLy8gdmFjw61vcyBxdWUgU3RvcmFnZSBhY2VwdGEgY29tbyBvYmpldG9zIGRlIDAgYnl0ZXMuIFZlcmlmaWNhciB5IGxpbXBpYXIuXG4gICAgICBpZiAoTnVtYmVyKG1ldGEuc2l6ZSA/PyAtMSkgIT09IGJsb2Iuc2l6ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU3RvcmFnZV0gUkVTVCBmYWxsYmFjayBzaXplIG1pc21hdGNoOicsIHtcbiAgICAgICAgICBwYXRoOiBwcmVmaXhlZFBhdGgsXG4gICAgICAgICAgZXNwZXJhZG86IGJsb2Iuc2l6ZSxcbiAgICAgICAgICBndWFyZGFkbzogbWV0YS5zaXplLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgZmV0Y2goYGh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvJHtidWNrZXR9L28vJHtub21icmV9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgRmlyZWJhc2UgJHt0b2tlbn1gIH0sXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZHQgPSBtZXRhLmRvd25sb2FkVG9rZW5zPy5zcGxpdCgnLCcpWzBdO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPVxuICAgICAgICBgaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi8ke2J1Y2tldH0vby8ke25vbWJyZX0/YWx0PW1lZGlhYCArXG4gICAgICAgIChkdCA/IGAmdG9rZW49JHtkdH1gIDogJycpO1xuICAgICAgY29uc29sZS5sb2coJ1tTdG9yYWdlXSB1cGxvYWQgT0sgKFJFU1QgZmFsbGJhY2spOicsIHsgcGF0aDogcHJlZml4ZWRQYXRoIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG93bmxvYWRVcmwsXG4gICAgICAgIGZ1bGxQYXRoOiBwcmVmaXhlZFBhdGgsXG4gICAgICAgIG5hbWU6IHByZWZpeGVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8IHByZWZpeGVkUGF0aCxcbiAgICAgICAgc2l6ZTogYmxvYi5zaXplLFxuICAgICAgICBjb250ZW50VHlwZTogbWV0YS5jb250ZW50VHlwZSB8fCBjb250ZW50VHlwZSxcbiAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW1N0b3JhZ2VdIFJFU1QgZmFsbGJhY2sgdGhyZXc6JywgeyBwYXRoOiBwcmVmaXhlZFBhdGgsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YmUgdW4gYXJjaGl2byB5IHJldG9ybmEgbGEgVVJMIGRlIGRlc2NhcmdhIGFsIGNvbXBsZXRhci5cbiAgICpcbiAgICogUm9idXN0ZWNpZG8gcGFyYSBlbCBjYXNvIFNhZmFyaS9pUGhvbmUgKHZlciBgbWF0ZXJpYWxpemVgKTogbGVlIGVsIGFyY2hpdm9cbiAgICogYSBtZW1vcmlhIGFudGVzIGRlIHN1YmlybG8sIHZlcmlmaWNhIHF1ZSBlbCB0YW1hw7FvIGd1YXJkYWRvIGNvaW5jaWRhIHksIHNpXG4gICAqIGVsIFNESyBmYWxsYSwgcmVpbnRlbnRhIHVuYSB2ZXogcG9yIFJFU1QgYW50ZXMgZGUgcmVjaGF6YXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gUnV0YSBlbiBTdG9yYWdlXG4gICAqIEBwYXJhbSBmaWxlIC0gQXJjaGl2byBhIHN1YmlyXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIE1ldGFkYXRhIG9wY2lvbmFsXG4gICAqIEByZXR1cm5zIFJlc3VsdGFkbyBkZWwgdXBsb2FkIGNvbiBVUkwgZGUgZGVzY2FyZ2FcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLnVwbG9hZEFuZEdldFVybCgnYXZhdGFycy91c2VyMTIzLmpwZycsIGZpbGUpO1xuICAgKiBjb25zb2xlLmxvZygnVVJMOicsIHJlc3VsdC5kb3dubG9hZFVybCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdXBsb2FkQW5kR2V0VXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlOiBGaWxlIHwgQmxvYixcbiAgICBtZXRhZGF0YT86IFN0b3JhZ2VNZXRhZGF0YVxuICApOiBQcm9taXNlPFVwbG9hZFJlc3VsdD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4U3RvcmFnZVBhdGgocGF0aCwgbWV0YWRhdGE/LnNraXBQcmVmaXgpO1xuICAgIGNvbnNvbGUubG9nKCdbU3RvcmFnZV0gdXBsb2FkQW5kR2V0VXJsIHN0YXJ0OicsIHsgcGF0aDogcHJlZml4ZWRQYXRoLCBzaXplOiBmaWxlLnNpemUgfSk7XG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1ldGFkYXRhPy5jb250ZW50VHlwZSB8fCBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMubWF0ZXJpYWxpemUoZmlsZSk7XG5cbiAgICBjb25zdCBzZGtSZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZTxVcGxvYWRSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMudXBsb2FkKHBhdGgsIGJsb2IsIHsgLi4ubWV0YWRhdGEsIGNvbnRlbnRUeXBlIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VSZWYgPSByZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpO1xuICAgICAgICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSBhd2FpdCBnZXREb3dubG9hZFVSTChzdG9yYWdlUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZE1ldGFkYXRhID0gYXdhaXQgZ2V0TWV0YWRhdGEoc3RvcmFnZVJlZik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1N0b3JhZ2VdIHVwbG9hZCBPSzonLCB7XG4gICAgICAgICAgICAgIHBhdGg6IHByZWZpeGVkUGF0aCxcbiAgICAgICAgICAgICAgdXJsOiBkb3dubG9hZFVybC5zbGljZSgwLCA2MCkgKyAn4oCmJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGRvd25sb2FkVXJsLFxuICAgICAgICAgICAgICBmdWxsUGF0aDogc3RvcmVkTWV0YWRhdGEuZnVsbFBhdGgsXG4gICAgICAgICAgICAgIG5hbWU6IHN0b3JlZE1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAgIHNpemU6IHN0b3JlZE1ldGFkYXRhLnNpemUsXG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBzdG9yZWRNZXRhZGF0YS5jb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHN0b3JlZE1ldGFkYXRhLmN1c3RvbU1ldGFkYXRhIHx8IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTdG9yYWdlXSBnZXREb3dubG9hZFVSTC9tZXRhZGF0YSBmYWlsZWQ6Jywge1xuICAgICAgICAgICAgICBwYXRoOiBwcmVmaXhlZFBhdGgsXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWplY3QodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1N0b3JhZ2VdIHVwbG9hZCBmYWlsZWQ6JywgeyBwYXRoOiBwcmVmaXhlZFBhdGgsIGVycm9yIH0pO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChhc3luYyBvcmlnaW5hbEVycm9yID0+IHtcbiAgICAgIGNvbnN0IHJlc2NhdGFkbyA9IGF3YWl0IHRoaXMudXBsb2FkVmlhUmVzdChwcmVmaXhlZFBhdGgsIGJsb2IsIGNvbnRlbnRUeXBlKTtcbiAgICAgIGlmIChyZXNjYXRhZG8pIHJldHVybiByZXNjYXRhZG87XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH0pO1xuXG4gICAgLy8gVmVyaWZpY2FjacOzbiBkZSBjb250ZW5pZG8gdGFtYmnDqW4gZW4gZWwgY2FtaW5vIFNESzogdW4gb2JqZXRvIGRlIDAgYnl0ZXNcbiAgICAvLyBjb24gVVJMIHbDoWxpZGEgZXMgcGVvciBxdWUgdW4gZXJyb3Ig4oCUIGxhIGltYWdlbiBcInN1YmVcIiB5IG51bmNhIGNhcmdhLlxuICAgIGlmIChzZGtSZXN1bHQuc2l6ZSAhPT0gYmxvYi5zaXplKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbU3RvcmFnZV0gc2l6ZSBtaXNtYXRjaCB0cmFzIHN1YmlyOicsIHtcbiAgICAgICAgcGF0aDogcHJlZml4ZWRQYXRoLFxuICAgICAgICBlc3BlcmFkbzogYmxvYi5zaXplLFxuICAgICAgICBndWFyZGFkbzogc2RrUmVzdWx0LnNpemUsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGRlbGV0ZU9iamVjdChyZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbCBhcmNoaXZvIG5vIHNlIHN1YmnDsyBjb21wbGV0by4gSW50w6ludGFsbyBkZSBudWV2by4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHNka1Jlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJlIHVuIGFyY2hpdm8gZGVzZGUgdW5hIERhdGEgVVJMIChiYXNlNjQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZW4gU3RvcmFnZVxuICAgKiBAcGFyYW0gZGF0YVVybCAtIERhdGEgVVJMIChlajogJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwuLi4nKVxuICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBNZXRhZGF0YSBvcGNpb25hbFxuICAgKiBAcmV0dXJucyBSZXN1bHRhZG8gZGVsIHVwbG9hZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlc2RlIGNhbnZhc1xuICAgKiBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UudXBsb2FkRnJvbURhdGFVcmwoJ2ltYWdlcy9kcmF3aW5nLnBuZycsIGRhdGFVcmwpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHVwbG9hZEZyb21EYXRhVXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBkYXRhVXJsOiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBTdG9yYWdlTWV0YWRhdGFcbiAgKTogUHJvbWlzZTxVcGxvYWRSZXN1bHQ+IHtcbiAgICAvLyBFeHRyYWVyIGNvbnRlbnQgdHlwZSB5IGRhdG9zIGJhc2U2NFxuICAgIGNvbnN0IG1hdGNoZXMgPSBkYXRhVXJsLm1hdGNoKC9eZGF0YTooW147XSspO2Jhc2U2NCwoLispJC8pO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIFVSTCBpbnbDoWxpZGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1hdGNoZXNbMV07XG4gICAgY29uc3QgYmFzZTY0RGF0YSA9IG1hdGNoZXNbMl07XG5cbiAgICAvLyBDb252ZXJ0aXIgYmFzZTY0IGEgQmxvYlxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcbiAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcblxuICAgIHJldHVybiB0aGlzLnVwbG9hZEFuZEdldFVybChwYXRoLCBibG9iLCB7XG4gICAgICBjb250ZW50VHlwZSxcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERPV05MT0FEXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIFVSTCBkZSBkZXNjYXJnYSBkZSB1biBhcmNoaXZvLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZGVsIGFyY2hpdm8gZW4gU3RvcmFnZVxuICAgKiBAcmV0dXJucyBVUkwgZGUgZGVzY2FyZ2FcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB1cmwgPSBhd2FpdCBzdG9yYWdlLmdldERvd25sb2FkVXJsKCdpbWFnZXMvcGhvdG8uanBnJyk7XG4gICAqIC8vIFVzYXIgZW4gPGltZyBbc3JjXT1cInVybFwiPlxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldERvd25sb2FkVXJsKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4U3RvcmFnZVBhdGgocGF0aCk7XG4gICAgICBjb25zdCBzdG9yYWdlUmVmID0gcmVmKHRoaXMuc3RvcmFnZSwgcHJlZml4ZWRQYXRoKTtcbiAgICAgIHJldHVybiBhd2FpdCBnZXREb3dubG9hZFVSTChzdG9yYWdlUmVmKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgbWV0YWRhdGEgZGUgdW4gYXJjaGl2by5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSdXRhIGRlbCBhcmNoaXZvXG4gICAqIEByZXR1cm5zIE1ldGFkYXRhIGRlbCBhcmNoaXZvXG4gICAqL1xuICBhc3luYyBnZXRNZXRhZGF0YShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFN0b3JhZ2VNZXRhZGF0YSAmIHsgc2l6ZTogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeFN0b3JhZ2VQYXRoKHBhdGgpO1xuICAgICAgY29uc3Qgc3RvcmFnZVJlZiA9IHJlZih0aGlzLnN0b3JhZ2UsIHByZWZpeGVkUGF0aCk7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGdldE1ldGFkYXRhKHN0b3JhZ2VSZWYpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudFR5cGU6IG1ldGFkYXRhLmNvbnRlbnRUeXBlLFxuICAgICAgICBjdXN0b21NZXRhZGF0YTogbWV0YWRhdGEuY3VzdG9tTWV0YWRhdGEsXG4gICAgICAgIGNhY2hlQ29udHJvbDogbWV0YWRhdGEuY2FjaGVDb250cm9sLFxuICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERFTEVURVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBhcmNoaXZvLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJ1dGEgZGVsIGFyY2hpdm8gYSBlbGltaW5hclxuICAgKiBAcGFyYW0gb3B0aW9ucy5za2lwUHJlZml4IC0gU2kgZXMgdHJ1ZSwgbm8gYXBsaWNhIGVsIHByZWZpeCBkZSBhcHBJZCAocGFyYVxuICAgKiAgIGJvcnJhciB1biBhcmNoaXZvIHN1YmlkbyBjb24gYHVwbG9hZEFuZEdldFVybChwYXRoLCBmaWxlLCB7IHNraXBQcmVmaXg6XG4gICAqICAgdHJ1ZSB9KWAgaGF5IHF1ZSBwYXNhciBlbCBtaXNtbyBmbGFnLCBvIGVsIHBhdGggcXVlZGEgbWFsIGFybWFkbyB5IGVsXG4gICAqICAgZGVsZXRlIGZhbGxhIGNvbnRyYSB1biBvYmpldG8gcXVlIG5vIGV4aXN0ZSkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgc3RvcmFnZS5kZWxldGUoJ2ltYWdlcy9vbGQtcGhvdG8uanBnJyk7XG4gICAqIGF3YWl0IHN0b3JhZ2UuZGVsZXRlKCdhcHBzL21lcm90ei9vcmdzL3gvcHVibGljL2ltYWdlcy9wYXJ0cy95L3oucG5nJywgeyBza2lwUHJlZml4OiB0cnVlIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZShwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiB7IHNraXBQcmVmaXg/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhTdG9yYWdlUGF0aChwYXRoLCBvcHRpb25zPy5za2lwUHJlZml4KTtcbiAgICAgIGNvbnN0IHN0b3JhZ2VSZWYgPSByZWYodGhpcy5zdG9yYWdlLCBwcmVmaXhlZFBhdGgpO1xuICAgICAgYXdhaXQgZGVsZXRlT2JqZWN0KHN0b3JhZ2VSZWYpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBtw7psdGlwbGVzIGFyY2hpdm9zLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aHMgLSBBcnJheSBkZSBydXRhcyBhIGVsaW1pbmFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgc3RvcmFnZS5kZWxldGVNdWx0aXBsZShbXG4gICAqICAgJ2ltYWdlcy9waG90bzEuanBnJyxcbiAgICogICAnaW1hZ2VzL3Bob3RvMi5qcGcnXG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZU11bHRpcGxlKHBhdGhzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHBhdGhzLm1hcChwYXRoID0+IHRoaXMuZGVsZXRlKHBhdGgpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTElTVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogTGlzdGEgYXJjaGl2b3MgZW4gdW4gZGlyZWN0b3Jpby5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSdXRhIGRlbCBkaXJlY3RvcmlvXG4gICAqIEByZXR1cm5zIExpc3RhIGRlIHJ1dGFzIGRlIGFyY2hpdm9zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5saXN0KCdpbWFnZXMvJyk7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5pdGVtcyk7IC8vIFsnaW1hZ2VzL3Bob3RvMS5qcGcnLCAnaW1hZ2VzL3Bob3RvMi5qcGcnXVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGxpc3QocGF0aDogc3RyaW5nKTogUHJvbWlzZTxTdG9yYWdlTGlzdFJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeFN0b3JhZ2VQYXRoKHBhdGgpO1xuICAgICAgY29uc3Qgc3RvcmFnZVJlZiA9IHJlZih0aGlzLnN0b3JhZ2UsIHByZWZpeGVkUGF0aCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBsaXN0QWxsKHN0b3JhZ2VSZWYpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogcmVzdWx0Lml0ZW1zLm1hcChpdGVtID0+IGl0ZW0uZnVsbFBhdGgpLFxuICAgICAgICBuZXh0UGFnZVRva2VuOiB1bmRlZmluZWQsIC8vIGxpc3RBbGwgbm8gc29wb3J0YSBwYWdpbmFjacOzblxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBub21icmUgZGUgYXJjaGl2byDDum5pY28gY29uIHRpbWVzdGFtcC5cbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsTmFtZSAtIE5vbWJyZSBvcmlnaW5hbCBkZWwgYXJjaGl2b1xuICAgKiBAcGFyYW0gcHJlZml4IC0gUHJlZmlqbyBvcGNpb25hbFxuICAgKiBAcmV0dXJucyBOb21icmUgw7puaWNvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdW5pcXVlTmFtZSA9IHN0b3JhZ2UuZ2VuZXJhdGVGaWxlTmFtZSgncGhvdG8uanBnJywgJ3VzZXIxMjMnKTtcbiAgICogLy8gPT4gJ3VzZXIxMjNfMTcwMzA5MTIzNDU2N19waG90by5qcGcnXG4gICAqIGBgYFxuICAgKi9cbiAgZ2VuZXJhdGVGaWxlTmFtZShvcmlnaW5hbE5hbWU6IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBvcmlnaW5hbE5hbWUucmVwbGFjZSgvW15hLXpBLVowLTkuLV0vZywgJ18nKTtcblxuICAgIGlmIChwcmVmaXgpIHtcbiAgICAgIHJldHVybiBgJHtwcmVmaXh9XyR7dGltZXN0YW1wfV8ke3Nhbml0aXplZE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RpbWVzdGFtcH1fJHtzYW5pdGl6ZWROYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIHVuYSBydXRhIMO6bmljYSBwYXJhIHVuIGFyY2hpdm8uXG4gICAqXG4gICAqIEBwYXJhbSBkaXJlY3RvcnkgLSBEaXJlY3RvcmlvIGJhc2VcbiAgICogQHBhcmFtIG9yaWdpbmFsTmFtZSAtIE5vbWJyZSBvcmlnaW5hbFxuICAgKiBAcGFyYW0gcHJlZml4IC0gUHJlZmlqbyBvcGNpb25hbFxuICAgKiBAcmV0dXJucyBSdXRhIGNvbXBsZXRhIMO6bmljYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhdGggPSBzdG9yYWdlLmdlbmVyYXRlUGF0aCgndXBsb2FkcycsICdwaG90by5qcGcnLCAndXNlcjEyMycpO1xuICAgKiAvLyA9PiAndXBsb2Fkcy91c2VyMTIzXzE3MDMwOTEyMzQ1NjdfcGhvdG8uanBnJ1xuICAgKiBgYGBcbiAgICovXG4gIGdlbmVyYXRlUGF0aChkaXJlY3Rvcnk6IHN0cmluZywgb3JpZ2luYWxOYW1lOiBzdHJpbmcsIHByZWZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlRmlsZU5hbWUob3JpZ2luYWxOYW1lLCBwcmVmaXgpO1xuICAgIGNvbnN0IGNsZWFuRGlyID0gZGlyZWN0b3J5LnJlcGxhY2UoL1xcLyskLywgJycpOyAvLyBSZW1vdmVyIC8gZmluYWxcbiAgICByZXR1cm4gYCR7Y2xlYW5EaXJ9LyR7ZmlsZU5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGV4dGVuc2nDs24gZGUgdW4gYXJjaGl2by5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVuYW1lIC0gTm9tYnJlIGRlbCBhcmNoaXZvXG4gICAqIEByZXR1cm5zIEV4dGVuc2nDs24gKHNpbiBlbCBwdW50bylcbiAgICovXG4gIGdldEV4dGVuc2lvbihmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IGZpbGVuYW1lLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0cy5wb3AoKSEudG9Mb3dlckNhc2UoKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGFyY2hpdm8gZXMgdW5hIGltYWdlbiBiYXPDoW5kb3NlIGVuIHN1IGV4dGVuc2nDs24uXG4gICAqL1xuICBpc0ltYWdlKGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBleHQgPSB0aGlzLmdldEV4dGVuc2lvbihmaWxlbmFtZSk7XG4gICAgcmV0dXJuIFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ2dpZicsICd3ZWJwJywgJ3N2ZycsICdibXAnXS5pbmNsdWRlcyhleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGFyY2hpdm8gZXMgdW4gZG9jdW1lbnRvLlxuICAgKi9cbiAgaXNEb2N1bWVudChmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZXh0ID0gdGhpcy5nZXRFeHRlbnNpb24oZmlsZW5hbWUpO1xuICAgIHJldHVybiBbJ3BkZicsICdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwcHQnLCAncHB0eCcsICd0eHQnXS5pbmNsdWRlcyhleHQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVTRVIgQVZBVEFSIEhFTFBFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBsYSBVUkwgZGUgYXZhdGFyIGRlIHVuIHVzdWFyaW8uXG4gICAqXG4gICAqIExvcyBhdmF0YXJlcyBzZSBhbG1hY2VuYW4gZW4gcGF0aHMgcHJlZGVjaWJsZXM6IGB1c2Vycy97dXNlcklkfS9hdmF0YXIuanBnYFxuICAgKiBFc3RvIHBlcm1pdGUgcXVlIGN1YWxxdWllciBhcHAgcHVlZGEgbW9zdHJhciBhdmF0YXJlcyBzaW4gcGVkaXIgbGEgVVJMIGFsIGJhY2tlbmQsXG4gICAqIHNvbG8gbmVjZXNpdGEgZWwgdXNlcklkLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gSUQgZGVsIHVzdWFyaW8gKFVMSUQpXG4gICAqIEBwYXJhbSB0eXBlIC0gJ2F2YXRhcicgcGFyYSBpbWFnZW4gY29tcGxldGEsICd0aHVtYicgcGFyYSB0aHVtYm5haWxcbiAgICogQHJldHVybnMgVVJMIGRpcmVjdGEgZGUgRmlyZWJhc2UgU3RvcmFnZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIE1vc3RyYXIgYXZhdGFyIGRlIGN1YWxxdWllciB1c3VhcmlvXG4gICAqIGNvbnN0IGF2YXRhclVybCA9IHN0b3JhZ2UuZ2V0VXNlckF2YXRhclVybCgnMDFBQkNELi4uJyk7XG4gICAqIGNvbnN0IHRodW1iVXJsID0gc3RvcmFnZS5nZXRVc2VyQXZhdGFyVXJsKCcwMUFCQ0QuLi4nLCAndGh1bWInKTtcbiAgICpcbiAgICogLy8gQ29uIGNhY2hlLWJ1c3RpbmdcbiAgICogY29uc3QgZnJlc2hVcmwgPSBzdG9yYWdlLmdldFVzZXJBdmF0YXJVcmwodXNlcklkKSArIGAmdD0ke0RhdGUubm93KCl9YDtcbiAgICogYGBgXG4gICAqL1xuICBnZXRVc2VyQXZhdGFyVXJsKHVzZXJJZDogc3RyaW5nLCB0eXBlOiAnYXZhdGFyJyB8ICd0aHVtYicgPSAnYXZhdGFyJyk6IHN0cmluZyB7XG4gICAgY29uc3QgYnVja2V0ID0gdGhpcy5jb25maWc/LmZpcmViYXNlPy5zdG9yYWdlQnVja2V0IHx8ICdteXZhbHRlY2gtZGV2LmZpcmViYXNlc3RvcmFnZS5hcHAnO1xuICAgIGNvbnN0IHBhdGggPSBgdXNlcnMvJHt1c2VySWR9LyR7dHlwZX0uanBnYDtcbiAgICByZXR1cm4gYGh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvJHtidWNrZXR9L28vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9P2FsdD1tZWRpYWA7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE1hcGVhIGVsIGVzdGFkbyBkZSBsYSB0YXJlYSBkZSB1cGxvYWRcbiAgICovXG4gIHByaXZhdGUgbWFwVGFza1N0YXRlKHN0YXRlOiBzdHJpbmcpOiBVcGxvYWRTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgIHJldHVybiAncnVubmluZyc7XG4gICAgICBjYXNlICdwYXVzZWQnOlxuICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIGNhc2UgJ2NhbmNlbGVkJzpcbiAgICAgICAgcmV0dXJuICdjYW5jZWxlZCc7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdydW5uaW5nJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmllcnRlIGVycm9yZXMgZGUgU3RvcmFnZSBhIG1lbnNhamVzIGVuIGVzcGHDsW9sXG4gICAqL1xuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG5cbiAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlICdzdG9yYWdlL29iamVjdC1ub3QtZm91bmQnOlxuICAgICAgICAgIHJldHVybiAnRWwgYXJjaGl2byBubyBleGlzdGUnO1xuICAgICAgICBjYXNlICdzdG9yYWdlL3VuYXV0aG9yaXplZCc6XG4gICAgICAgICAgcmV0dXJuICdObyB0aWVuZXMgcGVybWlzbyBwYXJhIGFjY2VkZXIgYSBlc3RlIGFyY2hpdm8nO1xuICAgICAgICBjYXNlICdzdG9yYWdlL2NhbmNlbGVkJzpcbiAgICAgICAgICByZXR1cm4gJ0xhIG9wZXJhY2nDs24gZnVlIGNhbmNlbGFkYSc7XG4gICAgICAgIGNhc2UgJ3N0b3JhZ2UvcXVvdGEtZXhjZWVkZWQnOlxuICAgICAgICAgIHJldHVybiAnU2UgaGEgZXhjZWRpZG8gbGEgY3VvdGEgZGUgYWxtYWNlbmFtaWVudG8nO1xuICAgICAgICBjYXNlICdzdG9yYWdlL2ludmFsaWQtY2hlY2tzdW0nOlxuICAgICAgICAgIHJldHVybiAnRWwgYXJjaGl2byBlc3TDoSBjb3JydXB0byc7XG4gICAgICAgIGNhc2UgJ3N0b3JhZ2UvcmV0cnktbGltaXQtZXhjZWVkZWQnOlxuICAgICAgICAgIHJldHVybiAnRXJyb3IgZGUgY29uZXhpw7NuLiBJbnRlbnRhIGRlIG51ZXZvJztcbiAgICAgICAgY2FzZSAnc3RvcmFnZS9pbnZhbGlkLXVybCc6XG4gICAgICAgICAgcmV0dXJuICdVUkwgZGUgYXJjaGl2byBpbnbDoWxpZGEnO1xuICAgICAgICBjYXNlICdzdG9yYWdlL2ludmFsaWQtYXJndW1lbnQnOlxuICAgICAgICAgIHJldHVybiAnQXJndW1lbnRvIGludsOhbGlkbyc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ0Vycm9yIGRlIGFsbWFjZW5hbWllbnRvIGRlc2Nvbm9jaWRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ0Vycm9yIGRlIGFsbWFjZW5hbWllbnRvIGRlc2Nvbm9jaWRvJztcbiAgfVxufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.972';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NzInO1xuIl19
5
+ export const VERSION = '4.0.974';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NzQnO1xuIl19